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();
async function getMemberPerms(message) {
const guild = await message.resolveGuild();
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 = await message.resolveGuild();
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 info-bot for a !setnick command.
const guild = await message.resolveGuild();
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?.isGuild()) {
const perms = member.permissionsIn(channel);
if (perms.has(PermissionFlags.SendMessages) && channel.isTextBased()) {
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(). Create accepts name, color, and permissions only. Use resolvePermissionsToBitfield() for permission bitfields. See the Roles guide for full examples. Channel overwrites: Channels.
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(', ')}`);