Bot de Discord en Python que ayuda a gestionar un servidor:
- 🔔 Recordatorio de bump: detecta el
/bumpde Disboard y avisa cuando termina el enfriamiento. - ⏰ Alarmas: avisos rápidos tipo temporizador (
5m,1h20m). - 😹 Memes automáticos: imágenes o videos, sin repetir, publicados por webhook.
- 📅 Contador diario: días restantes y porcentaje de avance hacia el 1 de agosto de 2027.
Funciona en varios servidores a la vez, cada uno con su propia configuración.
Los marcados con 🔒 requieren el permiso Administrar servidor.
| Comando | Qué hace |
|---|---|
/bump-config canal <#canal> 🔒 |
Canal donde se avisa que ya se puede bumpear |
/bump-config rol [@rol] 🔒 |
Rol a mencionar en el aviso (sin rol, lo quita) |
/bump-config ver |
Muestra la configuración de bump |
/alarm <duración> [motivo] |
Te avisa en el canal (ej. 30s, 5m, 1h20m, máx. 24h) |
/setmemechannel <#canal> [hora] [cantidad] [subreddit] [tipo] 🔒 |
Configura los memes automáticos |
/memenow 🔒 |
Envía un meme ahora, según el tipo configurado |
/memevideo [comunidad] 🔒 |
Envía un meme en video ahora (comunidad de Lemmy opcional, ej. memes@lemmy.world) |
/countdown-config canal <#canal> 🔒 |
Canal del contador diario (2:00 p.m. Colombia) |
/countdown-config ver |
Muestra el canal del contador |
/countdown |
Muestra el contador en cualquier momento |
/configuracion |
Resumen de toda la configuración del servidor |
| Parámetro | Descripción | Por defecto |
|---|---|---|
hora |
Hora del primer meme (0-23, UTC) | 12 |
cantidad |
Memes al día (1-100), repartidos en partes iguales | 1 |
subreddit |
Subreddit fijo (imágenes) o comunidad de Lemmy nombre@instancia (videos); si no, elige al azar |
aleatorio |
tipo |
imagen, video o mixto |
imagen |
Ejemplo: /setmemechannel canal:#memes hora:9 cantidad:3 tipo:mixto publica a las 09:00, 17:00 y 01:00 UTC.
Necesitas Python 3.10+ y una app de Discord creada en el Developer Portal con el intent Message Content activado. El bot también necesita el permiso Administrar webhooks.
git clone https://github.com/Amaya0910/Chomosuke.git
cd Chomosuke
python -m venv venv
source venv/bin/activate # En Windows: venv\Scripts\activate
pip install -r requirements.txt
cp .env.example .env # En Windows: copy .env.example .env
python bot.pyEdita el .env con tu token:
| Variable | Descripción | Por defecto |
|---|---|---|
DISCORD_TOKEN |
Token del bot (obligatorio) | — |
TIEMPO_ENFRIAMIENTO |
Segundos de enfriamiento del bump | 7200 |
DB_PATH |
Archivo de la base de datos SQLite | bumpbot.db |
EMOJI_BUMP_ID |
ID de un emoji personalizado para el aviso | 🎉 |
EMOJI_ANIMADO |
true si ese emoji es animado |
false |
LEMMY_COMUNIDADES |
Comunidades de Lemmy para los videos, separadas por coma (nombre@instancia) |
memes, lemmyshitpost y funny de lemmy.world |
bot.py Arma todo y lo conecta (composition root)
config.py Lee las variables de entorno
db/ Acceso a datos (SQLite)
services/ Lógica sin Discord: temporizadores, memes, contador...
cogs/ Comandos y eventos de Discord
Los cogs dependen de interfaces (ABC), no de implementaciones concretas, y todo se inyecta desde bot.py. Así se puede cambiar SQLite o una fuente de memes sin tocar el resto.
- Las alarmas viven en memoria: si el bot se reinicia, se pierden. El resto (configuración y temporizador de bump) se guarda en SQLite.
- Los videos vienen de comunidades de Lemmy, porque Reddit bloquea las peticiones sin credenciales aprobadas (error 403). Hay menos videos y menos contenido en español que en Reddit; elige las comunidades con
LEMMY_COMUNIDADESen el.env. - Cuando no llega un meme, el bot distingue dos casos: no hay memes nuevos (la fuente respondió bien, pero no tiene nada sin enviar) y la fuente falló (error de red o del servicio). El log indica cuántos posts se revisaron, cuántos eran videos y cuántos ya se habían enviado.
- Cada servidor guarda sus últimos 200 memes para no repetirlos.
Funciona en hosts gratuitos tipo bot-hosting.net. SQLite guarda su archivo en el disco del contenedor, así que no necesitas una base de datos aparte. Configura las variables desde el panel del host, nunca en el código, y renueva el servicio cuando lo pida.