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
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 :
| Flag | Valeur | Catégorie | Description |
|---|---|---|---|
MANAGE_SERVER | 1n << 0n | Serveur | Modifier les paramètres généraux du serveur (nom, icône, région…). |
MANAGE_ROLES | 1n << 1n | Serveur | Créer, modifier, supprimer des rôles, et les assigner aux membres. |
MANAGE_CHANNELS | 1n << 2n | Serveur | Créer, modifier, supprimer des salons et catégories. |
VIEW_AUDIT_LOG | 1n << 3n | Serveur | Consulter le journal d'audit du serveur. |
MANAGE_INVITES | 1n << 4n | Serveur | Créer et révoquer des invitations. |
VIEW_MEMBERS | 1n << 5n | Serveur | Voir la liste des membres du serveur. |
KICK_MEMBERS | 1n << 6n | Modération | Expulser un membre du serveur. |
BAN_MEMBERS | 1n << 7n | Modération | Bannir (et débannir) un membre. |
MANAGE_MESSAGES | 1n << 8n | Modération | Supprimer ou épingler les messages des autres membres. |
VIEW_CHANNELS | 1n << 9n | Communication | Voir un salon et son historique. |
SEND_MESSAGES | 1n << 10n | Communication | Envoyer des messages dans un salon textuel. |
UPLOAD_FILES | 1n << 11n | Communication | Joindre des fichiers/images aux messages. |
MENTION_EVERYONE | 1n << 12n | Communication | Utiliser @everyone / @here. |
CONNECT | 1n << 13n | Vocal | Rejoindre un salon vocal. |
SPEAK | 1n << 14n | Vocal | Émettre de l'audio dans un salon vocal. |
MUTE_MEMBERS | 1n << 15n | Vocal | Couper le micro d'autres membres en vocal. |
DEAFEN_MEMBERS | 1n << 16n | Vocal | Couper le son (sortie) d'autres membres en vocal. |
MOVE_MEMBERS | 1n << 17n | Vocal | Déplacer des membres entre salons vocaux. |
PIN_MESSAGE | 1n << 18n | Chat | Épingler ses propres messages (indépendant de MANAGE_MESSAGES, qui couvre les messages d'autrui). |
ADD_REACTION | 1n << 19n | Chat | Ajouter des réactions emoji aux messages. |
MANAGE_APPLICATIONS | 1n << 20n | Applications | Gérer les bots/applications installés sur le serveur. |
ADMINISTRATOR | 1n << 31n | Spécial | Bypasse 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.
import { PermissionFlags } from "bloumechat";
PermissionFlags.MANAGE_SERVER; // 1n << 0n
PermissionFlags.BAN_MEMBERS; // 1n << 7n
PermissionFlags.ADMINISTRATOR; // 1n << 31n — bypasse toutes les vérificationsconst { PermissionFlags } = require("bloumechat");
PermissionFlags.MANAGE_SERVER; // 1n << 0n
PermissionFlags.BAN_MEMBERS; // 1n << 7n
PermissionFlags.ADMINISTRATOR; // 1n << 31n — bypasse toutes les vérificationsPermissionFlag (type)
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 :
import { PermissionFlag, Member } from "bloumechat";
function requirePermission(member: Member, flag: PermissionFlag) {
if (!member.hasPermission(flag)) throw new Error("Permission refusée");
}function requirePermission(member, flag) {
if (!member.hasPermission(flag)) throw new Error("Permission refusée");
}DEFAULT_PERMISSIONS
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.
import { DEFAULT_PERMISSIONS, PermissionFlags } from "bloumechat";
const hasDefaultOnly = (DEFAULT_PERMISSIONS & PermissionFlags.MANAGE_ROLES) === 0n; // trueconst { DEFAULT_PERMISSIONS, PermissionFlags } = require("bloumechat");
const hasDefaultOnly = (DEFAULT_PERMISSIONS & PermissionFlags.MANAGE_ROLES) === 0n; // trueALL_PERMISSIONS
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).
import { ALL_PERMISSIONS } from "bloumechat";
await guild.roles.create({
name: "Super Admin",
permissions: ALL_PERMISSIONS,
});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ération | Syntaxe | Usage |
|---|---|---|
| Combiner plusieurs flags | A | B | C | Construire un ensemble de permissions (ex. pour roles.create()). |
| Tester la présence d'un flag | (perms & FLAG) !== 0n | Vérifier qu'une permission précise est accordée. |
| Retirer un flag | perms & ~FLAG | Révoquer une permission d'un ensemble existant. |
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;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.
await guild.roles.create({
name: "Modérateur",
color: "#5e72e4",
permissions: modPerms,
hoist: true,
});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()etpermissions. - Role — expose le champ
permissionsde chaque rôle. - RoleManager —
create()accepte un bitmaskpermissions.
