Uso de argumentos en un bot
En el capítulo en marcha su primer BOT, aprendimos como hacer más de un comando. Y todos los comandos comienzan con un prefix, pero no tenían argumentos.
Los argumentos son parámetros adicionales usados para variar lo que realmente hace el comando. Lo primero que tenemos que hacer para usar argumentos, es separar el comando con el resto del contenido.
Para separa los argumentos agregamos las 2 siguientes líneas de código dentro del evento message.
Descripción del codigo agregado |
---|
La primera linea creamos una variable llamada args que sera nuestros argumentos separado del prefix y comando, gracias a que usamos slice(), que ignora el primer contenido del mensaje (-ping), dejandonos solo el texto siguiente como argumento. Y tambien usamos trim() para asegurar que no haya espacios antes o después del texto. |
La segunda linea agregada creamos una variable llamada command, que obtendra un elemento que sera nuestro comando. Usamos shift() justamente para que elimine el primer elemento de la matriz, que seria el prefix y devuelva solamente el nombre del comando. |
Resultado:
En la programación se inicia contado desde el numero 0, como vemos en la grafica.
Desarrollo usando los argumentos
Empezemos a utilizar los argumentos en nuestros comandos utiles, Ahora que ya tenemos la variable command agregado ya no necesitamos usar el metodo startsWith() para cada comando como lo haciamos al inicio.
Antes:
Podemos simplificarlo, reemplazando de la siguiente esta manera:
Ahora:
Otra alternativa al if, switch y case
También puede usar la variable command dentro en un bloque de comandos switch y case de la siguiente manera:
Bien, despues de cambiar los comandos usando la variable command, vamos a agregar nuevos ejemplos donde usaremos los argumentos de nuestra variable creada args.
En este punto ya debe de a ver aprendido de como crear la estructura de un comando usando condicionales if, ejemplo:
if(command === 'nuevocomando'){
//Codigo de ejemplo ó tareas
}
Entonces creamos un nuevo comando y agregamos dentro de ello el siguiente codigo de ejemplo:
Ejemplo: 5 el bot responda/repita al contenido enviado usando los argumentos.
Descripción del codigo agregado |
---|
Creamos una variable nueva usando let llamada texto que contiene nuestros argumentos unidos con un espacio usando el metodo join(' '), usamos la variable texto que contiene los argumentos enviados para que el BOT pueda enviarlo/repetirlo en un canal cuando sea solicitado. |
Dentro de la condicion if agregado, ingresamos la variable texto con un signo ! (que significa direfente a, false o nulo), nos retorne (return) un mensaje de advertencia en el canal. |
Otro ejemplo util donde usamos los argumentos por matrizes/partes, dividiendo los argumentos por elementos(index), de la siguiente manera:
Ejemplo: 5
Uso de las menciones
Con las menciones también puede capturar usuarios, canales o incluso roles. no es eso impresionante? vamos a ver cómo se hace:
- message.mentions.users contiene una colección de todo los objetos/datos del Usuario mencionado.
- message.mentions.roles contiene una colección de todo los objetos/datos del Rol mencionado.
- message.mentions.channels contiene una colección de todo los objetos/datos del Canal de texto mencionado.
- message.mentions.members contiene una colección de todo los objetos y metodos del miembro mencionado dentro un servidor.
También puede usar el metodo first() para contener la primera mención, ejemplo:
Usando las menciones con argumentos
Otra forma de utilizar argumentos, es cuando el comando debe dirigirse a un usuario específico. Por ejemplo, para obtener el avatar de un miembro, banear, kickear, etc.
Vamos a agregar un nuevo ejemplo de como controlar las menciones y argumentos. El ejemplo ideal es usando la funcion kick() de un miembro mencionado, veamos:
Ejemplo: 6
Descripción del codigo agregado |
---|
Creamos una variable razon que obtendra los argumentos despues de la mención, slice(1) nos ayudara a separar la mención con el contenido del mensaje. |
Dentro de la condicion if agregado, ingresamos la variable texto con un signo ! (que significa direfente a, false o nulo), nos retorne (return) un mensaje de advertencia en el canal. |
Agregamos 2 condiciones if, para evitar errores al momento de usar la funcion kick. |
Usamos un nuevo elemento llamado guild.member() del evento message que requiere a un miembro, obtenido en la variable mencionado para usar la función kick() y dentro de la función agregamos la razon. |
Por ultimo agregamos un mensaje usando al mencionado y su elemento username que devuelve el nombre del miembro pateado, tambien agregamos la varible razon como argumento dentro del mensaje. |
Bien!, en este punto trabajar con los argumentos se convierte en algo que podría darse cuenta de que es necesario para mejorar sus comandos y sus funciones de su BOT.