Permissions
Check member permissions (guild-level and channel-specific), bot permissions via guild.members.me, owner override, and PermissionFlags.
Overview
Use member.permissions for guild-level checks (roles only) and member.permissionsIn(channel) for channel-specific permissions (includes overwrites). The server owner always has all permissions.
Guild-level permissions
member.permissions returns an object with has(permission). Use it for server-wide actions like ban, kick, manage roles.
import { Client, Events, PermissionFlags } from '@fluxerjs/core';
const client = new Client({ intents: 0 });
async function getMemberPerms(message) {
const guild = message.guild ?? await message.client.guilds.resolve(message.guildId);
if (!guild) return null;
const member = guild.members.get(message.author.id) ?? await guild.fetchMember(message.author.id);
return member?.permissions ?? null;
}
client.on(Events.MessageCreate, async (message) => {
const perms = await getMemberPerms(message);
if (!perms) return;
if (perms.has(PermissionFlags.BanMembers)) {
await message.reply('You can ban members.');
}
if (perms.has(PermissionFlags.Administrator)) {
await message.reply('You have Administrator.');
}
});
await client.login(process.env.FLUXER_BOT_TOKEN);Bot's own permissions (guild.members.me)
Use guild.members.me to get the bot's GuildMember. Returns null if not cached. Use guild.members.fetchMe() to load it.
// Check if the bot can ban members in this guild
const guild = message.guild ?? await message.client.guilds.resolve(message.guildId);
const me = guild?.members.me ?? (guild ? await guild.members.fetchMe() : null);
if (me?.permissions.has(PermissionFlags.BanMembers)) {
await message.reply('I have Ban Members permission.');
}Editing the bot's guild profile (nickname)
Use guild.members.me.edit({ nick }) to change the bot's nickname in that guild. Pass nick: null to clear and show the username. Requires Change Nickname permission (or bot has Manage Nicknames). See ping-bot for a !setnick command.
const guild = message.guild ?? await client.guilds.resolve(message.guildId);
const me = guild?.members.me ?? (guild ? await guild.members.fetchMe() : null);
if (me) {
await me.edit({ nick: 'My Custom Nick' });
await message.reply('Nickname updated!');
}
// Clear nickname (show username)
await me.edit({ nick: null });Owner override
The guild owner automatically receives all permissions regardless of roles. No need to give the owner a role with Administrator.
// When the message author is the server owner:
const perms = member.permissions;
perms.has(PermissionFlags.BanMembers); // true
perms.has(PermissionFlags.ManageRoles); // true
perms.has(PermissionFlags.Administrator); // true
// ... all permission flags return true for the ownerChannel-specific permissions
member.permissionsIn(channel) applies channel overwrites. Use it when checking if a user can send messages, read history, or connect to voice in a specific channel.
const channel = message.channel;
if (channel?.canSendMessage?.()) {
const perms = member.permissionsIn(channel);
if (perms.has(PermissionFlags.SendMessages)) {
await channel.send('You can send here!');
}
}Managing roles
Create, fetch, edit, and delete roles with guild.createRole(), guild.fetchRoles(), guild.fetchRole(roleId), role.edit(), and role.delete(). Use resolvePermissionsToBitfield() for permission bitfields. See the Roles guide for full examples.
// Create a role with specific permissions
const role = await guild.createRole({
name: 'Mod',
permissions: ['KickMembers', 'BanMembers', 'ManageMessages'],
});
// Add/remove roles from members
const member = await guild.fetchMember(userId);
await member.roles.add(roleId);
await member.roles.remove(roleId);PermissionFlags reference
Common flags: BanMembers, KickMembers, Administrator, ManageRoles, ManageChannels, ManageGuild, ViewAuditLog, ManageMessages, SendMessages, EmbedLinks, AttachFiles, ReadMessageHistory, MentionEveryone, Connect, Speak, MuteMembers, ModerateMembers, CreateExpressions, PinMessages, BypassSlowmode.
import { PermissionFlags } from '@fluxerjs/core';
// Check multiple
const canModerate = perms.has(PermissionFlags.BanMembers) || perms.has(PermissionFlags.Administrator);
// List all permissions the user has
const names = Object.keys(PermissionFlags).filter((name) =>
perms.has(PermissionFlags[name])
);
await message.reply(`Your permissions: ${names.join(', ')}`);