Guide discord.js
Commandes Slash

Permissions de Commande Slash

Les commandes slash ont leur propre système de permissions. Ce système vous permet de définir le niveau par défaut de permissions requises pour qu'un utilisateur exécute une commande lors de son première déploiement ou lorsque votre bot est ajouté à un nouveau serveur.

Les permissions de commande slash pour les guildes ne sont que des valeurs par défaut et peuvent être modifiées par les administrateurs de guildes, leur permettant de configurer l'accès de manière à s'adapter le mieux à leur modération et leurs rôles de serveur. Votre code ne devrait pas essayer d'appliquer sa propre gestion des permissions, car cela peut entraîner un conflit entre les permissions configurées par le serveur et le code de votre bot.

Il est impossible d'empêcher les utilisateurs disposant d'autorisations d'administrateur d'utiliser les commandes déployées globalement ou spécifiquement dans leur guílde. Réfléchissez à deux fois avant de créer des commandes "réservées aux développeurs" telles que eval et restreignez-les à votre serveur de développement personnel privé.

Autorisations des membres

Vous pouvez utiliser SlashCommandBuilder#setDefaultMemberPermissions pour définir les autorisations par défaut requises pour qu'un membre exécute la commande. Définir la valeur à 0 masquera la commande et interdira à quiconque dans une guílde d'utiliser la commande à moins qu'une surcharge spécifique soit configurée ou que l'utilisateur n'ait le drapeau d'autorisation Administrateur.

Pour cela, vous allez présenter deux commandes de modération courantes et simples : ban et kick. Pour une commande ban, une valeur par défaut sensible est de s'assurer que les utilisateurs ont déjà l'autorisation Discord BanMembers pour l'utiliser.

commands/moderation/ban.js
const { SlashCommandBuilder, PermissionFlagsBits } = require('discord.js');

const data = new SlashCommandBuilder()
	.setName('ban')
	.setDescription('Select a member and ban them.')
	.addUserOption((option) => option.setName('target').setDescription('The member to ban').setRequired(true))
	.setDefaultMemberPermissions(PermissionFlagsBits.BanMembers); 

Pour une commande kick cependant, vous pouvez permettre aux membres ayant l'autorisation KickMembers d'exécuter la commande, c'est pourquoi le drapeau est listé ici.

Vous pouvez exiger que l'utilisateur dispose de toutes les autorisations multiples en les fusionnant avec l'opérateur | bitwise OR (par exemple PermissionFlagsBits.BanMembers | PermissionFlagsBits.KickMembers). Vous ne pouvez pas exiger l'une des autorisations multiples. Discord évalue par rapport au champ de bits d'autorisation combiné !

Si vous voulez en savoir plus sur l'opérateur | bitwise OR, vous pouvez consulter les articles Wikipedia et MDN sur le sujet.

commands/moderation/kick.js
const { SlashCommandBuilder, PermissionFlagsBits } = require('discord.js');

const data = new SlashCommandBuilder()
	.setName('kick')
	.setDescription('Select a member and kick them.')
	.addUserOption((option) => option.setName('target').setDescription('The member to kick').setRequired(true))
	.setDefaultMemberPermissions(PermissionFlagsBits.KickMembers);

En réalité, vous voudrez probablement avoir une étape de confirmation supplémentaire avant qu'un bannissement s'exécute réellement. Consultez la section des composants bouton du guide pour voir comment ajouter des boutons de confirmation à vos réponses de commande et écouter les clics sur les boutons.

Contextes

Par défaut, les commandes déployées globalement sont également disponibles pour une utilisation dans les MP. Vous pouvez transmettre InteractionContextType à la méthode setContexts du générateur pour restreindre la commande à n'être disponible que dans les guíldes ou les MP.

Cela n'a pas beaucoup de sens que votre commande ban soit disponible dans les MP, vous pouvez donc ajouter setContexts(InteractionContextType.Guild) au générateur afin qu'elle ne soit disponible que dans les guíldes :

commands/moderation/ban.js
const { InteractionContextType, PermissionFlagsBits, SlashCommandBuilder } = require('discord.js');

const data = new SlashCommandBuilder()
	.setName('ban')
	.setDescription('Select a member and ban them.')
	.addUserOption((option) => option.setName('target').setDescription('The member to ban').setRequired(true))
	.setDefaultMemberPermissions(PermissionFlagsBits.BanMembers)
	.setContexts(InteractionContextType.Guild); 

Et c'est tout ce que vous devez savoir sur les autorisations et les contextes des commandes slash !