Registrando comandos de barra
Discord ofrece a los desarrolladores la opción de crear comandos de barra integrados en el cliente. En esta sección, cubriremos cómo registrar estos comandos usando discord.js.
TIP
Esta página asume que usa la misma estructura de archivo que nuestro Gestor de comandos. Los scripts proporcionados están hechos para funcionar con esa configuración.
Si ya tiene los comandos de barra configurados para su aplicación y desea aprender cómo responder a ellos, consulte la página siguiente.
Comandos de servidor
Los comandos de aplicación del servidor, solo estan disponibles en el mismo que fueron creados, si su aplicación tiene el scope de applications.commands autorizado.
Es esta sección utilizaremos una secuencia de comandos que se puede utilizar junto con el controlador de comandos de barra de Gestor de comandos.
Antes que nada, instala @discordjs/restopen in new window y discord-api-typesopen in new window ejecutando npm install @discordjs/rest discord-api-types en tu terminal.
const { REST } = require('@discordjs/rest');
const { Routes } = require('discord-api-types/v9');
const { token } = require('./config.json');
const fs = require('fs');
const commands = [];
const commandFiles = fs.readdirSync('./commands').filter(file => file.endsWith('.js'));
// Place your client and guild ids here
const clientId = '123456789012345678';
const guildId = '876543210987654321';
for (const file of commandFiles) {
const command = require(`./commands/${file}`);
commands.push(command.data.toJSON());
}
const rest = new REST({ version: '9' }).setToken(token);
(async () => {
try {
console.log('Iniciando la actualización de (/) comandos de aplicación');
await rest.put(
Routes.applicationGuildCommands(clientId, guildId),
{ body: commands },
);
console.log('(/) Comandos de aplicación recargados con éxito');
} catch (error) {
console.error(error);
}
})();
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
La ejecución de este script registrará todos sus comandos en el servidor cuya identificación se pasó arriba.
Comandos globales
Los comandos globales de la aplicación estarán disponibles en todos los gremios que tu aplicación tenga el scope de applications.commands autorizado, así como en los MD.
TIP
Los comandos globales se almacenan en caché durante una hora. Los nuevos comandos globales se desplegarán lentamente en todos los servidores y solo se garantizará que se actualicen después de una hora. Los comandos del servidor se actualizan instantáneamente. Como tal, le recomendamos que use comandos basados en servidores durante el desarrollo y los publique en comandos globales cuando estén listos para uso público.
Para implementar comandos globales, puede usar el mismo script del comandos de servidor y ajuste la ruta en el script para .applicationCommands(clientId).
await rest.put(
Routes.applicationCommands(clientId),
{ body: commands },
);
2
3
4
Opciones
Los comandos de la aplicación pueden tener opciones. Piense en estas opciones como argumentos de una función. Puede especificarlos como se muestra a continuación:
const { SlashCommandBuilder } = require('@discordjs/builders');
const data = new SlashCommandBuilder()
.setName('echo')
.setDescription('¡Responde con tu argumento!')
.addStringOption(option =>
option.setName('input')
.setDescription('El argumento a repetir')
.setRequired(true));
2
3
4
5
6
7
8
9
Observe cómo se especifica .setRequired (true) dentro del generador de opciones. ¡Establecer esto evitará que el usuario envíe el comando sin especificar un valor para esta opción!
Tipos de opciones
Como se muestra en el ejemplo de opciones anterior, puede especificar el tipo de un ApplicationCommandOption. A continuación se enumeran todos los valores posibles que puede pasar como ApplicationCommandOptionType:
TIP
El constructor de comandos de barra tiene un método para cada uno de estos tipos, respectivamente. Consulte la documentación de la API de Discord para obtener explicaciones detalladas sobre el SUB_COMMAND y SUB_COMMAND_GROUP tipos de opcionesopen in new window.
SUB_COMMANDestablece la opción para que sea un subcomandoSUB_COMMAND_GROUPestablece la opción para ser un grupo de subcomandoSTRINGestablece la opción para requerir un valor cadena de textoINTEGERestablece la opción para requerir un valor enteroNUMBERestablece la opción para requerir un valor decimal (también conocido comofloating point)BOOLEANestablece la opción para requerir un valor booleanoUSERestablece la opción para requerir un usuario o unsnowflakecomo valorCHANNELestablece la opción para requerir un canal o unsnowflakecomo valorROLEestablece la opción para requerir un rol o unsnowflakecomo valorMENTIONABLEestablece la opción para requerir un usuario, rol osnowflakecomo valor
Elecciones
Los tipos de opción STRING y INTEGER pueden tener "opciones". Las elecciones son un conjunto de valores predeterminados entre los que los usuarios pueden elegir al seleccionar la opción que los contiene.
ADVERTENCIA
Si especifica elecciones para una opción, serán los únicos valores válidos que los usuarios pueden elegir.
Especifíquelos usando el método addChoice() del generador de comandos de barra:
const { SlashCommandBuilder } = require('@discordjs/builders');
const data = new SlashCommandBuilder()
.setName('gif')
.setDescription('¡Envía un gif aleatorio!')
.addStringOption(option =>
option.setName('categoria')
.setDescription('La categoría del gif')
.setRequired(true)
.addChoice('Gracioso', 'gif_gracioso')
.addChoice('Meme', 'gif_meme')
.addChoice('Pelicula', 'gif_pelicula'));
2
3
4
5
6
7
8
9
10
11
12