ButakeroMusicBotGo es un bot de Discord que hice en Go para que puedas escuchar música en tu servidor de Discord. Este repo tiene el código fuente del bot y las instrucciones para instalarlo y ponerlo a funcionar. Ahora mismo funciona con YouTube, pero en el futuro tengo pensado agregar otras plataformas. :D
¿Te pinta chusmear la arquitectura del bot en producción? Podés ver todos los detalles sobre cómo está armado y desplegado ButakeroMusicBotGo aca.
Si querés probar el bot en tu servidor de Discord, acá te dejo la invitación para que lo invites:
Invitación del bot a tu server
Aca tenes un video corto mostrando como se levanta toda la aplicación localmente con Docker Compose, y como funciona el bot en un servidor de Discord:
demo_compressed.mp4
-
Primero, andá al Discord Developer Portal.
-
Hacé clic en "New Application" y poné el nombre que quieras para tu aplicación.
-
En la pestaña de "Installation", activá las casillas "User install" y "Guild install".
-
Copiate el
DISCORDTOKENde la sección de Bot y guardalo. Lo vas a necesitar para configurar el archivo.env.
Para poner a andar el bot y sus microservicios, vamos a usar Docker Compose. Esta configuración está pensada para facilitar el desarrollo y las pruebas locales, encapsulando todas las dependencias necesarias.
-
Primero, asegurate de tener Docker y Docker Compose instalados en tu máquina. Si no los tenés, podés seguir estas guías: Docker Engine y Docker Compose.
-
Cloná este repo a tu entorno local:
git clone git@github.com:Tomas-vilte/ButakeroMusicBotGo.git
-
Entrá en el directorio del repositorio:
cd ButakeroMusicBotGo -
Configuración de Variables de Entorno:
Creá un archivo.enven la raíz del repositorio, este archivo tiene que tener estas variables esenciales. También podés exportarlas en tu terminal o configurarlas como variables de entorno del sistema:DISCORDTOKEN: El token de autenticación para el bot de Discord. Este es esencial para que el bot funcione.COMMANDPREFIX: El prefijo configurable para los comandos del bot (ej:/seso).YOUTUBE_API_KEY: Tu clave de API de YouTube. Es muy importante para que el microservicioaudio_processorpueda buscar y procesar contenido de YouTube.
Nota Avanzada (Opcional):
Si tenés restricciones de descarga o autenticación con YouTube (por ejemplo, contenido bloqueado por región o edad), podés crear un archivoyt-cookies.txten la raíz del repositorio. Este archivo será montado en el contenedoraudio_processorpara su uso. -
Lanzamiento de Servicios (Up):
Una vez que Docker construya las imágenes, podés iniciar todos los servicios con:docker compose --env-file .env up
Esto levantará la siguiente arquitectura de microservicios, pensada para ser escalable y robusta:
zookeeper: Esencial para coordinar los servicios de Kafka.kafka: El broker que maneja los mensajes entre los microservicios.mongodb: Base de datos NoSQL para guardar metadatos de canciones y más.audio_processor: Microservicio encargado de descargar y procesar audio.butakero_bot: El corazón del bot, que interactúa con Discord y gestiona la cola de reproducción.
Volúmenes Persistentes para la Durabilidad de Datos:
mongo_data: Asegura que no se pierdan los datos de MongoDB al reiniciar el contenedor.audio_files: Comparte los archivos de audio procesados entre elaudio_processory elbutakero_bot.
Red de Docker (test-application):
test-application: Red personalizada para que todos los servicios se comuniquen entre sí de manera sencilla.
Una vez que el bot esté andando, podés interactuar con él en tu servidor de Discord usando estos comandos básicos:
⚠️ Nota: Aca tenés que poner el prefijo que configuraste en el archivo.env(ej:/bot).
/<prefijo> play <nombre de la canción>: Reproduce una canción en el canal de voz./<prefijo> stop: Detiene la reproducción y desconecta al bot./<prefijo> list: Muestra la lista de reproducción./<prefijo> skip: Salta a la siguiente canción./<prefijo> remove <número>: Elimina una canción de la lista./<prefijo> playing: Muestra la canción que está sonando./<prefijo> pause: Pausa la canción actual./<prefijo> resume: Reanuda la canción pausada.
¡Todo aporte es bienvenido! Si querés contribuir, seguí estos pasos:
- Hacete un fork de este repo.
- Hacé tus cambios en una nueva rama.
- Mandame un PR con una descripción clara de lo que hiciste.