Cómo crear un bot de Discord con Node.js

Índice
  1. Introducción
  • Prerrequisitos
  • Paso 1: Configurar un bot de Discord
  • Paso 2: creación de su proyecto
  • Paso 3: Cómo manejar el primer comando de usuario
  • Paso 4: Implementación del comando Sum
  • Conclusión
  • El autor seleccionó el Fondo de Código Libre y Abierto para recibir una donación como parte del programa Write for DOnations .

    Introducción

    Discord es una aplicación de chat que permite a millones de usuarios de todo el mundo enviar mensajes y chatear por voz en línea en comunidades llamadas gremios o servidores. Discord también ofrece una extensa API que los desarrolladores pueden usar para crear potentes bots de Discord. Los bots pueden realizar varias acciones, como enviar mensajes a servidores, enviar mensajes directos a usuarios, moderar servidores y reproducir audio en chats de voz. Esto permite a los desarrolladores crear bots potentes que incluyen funciones avanzadas y complejas, como herramientas de moderación o incluso juegos. Por ejemplo, el bot de utilidad Dyno sirve a millones de gremios y contiene funciones útiles, como protección contra correo no deseado, un reproductor de música y otras funciones de utilidad. Aprender a crear bots de Discord te permite implementar muchas posibilidades, con las que miles de personas podrían interactuar todos los días.

    En este tutorial, crearás un bot de Discord desde cero, utilizando Node.js y la biblioteca Discord.js , que permite a los usuarios interactuar directamente con la API de Discord. Configurarás un perfil para un bot de Discord, obtendrás tokens de autenticación para el bot y programarás el bot con la capacidad de procesar comandos con argumentos de los usuarios.

    Prerrequisitos

    Antes de comenzar, necesitará lo siguiente:

    • Node.js instalado en tu equipo de desarrollo. Para instalarlo en macOS o Ubuntu 20.04, sigue los pasos que se indican en Cómo instalar Node.js y crear un entorno de desarrollo local en macOS o en la sección Instalación de Node.js con Apt mediante un PPA de NodeSource de Cómo instalar Node.js en Ubuntu 20.04 .

    • Cualquier editor de texto de su elección, como Visual Studio Code , Atom , Sublime o nano .

    • Una cuenta de Discord gratuita con una cuenta de correo electrónico verificada y un servidor de Discord gratuito que utilizarás para probar tu bot de Discord.

    Paso 1: Configurar un bot de Discord

    En este paso, utilizará la interfaz gráfica de usuario (GUI) de los desarrolladores de Discord para configurar un bot de Discord y obtener el token del bot, que pasará a su programa.

    Para registrar un bot en la plataforma Discord, utilice el panel de aplicaciones de Discord . Aquí los desarrolladores pueden crear aplicaciones de Discord, incluidos bots de Discord.

    Para comenzar, haz clic en Nueva aplicación . Discord te pedirá que ingreses un nombre para tu nueva aplicación. Luego, haz clic en Crear para crear la aplicación.

    Nota: El nombre de su aplicación es independiente del nombre del bot y el bot no tiene que tener el mismo nombre que la aplicación.

    Ahora abre el panel de control de tu aplicación. Para agregar un bot a la aplicación, ve a la pestaña Bot en la barra de navegación de la izquierda.

    Haz clic en el botón Agregar bot para agregar un bot a la aplicación. Haz clic en el botón ¡Sí, hazlo! cuando se te solicite confirmación. Luego, aparecerá un panel que contiene detalles del nombre de tu bot, el token de autenticación y la foto de perfil.

    Puedes modificar el nombre o la foto de perfil de tu bot aquí, en el panel de control. También debes copiar el token de autenticación del bot haciendo clic en Hacer clic para revelar el token y copiando el token que aparece.

    Advertencia: Nunca comparta ni cargue su token de bot, ya que permite que cualquiera inicie sesión en su bot.

    Ahora debes crear una invitación para agregar el bot a un gremio de Discord donde puedas probarlo. Primero, navega a la página del Generador de URL en la pestaña OAuth2 del panel de la aplicación. Para crear una invitación, desplázate hacia abajo y selecciona bot en scopes . También debes configurar permisos para controlar qué acciones puede realizar tu bot en los gremios. Para los fines de este tutorial, selecciona Administrator , que le dará a tu bot permiso para realizar casi todas las acciones en los gremios. Copia el enlace con el botón Copy .

    A continuación, añade el bot a un servidor. Sigue el enlace de invitación que acabas de crear. Puedes añadir el bot a cualquier servidor que poseas o en el que tengas permisos de administrador desde el menú desplegable.

    Ahora haz clic en Continuar . Asegúrate de que la casilla de verificación junto a Administrador esté marcada; esto le otorgará al bot permisos de administrador. Luego haz clic en Autorizar . Discord te pedirá que resuelvas un CAPTCHA antes de que el bot se una al servidor. Ahora tendrás al bot de Discord en la lista de miembros del servidor al que agregaste el bot en offline .

    Has creado con éxito un bot de Discord y lo has añadido a un servidor. A continuación, escribirás un programa para iniciar sesión en el bot.

    Paso 2: creación de su proyecto

    En este paso, configurará el entorno de codificación básico donde creará su bot e iniciará sesión en él mediante programación.

    Primero, debes configurar una carpeta de proyecto y los archivos de proyecto necesarios para el bot.

    Crea tu carpeta de proyecto:

    1. mkdir discord-bot

    Muévete a la carpeta del proyecto que acabas de crear:

    1. cd discord-bot

    A continuación, utiliza tu editor de texto para crear un archivo llamado config.jsonpara almacenar el token de autenticación de tu bot:

    1. nano config.json

    Luego, agregue el siguiente código al archivo de configuración, reemplazando el texto resaltado con el token de autenticación de su bot:

    discord-bot/config.json

    {    "BOT_TOKEN": "YOUR BOT TOKEN"}

    Guardar y salir del archivo.

    A continuación, creará un package.jsonarchivo que almacenará los detalles de su proyecto y la información sobre las dependencias que utilizará para el proyecto. Para crear un package.jsonarchivo, ejecute el siguiente npmcomando:

    1. npm init

    npmLe solicitará varios detalles sobre su proyecto. Si desea recibir orientación sobre cómo completar estas solicitudes, puede leer sobre ellas en Cómo usar módulos de Node.js con npm y package.json .

    Ahora instalarás el discord.jspaquete que usarás para interactuar con la API de Discord. Puedes instalarlo discord.jsa través de npm con el siguiente comando:

    1. npm install discord.js

    Ahora que ha configurado el archivo de configuración e instalado las dependencias necesarias, está listo para comenzar a crear su bot. En una aplicación del mundo real, un bot grande se dividiría en muchos archivos, pero para los fines de este tutorial, el código de su bot estará en un solo archivo.

    Primero, crea un archivo llamado index.jsen la discord-botcarpeta para el código:

    1. nano index.js

    Comience a codificar el bot solicitando la discord.jsdependencia y el archivo de configuración con el token del bot:

    bot de discordia/index.js

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

    A continuación, agregue las siguientes dos líneas de código:

    bot de discordia/index.js

    ...const client = new Discord.Client({intents: ["GUILDS", "GUILD_MESSAGES"]});client.login(config.BOT_TOKEN);

    Guarde y salga de su archivo.

    La primera línea de código crea un nuevo Discord.Clienty lo asigna a la constante client. Este cliente es, en parte, la forma en que interactuarás con la API de Discord y cómo Discord te notificará eventos como mensajes nuevos. El cliente, en efecto, representa al bot de Discord. El objeto que se pasa al Clientconstructor especifica las intenciones de la puerta de enlace de tu bot. Esto define qué eventos de WebSocket escuchará tu bot. Aquí has ​​especificado GUILDSy GUILD_MESSAGESpara habilitar al bot para que reciba eventos de mensajes en los gremios.

    La segunda línea de código utiliza el loginmétodo que se encuentra en el archivo clientpara iniciar sesión en el bot de Discord que creaste, utilizando el token del config.jsonarchivo como contraseña. El token permite que la API de Discord sepa para qué bot está destinado el programa y que estás autenticado para usar el bot.

    Ahora, ejecute el index.jsarchivo usando Node:

    1. node index.js

    El estado de tu bot cambiará a en línea en el servidor de Discord al que lo agregaste.

    Has configurado correctamente un entorno de codificación y has creado el código básico para iniciar sesión en un bot de Discord. En el siguiente paso, manejarás los comandos de usuario y harás que tu bot realice acciones, como enviar mensajes.

    Paso 3: Cómo manejar el primer comando de usuario

    En este paso, creará un bot que pueda manejar comandos de usuario. Implementará su primer comando ping, que responderá con "pong"y el tiempo que tardará en responder al comando.

    Primero, necesitas detectar y recibir cualquier mensaje que envíen los usuarios para poder procesar cualquier comando. Al usar el onmétodo en el cliente de Discord, Discord te enviará una notificación sobre nuevos eventos. El onmétodo toma dos argumentos: el nombre de un evento que esperar y una función que se ejecutará cada vez que ocurra ese evento. Con este método puedes esperar el evento message, que ocurrirá cada vez que se envíe un mensaje a un gremio donde el bot tiene permiso para ver mensajes. Por lo tanto, crearás una función que se ejecute cada vez que se envíe un mensaje para procesar comandos.

    Primero abre tu archivo:

    1. nano index.js

    Añade el siguiente código a tu archivo:

    bot de discordia/index.js

    ...const client = new Discord.Client({intents: ["GUILDS", "GUILD_MESSAGES"]});client.on("messageCreate", function(message) {                                          });                                      client.login(config.BOT_TOKEN);

    Esta función, que se ejecuta en el messageCreateevento, toma messagecomo parámetro. messagetendrá el valor de una instancia de mensaje de Discord.js , que contiene información sobre el mensaje enviado y métodos para ayudar al bot a responder.

    Ahora agregue la siguiente línea de código a su función de manejo de comandos:

    bot de discordia/index.js

    ...client.on("messageCreate", function(message) {  if (message.author.bot) return;});...

    Esta línea verifica si el autor del mensaje es un bot y, de ser así, deja de procesar el comando. Esto es importante porque, por lo general, no desea procesar ni responder a los mensajes de los bots. Los bots normalmente no necesitan usar información de otros bots, por lo que ignorar sus mensajes ahorra potencia de procesamiento y ayuda a evitar respuestas accidentales.

    Ahora escribirás un controlador de comandos. Para lograrlo, es bueno comprender el formato habitual de un comando de Discord. Por lo general, la estructura de un comando de Discord contiene tres partes en el siguiente orden: un prefijo, un nombre de comando y (a veces) argumentos de comando.

    • Prefijo: el prefijo puede ser cualquier cosa, pero normalmente es un signo de puntuación o una frase abstracta que normalmente no aparecería al principio de un mensaje. Esto significa que, cuando incluyes el prefijo al principio del mensaje, el bot sabrá que la intención de este comando es que lo procese un bot.

    • Nombre del comando: el nombre del comando que el usuario desea utilizar. Esto significa que el bot puede admitir varios comandos con diferentes funciones y permitir que los usuarios elijan entre ellos proporcionando un nombre de comando diferente.

    • Argumentos: A veces, si el comando requiere o utiliza información adicional del usuario, el usuario puede proporcionar argumentos después del nombre del comando, con cada argumento separado por un espacio.

    Nota: No existe una estructura de comandos obligatoria y los bots pueden procesar los comandos como quieran, pero la estructura presentada aquí es una estructura eficiente que utiliza la gran mayoría de los bots.

    Para comenzar a crear un analizador de comandos que maneje este formato, agregue las siguientes líneas de código a la función de manejo de mensajes:

    bot de discordia/index.js

    ...const prefix = "!";client.on("messageCreate", function(message) {  if (message.author.bot) return;  if (!message.content.startsWith(prefix)) return;});...

    Agrega la primera línea de código para asignar el valor "!"a la constante prefix, que usarás como prefijo del bot.

    La segunda línea de código que agrega verifica si el contenido del mensaje que está procesando el bot comienza con el prefijo que usted establece y, si no es así, evita que el mensaje continúe procesándose.

    Ahora debes convertir el resto del mensaje en un nombre de comando y cualquier argumento que pueda existir en el mensaje. Agrega las siguientes líneas resaltadas:

    bot de discordia/index.js

    ...client.on("messageCreate", function(message) {  if (message.author.bot) return;  if (!message.content.startsWith(prefix)) return;  const commandBody = message.content.slice(prefix.length);  const args = commandBody.split(' ');  const command = args.shift().toLowerCase();});...

    Utilice la primera línea aquí para eliminar el prefijo del contenido del mensaje y asignar el resultado a la constante commandBody. Esto es necesario porque no desea incluir el prefijo en el nombre del comando analizado.

    La segunda línea toma el mensaje con el prefijo eliminado y utiliza el splitmétodo en él, con un espacio como separador. Esto lo divide en una matriz de subcadenas, haciendo una división dondequiera que haya un espacio. Esto da como resultado una matriz que contiene el nombre del comando y luego, si se incluye en el mensaje, cualquier argumento. Asignas esta matriz a la constante args.

    La tercera línea elimina el primer elemento de la argsmatriz (que será el nombre del comando proporcionado), lo convierte a minúsculas y luego lo asigna a la constante command. Esto le permite aislar el nombre del comando y dejar solo los argumentos en la matriz. También puede usar el método, toLowerCaseya que los comandos generalmente no distinguen entre mayúsculas y minúsculas en los bots de Discord.

    Ha terminado de crear un analizador de comandos, de implementar un prefijo requerido y de obtener el nombre del comando y los argumentos de los mensajes. Ahora implementará y creará el código para los comandos específicos.

    Agregue el siguiente código para comenzar a implementar el pingcomando:

    bot de discordia/index.js

    ...  const args = commandBody.split(' ');  const command = args.shift().toLowerCase();  if (command === "ping") {                             }                        });...

    Esta ifdeclaración verifica si el nombre del comando que analizaste (asignado a la constante command) coincide con "ping". Si es así, eso indica que el usuario desea utilizar el "ping"comando. Anidarás el código para el comando específico dentro del ifbloque de declaración. Repetirás este patrón para otros comandos que quieras implementar.

    Ahora, puedes implementar el código para el "ping"comando:

    bot de discordia/index.js

    ...  if (command === "ping") {    const timeTaken = Date.now() - message.createdTimestamp;    message.reply(`Pong! This message had a latency of ${timeTaken}ms.`);  }...

    Guarde y salga de su archivo.

    Agrega el "ping"bloque de comandos que calcula la diferencia entre la hora actual (que se obtiene mediante el nowmétodo del Dateobjeto) y la marca de tiempo en la que se creó el mensaje en milisegundos. Esto calcula cuánto tiempo tardó en procesarse el mensaje y la hora "ping"del bot.

    La segunda línea responde al comando del usuario utilizando el replymétodo en la messageconstante. El replymétodo envía un ping (que notifica al usuario y resalta el mensaje para el usuario especificado) al usuario que invocó el comando, seguido del contenido proporcionado como primer argumento del método. Proporciona un literal de plantilla que contiene un mensaje y el ping calculado como la respuesta que replyutilizará el método.

    Con esto concluye la implementación del "ping"comando.

    Ejecute su bot usando el siguiente comando (en la misma carpeta que index.js):

    1. node index.js

    Ahora puedes usar el comando "!ping"en cualquier canal que el bot pueda ver y enviar mensajes, lo que genera una respuesta.

    Ha creado con éxito un bot que puede manejar comandos de usuario y ha implementado su primer comando. En el siguiente paso, continuará desarrollando su bot implementando un comando de suma.

    Paso 4: Implementación del comando Sum

    Ahora ampliará su programa implementando el "!sum"comando. El comando tomará cualquier cantidad de argumentos y los sumará antes de devolver la suma de todos los argumentos al usuario.

    Si tu bot de Discord aún está ejecutándose, puedes detener su proceso con CTRL + C.

    Abra su index.jsarchivo nuevamente:

    1. nano index.js

    Para comenzar a implementar el "!sum"comando, utilizará un else-ifbloque. Después de verificar el nombre del comando ping, verificará si el nombre del comando es igual a "sum". Utilizará un else-ifbloque ya que solo se procesará un comando a la vez, por lo que si el programa coincide con el nombre del comando "ping", no tiene que verificar el "sum"comando. Agregue las siguientes líneas resaltadas a su archivo:

    bot de discordia/index.js

    ...  if (command === "ping") {    const timeTaken = Date.now() - message.createdTimestamp;    message.reply(`Ping! This message had a latency of ${timeTaken}ms.`);  }  else if (command === "sum") {                                 }                            });...

    Puedes comenzar a implementar el código del "sum"comando. El código del "sum"comando irá dentro del else-ifbloque que acabas de crear. Ahora, agrega el siguiente código:

    bot de discordia/index.js

    ...  else if (command === "sum") {    const numArgs = args.map(x = parseFloat(x));    const sum = numArgs.reduce((counter, x) = counter += x);    message.reply(`The sum of all the arguments you provided is ${sum}!`);  }...

    Utilice el mapmétodo en la lista de argumentos para crear una nueva lista utilizando la parseFloatfunción en cada elemento de la argsmatriz. Esto crea una nueva matriz (asignada a la constante numArgs) en la que todos los elementos son números en lugar de cadenas. Esto significa que más adelante puede encontrar correctamente la suma de los números sumándolos.

    La segunda línea utiliza el reducemétodo de la constante numArgsque proporciona una función que suma todos los elementos de la lista. Asignas la suma de todos los elementos a numArgsla constante sum.

    Luego, utiliza el replymétodo en el objeto de mensaje para responder al comando del usuario con un literal de plantilla , que contiene la suma de todos los argumentos que el usuario envía al bot.

    Con esto finaliza la implementación del "sum"comando. Ahora ejecute el bot con el siguiente comando (en la misma carpeta que index.js):

    1. node index.js

    Ahora puedes usar el "!sum"comando en cualquier canal que el bot pueda ver y enviar mensajes.

    La siguiente es una versión completa del index.jsscript del bot:

    bot de discordia/index.js

    const Discord = require("discord.js");const config = require("./config.json");const client = new Discord.Client({intents: ["GUILDS", "GUILD_MESSAGES"]});const prefix = "!";client.on("messageCreate", function(message) {  if (message.author.bot) return;  if (!message.content.startsWith(prefix)) return;  const commandBody = message.content.slice(prefix.length);  const args = commandBody.split(' ');  const command = args.shift().toLowerCase();  if (command === "ping") {    const timeTaken = Date.now() - message.createdTimestamp;    message.reply(`Pong! This message had a latency of ${timeTaken}ms.`);  }  else if (command === "sum") {    const numArgs = args.map(x = parseFloat(x));    const sum = numArgs.reduce((counter, x) = counter += x);    message.reply(`The sum of all the arguments you provided is ${sum}!`);  }});client.login(config.BOT_TOKEN);

    En este paso, has desarrollado aún más tu bot de Discord implementando el sumcomando.

    Conclusión

    Ha implementado con éxito un bot de Discord que puede manejar múltiples comandos de usuario y argumentos de comando diferentes. Si desea ampliar su bot, es posible que pueda implementar más comandos o probar más partes de la API de Discord para crear un bot de Discord poderoso. Puede revisar la documentación de Discord.js o la documentación de la API de Discord para ampliar su conocimiento de la API de Discord. En particular, puede convertir los comandos de su bot en comandos de barra diagonal , que es una práctica recomendada para Discord.js v13.

    Al crear bots de Discord, siempre debes tener en cuenta los términos de servicio de la API de Discord , que describen cómo los desarrolladores deben usar la API de Discord. Si quieres aprender más sobre Node.js, consulta nuestra serie Cómo codificar en Node.js.

    SUSCRÍBETE A NUESTRO BOLETÍN 
    No te pierdas de nuestro contenido ni de ninguna de nuestras guías para que puedas avanzar en los juegos que más te gustan.

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

    Subir

    Este sitio web utiliza cookies para mejorar tu experiencia mientras navegas por él. Este sitio web utiliza cookies para mejorar tu experiencia de usuario. Al continuar navegando, aceptas su uso. Mas informacion