Skip to content

Permissions (bitmask) ​

Référence complète des exports de bloumechat liés au système de permissions. Pour un guide d'usage pas à pas (vérification, combinaison, overrides de salon), voir Permissions.

Le système repose entièrement sur un bitmask BigInt : chaque permission est une puissance de deux (1n << n), ce qui permet de les combiner avec les opérateurs bitwise standards (|, &, ~) exactement comme des flags Unix. BigInt est utilisé plutôt qu'un number classique car JavaScript ne garantit la précision entière que jusqu'à 2^53 — un number suffirait aujourd'hui (21 flags), mais BigInt élimine tout risque de dépassement silencieux si le système grandit au-delà de 32 bits.

PermissionFlags ​

ts
export const PermissionFlags: {
  MANAGE_SERVER:       bigint; // 1n << 0n
  MANAGE_ROLES:        bigint; // 1n << 1n
  MANAGE_CHANNELS:     bigint; // 1n << 2n
  VIEW_AUDIT_LOG:      bigint; // 1n << 3n
  MANAGE_INVITES:      bigint; // 1n << 4n
  VIEW_MEMBERS:        bigint; // 1n << 5n
  KICK_MEMBERS:        bigint; // 1n << 6n
  BAN_MEMBERS:         bigint; // 1n << 7n
  MANAGE_MESSAGES:     bigint; // 1n << 8n
  VIEW_CHANNELS:       bigint; // 1n << 9n
  SEND_MESSAGES:       bigint; // 1n << 10n
  UPLOAD_FILES:        bigint; // 1n << 11n
  MENTION_EVERYONE:    bigint; // 1n << 12n
  CONNECT:             bigint; // 1n << 13n
  SPEAK:               bigint; // 1n << 14n
  MUTE_MEMBERS:        bigint; // 1n << 15n
  DEAFEN_MEMBERS:      bigint; // 1n << 16n
  MOVE_MEMBERS:        bigint; // 1n << 17n
  PIN_MESSAGE:         bigint; // 1n << 18n
  ADD_REACTION:        bigint; // 1n << 19n
  MANAGE_APPLICATIONS: bigint; // 1n << 20n
  ADMINISTRATOR:       bigint; // 1n << 31n
};

Objet gelé (as const) — chaque clé est un flag unique. Voici le détail de chaque permission :

