This commit is contained in:
+39
-1
@@ -4,7 +4,7 @@ import asyncio
|
||||
import traceback
|
||||
from dotenv import load_dotenv
|
||||
from telegram import Bot
|
||||
from telegram.error import TelegramError
|
||||
from telegram.error import TelegramError, TimedOut
|
||||
from telegram.request import HTTPXRequest
|
||||
|
||||
# Загрузка переменных окружения
|
||||
@@ -91,6 +91,13 @@ async def make_test_post_async():
|
||||
logger.info(f"Публикация сообщения с изображением: {initial_text}")
|
||||
logger.info(f"Путь к изображению: {image_path}")
|
||||
|
||||
# Повторные попытки публикации при таймауте (до 10 раз)
|
||||
message = None
|
||||
message_id = None
|
||||
max_retries = 10
|
||||
retry_interval = 5
|
||||
|
||||
for attempt in range(1, max_retries + 1):
|
||||
try:
|
||||
with open(image_path, 'rb') as photo_file:
|
||||
message = await bot.send_photo(
|
||||
@@ -100,6 +107,17 @@ async def make_test_post_async():
|
||||
)
|
||||
message_id = message.message_id
|
||||
logger.info(f"Сообщение успешно опубликовано. Message ID: {message_id}")
|
||||
break # Успешная публикация, выходим из цикла
|
||||
except TimedOut as e:
|
||||
if attempt < max_retries:
|
||||
logger.warning(f"Таймаут при публикации сообщения (попытка {attempt}/{max_retries}). Повтор через {retry_interval} секунд...")
|
||||
logger.warning(f"Детали таймаута: {type(e).__name__}: {e}")
|
||||
await asyncio.sleep(retry_interval)
|
||||
else:
|
||||
logger.error(f"Таймаут при публикации сообщения после {max_retries} попыток")
|
||||
logger.error(f"Детали ошибки: {type(e).__name__}: {e}")
|
||||
logger.error(f"Трассировка стека:\n{traceback.format_exc()}")
|
||||
return False
|
||||
except TelegramError as e:
|
||||
logger.error(f"Ошибка при публикации сообщения в Telegram: {type(e).__name__}: {e}")
|
||||
logger.error(f"Детали ошибки: {repr(e)}")
|
||||
@@ -111,6 +129,10 @@ async def make_test_post_async():
|
||||
logger.error(f"Трассировка стека:\n{traceback.format_exc()}")
|
||||
return False
|
||||
|
||||
if message_id is None:
|
||||
logger.error("Не удалось опубликовать сообщение после всех попыток")
|
||||
return False
|
||||
|
||||
# Небольшая задержка перед редактированием
|
||||
await asyncio.sleep(1)
|
||||
|
||||
@@ -118,6 +140,9 @@ async def make_test_post_async():
|
||||
edited_text = f"{initial_text}\n\n\nИдентификатор сообщения - {message_id}"
|
||||
logger.info(f"Редактирование сообщения, добавление Message ID: {message_id}")
|
||||
|
||||
# Повторные попытки редактирования при таймауте (до 10 раз)
|
||||
edit_success = False
|
||||
for attempt in range(1, max_retries + 1):
|
||||
try:
|
||||
await bot.edit_message_caption(
|
||||
chat_id=CHANNEL_ID,
|
||||
@@ -125,6 +150,19 @@ async def make_test_post_async():
|
||||
caption=edited_text
|
||||
)
|
||||
logger.info(f"Сообщение успешно отредактировано")
|
||||
edit_success = True
|
||||
break # Успешное редактирование, выходим из цикла
|
||||
except TimedOut as e:
|
||||
if attempt < max_retries:
|
||||
logger.warning(f"Таймаут при редактировании сообщения (попытка {attempt}/{max_retries}). Повтор через {retry_interval} секунд...")
|
||||
logger.warning(f"Детали таймаута: {type(e).__name__}: {e}")
|
||||
await asyncio.sleep(retry_interval)
|
||||
else:
|
||||
logger.error(f"Таймаут при редактировании сообщения после {max_retries} попыток")
|
||||
logger.error(f"Детали ошибки: {type(e).__name__}: {e}")
|
||||
logger.error(f"Трассировка стека:\n{traceback.format_exc()}")
|
||||
# Сообщение уже опубликовано, поэтому считаем это частичным успехом
|
||||
return True
|
||||
except TelegramError as e:
|
||||
logger.error(f"Ошибка при редактировании сообщения в Telegram: {type(e).__name__}: {e}")
|
||||
logger.error(f"Детали ошибки: {repr(e)}")
|
||||
|
||||
Reference in New Issue
Block a user