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.

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

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

javascript
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

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

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

javascript
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

javascript
import { resolvePermissionsToBitfield, PermissionFlags } from '@fluxerjs/core';

resolvePermissionsToBitfield('SendMessages');
resolvePermissionsToBitfield(['SendMessages', 'ViewChannel', 'ReadMessageHistory']);
resolvePermissionsToBitfield(PermissionFlags.BanMembers);

See Permissions for member.permissions / permissionsIn. Channel overwrites: Channels.

Questions?Join the Fluxer community for help with the SDK.Join Fluxer