Files
autoficher/app/telegram_bot.py
Omar Sánchez Pizarro ce179ebff9 Agregar logging estructurado, try-catches y envío de errores por Telegram
- Agregado logging estructurado en todos los módulos
- Implementados try-catches en todos los métodos críticos
- Errores ahora se envían automáticamente por Telegram
- Mejorado manejo de excepciones en requests HTTP
- Agregado try-catch global en main.py para errores no manejados
- Logging detallado en timenet_manager, telegram_bot, google_calendar y config_parser
2026-01-13 01:39:16 +01:00

88 lines
3.6 KiB
Python

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