Boutons
Le premier type de composant interactif que nous couvrirons la création est un Bouton. Les boutons sont disponibles dans une variété de styles et peuvent être utilisés pour fournir des interfaces permanentes, des flux de travail de confirmation temporaires et d'autres formes d'interaction supplémentaire avec votre bot.
Cette page est un suivi de la section commandes slash et de la page lignes d'action. Veuillez lire attentivement ces pages d'abord pour que vous puissiez comprendre les méthodes utilisées ici.
Construction des boutons
Les boutons sont l'une des classes MessageComponent, qui peuvent être envoyés via des messages ou des réponses d'interaction.
Pour cet exemple, vous allez développer la commande ban qui a été précédemment couverte sur la page analyse des options avec un flux de travail de confirmation.
Pour créer vos boutons, utilisez la classe ButtonBuilder, en définissant au moins le customId, le style et le label.
const { ButtonBuilder, ButtonStyle, SlashCommandBuilder } = require('discord.js');
module.exports = {
// data: new SlashCommandBuilder()...
async execute(interaction) {
const target = interaction.options.getUser('target');
const reason = interaction.options.getString('reason') ?? 'No reason provided';
const confirm = new ButtonBuilder().setCustomId('confirm').setLabel('Confirm Ban').setStyle(ButtonStyle.Danger);
const cancel = new ButtonBuilder().setCustomId('cancel').setLabel('Cancel').setStyle(ButtonStyle.Secondary);
},
};L'ID personnalisé est une chaîne définie par le développeur de jusqu'à 100 caractères. Utilisez ce champ pour vous assurer que vous pouvez définir de manière unique toutes les interactions entrantes.
Envoi des boutons
Pour envoyer vos boutons, créez une ligne d'action et ajoutez les boutons comme composants. Ensuite, envoyez la ligne dans la propriété components de InteractionReplyOptions (étend BaseMessageOptions).
const { ActionRowBuilder, ButtonBuilder, ButtonStyle, SlashCommandBuilder } = require('discord.js');
module.exports = {
// data: new SlashCommandBuilder()...
async execute(interaction) {
const target = interaction.options.getUser('target');
const reason = interaction.options.getString('reason') ?? 'No reason provided';
const confirm = new ButtonBuilder().setCustomId('confirm').setLabel('Confirm Ban').setStyle(ButtonStyle.Danger);
const cancel = new ButtonBuilder().setCustomId('cancel').setLabel('Cancel').setStyle(ButtonStyle.Secondary);
const row = new ActionRowBuilder().addComponents(cancel, confirm);
await interaction.reply({
content: `Êtes-vous sûr de vouloir bannir ${target} pour la raison : ${reason} ?`,
components: [row],
});
},
};Redémarrez votre bot et envoyez ensuite la commande à un canal auquel votre bot a accès. Si tout se passe bien, vous devriez voir quelque chose comme ceci :
Styles de boutons
Vous remarquerez dans l'exemple ci-dessus que deux styles de boutons différents ont été utilisés, le style gris Secondaire et le style rouge Danger. Ceux-ci ont été choisis spécifiquement pour soutenir les bons principes d'interface utilisateur/expérience utilisateur. Au total, il y a cinq styles de boutons qui peuvent être utilisés selon l'action du bouton :
- Les boutons de style
Primarysont bleus. Ceux-ci conviennent à la plupart des actions générales, où c'est l'action primaire ou la plus importante attendue. - Les boutons de style
Secondarysont gris. Utilisez-les pour les actions moins importantes comme le bouton "Annuler" dans l'exemple ci-dessus. - Les boutons de style
Successsont verts. Semblables au bouton Primary, c'est un bon choix pour les actions de confirmation "positives". - Les boutons de style
Dangersont rouges. Là où l'action confirmée est "destructrice", comme un bannissement ou une suppression, l'utilisation d'un bouton rouge aide à alerter l'utilisateur du risque de l'action. - Les boutons de style
Linksont également gris, mais sont marqués avec le symbole "lien externe". Ces boutons ouvriront le lien fourni dans le navigateur sans envoyer d'interaction au bot.
Boutons de lien
Les boutons de lien sont un peu différents des autres styles. Les boutons Link doivent avoir une url, ne peuvent pas avoir un customId et n'envoient pas d'événement d'interaction lorsqu'ils sont cliqués.
const button = new ButtonBuilder()
.setLabel('discord.js docs')
.setURL('https://discord.js.org')
.setStyle(ButtonStyle.Link); Boutons désactivés
Si vous souhaitez empêcher l'utilisation d'un bouton, mais pas le supprimer du message, vous pouvez le désactiver avec la méthode ButtonBuilder#setDisabled :
const button = new ButtonBuilder()
.setCustomId('disabled')
.setLabel('Click me?')
.setStyle(ButtonStyle.Primary)
.setDisabled(true); Boutons emoji
Si vous souhaitez utiliser un emoji de guilde dans un ButtonBuilder, vous pouvez utiliser la méthode ButtonBuilder#setEmoji :
const button = new ButtonBuilder()
.setCustomId('primary')
.setLabel('Primary')
.setStyle(ButtonStyle.Primary)
.setEmoji('123456789012345678'); Next steps
Les boutons peuvent également être définis comme accessoire dans les composants de section. Consultez la section du guide sur les composants d'affichage si vous souhaitez en savoir plus à ce sujet.
C'est tout ce que vous devez savoir sur la construction et l'envoi de boutons ! À partir de là, vous pouvez découvrir l'autre type de composant de message, les menus de sélection, ou faire en sorte que votre bot commence à écouter les interactions de composants à partir de vos boutons.
Lignes d'Action
Les lignes d'action sont un composant de mise en page avec cinq "emplacements" qui peuvent être remplis avec d'autres composants. Au moment de la rédaction de..
Menus de Sélection
Les menus de sélection sont l'une des classes `MessageComponent`, qui peuvent être envoyées via des messages ou des réponses d'interaction.