[ZILANT] отладка добавления ссылок 02
ci/woodpecker/push/woodpecker Pipeline was successful

This commit is contained in:
2026-09-02 21:51:18 +03:00
parent ac17043a08
commit 709178d9ea
7 changed files with 106 additions and 38 deletions
+28 -8
View File
@@ -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(