Empezamos, funciona el scheduler y manda los mensajes programados.
This commit is contained in:
@@ -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()
|
||||||
Reference in New Issue
Block a user