Création de commandes Slash
Discord permet aux développeurs d'enregistrer des commandes slash, qui fournissent aux utilisateurs un moyen de première classe d'interagir directement avec votre application.
Les commandes Slash offrent un grand nombre d'avantages par rapport à l'analyse manuelle de messages, y compris :
- Intégration avec l'interface du client Discord.
- Détection automatique de commandes et analyse des options/arguments associés.
- Entrées d'arguments typés pour les options de commande, par ex. "String", "User" ou "Role".
- Choix validés ou dynamiques pour les options de commande.
- Réponses privées dans le canal (messages éphéméres).
- Entrées de style formulaire contextuel pour capturer des informations supplémentaires.
...et beaucoup plus !
Avant de continuer
En supposant que vous avez suivi le guide jusqu'à présent, votre répertoire de projet devrait ressembler à ceci :
Command Files
The individual command files, containing slash command definitions and functionality.
Command Handler
The command handler, dynamically reads the command files and executes commands.
Command Deployment
The command deployment script to register your slash commands with Discord.
These steps can be followed in any order, but are all required to make your bot work. This page details step 1. Make sure you also check out the other linked pages.
Fichiers de commandes individuels
Créez un nouveau dossier nommé commands et un sous-dossier nommé utility à l'intérieur, c'est là que vous stockerez tous vos fichiers de commande d'utilitaires. Vous utiliserez la classe pour construire les définitions de commande.
Au minimum, la définition d'une commande slash doit avoir un nom et une description. Les noms de commandes slash doivent être entre 1-32 caractères et ne contenir aucune lettre majuscule, espaces ou symboles autres que - et _. En utilisant le générateur, une définition simple de commande ping ressemblerait à ceci :
new SlashCommandBuilder().setName('ping').setDescription('Replies with Pong!');Une commande slash nécessite également une fonction à exécuter quand la commande est utilisée, pour répondre à l'interaction. L'utilisation d'une méthode de réponse d'interaction confirme à Discord que votre bot a réceptionné l'interaction avec succès et a répondu à l'utilisateur. Discord l'applique pour s'assurer que toutes les commandes slash offrent une bonne expérience utilisateur (UX). L'échec à répondre fera que Discord montre que la commande a échoué, même si votre bot effectue d'autres actions en conséquence.
Le moyen le plus simple de reconnaître et de répondre à une interaction est la méthode interaction.reply(). D'autres méthodes de réponse sont couvertes sur la page Méthodes de réponse plus loin dans cette section.
async execute(interaction) {
await interaction.reply('Pong!')
}Assemblez ces deux éléments en créant un fichier ping.js dans le dossier commands/utility pour votre première commande. À l'intérieur de ce fichier, vous allez définir et exporter deux éléments.
- La propriété
data, qui fournira la définition de commande illustrée ci-dessus pour l'enregistrement auprès de Discord. - La méthode
execute, qui contiendra les fonctionnalités à exécuter à partir de notre gestionnaire d'événements lorsque la commande est utilisée.
Celles-ci sont placées dans module.exports afin qu'elles puissent être lues par d'autres fichiers; savoir le chargeur de commande et les scripts de déploiement de commande mentionnés précédemment.
const { SlashCommandBuilder } = require('discord.js');
module.exports = {
data: new SlashCommandBuilder().setName('ping').setDescription('Replies with Pong!'),
async execute(interaction) {
await interaction.reply('Pong!');
},
};module.exports est la façon d'exporter des données en Node.js afin que vous puissiez require() dans d'autres fichiers.
Si vous devez accéder à votre instance de client à partir d'un fichier de commande, vous pouvez y accéder via interaction.client. Si vous devez accéder à des fichiers externes, des paquets, etc., vous devez require() au haut du fichier.
C'est tout pour votre commande ping de base. Ci-dessous sont des exemples de deux autres commandes que nous allons construire tout au long du guide, créez donc deux autres fichiers pour ceux-ci avant de continuer la lecture.
const { SlashCommandBuilder } = require('discord.js');
module.exports = {
data: new SlashCommandBuilder().setName('user').setDescription('Provides information about the user.'),
async execute(interaction) {
// interaction.user is the object representing the User who ran the command
// interaction.member is the GuildMember object, which represents the user in the specific guild
await interaction.reply(
`This command was run by ${interaction.user.username}, who joined on ${interaction.member.joinedAt}.`,
);
},
};Next steps
You can implement additional commands by creating new files within a dedicated subfolder in the commands folder, but these three are the ones we're going to use for the examples as we go on. For now let's move on to the code you'll need for command handling, to load the files and respond to incoming interactions.
Le fichier principal
Cette page suppose que vous avez déjà préparé les [fichiers de configuration](../app-creation/project-setup#configuration-files)
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..