roles.

handing out roles by hand, by button, and in bulk.

giving one member a role

use the toggle when the desired result depends on the member’s current state, or use the explicit add and remove forms when a script or staff procedure should always mean one thing. all three require manage roles. havoc records changes as moderation cases and refuses a role it cannot safely manage.

giving one member a role commands
commandwhat it doesneeds
/role <member> <role>toggle the role on or off for one membermanage roles
/role add <member> <role>assign the role; alias: role givemanage roles
/role remove <member> <role>remove the role; alias: role takemanage roles
/role restore <member>restore the manageable role snapshot saved when the member leftmanage roles
,role add @river "Event Team"
,role @river Announcements
/role remove member: @river role: Announcements

quote a role name containing spaces in prefix commands. role restore skips roles that were deleted, became managed, or moved above havoc; its summary reports restored and skipped counts.

warningdiscord hierarchy still decides

the staff member and havoc both need authority over the target. havoc’s highest role must sit above the role being assigned and above the member being changed. integration-managed roles cannot be assigned, edited, or deleted by a bot, even when the command runner has administrator.

temporary and persistent member roles

a temporary role has a saved expiry, survives a restart, and follows the member if they leave and return before it expires. durations accept havoc’s normal duration text and are capped at one year. listing the records is useful before extending or replacing a grant.

temporary and persistent member roles commands
commandwhat it doesneeds
/temprole <member> <duration> <role>grant a role until the saved expirymanage roles
/temprole listlist members, roles, and relative expiry timesmanage roles
/stickyrole add <member> <role>grant and keep restoring one member’s roleserver owner
/stickyrole remove <member> <role>stop restoring it; the member keeps the current roleserver owner
/stickyrole / stickyrole listlist all sticky member-role pairsserver owner

the same member-role pair cannot be both temporary and sticky. remove the sticky configuration before removing that role manually. adding a normal permanent role also clears an existing temporary expiry for that pair, preventing a later scheduled job from taking the permanent grant away.

changing many members

bulk jobs cover humans, bots, or everyone who already has a source role. each add form has a matching remove form. these commands require both manage roles and manage server.

changing many members commands
commandwhat it doesneeds
/role humans <role> [--no-roles] [--joined-today]grant a role to matching human membersmanage roles + manage server
/role humans remove <role> [--no-roles] [--joined-today]remove it from matching humansmanage roles + manage server
/role bots <role> [--no-roles] [--joined-today]grant a role to matching bot accountsmanage roles + manage server
/role bots remove <role> [--no-roles] [--joined-today]remove it from matching botsmanage roles + manage server
/role has <source role> <assign role>grant a role to everyone with the source rolemanage roles + manage server
/role has remove <source role> <assign role>remove the assigned role from that groupmanage roles + manage server
/role cancelrequest cancellation of the running bulk role jobmanage roles + manage server
::--no-roles
only include accounts whose only role is @everyone.
::--joined-today
only include accounts that joined during the last 24 hours.
warningbulk work is deliberately paced

havoc fetches the complete member list, rechecks staff permissions and hierarchy for every account, writes each successful case, and pauses between changes to respect discord’s rate limits. large servers therefore take time. only one role bulk job runs per server. cancellation does not roll back members already changed.

creating and editing roles

created roles start with no permissions. that makes role create suitable for labels and self-assignable groups without silently creating staff access. colors are hexadecimal values such as #5865f2.

creating and editing roles commands
commandwhat it doesneeds
/role create <hex color> <name>create a permissionless rolemanage roles
/role edit <role> <name>rename a role; alias: role renamemanage roles
/role color <hex color> <role>set its solid color; alias: role colourmanage roles
/role color gradient <hex color> <second hex color> <role>set enhanced role colors where the server supports themmanage roles
/role topcolor <hex color> <member>change the color of that member’s highest rolemanage roles
/role icon <url> <role>set an icon downloaded from discord’s cdnmanage roles
/role hoist <role>toggle separate display in the member listmanage roles
/role mentionable <role>toggle whether anyone can mention the rolemanage roles
/role delete <role>permanently delete a rolemanage roles

gradient colors and role icons depend on server features. icons must be a png, jpeg, or webp from discord’s cdn and no larger than 256 kib. toggles use the role’s current value, so check the role after running them if another administrator may be editing it at the same time.

roles on join

autoroles apply to every new member. sticky roles are different: they remember a role for one particular member and restore it after removal or rejoin. autoroles reject privileged roles, including roles whose channel overwrites grant moderation powers.

roles on join commands
commandwhat it doesneeds
/autorole / autorole listshow configured join rolesmanage roles + manage server
/autorole add <role>add a role to the join setmanage roles + manage server
/autorole remove <role>remove one role from the join setmanage roles + manage server
/autorole resetclear the entire autorole configurationmanage roles + manage server

changing autorole configuration affects future joins; it does not backfill existing members. use an appropriate bulk command when existing accounts should receive the same role.

button role panels

  1. 01

    create a bot-owned panel

    run ,buttonrole setup in the destination channel and copy the returned message link.

  2. 02

    attach each role

    use ,buttonrole add <message link> <role> <style> <emoji or none> <label>.

  3. 03

    inspect before removing

    run ,buttonrole list; removal uses the displayed one-based index.

,buttonrole setup
,buttonrole add https://discord.com/channels/123/456/789 Announcements primary none "Announcements"
,buttonrole list
,buttonrole remove https://discord.com/channels/123/456/789 1
button role panels commands
commandwhat it doesneeds
/buttonrole / buttonrole listlist panel links, indexes, and assigned rolesmanage roles + manage server
/buttonrole setuppost a dedicated havoc-owned panelmanage roles + manage server
/buttonrole add <message link> <role> <style> <emoji or none> <label>add one persistent button; styles: primary, secondary, success, dangermanage roles + manage server
/buttonrole remove <message link> <index>remove one indexed buttonmanage roles + manage server
/buttonrole removeall <message link>remove every button from one panelmanage roles + manage server
/buttonrole resetremove configured buttons across all panelsmanage roles + manage server

one panel supports at most 25 buttons and cannot mix havoc role buttons with unrelated components. buttons return after a bot restart because their configuration is persistent.

reaction role panels

reaction roles can use the message made by reactionrole setup or another readable message. adding the reaction grants the role and removing it takes the role away. a message supports at most 20 configured reaction roles.

reaction role panels commands
commandwhat it doesneeds
/reactionrole / reactionrole listlist message links, reactions, and rolesmanage roles + manage server
/reactionrole setuppost a new reaction panel messagemanage roles + manage server
/reactionrole add <message link> <reaction> <role>map one reaction to one rolemanage roles + manage server
/reactionrole remove <message link> <reaction>remove one mappingmanage roles + manage server
/reactionrole removeall <message link>remove all mappings from one messagemanage roles + manage server
/reactionrole restore <all|reactions|roles>replace bot reactions, grant roles to existing reactors, or do bothmanage roles + manage server
/reactionrole resetclear all mappings without changing member roles or existing reactionsmanage roles + manage server
dangerreset is configuration deletion

reactionrole reset leaves current roles and reactions in place but forgets every mapping. removing a mapping also leaves member roles unchanged. use reactionrole restore roles only when existing reactors should be granted configured roles; on a large panel it is paced and can take time.