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.

javascript
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.

javascript
// 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.

javascript
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.

javascript
// 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 owner

Channel-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.

javascript
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.

javascript
// 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.

javascript
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(', ')}`);