from app import config_parser import telegram from importlib.metadata import version import asyncio import logging config = config_parser.ConfigParser().loadConfig() logger = logging.getLogger(__name__) class telegramBot: bot = None async def sendMessage(self, message): try: logger.info(f"Preparando envío de mensaje por Telegram (longitud: {len(str(message))} caracteres)") ver = version("python-telegram-bot") major = int(ver.split(".")[0]) logger.info(f"Versión de python-telegram-bot: {ver} (major: {major})") token = config.get("telegram", {}).get("token") chat_id = config.get("telegram", {}).get("chat_id") if not token: error_msg = "Token de Telegram no configurado" logger.error(error_msg) print(f"Error: {error_msg}") return if not chat_id: error_msg = "Chat ID de Telegram no configurado" logger.error(error_msg) print(f"Error: {error_msg}") return # -------------------- # PTB v20+ (async) # -------------------- if major >= 20: logger.info("Usando API async de python-telegram-bot v20+") try: self.bot = telegram.Bot(token) await self.bot.send_message(chat_id=chat_id, text=str(message)) logger.info("Mensaje enviado correctamente por Telegram (v20+)") return except telegram.error.TelegramError as e: error_msg = f"Error de Telegram API al enviar mensaje (v20+): {str(e)}" logger.error(error_msg, exc_info=True) print(f"Error: {error_msg}") raise except Exception as e: error_msg = f"Error inesperado al enviar mensaje por Telegram (v20+): {str(e)}" logger.error(error_msg, exc_info=True) print(f"Error: {error_msg}") raise # -------------------- # PTB v12/v13 (sync) # -------------------- else: logger.info("Usando API sync de python-telegram-bot v12/v13") try: self.bot = telegram.Bot(token) # ejecuta el método sync en un hilo para no romper asyncio.run() loop = asyncio.get_running_loop() await loop.run_in_executor( None, lambda: self.bot.send_message(chat_id=chat_id, text=str(message)) ) logger.info("Mensaje enviado correctamente por Telegram (v12/v13)") except telegram.error.TelegramError as e: error_msg = f"Error de Telegram API al enviar mensaje (v12/v13): {str(e)}" logger.error(error_msg, exc_info=True) print(f"Error: {error_msg}") raise except Exception as e: error_msg = f"Error inesperado al enviar mensaje por Telegram (v12/v13): {str(e)}" logger.error(error_msg, exc_info=True) print(f"Error: {error_msg}") raise except Exception as e: error_msg = f"Error crítico al enviar mensaje por Telegram: {str(e)}" logger.error(error_msg, exc_info=True) print(f"Error crítico: {error_msg}") # No re-lanzamos la excepción para evitar que rompa el flujo principal