Enregistrement des commandes
Pour les commandes slash pleinement fonctionnelles, vous avez besoin de trois éléments de code importants :
Fichiers de commande
Les fichiers de commande individuels, contenant les définitions et la fonctionnalité des commandes slash.
Gestionnaire de commande
Le gestionnaire de commande lit dynamiquement les fichiers de commande et exécute les commandes.
Déploiement des commandes
Le script de déploiement des commandes pour enregistrer vos commandes slash auprès de Discord.
Ces étapes peuvent être suivies dans n'importe quel ordre, mais toutes sont nécessaires pour que votre bot fonctionne. Cette page détaille l'étape 3. Assurez-vous également de consulter les autres pages liées.
Enregistrement des commandes
Les commandes slash peuvent être enregistrées de deux façons ; dans une guilde spécifique, ou pour chaque guilde où le bot se trouve. Nous allons d'abord examiner l'enregistrement à guilde unique, car c'est un bon moyen de développer et tester vos commandes avant un déploiement global.
Votre application devra avoir l'autorité de portée applications.commands dans une guílde pour que l'une de ses commandes slash apparaisse, et pour pouvoir les enregistrer dans une guílde spécifique sans erreur.
Les commandes slash ne doivent être enregistrées qu'une seule fois et mises à jour lorsque la définition (description, options, etc.) est modifiée. Puisqu'il y a une limite quotidienne sur les créations de commandes, il n'est pas nécessaire ni souhaitable de connecter un client entier à la passerelle ou de le faire sur chaque événement ready. Par conséquent, un script autonome utilisant le gestionnaire REST plus léger est préféré.
Ce script est destiné à être exécuté séparément, uniquement lorsque vous devez apporter des modifications à vos définitions de commande slash - vous êtes libre de modifier des parties telles que la fonction d'exécution autant que vous le souhaitez sans redéploiement.
Commandes de guílde
Créez un fichier deploy-commands.js dans votre répertoire de projet. Ce fichier sera utilisé pour enregistrer et mettre à jour les commandes slash de votre application bot.
Ajoutez deux propriétés supplémentaires à votre fichier config.json, dont nous aurons besoin dans le script de déploiement :
clientId: L'ID client de votre application (Portail des développeurs Discord > "General Information" > application id)guildId: L'ID de votre serveur de développement (Activer le mode développeur > Clic droit sur le titre du serveur > "Copy ID")
{
"token": "your-token-goes-here",
"clientId": "your-application-id-goes-here",
"guildId": "your-server-id-goes-here"
}|Avec ces définitions, vous pouvez utiliser le script de déploiement ci-dessous :
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 = [];
|// Récupérez tous les dossiers de commande du répertoire de commandes que vous avez créé précédemment
|const foldersPath = path.join(__dirname, 'commands');
|const commandFolders = fs.readdirSync(foldersPath);
|
|for (const folder of commandFolders) {
| // Récupérez tous les fichiers de commande du répertoire de commandes que vous avez créé précédemment
| const commandsPath = path.join(foldersPath, folder);
| const commandFiles = fs.readdirSync(commandsPath).filter((file) => file.endsWith('.js'));
| // Récupérez la sortie SlashCommandBuilder#toJSON() des données de chaque commande pour le déploiement
| for (const file of commandFiles) {
const filePath = path.join(commandsPath, file);
const command = require(filePath);
if ('data' in command && 'execute' in command) {
commands.push(command.data.toJSON());
} else {
console.log(`[AVERTISSEMENT] La commande dans ${filePath} manque une propriété "data" ou "execute" requise.`);
}
}
}
|// Construisez et préparez une instance du module REST
|const rest = new REST().setToken(token);
|
|// et déployez vos commandes !
|(async () => {
| try {
| console.log(`Commença à actualiser ${commands.length} commandes d'application (/) .`);
|
|
| // La méthode put est utilisée pour actualiser complètement toutes les commandes de la guílde avec l'ensemble actuel
| const data = await rest.put(Routes.applicationGuildCommands(clientId, guildId), { body: commands });
|
| console.log(`Rechargé avec succès ${data.length} commandes d'application (/).`);
| } catch (error) {
| // Et bien sûr, assurez-vous de capturer et d'enregistrer toutes les erreurs !
| console.error(error);
}
})();Une fois que vous avez rempli ces valeurs, exécutez node deploy-commands.js dans votre répertoire de projet pour enregistrer vos commandes à la guílde spécifiée. Si vous voyez le message de succès, cherchez les commandes sur le serveur en tapant / ! Si tout se passe bien, vous devriez pouvoir les exécuter et voir la réponse de votre bot dans Discord !
Commandes globales
Les commandes d'application globales seront disponibles dans toutes les guíldes où votre application a l'autorité de portée applications.commands, et dans les messages directs par défaut.
Pour déployer des commandes globales, vous pouvez utiliser le même script de la section des commandes de guílde ci-dessus et simplement ajuster l'itinéraire dans le script à .applicationCommands(clientId)
await rest.put(Routes.applicationCommands(clientId), { body: commands });Où déployer
Le déploiement basé sur la guílde des commandes est mieux adapté au développement et au test sur votre serveur personnel. Une fois que vous êtes satisfait qu'il est prêt, déployez la commande globalement pour la publier sur toutes les guíldes dans lesquelles votre bot se trouve.
Vous pouvez souhaiter avoir une application séparée et un jeton dans le Portail développeur Discord pour votre application de développement, pour éviter la duplication entre vos commandes basées sur la guílde et le déploiement global.
Lectures supplémentaires
Vous avez envoyé avec succès une réponse à une commande slash ! Cependant, ce n'est que la fonctionnalité d'événement et de réponse de commande la plus basique. Bien d'autres choses sont disponibles pour améliorer l'expérience utilisateur, notamment :
Event Handling
Apply a similar dynamic, modular handling approach to client events.
Response Methods
Utilize different response methods for slash commands.
Advanced Command Creation
Expand on the command examples with additional, validated, option types.
Display Components
Level up command responses with formatted content and display components.
Interactive Components
Enhance your commands with more input methods using Buttons, Select Menus, and Modals!
Gestion des commandes
Sauf si votre projet bot est petit, ce n'est pas une très bonne idée d'avoir un seul fichier avec une chaîne géante `if`/`else if` pour les commandes. Si vous..
Gestion des événements
Node.js utilise une architecture événementielle, ce qui permet d'exécuter du code quand un événement spécifique se produit. La bibliothèque discord.js en tire..