discord-permission
Version:
A Discord permissions calculator
97 lines (91 loc) • 2.21 kB
text/typescript
export type Permissions =
| "CREATE_INSTANT_INVITE"
| "KICK_MEMBERS"
| "BAN_MEMBERS"
| "ADMINISTRATOR"
| "MANAGE_CHANNELS"
| "MANAGE_GUILD"
| "ADD_REACTIONS"
| "VIEW_AUDIT_LOG"
| "PRIORITY_SPEAKER"
| "STREAM"
| "VIEW_CHANNEL"
| "SEND_MESSAGES"
| "SEND_TTS_MESSAGES"
| "MANAGE_MESSAGES"
| "EMBED_LINKS"
| "ATTACH_FILES"
| "READ_MESSAGE_HISTORY"
| "MENTION_EVERYONE"
| "USE_EXTERNAL_EMOJIS"
| "VIEW_GUILD_INSIGHTS"
| "CONNECT"
| "SPEAK"
| "MUTE_MEMBERS"
| "DEAFEN_MEMBERS"
| "MOVE_MEMBERS"
| "USE_VAD"
| "CHANGE_NICKNAME"
| "MANAGE_NICKNAMES"
| "MANAGE_ROLES"
| "MANAGE_WEBHOOKS"
| "MANAGE_EMOJIS_AND_STICKERS"
| "USE_APPLICATION_COMMANDS"
| "REQUEST_TO_SPEAK"
| "MANAGE_EVENTS"
| "MANAGE_THREADS"
| "CREATE_PUBLIC_THREADS"
| "CREATE_PRIVATE_THREADS"
| "USE_EXTERNAL_STICKERS"
| "SEND_MESSAGES_IN_THREADS"
| "USE_EMBEDDED_ACTIVITIES"
| "MODERATE_MEMBERS";
enum Bitfields {
"CREATE_INSTANT_INVITE" = 0,
"KICK_MEMBERS",
"BAN_MEMBERS",
"ADMINISTRATOR",
"MANAGE_CHANNELS",
"MANAGE_GUILD",
"ADD_REACTIONS",
"VIEW_AUDIT_LOG",
"PRIORITY_SPEAKER",
"STREAM",
"VIEW_CHANNEL",
"SEND_MESSAGES",
"SEND_TTS_MESSAGES",
"MANAGE_MESSAGES",
"EMBED_LINKS",
"ATTACH_FILES",
"READ_MESSAGE_HISTORY",
"MENTION_EVERYONE",
"USE_EXTERNAL_EMOJIS",
"VIEW_GUILD_INSIGHTS",
"CONNECT",
"SPEAK",
"MUTE_MEMBERS",
"DEAFEN_MEMBERS",
"MOVE_MEMBERS",
"USE_VAD",
"CHANGE_NICKNAME",
"MANAGE_NICKNAMES",
"MANAGE_ROLES",
"MANAGE_WEBHOOKS",
"MANAGE_EMOJIS_AND_STICKERS",
"USE_APPLICATION_COMMANDS",
"REQUEST_TO_SPEAK",
"MANAGE_EVENTS",
"MANAGE_THREADS",
"CREATE_PUBLIC_THREADS",
"CREATE_PRIVATE_THREADS",
"USE_EXTERNAL_STICKERS",
"SEND_MESSAGES_IN_THREADS",
"USE_EMBEDDED_ACTIVITIES",
"MODERATE_MEMBERS",
}
export function calculate(permission: Permissions, bitfield: number) {
const permissionBitfield = Bitfields[permission];
if (!permissionBitfield) throw Error(`Invalid permission (${permission})`);
const flag = 1 << permissionBitfield;
return (bitfield & flag) === flag;
}