Passer au contenu principal
Les permissions s’écrivent toujours par leur nom, comme 'BanMembers' : votre éditeur les complète et refuse une faute de frappe. Rien ici n’envoie de requête : tout est calculé à partir de ce que sait le bot.
Pour exiger des permissions avant qu’une commande ne tourne, déclarez-les dans le fichier de la commande : voir Commandes. Ce que répond ChapterJS quand le bot lui-même n’a pas une permission est dans Erreurs.

D’où viennent les permissions

Pour écrire des permissions, passez des noms à guild.createRole(), role.edit() (RoleCreateOptions, RoleEditOptions) et channel.setPermissions().

Comment elles sont calculées

Le calcul suit les règles de permissions de Discord, en quatre étapes :
  1. Sur le serveur. Le propriétaire peut tout faire. Sinon, un membre a ce que permet le rôle @everyone, plus ce que permet chacun de ses rôles ; un membre avec Administrator peut tout faire.
  2. Dans un salon. Les remplacements du salon changent cela : d’abord celui pour @everyone, puis ceux des rôles du membre combinés, puis celui du membre lui-même. Chacun retire ce qu’il refuse, puis ajoute ce qu’il autorise. Un administrateur n’est jamais concerné par les remplacements.
  3. Ce qui en découle. Un membre qui ne peut pas ViewChannel ne peut rien y faire. Un membre qui ne peut pas SendMessages ne peut pas non plus MentionEveryone, SendTtsMessages, AttachFiles ni EmbedLinks.
  4. Exclusion temporaire. Un membre exclu temporairement ne garde que ViewChannel et ReadMessageHistory, sauf s’il est administrateur.
member.permissions applique les étapes 1 et 4 ; member.permissionsIn(channel) et channel.permissionsFor(member) appliquent les quatre. Un fil utilise les permissions du salon où il se trouve.

Permissions

Un ensemble de permissions qui ne change jamais : chaque opération renvoie un nouvel ensemble. Discord écrit les permissions sous forme de texte parce qu’elles ne tiennent pas dans un nombre ordinaire.

Propriétés

bigint
requis
Les permissions sous forme d’un seul nombre, chaque bit étant une permission.

constructor

Construit un ensemble à partir d’un nom, d’une liste de noms, de bits, d’un autre ensemble, ou du texte qu’utilise Discord ('2048'). Sans argument, l’ensemble est vide. Un nom qui n’est pas une permission lève une TypeError :

has()

Si chaque permission donnée est dans l’ensemble. Un administrateur a toutes les permissions, sauf si { checkAdmin: false } est passé.

any()

Si au moins une des permissions données est dans l’ensemble.

missing()

Les permissions données qui ne sont pas dans l’ensemble, par nom.

add()

Un nouvel ensemble avec les permissions données ajoutées.

remove()

Un nouvel ensemble sans les permissions données.

toArray()

Les noms des permissions de l’ensemble, dans l’ordre de la documentation.

toString()

Le texte qu’attend Discord dans une requête.

toJSON()

Le texte qu’attend Discord dans une requête.
has(), any() et missing() répondent pour un administrateur comme s’il avait tout. Passez { checkAdmin: false } à has() ou any() pour vérifier le bit exact.
Documentation de Discord

PermissionResolvable

Une permission, ou plusieurs : par nom, sous forme de bits, ou sous forme d’ensemble.
Chaque méthode de Permissions, et chaque option qui prend des permissions, en accepte un. Autre chose qu’un nom, un bigint, un ensemble ou une liste de ceux-ci lève une TypeError :

PermissionName

Le nom d’une permission : une clé de PermissionFlags, comme listé ci-dessous.
Documentation de Discord

PermissionFlags

Le bit de chaque permission, par nom : PermissionFlags.BanMembers vaut 4n (1n << 2n). C’est ce dont est fait PermissionName, et ce par rapport à quoi bits est lu.
Vous en avez rarement besoin : les noms font la même chose, de façon lisible. Servez-vous-en quand vous travaillez avec les bits bruts de Discord, par exemple pour les combiner avec | ou les comparer à un nombre venu d’ailleurs. Documentation de Discord

La hiérarchie

Avoir une permission ne suffit pas toujours : un membre ne peut expulser, bannir, renommer ou donner des rôles qu’aux membres dont le rôle le plus haut est en dessous du sien. member.isHigherThan(other) et role.isHigherThan(other) répondent à cela. Il en va de même pour votre bot : son rôle le plus haut doit être au-dessus du membre qu’il modère. Documentation de Discord