Crear bots de Discord la mayoría de veces puede resultar ser bastante confuso e intimidante, incluso rozando con la frustración y molestia. ¡Pero no te preocupes, llegaste al lugar correcto! Esta guía paso a paso te enseñaremos cómo crear un bot para Discord en pocos minutos utilizando Javascript y la biblioteca DiscordJS para mayor facilidad.
¿Qué realizará el bot que crearemos?
En primer lugar, conectaremos el bot y notificará que está en línea y, a continuación, agregaremos las siguientes funciones:
- Un bot de respuesta de mensaje para reaccionar a los mensajes de usuario con un comando determinado.
- Un bot de compensación de mensajes que toma un número determinado y elimina muchos mensajes del servidor.
- Un bot de moderación para patear o prohibir automáticamente a los usuarios, con restricciones basadas en roles.
- Un bot de broma que usa una llamada API para crear chistes. Esta plantilla se puede utilizar para hacer un bot meteorológico o cualquier otra cosa donde la API pueda acceder a los datos relevantes
- Un bot de moderación de filtro de palabras para eliminar mensajes que contienen palabras que no desea en el servidor.
¿Qué necesitarás para hacer un bot en Discord?
Antes de acompañarte en esta odisea, necesitarás un par de cosas:
- Entorno de desarrollo de NodeJS: Primero instala NodeJS en tu PC junto con un editor de texto como VS Code o una aplicación web como CodeSandbox o Replit. NodeJS permitirá utilizar Javascript en tu servidor.
- Una cuenta y un servidor de Discord para conectar el bot.
TE PUEDE INTERESAR: Cómo solucionar el error Discord sin ruta
Cómo crear un bot para Discord
Una vez cumplas los requisitos anteriores, lo siguiente será ir al Portal de desarrollador de Discord (discordapp.com/developers/applications/me) y hacer clic en la opción Nueva aplicación (New Application).
A continuación, asigna un nombre a la aplicación y haga clic en Crear (Create).
En el panel de la izquierda sitúate en Bot y haz clic en Add Bot. Acepta lo que te indican y aparecerá el panel de tu aplicación creada. Ve al apartado de Build-A-Bot y selecciona click to reveal Token. Inmediatamente revelará una cadena de texto. Este es el token de autorización que permiten que el bot se autentique con Discord sin tener que usar un nombre de usuario o contraseña. No debes compartirlo con nadie, en manos de otros, podrán crear, modificar y controlar tu bot.
Una vez que lo haya hecho, vaya a la pestaña que indica OAuth2 para conectar el nuevo bot al servidor de Discord. OAuth2 es la forma en que el bot se autentica en el servidor e interactúa con la API de Discord.
Haz clic en el botón Add Redirect e ingresa http://localhost:5000 y luego guarda esos cambios. Selecciona eso como tu URL de redireccionamiento y luego marca la casilla «bot» en la parte de Scopes. Y más abajo en el apartado de Bot Permissions marca la casilla de «Administrator».
Ahora, solo tiene que copiar y pegar la URL generada entre Scopes y Bot Permissions:
A continuación, redirigirá a un formulario como este:
La lista desplegable te dará la opción de agregar el bot a cualquier servidor tuyo. Una vez hecho esto, deberías poder ver que el bot aparece como sin conexión en el servidor.
TE RECOMENDAMOS: Cómo integrar Discord con Twitch fácil y rápido
Primer comando del bot de Discord
Ahora que tienes el bot conectado a tu servidor de Discord, podemos comenzar a escribir código y crear comandos. En esta ocasión usaré Replit, ya que se puede usar de manera online, en el navegador web. Para iniciar a escribir código rápidamente, haz clic en el botón Start coding. Aparecerá una ventana para que selecciones el lenguaje de programación. Elije Node.js y haz clic en Create repl.
Comenzaremos instalando la biblioteca discord.js. Para eso ve al apartado Packages y escribe discord. Aparecerá diversas opciones, pero solo seleccionarás discord.js y haz clic en el botón + que aparecerá a su costado. Espera unos momentos para que se instale el paquete.
Una vez que se instaló el paquete en el entorno de desarrollo, puedes ejecutar el bot copiando el siguiente código Javascript en el editor de texto y ejecutando el archivo (Run):
const Discord = require("discord.js");
const bot = new Discord.Client();
const token = 'YOUR BOT TOKEN HERE'
bot.on('ready', () => {
console.log('bot is ready')
})
bot.login(token)
NOTA: En la parte de YOUR BOT TOKEN HERE debes reemplazarlo por el Token (sin borrar las comillas) que copiaste de la sección Build-A-Bot en el panel Bot.
El código escrito importará la biblioteca DiscordJS, creará un cliente Discord y conectará el bot tu servidor de Discord. Si todo está correcto debe aparecer el mensaje bot is ready al ejecutar el código.
Bot de mensaje y respuesta
Con el siguiente comando haremos que el bot escuche los eventos del mensaje y responda si se da cierta orden dentro del mensaje. Primero, creará la escucha de eventos y un prefijo de comando para filtrar los mensajes no relevantes mientras separa nuestro comando de cualquier argumento. Para hacerlo copia el siguiente código debajo del escrito anteriormente:
const prefix = '!'
bot.on('message', async (msg) => {
//if our message doesnt start with our defined prefix, dont go any further into function
if(!msg.content.startsWith(prefix)) {
console.log('no prefix')
return
}
//slices off prefix from our message, then trims extra whitespace, then returns our array of words from the message
const args = msg.content.slice(prefix.length).trim().split(' ')
//splits off the first word from the array, which will be our command
const command = args.shift().toLowerCase()
//log the command
console.log('command: ', command)
//log any arguments passed with a command
console.log(args)
})
El código anterior responderá a cualquier mensaje escrito en su servidor y determinará si ese mensaje es un comando. El prefijo puede ser lo que quieras.
Ejemplo: escribe el siguiente mensaje en un canal de texto de tu servidor
!test arg1 arg2 arg3
La respuesta que aparecerá en Replit debería ser:
command: test
[arg1, arg2, arg3]
Emplearemos esta configuración para crear dos comandos:
- Un bot de respuesta a mensajes para reaccionar y responder a nuestro mensaje
- Un bot para borrar un número determinado de mensaje
Pega el siguiente código en Replit:
if(command === 'ego') {
msg.react("😀")
msg.reply('wow, what a great post')
}
if (command === "clear") {
//default deletes message itself plus previous
let num = 2;
//if argument is provided, we need to convert it from string to number
if (args[0]) {
//add 1 to delete clear command itself
num = parseInt(args[0]) + 1;
}
//bulk delete the messages
msg.channel.bulkDelete(num);
//notify channel of deleted messages
msg.channel.send(`deleted ${args[0]} posts for you`);
}
Para ejecutar el bot de reacción y respuesta, simplemente tienes que escribir un mensaje en tu servidor de Discord con la palabra !ego.
El comando !clear brinda la opción de borrar un solo mensaje si no proporcionas ningún argumento o borrar una cantidad específica añadiendo un parámetro (por ejemplo si quieres borrar diez mensajes, escribir el comando !clear 10).
Comando para llamar a la API del Bot de Discord
El uso de las API es una gran manera de aumentar la funcionalidad a la hora de crear un bot de Discord. Para demostrarlo, crearemos un bot de broma que realizara una broma aleatoria en tu servidor. En primer lugar, debes instalar la librería node-fetch para que podamos hacer la llamada de la API. Para hacerlo sigue los mismos pasos que hicimos con la librería discord.js
y luego importa con el siguiente código:
const fetch = require('node-fetch')
Ahora sólo tienes que copiar el código que aparece a continuación en tu editor de texto (Replit) debajo de los comandos escritos anteriormente.
if(command === 'joke') {
//async API call using async/await syntax
let getJoke = async () => {
//make API call
let result = await fetch('https://official-joke-api.appspot.com/random_joke')
//convert to object we can work with
let json = await result.json()
return json
}
//call function defined above
let joke = await getJoke()
//have our bot reply using the data returned from our API call
msg.reply(`
Here's your joke
${joke.setup}
${joke.punchline}
`)
}
La llamada a la API devuelve un objeto JSON con las propiedades de punchline y setup que contienen cadenas contenedoras con la broma que tu bot de Discord envía al servidor como respuesta a un mensaje. Para utilizarlo usa el comando !joke.
Moderación de los usuarios de Discord con Bot-Kick o Ban
A continuación, crearás un bot más avanzado, capaz de patear o banear a los miembros de tu servidor. Este comando comprobará que el usuario que lo realiza tiene permisos de moderación para que sólo puedan usarlo personas seleccionadas.
Esto es mucho más complicado que los comandos anteriores, así que asegúrate de leer los comentarios en el código línea por línea para que te hagas una idea de cómo funciona.
Antes de eso, sin embargo, tendrás que crear un rol de moderación en tu servidor y asignar ese rol a ti bot, además, debes habilitar el modo de desarrollo para tomar el ID del rol que usarás en tu código. Haz clic en el nombre del servidor (al costado del nombre en la flecha despegable) en la parte superior izquierda de la interfaz de Discord y luego haz clic en «Ajustes del servidor«, y luego en «Roles«:
Haz clic en el signo «+» y crea un nuevo rol, puedes nombrarlo como quieras. Lo más importante es darle al rol permisos para patear y banear usuarios:
Debes Leer: Cómo crear un servidor de Discord paso a paso
Ahora ve a Ajustes de usuario y haz clic en «Apariencia«, desplázate hasta la parte inferior y activa el «Modo desarrollador«:
Vuelve al rol que creaste en el último paso, haz clic derecho y copia el ID para reemplazarlo en la parte de Role ID Here (sin borrar las comillas) del código escrito a continuación:
if(command === 'kick') {
//verify that user has moderation role
if(!msg.member.roles.cache.has('Role ID Here')) {
msg.reply('you dont have permission to kick users')
// if user doesnt have the role, we return without kicking the user
return
}
//check to make sure a user was actually mentioned, if not we return because bot doesnt know who to kick
const user = msg.mentions.users.first()
if(!user) {
msg.reply('no user mentioned')
return
}
//if user was mentioned, grab their guild member information
const member = msg.guild.member(user)
//if they are a member of the server, kick them
if(member) {
member.kick('this is a message for the server logs').then(() => {
msg.reply(`${user.tag} was kicked from the server`)
})
}
}
A continuación, describiremos un poco el código escrito anteriormente:
- msg.member.roles.cache.has(‘Role ID Here’): Esta función verifica que el usuario que escribió el comando tenga el papel de moderador.
- msg.mentions.users.first(): Comprueba la primera mención del usuario. Algo importante que hay que tener en cuenta es que esto no se ordena según el orden del mensaje en sí, así que si se mencionan varios usuarios podría producirse un error. Los usuarios son ordenados por ID, lo cual depende de cuando se unieron al servidor. Podrías añadir comprobaciones adicionales aquí para asegurarte de que sólo se mencionó un usuario en el mensaje, o permitir que se prohíban varios miembros en un solo comando.
- member.kick(): Este comando expulsa al miembro. También puedes cambiar el comando a member.ban() si quieres banearlos en vez de expulsarlos del servidor.
Bot de filtro de palabras
Este bot creará un manejador de eventos de mensajes completamente separado que mirará cada mensaje, incluso si no hay ningún comando. Usará una estructura de datos establecida para acelerar el tiempo que se tarda en comprobar si el mensaje contiene alguna palabra que deseas filtrar.
//set is outside our event listener to prevent wasted processing re-creating it on every message
let set = new Set(['badword', 'badword2'])
bot.on('message', (msg) => {
//if author of message is a bot, return. This prevents potential infinite loops
if(msg.author.bot) {
return
}
//split message into array of individual words
let wordArray = msg.content.split(' ')
console.log(wordArray)
//loop through every word and check if it is in our set of banned words
for(var i = 0; i < wordArray.length; i++) {
//if the message contains a word in our set, we delete it and send a message telling them why
if(set.has(wordArray[i])) {
msg.delete()
msg.channel.send(`sorry ${msg.author.username}, this is a christian server, no bad words allowed`)
break
}
}
})
El código anterior puede ser personalizado para las necesidades de tu servidor Discord, en lugar de borrar el mensaje podrías simplemente dar una advertencia o incluso prohibir al usuario usando un código similar al bot de moderación que ya hemos hecho.
Ahora que sabes cómo crear un bot de Discord y tienes nociones de comandos, puedes personalizar o inspirar tus propias ideas. Con el aumento de la popularidad de Discord, la gestión y el crecimiento de su comunidad resulta más fácil con la creación y gestión de bots. Ten por seguro que los integrantes de tu servidor te lo agradecerán enormemente.