This commit is contained in:
+28
-8
@@ -14,7 +14,8 @@ from telegram_relay import (
|
||||
EDIT_LINKS_INITIAL_DELAY_SEC,
|
||||
EDIT_LINKS_MAX_ATTEMPTS,
|
||||
EDIT_LINKS_RETRY_INTERVAL_SEC,
|
||||
published_message_has_links,
|
||||
published_message_has_expected_links,
|
||||
extract_text_link_urls,
|
||||
)
|
||||
from season_links import subscription_start_link
|
||||
|
||||
@@ -132,8 +133,10 @@ async def download_image(image_url, httpx_client):
|
||||
return image_data, content_type, _filename_from_image_url(image_url)
|
||||
|
||||
|
||||
async def _edit_event_add_links(httpx_client, has_image, message_id, final_text, entity_label):
|
||||
"""Edit caption/text со ссылками; повтор до подтверждения text_link в ответе API."""
|
||||
async def _edit_event_add_links(
|
||||
httpx_client, has_image, message_id, final_text, entity_label, expected_urls, min_length
|
||||
):
|
||||
"""Edit caption/text со ссылками; повтор до подтверждения всех expected_urls в text_link."""
|
||||
await asyncio.sleep(EDIT_LINKS_INITIAL_DELAY_SEC)
|
||||
method = "editMessageCaption" if has_image else "editMessageText"
|
||||
field = "caption" if has_image else "text"
|
||||
@@ -176,15 +179,20 @@ async def _edit_event_add_links(httpx_client, has_image, message_id, final_text,
|
||||
result = data.get('result') or {}
|
||||
result_text = result.get(field) or ""
|
||||
entities = result.get(entities_field) or []
|
||||
if published_message_has_links(result_text, entities):
|
||||
if published_message_has_expected_links(
|
||||
entities, expected_urls, result_text=result_text, min_length=min_length
|
||||
):
|
||||
logger.info(
|
||||
f"Ссылки добавлены для {entity_label} "
|
||||
f"(попытка {attempt}/{EDIT_LINKS_MAX_ATTEMPTS})"
|
||||
)
|
||||
return True
|
||||
found = extract_text_link_urls(entities)
|
||||
logger.warning(
|
||||
f"edit ok, но ссылки не обнаружены (попытка {attempt}/{EDIT_LINKS_MAX_ATTEMPTS}) "
|
||||
f"для {entity_label}"
|
||||
f"edit ok, но footer-ссылки не подтверждены "
|
||||
f"(попытка {attempt}/{EDIT_LINKS_MAX_ATTEMPTS}) для {entity_label}; "
|
||||
f"ожидались {expected_urls}, найдены text_link: {found}, "
|
||||
f"len(text)={len(result_text)}, min_len={min_length}"
|
||||
)
|
||||
else:
|
||||
error_code = data.get('error_code')
|
||||
@@ -532,6 +540,16 @@ async def tg_post_event(httpx_client, event_data):
|
||||
else:
|
||||
final_text = initial_text
|
||||
|
||||
expected_urls = []
|
||||
if DESC_PREFIX:
|
||||
expected_urls.append(f"{DESC_PREFIX}{number}/")
|
||||
if USE_SUBSCRIPTION_BOT:
|
||||
expected_urls.append(f"{PZK_PREFIX}{number}/")
|
||||
expected_urls.append(
|
||||
subscription_start_link(RESPONDER_BOT_NAME, "event", message_id)
|
||||
)
|
||||
min_length = len(final_text) - 15
|
||||
|
||||
# Проверяем, изменился ли текст. Если нет - не редактируем сообщение
|
||||
if final_text == initial_text:
|
||||
logger.info(f"Финальный текст идентичен исходному для события {event_data['number']}, редактирование не требуется")
|
||||
@@ -539,11 +557,13 @@ async def tg_post_event(httpx_client, event_data):
|
||||
|
||||
entity_label = f"события {event_data['number']}"
|
||||
links_ok = await _edit_event_add_links(
|
||||
httpx_client, message_is_photo, message_id, final_text, entity_label
|
||||
httpx_client, message_is_photo, message_id, final_text, entity_label,
|
||||
expected_urls, min_length,
|
||||
)
|
||||
if not links_ok and message_is_photo:
|
||||
links_ok = await _edit_event_add_links(
|
||||
httpx_client, False, message_id, final_text, entity_label
|
||||
httpx_client, False, message_id, final_text, entity_label,
|
||||
expected_urls, min_length,
|
||||
)
|
||||
if not links_ok:
|
||||
logger.error(
|
||||
|
||||
Reference in New Issue
Block a user