Introducción
Discord es una aplicación de chat que permite a millones de usuarios de todo el mundo intercambiar 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 diversas 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 con funciones avanzadas y complejas, como herramientas de moderación o juegos. Por ejemplo, el bot Dyno Tool sirve a millones de comunidades y cuenta con funciones útiles como protección contra spam, reproductor de música y otras funciones útiles. Aprender a crear bots de Discord te permitirá implementar una amplia gama de funciones con las que miles de personas pueden interactuar a diario.
En este tutorial, crearás un bot de Discord desde cero con 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 lo programarás para que procese comandos con argumentos de usuario.
Requisitos previos
Antes de empezar, necesitarás:
- Node.js está instalado en su máquina de desarrollo.
- 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 el bot de Discord
En este paso, utiliza la interfaz gráfica de usuario (GUI) para desarrolladores de Discord para iniciar el bot de Discord y obtener el token del bot, que pasa a su aplicación.
Para registrar un bot en la plataforma Discord, usa el panel de la aplicación Discord. Aquí es donde los desarrolladores pueden crear aplicaciones de Discord, incluyendo bots.
Para empezar, haz clic en "Nueva aplicación". Discord te pedirá que le pongas un nombre a tu nueva aplicación. Luego, haz clic en "Crear".
Nota: El nombre de su aplicación es independiente del nombre del bot, y el bot no tiene que ser el nombre de la aplicación.
Ahora abre el panel de control de tu aplicación. Para añadir un bot, ve a la pestaña Bot en la barra de navegación izquierda.
Haz clic en el botón "Añadir bot" para añadir un bot a la aplicación. Haz clic en "¡Sí, listo!" cuando se te pida confirmación. Accederás a un panel con el nombre del bot, el token de autenticación y tu foto de perfil.
Puedes cambiar el nombre o la foto de perfil de tu bot aquí, en el panel. También tendrás que 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 compartas ni cargues tu token de bot, ya que permite que cualquiera inicie sesión en tu bot.
Ahora necesitas crear una invitación para añadir el bot a la comunidad de Discord y probarlo. Primero, ve 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 el bot en Ámbitos. También tendrás que configurar los permisos para controlar las acciones que tu bot puede realizar en las comunidades. Para este tutorial, selecciona Administrador, lo que permitirá que tu bot realice casi todas las acciones en el Gremio. Copia el enlace con el botón Copiar.
Luego, agrega el bot al servidor. Sigue el enlace de invitación que creaste. Puedes agregar el bot a cualquier servidor que tengas o en el que tengas permisos de administrador en el menú desplegable.
Ahora haz clic en "Continuar". Asegúrate de marcar la casilla junto a "Administrador" para otorgarle al bot permisos de administrador. Luego, haz clic en "Autorizar". Discord te pedirá que resuelvas un CAPTCHA antes de que el bot pueda unirse al servidor. El bot de Discord estará desconectado en la lista de miembros del servidor al que lo añadiste.
Has creado 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 – Crea tu proyecto
En este paso, configura el entorno de codificación inicial donde crea su bot e ingresa programáticamente al bot.
Primero, debes configurar una carpeta de proyecto y los archivos de proyecto necesarios para el robot.
Crea tu carpeta de proyecto:
mkdir discord-bot
Vaya a la carpeta del proyecto que creó:
cd discord-bot
A continuación, utilice su editor de texto para crear un archivo llamado config.json para almacenar la contraseña de autenticación de su bot:
nano config.json
Luego, agregue el siguiente código al archivo de configuración y reemplace el texto resaltado con el token de autenticación de su bot:
{
"BOT_TOKEN": "YOUR BOT TOKEN"
}
Guarde el archivo y salga.
A continuación, creará un archivo `package.json` que almacena los detalles de su proyecto e información sobre las dependencias que utiliza. Para crearlo, ejecute el siguiente comando npm:
npm init
npm le pedirá varios detalles sobre su proyecto.
Ahora instalarás el paquete discord.js que usarás para interactuar con la API de Discord. Puedes instalar discord.js mediante npm con el siguiente comando:
npm install discord.js
Ahora que ha configurado el archivo de configuración e instalado las dependencias necesarias, está listo para empezar a crear su bot. En una aplicación real, un bot grande se dividiría en varios archivos, pero para este tutorial, el código de su bot estará en un solo archivo.
Primero, crea un archivo llamado index.js en la carpeta discord-bot para el código:
nano index.js
Comience a codificar el bot solicitando la dependencia discord.js y un archivo de configuración con el token del bot:
const Discord = require("discord.js");
const config = require("./config.json");Después de esto, agregue las siguientes dos líneas de código:
...
const client = new Discord.Client({intents: ["GUILDS", "GUILD_MESSAGES"]});
client.login(config.BOT_TOKEN);Guarde el archivo y salga.
La primera línea de código crea un nuevo cliente de Discord y lo asigna al cliente fijo. Este cliente permite, en parte, interactuar con la API de Discord y recibir notificaciones de eventos como nuevos mensajes. El cliente representa al bot de Discord. El objeto pasado al constructor del cliente especifica las intenciones de la puerta de enlace del bot. Esto especifica qué eventos de WebSocket escuchará el bot. Aquí se han especificado GUILDS y GUILD_MESSAGES para que el bot pueda recibir eventos de mensajes en los foros.
La segunda línea de código usa el método de inicio de sesión del lado del cliente para iniciar sesión en el bot de Discord que creaste, usando la contraseña del archivo config.json. El token permite que la API de Discord sepa a qué bot está dirigida la aplicación y que estás autenticado para usarlo.
Ahora ejecute el archivo index.js usando Node:
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 programación y creado el código básico para iniciar sesión en tu bot de Discord. A continuación, gestionarás los comandos de usuario y harás que tu bot realice acciones como enviar mensajes.
Paso 3 – Manejo del primer comando del usuario
En este paso, creas un bot que puede gestionar comandos de usuario. Ejecutas tu primer comando ping, que responde con un "ping" y el tiempo que tardó en responder.
Primero, necesitas detectar y recibir los mensajes que envían los usuarios para poder procesar cualquier comando. Usando el método "on" en el cliente de Discord, Discord te enviará una notificación sobre nuevos eventos. El método "on" toma dos argumentos: el nombre del evento que se espera y una función que se ejecutará cada vez que ocurra. Con este método, puedes esperar el mensaje del evento; esto ocurre cada vez que se envía un mensaje a un foro donde el bot tiene permiso para verlos. Por lo tanto, crearás una función que se ejecutará cada vez que se envíe un mensaje para procesar comandos.
Primero, abre tu archivo:
nano index.js
Añade el siguiente código a tu archivo:
...
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 evento messageCreate, toma el mensaje como parámetro. El mensaje será una instancia 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 control de comando:
...
client.on("messageCreate", function(message) {
if (message.author.bot) return;
});
...Esta línea comprueba si el autor del mensaje es un bot y, de ser así, detiene el procesamiento del comando. Esto es importante porque, por lo general, no se desea procesar ni responder a los mensajes de bots. Los bots no suelen necesitar usar información de otros bots, por lo que ignorar sus mensajes ahorra capacidad de procesamiento y evita respuestas aleatorias.
Ahora vas a escribir un comando de controlador. Para ello, es recomendable comprender el formato típico de un comando de Discord. Normalmente, la estructura de un comando de Discord consta de tres partes en este orden: un prefijo, un nombre de comando y (a veces) argumentos de comando.
- Prefijo: Un prefijo puede ser cualquier cosa, pero suele ser un signo de puntuación o una frase abstracta que no suele aparecer al principio del mensaje. Esto significa que, al introducir el prefijo al principio del mensaje, el bot entiende que el comando debe ser procesado por un bot.
- Nombre del comando: El nombre del comando que el usuario desea usar. Esto significa que el bot admite múltiples comandos con diferentes funciones y permite a los usuarios elegir 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 comando obligatoria y los bots pueden procesar comandos como quieran, pero la estructura presentada aquí es una estructura viable 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 del controlador de mensajes:
...
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 al valor “!” al prefijo constante que usarás como prefijo del robot.
La segunda línea de código que agrega verifica si el contenido del mensaje que procesa el bot comienza con el prefijo que configura y, si no es así, deja de procesar el mensaje.
Ahora necesitas convertir el resto del mensaje al nombre del comando y sus argumentos. Agrega las siguientes líneas resaltadas:
...
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 para eliminar el prefijo del contenido del mensaje y asignar el resultado al cuerpo del comando constante. Esto es necesario porque no desea incluir el prefijo en el nombre del comando analizado.
La segunda línea toma el mensaje sin el prefijo y utiliza el método split, con un espacio como separador. Esto lo divide en una matriz de subcadenas, y se produce una división donde hay un espacio. Esto genera una matriz que contiene el nombre del comando y, si está incluido en el mensaje, cualquier argumento. Esta matriz se asigna a la constante args.
La tercera línea elimina el primer elemento del array args (que será el nombre del comando proporcionado), lo convierte a minúsculas y lo asigna a la constante command. Esto permite aislar el nombre del comando y dejar solo los argumentos en el array. También se usa el método toLowerCase, ya que los comandos no suelen distinguir entre mayúsculas y minúsculas en los bots de Discord.
Ha completado la creación de un analizador de comandos, la implementación del prefijo requerido y la recuperación del nombre del comando y los argumentos de los mensajes. Ahora implementará y generará el código para comandos específicos.
Agregue el siguiente código para iniciar el comando ping:
...
const args = commandBody.split(' ');
const command = args.shift().toLowerCase();
if (command === "ping") {
}
});
...Esta sentencia if comprueba si el nombre del comando analizado (asignado a la constante command) coincide con "ping". Si es así, indica que el usuario desea usar el comando "ping". El código del comando específico se coloca en el bloque de sentencia if. Este patrón se repetirá para los demás comandos que se deseen ejecutar.
Ahora puedes implementar el código del comando “ping”:
...
if (command === "ping") {
const timeTaken = Date.now() - message.createdTimestamp;
message.reply(`Pong! This message had a latency of ${timeTaken}ms.`);
}
...Guarde el archivo y salga.
Añade un bloque de comando "ping" que calcula la diferencia en milisegundos entre la hora actual (obtenida mediante el nuevo método en el objeto Fecha) y la marca de tiempo del mensaje creado. Este cálculo calcula el tiempo que tardó en procesar el mensaje y enviar un ping al bot.
La segunda línea responde al comando del usuario mediante el método de respuesta de la constante de mensaje. El método de respuesta envía un ping al usuario que invocó el comando (lo cual le notifica y resalta el mensaje para el usuario especificado), seguido del contenido proporcionado como primer argumento del método. Se proporciona un patrón literal que contiene un mensaje y el ping calculado como respuesta que utilizará el método de respuesta.
Esto finaliza la ejecución del comando “ping”.
Ejecute su bot usando el siguiente comando (en la misma carpeta que index.js):
node index.js
Ahora puedes usar el comando “!ping” en cualquier canal que el bot pueda ver y enviar mensajes, y obtener una respuesta como resultado.
Has creado con éxito un bot que puede gestionar comandos de usuario y has ejecutado tu primer comando. A continuación, continuarás desarrollando tu bot ejecutando el comando "suma".
Paso 4 – Ejecutar el comando Suma
Ahora extenderá su programa ejecutando el comando "!sum". Este comando toma cualquier número de argumentos y los suma, 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.
Vuelva a abrir su archivo index.js:
nano index.js
Se utiliza un bloque else-if para iniciar la ejecución del comando "!sum". Tras comprobar el nombre del comando ping, se comprueba si es igual a "sum". Se utiliza el bloque else-if porque solo se procesa un comando a la vez, por lo que si el programa coincide con el nombre del comando "ping", no necesita comprobar el comando "sum". Agregue las siguientes líneas resaltadas a su archivo:
...
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 empezar a ejecutar el código de la sentencia "sum". Este código va dentro del bloque "else-if" que acabas de crear. Ahora añade el siguiente código:
...
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}!`);
}
...Se utiliza el método map en la lista de argumentos para crear una nueva lista mediante la función parseFloat en cada elemento del array args. Esto crea un nuevo array (asignado a la constante numArgs) donde todos los elementos son números en lugar de cadenas. Esto significa que posteriormente se puede calcular la suma de los números sumándolos.
La segunda línea usa el método reduce en la constante numArgs, que proporciona una función que suma todos los elementos de la lista. Se asigna la suma de todos los elementos de numArgs a la constante suma.
Luego, utiliza el método de respuesta en el objeto de mensaje para responder al comando del usuario con un patrón real, que incluye la suma de todos los argumentos que el usuario envía al bot.
Esto finaliza la ejecución del comando "sum". Ahora ejecute el bot con el siguiente comando (en la misma carpeta index.js):
node index.js
Ahora puedes usar el comando “!sum” en cualquier canal que el bot pueda ver y enviar mensajes.
La siguiente es una versión completa del script de bot 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 punto, has desarrollado tu bot de Discord ejecutando el comando sum.
Resultado
Has implementado con éxito un bot de Discord que puede gestionar varios comandos de usuario y argumentos. Si quieres ampliar tu bot, probablemente puedas ejecutar más comandos o probar más partes de la API de Discord para crear un bot potente.




















