Manejo de comandos en Discord

Manejo de comandos en Discord

Si desea implementar funciones en su bot y hacer que su proceso de desarrollo sea mucho menos doloroso, definitivamente querrá usar un controlador de comandos.

Aquí está el código base que usaremos:

const Discord = require('discord.js');

const { prefix, token } = require('./config.json');

const client = new Discord.Client();

client.once('ready', () => {

console.log('Ready!');

});

client.on('message', message => {

if (!message.content.startsWith(prefix) || message.author.bot) return;

const args = message.content.slice(prefix.length).trim().split(/ +/);

const command = args.shift().toLowerCase();

if (command === 'ping') {

message.channel.send('Pong.');

} else if (command === 'beep') {

message.channel.send('Boop.');

}

// other commands...

});

client.login(token);

Archivos de comando individuales

Antes que nada, es posible que desee crear una copia de seguridad de su archivo bot actual. Si lo ha seguido hasta ahora, toda la estructura de su carpeta debería verse así:

En la misma carpeta, cree una nueva carpeta y asígnele un nombre commands. Aquí es donde almacenarás todos tus comandos, por supuesto. Dirígete a tu commandscarpeta, crea un nuevo archivo llamado ping.jsy copia y pega el siguiente código:

module.exports = {

name: 'ping',

description: 'Ping!',

execute(message, args) {

message.channel.send('Pong.');

},

};

Puede seguir adelante y hacer lo mismo con el resto de sus comandos, colocando sus respectivos bloques de código dentro de la execute()función. Si ha estado utilizando el mismo código que la guía hasta ahora, puede copiar y pegar sus comandos en sus propios archivos ahora sin problemas, siempre y cuando siga el formato anterior. La descriptionpropiedad es opcional, pero será útil para el comando de ayuda dinámica que cubriremos más adelante.

Leer archivos de comandos de forma dinámica

De vuelta en su archivo principal, haga estas dos adiciones:

+ const fs = require('fs');

const Discord = require('discord.js');

const { prefix, token } = require('./config.json');

const client = new Discord.Client();

+ client.commands = new Discord.Collection();

Si no está exactamente seguro de qué son las Colecciones, son una clase que amplía la clase Map nativa de JS e incluye una funcionalidad más extensa y útil. Puede leer acerca de Maps aquí y ver todos los métodos de recopilación disponiblesaquí.

El siguiente paso es cómo recuperar dinámicamente todos los archivos de comando recién creados. Agregue esto debajo de su client.commandslínea:

const commandFiles = fs.readdirSync('./commands').filter(file => file.endsWith('.js'));

El fs.readdirSync()método devolverá una matriz de todos los nombres de archivo en ese directorio, por ejemplo ['ping.js', 'beep.js']. El filtro está ahí para asegurarse de que los archivos que no sean JS se queden fuera de la matriz. Con esa matriz, puede recorrerla y establecer dinámicamente sus comandos en la Colección que creó anteriormente.

for (const file of commandFiles) {

const command = require(`./commands/${file}`);

// set a new item in the Collection

// with the key as the command name and the value as the exported module

client.commands.set(command.name, command);

}

En este punto, su código debería verse así:

const fs = require('fs');

const Discord = require('discord.js');

const { prefix, token } = require('./config.json');

const client = new Discord.Client();

client.commands = new Discord.Collection();

const commandFiles = fs.readdirSync('./commands').filter(file => file.endsWith('.js'));

for (const file of commandFiles) {

const command = require(`./commands/${file}`);

client.commands.set(command.name, command);

}

// `client.on('...')` events and such below this point

En cuanto a la configuración de sus archivos, eso es todo por ahora. En el próximo capítulo, aprenderá cómo hacer que sus comandos se ejecuten dinámicamente


Autor: Oscar olg Fecha actualización el 2020-10-12. Fecha publicación el 2020-10-12. Categoria: Discord. Mapa del sitio Fuente: discordjs