Appearance
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 '@erinjs/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.ERIN_BOT_TOKEN);Bot's own permissions (guild.members.me)
Discord.js Compatible
See API reference for full details.
Use guild.members.me to get the bot's GuildMember. Returns null if not cached. Use guild.members.fetchMe() to load it. Discord.js parity.
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 examples/ping-bot.js 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 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.
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
await guild.addRoleToMember(userId, roleId);
await guild.removeRoleFromMember(userId, 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 '@erinjs/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(', ')}`);