import logging from telegram import Update from telegram.ext import ( ApplicationBuilder, CommandHandler, MessageHandler, filters, CallbackContext, ) import json import datetime import pytz # Define la zona horaria TIMEZONE = pytz.timezone("Europe/Madrid") # Configuración del logging logging.basicConfig( format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO ) logger = logging.getLogger(__name__) # Archivo para almacenar los IDs de los usuarios de guardia GUARDIA_FILE = 'guardia.json' # IDs de los usuarios que pueden estar de guardia USUARIOS_GUARDIA = [132308323, 127382235] # ID del grupo de alertas GRUPO_ALERTAS_ID = -4542155833 # Función para cargar los datos de guardia desde el archivo def cargar_guardia(): try: with open(GUARDIA_FILE, 'r') as f: return json.load(f) except FileNotFoundError: return {"ultimo_guardia": None} # Función para guardar los datos de guardia en el archivo def guardar_guardia(data): with open(GUARDIA_FILE, 'w') as f: json.dump(data, f) # Función para enviar el mensaje de guardia los lunes a las 8:00 AM async def enviar_mensaje_guardia(context: CallbackContext): data = cargar_guardia() ultimo_guardia = data.get("ultimo_guardia") for usuario in USUARIOS_GUARDIA: await context.bot.send_message(chat_id=usuario, text="¿Estás de guardia esta semana? Responde con 'sí' o 'no'.") # Función para manejar las respuestas de los usuarios async def manejar_respuesta(update: Update, context: CallbackContext): usuario = update.message.from_user.id respuesta = update.message.text.lower() if respuesta == 'sí': data = cargar_guardia() ultimo_guardia = data.get("ultimo_guardia") if ultimo_guardia: # Expulsar al último guardia del grupo de alertas await context.bot.ban_chat_member(chat_id=GRUPO_ALERTAS_ID, user_id=ultimo_guardia) # Invitar al nuevo guardia al grupo de alertas await context.bot.send_message(chat_id=usuario, text="Te has unido al grupo de alertas de guardias.") await context.bot.unban_chat_member(chat_id=GRUPO_ALERTAS_ID, user_id=usuario) # Guardar el ID del nuevo guardia data["ultimo_guardia"] = usuario guardar_guardia(data) elif respuesta == 'no': await context.bot.send_message(chat_id=usuario, text="Gracias por responder. No estás de guardia esta semana.") # Función principal para iniciar el bot def main(): # El token del bot application = ApplicationBuilder().token("1859561736:AAESVsdzTXmO8GjbifI4GihIQZuGqA3tNuk").build() # Manejar las respuestas de los usuarios application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, manejar_respuesta)) # Programar el mensaje de guardia los lunes a las 8:00 AM ahora = datetime.datetime.now(TIMEZONE) # el lunes es days=(7 - ahora.weekday()) # el viernes es days=(4 - ahora.weekday()) proximo_lunes = ahora + datetime.timedelta(days=(4 - ahora.weekday())) proximo_lunes = proximo_lunes.replace(hour=8, minute=2, second=0, microsecond=0) application.job_queue.run_repeating(enviar_mensaje_guardia, interval=datetime.timedelta(weeks=1), first=proximo_lunes) # Iniciar el bot application.run_polling() # Punto de entrada del script if __name__ == '__main__': main()