diff --git a/telegram-bot-guardias.py b/telegram-bot-guardias.py new file mode 100644 index 0000000..74859d4 --- /dev/null +++ b/telegram-bot-guardias.py @@ -0,0 +1,102 @@ +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() \ No newline at end of file