Roles
Create, fetch, edit, and delete guild roles. Create accepts name, color, and permissions only.
Guild roles: guild.createRole(), guild.fetchRoles(), guild.fetchRole(roleId), role.edit(), role.delete(). Requires Manage Roles.
Create a role
Create accepts name, color, and permissions only. Set hoist / mentionable with role.edit after create. Position changes use guild.setRolePositions.
import { Client, Events } from '@fluxerjs/core';
const client = new Client();
client.on(Events.MessageCreate, async (message) => {
if (message.content === '!createrole' && message.guildId) {
const guild = await message.resolveGuild();
if (!guild) return;
const role = await guild.createRole({
name: 'Moderator',
permissions: ['BanMembers', 'KickMembers', 'ManageMessages'],
color: 0x5865f2,
});
await role.edit({ hoist: true, mentionable: false });
await message.reply(`Created role ${role.name} (${role.id})`);
}
});
await client.login(process.env.FLUXER_BOT_TOKEN);Permissions accept PermissionResolvable (string, number, array, PermissionFlags).
Fetch roles
guild.fetchRoles() loads all roles into guild.roles. guild.fetchRole(roleId) loads one. Throws FluxerError with ROLE_NOT_FOUND on 404.
const roles = await guild.fetchRoles();
const role = guild.roles.get(roleId) ?? (await guild.fetchRole(roleId));
console.log(role.name, role.color);Edit a role
Edit accepts name, color, permissions, hoist, mentionable, and hoistPosition. unicodeEmoji is read-only on Role.
const role = guild.roles.get(roleId) ?? (await guild.fetchRole(roleId));
await role.edit({
name: 'Senior Mod',
permissions: ['BanMembers', 'KickMembers', 'ManageMessages', 'ManageRoles'],
color: 0x57f287,
hoist: true,
});Delete a role
const role = guild.roles.get(roleId) ?? (await guild.fetchRole(roleId));
await role.delete();
await message.reply('Role deleted.');Check role permissions
role.has(permission): Administrator implies all permissions.
import { PermissionFlags } from '@fluxerjs/core';
if (role.has(PermissionFlags.BanMembers)) {
await message.reply('This role can ban members.');
}
if (role.has('ManageChannels')) {
await message.reply('This role can manage channels.');
}Add/remove roles from members
Use member.roles.add(), member.roles.remove(), and member.roles.set(). member.roles.cache is a Collection of Role objects. Resolve or fetch the member first when you only have a user ID.
const member = await guild.members.resolve(userId);
await member.roles.add(roleId);
await member.roles.remove(roleId);
await member.roles.set(['id1', 'id2']);
if (member.roles.cache.has(roleId)) {
await message.reply('Member already has this role.');
}Permission bitfields for create/edit
import { resolvePermissionsToBitfield, PermissionFlags } from '@fluxerjs/core';
resolvePermissionsToBitfield('SendMessages');
resolvePermissionsToBitfield(['SendMessages', 'ViewChannel', 'ReadMessageHistory']);
resolvePermissionsToBitfield(PermissionFlags.BanMembers);See Permissions for member.permissions / permissionsIn. Channel overwrites: Channels.