Bot de Discord para organizar, reenviar y clasificar enlaces compartidos en una comunidad
Martin Munive
Médico general
Analista y programador de software
Un bot de Discord creado para ayudar a comunidades a ordenar enlaces, mensajes y recursos compartidos en canales temáticos mediante slash commands.
DISCORD_Channels-Bot nació como una herramienta práctica para una comunidad: capturar enlaces enviados por usuarios, agregar descripción, enviarlos a un canal principal y reenviarlos a canales especializados como ciencia, programación, libros, cursos, software, hardware, música o videojuegos.
En servidores activos de Discord, los enlaces útiles se pierden rápidamente entre conversaciones. Este bot propone una capa simple de organización:
- el usuario registra un enlace con descripción;
- el bot publica el registro en un canal principal;
- el bot reenvía el contenido a un canal temático;
- la comunidad conserva una ruta más ordenada para encontrar recursos compartidos.
- Carga dinámica de comandos desde la carpeta
commands. - Carga dinámica de eventos desde la carpeta
events. - Registro de slash commands en un servidor específico.
- Comando
/linkspara publicar descripción, enlace y canal destino. - Comando
/usuariopara mostrar datos básicos del usuario. - Comando
/servidorpara mostrar datos básicos del servidor. - Evento
readypara confirmar conexión del bot. - Soporte de despliegue tipo worker mediante
Procfile.
Publica un enlace con descripción en un canal principal y en un canal temático seleccionado.
Parámetros:
descripcion: comentario o contexto del recurso.link: enlace a compartir.canal: canal temático destino.
Canales configurados actualmente:
- General
- Humor
- Trabajo
- Ciencia
- Matemáticas
- Programación
- Cursos
- Libros
- Idiomas
- Software
- Hardware
- Diseño
- Filosofía
- Literatura
- Películas/Series
- Música
- Imágenes
- Videojuegos
Muestra usuario, ID y tag del usuario que ejecuta el comando.
Muestra nombre del servidor, cantidad de miembros, fecha de creación y conteo de canales.
DISCORD_Channels-Bot/
├── index.js # Entrada principal del bot
├── deploy-commands.js # Registro de slash commands en Discord
├── events/
│ └── ready.js # Evento de conexión inicial
├── commands/
│ ├── links.js # Comando principal de organización de enlaces
│ ├── usuario.js # Información del usuario
│ ├── servidor.js # Información del servidor
│ └── ... # Prototipos históricos de comandos
├── config.example.json # Plantilla de credenciales locales
├── Procfile # Worker para Heroku
├── package.json
└── docs/
El bot usa dos mecanismos dinámicos:
index.jslee comandos desdecommands/*.jsy los guarda enclient.commands.deploy-commands.jslee los mismos comandos y los registra en Discord mediante la REST API.
El código histórico espera un archivo local config.json con credenciales de Discord. Ese archivo no debe subirse al repositorio.
Crea un archivo config.json en la raíz con esta estructura:
{
"token": "DISCORD_BOT_TOKEN",
"clientId": "DISCORD_APPLICATION_CLIENT_ID",
"guildId": "DISCORD_TEST_GUILD_ID"
}También puedes usar config.example.json como plantilla.
npm installnpm run deploy:commandsnpm startEl repositorio incluye un Procfile compatible con despliegues tipo worker:
worker: node index.js
Para despliegues en Heroku u otros servicios, configura las credenciales de Discord como secretos del entorno o mediante el mecanismo seguro del proveedor. La versión actual todavía lee config.json; el soporte completo de variables de entorno queda como mejora de seguridad en el roadmap.
No publiques:
- tokens de Discord;
config.json;- archivos
.env; - IDs privados si el servidor no debe exponerse públicamente.
El .gitignore actual excluye config.json y .env.
- El bot usa
discord.jsv13, una versión histórica frente a las versiones modernas de la librería. - Algunos comandos históricos en
commands/no tienen extensión.js; el loader actual solo carga archivos terminados en.js, por lo que esos prototipos no se registran dinámicamente. - Hay IDs de canales escritos directamente en el código.
index.jsydeploy-commands.jsdependen deconfig.json; la dependenciadotenvexiste, pero todavía no se usa.- Falta una capa de permisos para limitar quién puede publicar o reenviar contenido.
- Falta validación fuerte de enlaces y sanitización de entradas.
El proyecto puede evolucionar en fases:
- Presentación pública y documentación.
- Seguridad de configuración y variables de entorno.
- Corrección de comandos históricos no cargados.
- Migración a
discord.jsmoderno. - Persistencia de enlaces en base de datos.
- Búsqueda y consulta de recursos por categoría, usuario, fecha o palabra clave.
Ver docs/ROADMAP.md.
Martin Munive
Médico general
Analista y programador de software
Este proyecto se distribuye bajo licencia ISC. Ver LICENSE.