Bot de Telegram para organizar quedadas en grupo: crea, lista, edita y elimina quedadas; permite apuntarse/desapuntarse con botones inline y gestiona permisos de creador/admin. Persistencia en Firebase Realtime Database.
/start– Inicio y teclado principal (sólo por privado)/quedadas– Lista todas las quedadas y botones para apuntarse/desapuntarse/ayuda– Guía de uso con explicación de botones/hablame,/dado,/sorpresa_admin,/mensajeAdmin– Utilidades y mensajes admin
Flujos guiados (conversaciones):
- Crear quedada: título → descripción → lugar → fecha → hora → confirmar/cancelar
- Editar quedada (si eres creador o admin): título, descripción, fecha, hora, lugar
Permisos/seguridad:
- Sólo funciona por privado y para usuarios del grupo
CHAT_IDo en listausuarios_admitidos - Logs de acciones (crear, borrar, editar, apuntar/desapuntar, accesos indebidos) a
CHANEL_LOG
- Telegram:
python-telegram-bot(v13.x) conUpdater/Dispatcher,CommandHandler,MessageHandler,CallbackQueryHandler,ConversationHandler - Firebase: Pyrebase sobre Realtime Database (estructura simple por nodos)
- Python 3.8+
- Dependencias principales:
python-telegram-bot==13.*pyrebase4(opyrebaseequivalente)requests
Nota: Este repo usa API v13 de
python-telegram-bot. Si quieres v20+, hay que migrar aApplicationBuilder/asyncioyfiltersnuevos.
El bot lee estas variables en el arranque:
TOKEN– Token del Bot de TelegramMODE–dev(polling) oprod(webhook)PORT– Puerto para webhook (por defecto8443)CHAT_ID– ID del grupo al que deben pertenecer los usuariosCHANEL_LOG– ID de canal/grupo para logs
Firebase
Evita hardcodear el firebaseConfig en el código. Exporta estas como variables o carga un JSON seguro. (En el código original aparecen embebidas).
Nodos utilizados (nombres tal cual en código):
quedadas/ id:int: index: int creador: [first_name, username, user_id] titulo: string descripcion: string lugar: string personas: [[first_name, username, user_id], ...] # primer elemento "None" para placeholder fecha: string hora: string
usuarios_admitidos/ <auto_id>: [first_name, username, user_id]
administradores/ <auto_id>: [first_name, username, user_id]
TMP_QDDAS/ <user_id>: ... # buffers temporales durante creación
TMP_Edit_QDDAS/ <user_id>: ... # buffers temporales durante edición
- Configura las variables de entorno.
- Instala dependencias.
- Lanza el bot con
MODE=devpara usar polling:
export TOKEN="xxxx" export MODE="dev" export CHAT_ID="123456789" # id del grupo export CHANEL_LOG="123456789" # id del canal de logs python bot_quedadas.py
En modo dev se inicia start_polling() y queda en idle().
Para webhook (ej. PaaS tipo Heroku/Render):
- Expone un endpoint HTTPS público.
- Define las mismas env vars, con
MODE=prod. - Ajusta la URL del webhook (el código trae una URL hardcodeada a Heroku que deberías personalizar):
updater.start_webhook( listen="0.0.0.0", port=PORT, url_path=TOKEN, webhook_url="https:///" + TOKEN )
En el código original está
https://bot-quedadas.herokuapp.com/— cámbialo a tu dominio.
- Inicia el bot por privado con
/start. - Pulsa “Mostrar Quedadas” para ver el detalle y apuntarte/desapuntarte con botones inline.
- “Nueva Quedada” abre un flujo guiado (puedes escribir
Cancelaren cualquier paso). - Si eres creador o admin, verás “Modificar Quedada” y “Borrar Quedada”.
- Firebase: No publiques el
firebaseConfigen el repo; usa variables/secret manager y reglas de lectura/escritura mínimas por rol. - Webhook: Parametriza la URL, no dejes dominios fijos en el código.
- Permisos de Bot: El bot necesita poder leer miembros del grupo para
getChatMembery así validar acceso. - PTB v20 (opcional): Considera migrar para soporte a largo plazo.
- “No eres miembro del grupo” por privado → verifica
CHAT_IDy que el usuario esté en el grupo o enusuarios_admitidos. - El webhook no recibe updates → revisa
webhook_url,PORT, TLS y permisos del bot. - Errores de DB
NoneType→ la estructura mínima de nodos debe existir; inicializa listas/valores por defecto.
MIT (o la que prefieras).
Créditos: Base construida con python-telegram-bot (v13) y Pyrebase. Logs con logging estándar.