,

Bot de Discord para el servidor de Mode 7

Actualizado por · Permalink

Desde hace rato traíamos en la cabeza el Matatán y yo la idea de crear nuestro propio bot para el servidor de Mode 7 en Discord. En lo personal me gustaría automatizar los anuncios de nuevos episodios del Mode 7 Podcast en el servidor ya que todo esto lo hago manualmente cada vez que publicamos un nuevo episodio. Bueno, ese es el primer feature que quisiera implementar, no sé qué más se nos llegue a ocurrir en el futuro.

Pues hoy fue un día en que me dieron ganas de estar en la compu post-trabajo y hacer algo para mi (bueno, para el servidor de Mode 7) y me puse a implementar el ahora oficialmente llamado Mode 7 Bot.

Lo siguiente es lo que he hecho hasta ahora.

Crear archivo de configuración del bot config.json

  
     {
          "token": "secret",
           "prefix": "?",
          "announcer-role": "secret",
          "webhookToken": "secret",
          "webhookID": "secret"
     }
  

En este archivo solo hay que especificar obligatoriamente el token, para poder autentificar nuestra aplicación en la API de Discord, para ello hay que crear una cuenta en el Portal de Desarrolladores de Discord. Lo demás, son atributos opcionales:

  • prefix: Aquí decidí usar el símbolo ‘?’ como prefijo de los comandos de nuestro bot.
  • announcer role: Aquí especifiqué el ID del rol Mode 7 Staff del servidor de Mode 7. Solo quiero que las personas con este rol puedan realizar anuncios con el comando ?anunciar.
  • webhookToken: Creé un webhook al cual enviar mensajes, aquí pongo el token del webook.
  • webhookID: De la misma manera, aquí pego el ID del webhook en cuestión.

Escribir la lógica del bot index.js

Luego de tener el archivo de configuración de la aplicación, proseguimos a crear la lógica del bot:

  
     const Discord = require("discord.js");
     const config = require("./config.json");

     const client = new Discord.Client();
     const webhookClient = new Discord.WebhookClient(config.webhookID, config.webhookToken);

     const prefix = config.prefix;

     client.once("ready", function () {
          console.log("Listo para la acción.");
     });

     client.on("message", function (message) {
         if (!message.member.roles.cache.has(config["announcer-role"]) || !message.content.startsWith(prefix) || message.author.bot) return;

          const commandBody = message.content.slice(prefix.length);
          const args = commandBody.split(' ');
          const command = args.shift().toLowerCase();

          if (command === "hola") {
               const timeTaken = Date.now() - message.createdTimestamp;
               message.reply(`¡Holi! Me tomó ${timeTaken}ms darme cuenta de lo guapo que estás, bombón.`);
          } else if (command == "anunciar") {
               var announcement = "";
               for (const word in args) {
                    announcement = announcement + args[word] + " ";
               }
               webhookClient.send(announcement)
          }                  
     });

     client.login(config.token);
  

Primero requeriremos discord.js como dependencia de nuestro proyecto para poder acceder a sus objetos. Después requerimos nuestro archivo config.json creado previamente.

Inicializamos el cliente de Discord y el cliente del webhook en las siguientes dos líneas.

Lo importante está en el método client.on(), ahí creé dos comandos muy sencillos, ?hola que contesta con una cadena de texto personalizada (solo para probar que mi bot funcionaba) y otro comando ?anunciar que sirve para publicar el texto que le especifiques en un canal designado para anuncios dentro del servidor de Mode 7 (obviamente haciendo el chequeo de que si el usuario que invoca ese comando tiene el rol Mode 7 Staff, proceder a publicar en el canal de anuncios, sino, no hacer nada).

Por lo pronto eso es lo que hace el bot, lo importante es que ya lo empezamos y creo en lo personal me va a mantener muy entretenido.

Para quienes quieran hacer pruebas y hacer su propio bot, pueden inspirarse en este ejemplo. Pueden encontrar el código en este repositorio que puse en GitHub1.

Cualquier comentario, no duden en hacérmelo.

  1. Disclaimer: Es extremadamente posible que este repositorio sea diferente al código publicado aquí, ya que es el repositorio que usamos para el bot que está en producción.
  • Comentarios

Solamente acepto comentarios de usuarios de GitHub (las razones las explico aquí). ¿No tienes cuenta y te gustaría decirme algo? Siempre me puedes contactar a través de [email protected], Twitter o Discord.
Si te gustó este post, por favor compártelo Twittear o sigue @luiscarlospando para recibir notificaciones.