FlagValeurCatégorieDescription
MANAGE_SERVER1n << 0nServeurModifier les paramètres généraux du serveur (nom, icône, région…).
MANAGE_ROLES1n << 1nServeurCréer, modifier, supprimer des rôles, et les assigner aux membres.
MANAGE_CHANNELS1n << 2nServeurCréer, modifier, supprimer des salons et catégories.
VIEW_AUDIT_LOG1n << 3nServeurConsulter le journal d'audit du serveur.
MANAGE_INVITES1n << 4nServeurCréer et révoquer des invitations.
VIEW_MEMBERS1n << 5nServeurVoir la liste des membres du serveur.
KICK_MEMBERS1n << 6nModérationExpulser un membre du serveur.
BAN_MEMBERS1n << 7nModérationBannir (et débannir) un membre.
MANAGE_MESSAGES1n << 8nModérationSupprimer ou épingler les messages des autres membres.
VIEW_CHANNELS1n << 9nCommunicationVoir un salon et son historique.
SEND_MESSAGES1n << 10nCommunicationEnvoyer des messages dans un salon textuel.
UPLOAD_FILES1n << 11nCommunicationJoindre des fichiers/images aux messages.
MENTION_EVERYONE1n << 12nCommunicationUtiliser @everyone / @here.
CONNECT1n << 13nVocalRejoindre un salon vocal.
SPEAK1n << 14nVocalÉmettre de l'audio dans un salon vocal.
MUTE_MEMBERS1n << 15nVocalCouper le micro d'autres membres en vocal.
DEAFEN_MEMBERS1n << 16nVocalCouper le son (sortie) d'autres membres en vocal.
MOVE_MEMBERS1n << 17nVocalDéplacer des membres entre salons vocaux.
PIN_MESSAGE1n << 18nChatÉpingler ses propres messages (indépendant de MANAGE_MESSAGES, qui couvre les messages d'autrui).
ADD_REACTION1n << 19nChatAjouter des réactions emoji aux messages.
MANAGE_APPLICATIONS1n << 20nApplicationsGérer les bots/applications installés sur le serveur.
ADMINISTRATOR1n << 31nSpécialBypasse toutes les vérifications de permission, y compris les overrides de salon/catégorie.

ADMINISTRATOR bypasse tout

ADMINISTRATOR n'est pas juste "toutes les permissions listées" — c'est un bypass total au niveau du calcul de permissions (Member.hasPermission() retourne toujours true si ce flag est présent, sans même regarder le flag demandé). Attribuez ce rôle avec précaution.

ts
import { PermissionFlags } from "bloumechat";

PermissionFlags.MANAGE_SERVER;    // 1n << 0n
PermissionFlags.BAN_MEMBERS;      // 1n << 7n
PermissionFlags.ADMINISTRATOR;    // 1n << 31n — bypasse toutes les vérifications
js
const { PermissionFlags } = require("bloumechat");

PermissionFlags.MANAGE_SERVER;    // 1n << 0n
PermissionFlags.BAN_MEMBERS;      // 1n << 7n
PermissionFlags.ADMINISTRATOR;    // 1n << 31n — bypasse toutes les vérifications

PermissionFlag (type) ​

ts
export type PermissionFlag = typeof PermissionFlags[keyof typeof PermissionFlags];

Type union de toutes les valeurs possibles de PermissionFlags (donc bigint, au sens large — TypeScript n'affine pas les littéraux bigint individuellement ici). Utile pour typer une fonction qui accepte n'importe quel flag :

ts
import { PermissionFlag, Member } from "bloumechat";

function requirePermission(member: Member, flag: PermissionFlag) {
  if (!member.hasPermission(flag)) throw new Error("Permission refusée");
}
js
function requirePermission(member, flag) {
  if (!member.hasPermission(flag)) throw new Error("Permission refusée");
}

DEFAULT_PERMISSIONS ​

ts
export const DEFAULT_PERMISSIONS: bigint =
  PermissionFlags.VIEW_CHANNELS |
  PermissionFlags.SEND_MESSAGES |
  PermissionFlags.UPLOAD_FILES |
  PermissionFlags.ADD_REACTION |
  PermissionFlags.CONNECT |
  PermissionFlags.SPEAK;

Union pré-calculée des permissions accordées par défaut au rôle @everyone d'un nouveau serveur : voir un salon, envoyer des messages, joindre des fichiers, réagir, et utiliser le vocal (rejoindre + parler). N'inclut aucune permission de gestion ni de modération.

ts
import { DEFAULT_PERMISSIONS, PermissionFlags } from "bloumechat";

const hasDefaultOnly = (DEFAULT_PERMISSIONS & PermissionFlags.MANAGE_ROLES) === 0n; // true
js
const { DEFAULT_PERMISSIONS, PermissionFlags } = require("bloumechat");

const hasDefaultOnly = (DEFAULT_PERMISSIONS & PermissionFlags.MANAGE_ROLES) === 0n; // true

ALL_PERMISSIONS ​

ts
export const ALL_PERMISSIONS: bigint = Object.values(PermissionFlags).reduce((acc, curr) => acc | curr, 0n);

Union bitwise de tous les flags de PermissionFlags, calculée dynamiquement via reduce — donc automatiquement à jour si un nouveau flag est ajouté au SDK sans avoir besoin de maintenir cette constante à la main. Équivalent conceptuel de ce que possède le propriétaire du serveur ou un rôle ADMINISTRATOR (à la différence que ADMINISTRATOR bypasse les vérifications plutôt que de les satisfaire une à une).

ts
import { ALL_PERMISSIONS } from "bloumechat";

await guild.roles.create({
  name: "Super Admin",
  permissions: ALL_PERMISSIONS,
});
js
const { ALL_PERMISSIONS } = require("bloumechat");

await guild.roles.create({
  name: "Super Admin",
  permissions: ALL_PERMISSIONS,
});

Combiner et vérifier des flags ​

Les opérateurs bitwise standards s'appliquent directement sur ces bigint :

OpérationSyntaxeUsage
Combiner plusieurs flagsA | B | CConstruire un ensemble de permissions (ex. pour roles.create()).
Tester la présence d'un flag(perms & FLAG) !== 0nVérifier qu'une permission précise est accordée.
Retirer un flagperms & ~FLAGRévoquer une permission d'un ensemble existant.
ts
import { PermissionFlags } from "bloumechat";

// Combiner
const modPerms = PermissionFlags.KICK_MEMBERS | PermissionFlags.BAN_MEMBERS | PermissionFlags.MANAGE_MESSAGES;

// Tester
const canBan = (modPerms & PermissionFlags.BAN_MEMBERS) !== 0n; // true

// Retirer
const withoutBan = modPerms & ~PermissionFlags.BAN_MEMBERS;
js
const { PermissionFlags } = require("bloumechat");

// Combiner
const modPerms = PermissionFlags.KICK_MEMBERS | PermissionFlags.BAN_MEMBERS | PermissionFlags.MANAGE_MESSAGES;

// Tester
const canBan = (modPerms & PermissionFlags.BAN_MEMBERS) !== 0n; // true

// Retirer
const withoutBan = modPerms & ~PermissionFlags.BAN_MEMBERS;

En pratique, préférez member.hasPermission(flag) (voir Member) plutôt que de refaire le test & manuellement — la méthode gère aussi le cas propriétaire/ADMINISTRATOR pour vous.

ts
await guild.roles.create({
  name: "Modérateur",
  color: "#5e72e4",
  permissions: modPerms,
  hoist: true,
});
js
await guild.roles.create({
  name: "Modérateur",
  color: "#5e72e4",
  permissions: modPerms,
  hoist: true,
});

Voir aussi ​

  • Permissions (guide) — usage pas à pas, Member.hasPermission(), overrides de salon/catégorie.
  • Member — expose hasPermission() et permissions.
  • Role — expose le champ permissions de chaque rôle.
  • RoleManager — create() accepte un bitmask permissions.

SDK publié sous licence ISC.