Skip to content

Latest commit

 

History

23 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Bump Bot

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 en español vía webhook.

Funcionalidades

  • 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 tipo 5m, 30s o 1h20m y el bot te menciona en el mismo canal cuando se cumple.
  • Memes diarios en español: configura un canal, la hora de inicio y cuántos memes al día quieres, publicados automáticamente vía webhook.
  • Comandos slash protegidos: la configuración (/bump-config, /setmemechannel) requiere el permiso "Administrar servidor".

Arquitectura

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 en español 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, /memenow 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.

Requisitos

  • Python 3.10+
  • Una app de Discord con el bot creado en el Developer Portal
  • Intent MESSAGE CONTENT habilitado en el portal de desarrolladores
  • Permiso "Administrar webhooks" para el bot (necesario para /setmemechannel)

Instalación

git clone cd bump-bot python -m venv venv source venv/bin/activate # En Windows: venv\Scripts\activate pip install -r requirements.txt

Crea un archivo .env en la raíz (puedes copiar .env.example):

env 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

Ejecutar

Comandos

/bump-config canal <#canal>

Define en qué canal se publica el aviso de "ya puedes bumpear". Requiere permiso de Administrar servidor.

/bump-config rol <@rol>

Define un rol a mencionar en cada aviso. Opcional — si no se pasa, quita la mención. Requiere permiso de Administrar servidor.

/bump-config ver

Muestra la configuración actual del servidor: canal, rol y próximo aviso.

/alarm duracion:<texto> [motivo:<texto>]

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"

/setmemechannel canal:<#canal> [hora:<0-23>] [cantidad:<1-100>] [subreddit:<texto>]

Configura el canal donde se publicarán memes automáticos. Crea (o reutiliza) un webhook llamado "Meme Bot" en el canal indicado.

  • hora: hora del primer meme del día, en formato 24h UTC. Por defecto 12.
  • cantidad: cuántos memes al día quieres (entre 1 y 100). Se distribuyen automáticamente en partes iguales a lo largo de las 24 horas, empezando en hora. Por defecto 1.
  • subreddit: opcional. Si no lo especificas, el bot elige memes al azar entre varios subreddits en español. Si lo especificas, se respeta tu elección aunque no sea en español.

Requiere permiso de Administrar servidor.

/setmemechannel canal:#memes hora:9 /setmemechannel canal:#memes hora:9 cantidad:3 /setmemechannel canal:#memes hora:9 cantidad:3 subreddit:memexico

Con hora:9 cantidad:3, el bot reparte los memes cada 8 horas a partir de las 9:00 UTC → 09:00, 17:00 y 01:00 UTC.

/memenow

Envía un meme de inmediato al canal ya configurado, sin esperar a la hora programada. Útil para probar que el webhook y la fuente de memes funcionan correctamente antes de dejarlo automático. Requiere haber corrido /setmemechannel antes. Requiere permiso de Administrar servidor.

Persistencia

  • 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.

Hosting

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_TOKEN y demás variables desde el panel de variables de entorno, no hardcodeadas en el código.

About

Si quieres usar este bot puedes desplegarlo en algún sitio de hosting y crear tu .env

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages