Bot de Discord que detecta cuándo se usó /bump (Disboard), borra los mensajes de Disboard, y avisa en un canal configurable cuándo termina el enfriamiento de 2 horas. Funciona en varios servidores a la vez, cada uno con su propia configuración. También incluye un comando /alarm para avisos rápidos tipo temporizador, y un sistema de memes diarios automáticos vía webhook.
- Detección automática de Disboard: escucha los embeds que envía Disboard en cualquier canal del servidor, sin necesidad de fijar un canal fijo.
- Recordatorio de enfriamiento: cuando pasan las 2 horas (configurable), avisa en el canal definido y borra el aviso anterior antes de mandar el nuevo.
- Multi-servidor: cada servidor tiene su propia configuración (canal de aviso, rol a mencionar, próximo bump), guardada en SQLite.
- Sobrevive a reinicios: si el bot se reinicia, retoma los temporizadores de bump pendientes leyendo la base de datos.
/alarm: pon un aviso rápido tipo5m,30so1h20my el bot te menciona en el mismo canal cuando se cumple.- Memes diarios: configura un canal para recibir un meme automático todos los días a una hora fija, publicado vía webhook.
- Comandos slash protegidos: la configuración (
/bump-config,/setmemechannel) requiere el permiso "Administrar servidor".
El proyecto está separado por responsabilidades (principios SOLID) para que sea fácil de mantener y extender:
bump-bot/ ├── bot.py # Composition root: arma todo y lo conecta ├── config.py # Lee y valida variables de entorno ├── db/ │ ├── database.py # Conexión SQLite (bajo nivel) │ └── repositories.py # Interfaces + implementaciones de acceso a datos ├── services/ │ ├── duration_parser.py # Parsea "5m", "30s", "1h20m" → segundos │ ├── scheduler.py # Temporizadores genéricos (bump y alarm lo comparten) │ ├── disboard_classifier.py # Interpreta los embeds de Disboard │ └── meme_fetcher.py # Obtiene memes desde meme-api.com └── cogs/ ├── bump.py # Escucha Disboard y gestiona el recordatorio ├── bump_config_commands.py # /bump-config canal|rol|ver ├── alarm.py # /alarm └── meme.py # /setmemechannel y tarea diaria de memes
Ningún módulo depende de implementaciones concretas de otro salvo a través de constructores (inyección de dependencias) — por ejemplo, BumpCog no sabe que la base de datos es SQLite, solo conoce la interfaz GuildConfigRepository. Lo mismo aplica para memes: MemeCog depende de MemeConfigRepository (interfaz), no de SQLiteMemeConfigRepository directamente.
- Python 3.10+
- Una app de Discord con el bot creado en el Developer Portal
- Intent
MESSAGE CONTENThabilitado en el portal de desarrolladores - Permiso "Administrar webhooks" para el bot (necesario para
/setmemechannel)
git clone <tu-repo>
cd bump-bot
python -m venv venv
source venv/bin/activate # En Windows: venv\Scripts\activate
pip install -r requirements.txtCrea un archivo .env en la raíz (puedes copiar .env.example):
DISCORD_TOKEN=tu_token_aqui
TIEMPO_ENFRIAMIENTO=7200
DB_PATH=bumpbot.db
EMOJI_BUMP_ID=
EMOJI_ANIMADO=false| Variable | Descripción | Por defecto |
|---|---|---|
DISCORD_TOKEN |
Token del bot (obligatorio) | — |
TIEMPO_ENFRIAMIENTO |
Segundos de enfriamiento de bump | 7200 (2h) |
DB_PATH |
Ruta del archivo SQLite | bumpbot.db |
EMOJI_BUMP_ID |
ID de un emoji custom para el aviso (opcional) | vacío → usa 🎉 |
EMOJI_ANIMADO |
true si el emoji custom es animado |
false |
python bot.pyDefine en qué canal se publica el aviso de "ya puedes bumpear". Requiere permiso de Administrar servidor.
Define un rol a mencionar en cada aviso. Opcional — si no se pasa, quita la mención. Requiere permiso de Administrar servidor.
Muestra la configuración actual del servidor: canal, rol y próximo aviso.
Programa un aviso en el canal actual. Formato de duración: combinación de h, m, s (ej. 30s, 5m, 1h20m), máximo 24h.
/alarm duracion:5m /alarm duracion:1h20m motivo:"revisar el horno"
Configura el canal donde se publicará un meme automático todos los días. Crea (o reutiliza) un webhook llamado "Meme Bot" en el canal indicado. La hora es en formato 24h UTC. Si no se especifica subreddit, trae memes aleatorios de varios subreddits populares. Requiere permiso de Administrar servidor.
/setmemechannel canal:#memes hora:15 /setmemechannel canal:#memes hora:15 subreddit:me_irl
- La configuración por servidor (bump, memes) y el temporizador de bump se guardan en SQLite (
bumpbot.db) y sobreviven a reinicios del bot. - Las alarmas (
/alarm) viven solo en memoria: si el bot se reinicia mientras una alarma está activa, se pierde. Es una decisión deliberada para mantener el bot simple, ya que son avisos cortos (minutos) para uso personal. Si en algún momento necesitas que sobrevivan a reinicios, se puede persistir en la misma base SQLite sin añadir infraestructura nueva.
Pensado para correr en un host gratuito tipo bot-hosting.net (o similar basado en Pterodactyl). No necesitas una base de datos gestionada aparte: SQLite guarda su archivo en el disco del contenedor, que persiste mientras no borres el servidor. Solo recuerda:
- Renovar el servicio gratuito según lo pida tu host (en bot-hosting.net es manual cada 4 días).
- Configurar
DISCORD_TOKENy demás variables desde el panel de variables de entorno, no hardcodeadas en el código.