Subiendo tus comandos

CONSEJO

Esta página asume que usted usa la misma estructura de archivos que nuestra sección Comandos de barra, y que lo previsto está hecho para funcionar con esa configuración. Por favor, lea atentamente esa sección primero para que pueda entender los métodos utilizados en esta sección.

Si ya tienes comandos slash configurados y desplegados para tu aplicación y quieres aprender cómo responder a ellos, consulta la siguiente sección sobre Métodos de respuesta a comandos.

En esta sección, veremos cómo registrar tus comandos en Discord utilizando discord.js.

Registro de comandos

Los comandos Slash se pueden registrar de dos formas: en un servidor específico o para todos los servidores en los que esté el bot. Vamos a ver primero el registro en un solo servidor, ya que es una buena manera de desarrollar y probar tus comandos antes de un despliegue global.

Tu aplicación necesitará el ámbito applications.commands autorizado en un servidor para que cualquiera de sus comandos de barra aparezca, y para poder registrarlos en un servidor específico sin error.

Los comandos de barra sólo deben registrarse una vez y actualizarse cuando se modifique su definición (descripción, opciones, etc.). Como hay un límite diario en la creación de comandos, no es necesario ni deseable conectar un cliente entero a la pasarela o hacer esto en cada evento ready. Por ello, es preferible un script independiente que utilice el gestor REST más ligero.

Este script está pensado para ser ejecutado por separado, sólo cuando necesites hacer cambios en las definiciones de tu comando slash - eres libre de modificar partes como la función de ejecución tanto como quieras sin necesidad de volver a desplegarlo.

Comandos de servidor

Crea un archivo deploy-commands.js en el directorio de tu proyecto. Este archivo se utilizará para registrar y actualizar los comandos de barra para tu aplicación bot.

Añade dos propiedades más a tu archivo config.json, que necesitaremos en el script de despliegue:

{
	"token": "tu-token-va-aquí",
	"clientId": "tu-id-de-aplicación-va-aquí",
	"guildId": "tu-id-del-servidor-va-aquí"
}
1
2
3
4
5

Una vez definidos estos parámetros, puede utilizar el script de despliegue a continuación:

const { REST, Routes } = require('discord.js');
const { clientId, guildId, token } = require('./config.json');
const fs = require('node:fs');
const path = require('node:path');

const commands = [];
// Obtenga todos los archivos de comandos del directorio de comandos que creaste anteriormente
const commandsPath = path.join(__dirname, 'commands');
const commandFiles = fs.readdirSync(commandsPath).filter(file => file.endsWith('.js'));

// Obtenga la salida SlashCommandBuilder#toJSON() de los datos de cada comando para su despliegue
for (const file of commandFiles) {
	const command = require(`./commands/${file}`);
	commands.push(command.data.toJSON());
}

// Construir y preparar una instancia del módulo REST
const rest = new REST({ version: '10' }).setToken(token);

// ¡y despliega tus comandos!
(async () => {
	try {
		console.log(`Se comenzaron a actualizar ${commands.length} comandos de tu aplicación (/).`);

		// El método PUT se utiliza para actualizar completamente todos los comandos del servidor con el conjunto actual
		const data = await rest.put(
			Routes.applicationGuildCommands(clientId, guildId),
			{ body: commands },
		);

		console.log(`Se actualizaron con éxito ${data.length} comandos de tu aplicación (/).`);
	} catch (error) {
		// Y, por supuesto, asegúrate de detectar y registrar cualquier 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
34
35
36

Una vez rellenados estos valores, ejecuta node deploy-commands.js en el directorio de tu proyecto para registrar tus comandos en el servidor especificado. Si ves el mensaje de éxito, comprueba si los comandos están en el servidor escribiendo /. Si todo va bien, deberías poder ejecutarlos y ver la respuesta de tu bot en Discord.

Usuario used /ping
Bot de pruebas Bot 07/16/2023
Pong! 🏓

Comandos globales

Los comandos globales de la aplicación estarán disponibles en todos los servidores en los que tu aplicación tenga autorizado el ámbito applications.commands, y en los mensajes directos por defecto.

Para desplegar comandos globales, puedes utilizar el mismo script de la sección comandos de servidor y simplemente ajustar la ruta en el script a .applicationCommands(clientId).

await rest.put(
	Routes.applicationCommands(clientId),
	{ body: commands },
);
1
2
3
4

Dónde desplegar

CONSEJO

El despliegue de comandos basado en servidores es más adecuado para el desarrollo y las pruebas en propio servidor personal. Una vez que estés satisfecho, despliega el comando globalmente para publicarlo en todos los servidores en los que esté tu bot.

Es posible que desees tener una aplicación y un token separados en el portal de desarrollo de Discord para tu aplicación de desarrollo, para evitar la duplicación entre tus comandos basados en servidores y el despliegue global.

Más información

¡Ha enviado con éxito una respuesta a un comando de barra! Sin embargo, esto es sólo lo más básico del evento de comando y la funcionalidad de respuesta. Hay mucho más disponible para mejorar la experiencia del usuario, incluyendo:

Resultado final

Si quieres comparar tu código con el código que hemos construido hasta ahora, puedes revisarlo en el repositorio de GitHub aquí open in new window.