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