еще попытка фикса гцупа
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful

This commit is contained in:
dv 2026-05-08 11:00:31 +03:00
parent 585cc374ed
commit f5b1643f53

View file

@ -169,11 +169,35 @@ def recreate_post(
disable_web_page_preview=True,
reply_markup=markup,
)
log.info(f"recreate_post sent for task {task_id}, message_id={msg.message_id}")
# save_message_id сначала создаёт/обновляет строку, потом сохраняем события
database.save_message_id(task_id, msg.message_id, task_number, group_id, base_text)
if added:
database.save_stored_events(task_id, stored)
except ApiTelegramException as e:
err_text = str(e).lower()
is_markdown_error = any(x in err_text for x in (
"can't parse entities",
"can't find end of the entity",
"entity starting at byte offset",
))
if is_markdown_error:
log.error(f"recreate_post markdown failed for task {task_id}, fallback to plain text: {e}")
try:
msg = bot.send_message(
config.CHANNEL_ID,
full_text,
parse_mode=None,
disable_web_page_preview=True,
reply_markup=markup,
)
database.save_message_id(task_id, msg.message_id, task_number, group_id, base_text)
if added:
database.save_stored_events(task_id, stored)
log.warning(f"recreate_post sent without markdown for task {task_id}, message_id={msg.message_id}")
except ApiTelegramException as e2:
log.error(f"recreate_post fallback failed for task {task_id}: {e2}")
else:
log.error(f"recreate_post failed for task {task_id}: {e}")
@ -338,7 +362,18 @@ def _is_stale_error(e: Exception) -> bool:
"message to edit not found",
"message is not modified",
"message can't be edited",
"bad request",
"message to delete not found",
"message_id_invalid",
))
def _is_missing_message_error(e: Exception) -> bool:
"""True for Telegram errors when target message no longer exists."""
s = str(e).lower()
return any(x in s for x in (
"message to edit not found",
"message to delete not found",
"message_id_invalid",
))
@ -376,6 +411,18 @@ def _refresh_responsible(call, task_id: int, task_number: str):
reply_markup=markup,
)
except ApiTelegramException as e:
if _is_missing_message_error(e):
log.warning(
f"_refresh_responsible: message missing for task {task_id}, recreating post"
)
recreate_post(
task_id=task_id,
task_number=task_number,
base_text=data["base_text"],
group_id=data.get("group_id") or 0,
new_event_lines=None,
)
return
if not _is_stale_error(e):
log.warning(f"_refresh_responsible failed: {e}")