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);
	}
})();
1
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 },
);

 


1
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));





 
 
 
 
1
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_COMMAND establece la opción para que sea un subcomando
  • SUB_COMMAND_GROUP establece la opción para ser un grupo de subcomando
  • STRING establece la opción para requerir un valor cadena de texto
  • INTEGER establece la opción para requerir un valor entero
  • NUMBER establece la opción para requerir un valor decimal (también conocido como floating point)
  • BOOLEAN establece la opción para requerir un valor booleano
  • USER establece la opción para requerir un usuario o un snowflake como valor
  • CHANNEL establece la opción para requerir un canal o un snowflake como valor
  • ROLE establece la opción para requerir un rol o un snowflake como valor
  • MENTIONABLE establece la opción para requerir un usuario, rol o snowflake como 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'));









 
 
 
1
2
3
4
5
6
7
8
9
10
11
12