bot en java
This commit is contained in:
@ -4,20 +4,16 @@ from database import Base, engine
|
||||
from routes import router
|
||||
from apscheduler.schedulers.background import BackgroundScheduler
|
||||
from webscrapper import search_from_keywords_file
|
||||
import telegrambot
|
||||
|
||||
# Crear las tablas en MySQL si no existen
|
||||
Base.metadata.create_all(bind=engine)
|
||||
|
||||
# Configurar el scheduler
|
||||
scheduler = BackgroundScheduler()
|
||||
scheduler.add_job(telegrambot.enviar_resumen_diario, "cron", hour=22, minute=0) # Ejecutar a las 08:00
|
||||
scheduler.add_job(search_from_keywords_file, "cron", hour=1, minute=0) #Ejecutar a las 01:00
|
||||
|
||||
@asynccontextmanager
|
||||
async def lifespan(app: FastAPI):
|
||||
telegrambot.run()
|
||||
telegrambot.enviar_resumen_diario()
|
||||
scheduler.start()
|
||||
yield
|
||||
scheduler.shutdown()
|
||||
|
@ -1,104 +0,0 @@
|
||||
import telebot
|
||||
import threading
|
||||
from sqlalchemy.orm import Session
|
||||
from database import get_db
|
||||
from models import NewsItem
|
||||
from datetime import datetime
|
||||
import asyncio
|
||||
import logging
|
||||
|
||||
LOG_FILE = "bot.log"
|
||||
logging.basicConfig(
|
||||
filename=LOG_FILE, # Archivo de logs
|
||||
level=logging.INFO, # Nivel de logging (DEBUG, INFO, WARNING, ERROR, CRITICAL)
|
||||
format="%(asctime)s - %(levelname)s - %(message)s", # Formato de los logs
|
||||
)
|
||||
|
||||
# Configura tu bot con el token de BotFather
|
||||
TOKEN = "7626026035:AAHEMp_iIN3y8AwywL0R6OTQvNi7EcJZ0iY"
|
||||
CHAT_ID = "-4731993289" # Reemplaza con el ID del grupo
|
||||
|
||||
bot = telebot.TeleBot(token=TOKEN)
|
||||
|
||||
@bot.message_handler(commands=["start", "help"])
|
||||
def send_welcome(message):
|
||||
bot.reply_to(message, "Welcome to YourBot! Type /info to get more information.")
|
||||
|
||||
async def enviar_mensaje(mensaje: str):
|
||||
try:
|
||||
await bot.send_message(chat_id=CHAT_ID, text=mensaje)
|
||||
logging.info("Mensaje enviado: %s", mensaje)
|
||||
except Exception as e:
|
||||
logging.error("Error al enviar mensaje: %s", e)
|
||||
|
||||
def obtener_titulares_por_keyword():
|
||||
"""
|
||||
Consulta la base de datos para obtener titulares agrupados por keywords del día actual.
|
||||
"""
|
||||
db: Session = next(get_db()) # Obtener la sesión de la DB
|
||||
try:
|
||||
hoy = datetime.now()
|
||||
|
||||
# Obtener todas las keywords disponibles
|
||||
keywords = (
|
||||
db.query(NewsItem.keyword)
|
||||
.filter(NewsItem.fecha == hoy.date())
|
||||
.distinct()
|
||||
.all()
|
||||
)
|
||||
keywords = [k[0] for k in keywords if k[0] is not None] # Extraer valores y filtrar None
|
||||
|
||||
# Obtener titulares por keyword
|
||||
resumen = {}
|
||||
for keyword in keywords:
|
||||
resultados = (
|
||||
db.query(NewsItem.titulo)
|
||||
.filter(
|
||||
NewsItem.keyword == keyword,
|
||||
NewsItem.fecha == hoy.date(),
|
||||
)
|
||||
.all()
|
||||
)
|
||||
resumen[keyword] = [r[0] for r in resultados] # Convertir en lista de strings
|
||||
|
||||
logging.info("Titulares obtenidos: %s", resumen)
|
||||
return resumen
|
||||
|
||||
except Exception as e:
|
||||
logging.error("Error al obtener titulares: %s", e)
|
||||
return {}
|
||||
|
||||
finally:
|
||||
db.close() # Cerrar la conexión
|
||||
|
||||
|
||||
@bot.message_handler(commands=["resumen"])
|
||||
def enviar_resumen_diario():
|
||||
"""
|
||||
Construye el mensaje con los titulares por keyword y lo envía por Telegram.
|
||||
"""
|
||||
resumen = obtener_titulares_por_keyword()
|
||||
|
||||
if not resumen:
|
||||
mensaje = "¡Hola! No se encontraron noticias relevantes hoy. ¡Mañana volvemos con más información!"
|
||||
else:
|
||||
mensaje = "¡Hola! Estos son los titulares más relevantes de las noticias de hoy:\n\n"
|
||||
for keyword, titulares in resumen.items():
|
||||
mensaje += f"🔹 *{keyword}*:\n"
|
||||
for titulo in titulares:
|
||||
mensaje += f" - {titulo}\n"
|
||||
mensaje += "\n"
|
||||
mensaje += "📢 ¡Mañana volveremos con más información!"
|
||||
|
||||
# Enviar mensaje de forma asíncrona
|
||||
asyncio.create_task(enviar_mensaje(mensaje))
|
||||
|
||||
# Función para correr el bot en un hilo separado
|
||||
def start_bot():
|
||||
logging.info("Iniciando el bot")
|
||||
bot.infinity_polling()
|
||||
|
||||
# Iniciar en un hilo separado (solo cuando se llame explícitamente)
|
||||
def run():
|
||||
thread = threading.Thread(target=start_bot, daemon=True)
|
||||
thread.start()
|
Reference in New Issue
Block a user