Cómo crear un bot para tu servidor de Discord en 2020

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).

crear bot de discord panel de desarrollador

A continuación, asigna un nombre a la aplicación y haga clic en Crear (Create).

nombre de aplicación bot

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.

token

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.

oauth2

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».

local host
administrador de bot

Ahora, solo tiene que copiar y pegar la URL generada entre Scopes y Bot Permissions:

url generada al crear un bot para discord

A continuación, redirigirá a un formulario como este:

agregar bot creado a servidor de discord

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.

bot creado offline en servidor de Discord

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.

node js

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.

discord.js agregar

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 listo para discord

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.

comado ego para reacciones en discord

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

importar node-fetch

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«:

ajustes del servidor de discordia

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:

roles para crear bot de discord
rol para banear y patear en un bot de discord

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«:

activar modo desarrollador en discord

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:

id del rol de un bot de discord
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.

Deja un comentario

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