From b5178f415bdc70a1dcb51efb7d02a067ce408137 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Omar=20S=C3=A1nchez=20Pizarro?= Date: Fri, 10 Oct 2025 13:31:37 +0200 Subject: [PATCH] queue to telegram retry MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Omar Sánchez Pizarro --- managers/queue_manager.py | 12 ++++++++---- managers/telegram_manager.py | 31 ++++++------------------------- 2 files changed, 14 insertions(+), 29 deletions(-) diff --git a/managers/queue_manager.py b/managers/queue_manager.py index 82b5773..eb06f6b 100644 --- a/managers/queue_manager.py +++ b/managers/queue_manager.py @@ -6,6 +6,7 @@ from managers.telegram_manager import TelegramManager MESSAGE_DELAY = 3.0 # Tiempo de espera entre mensajes en segundos NOTIFIED_ARTICLES_LIMIT = 300 # Límite de artículos notificados a mantener en memoria +RETRY_TIMES = 3 class QueueManager: def __init__(self): @@ -19,14 +20,14 @@ class QueueManager: self._processor_thread = threading.Thread(target=self._process_queue, daemon=True) self._processor_thread.start() - def add_to_queue(self, article, search_name=None, thread_id=None): + def add_to_queue(self, article, search_name=None, thread_id=None, retry_times=RETRY_TIMES): # Verificar si el artículo ya ha sido enviado if article in self._notified_articles: return if search_name is None: search_name = "Unknown" - self._queue.put((search_name, article, thread_id)) + self._queue.put((search_name, article, thread_id, retry_times)) self.logger.debug(f"Artículo añadido a la cola: {article.get_title()}") self.add_to_notified_articles(article) @@ -45,16 +46,19 @@ class QueueManager: try: # Esperar hasta que haya un elemento en la cola (timeout de 1 segundo) try: - search_name, article, thread_id = self._queue.get(timeout=1.0) + search_name, article, thread_id, retry_times = self._queue.get(timeout=1.0) except queue.Empty: continue # Procesar el artículo try: self._telegram_manager.send_telegram_article(search_name, article, thread_id) - except Exception as e: self.logger.error(f"Error al enviar artículo a Telegram: {e}") + if retry_times > 0: + self._queue.put((search_name, article, thread_id, retry_times - 1)) + else: + self.logger.error(f"Artículo no enviado después de {RETRY_TIMES} intentos") finally: self._queue.task_done() diff --git a/managers/telegram_manager.py b/managers/telegram_manager.py index 68b062f..e29e831 100644 --- a/managers/telegram_manager.py +++ b/managers/telegram_manager.py @@ -83,29 +83,9 @@ class TelegramManager: ) images_url = article.get_images() - media = [] - for idx, image_url in enumerate(images_url): - if idx == 0: - media.append( - telegram.InputMediaPhoto( - media=image_url, - caption=message, - parse_mode="HTML" - ) - ) - else: - media.append( - telegram.InputMediaPhoto( - media=image_url - ) - ) - - # Enviar el media group - sent_messages = await self._bot.send_media_group( - chat_id=self._channel, - media=media, - message_thread_id=thread_id - ) + # Envía solo la primera imagen usando sendPhoto en vez de un álbum/media group + first_image_url = images_url[0] if images_url else None + # Crear botones inline para el primer mensaje del grupo keyboard = [ @@ -119,9 +99,10 @@ class TelegramManager: # Enviar un mensaje adicional con los botones (reply al primer mensaje del grupo) await self._bot.send_message( chat_id=self._channel, - text="💾 Acciones", + photo=first_image_url, + text=message, + parse_mode="HTML", reply_markup=reply_markup, - reply_to_message_id=sent_messages[0].message_id, message_thread_id=thread_id )