Skip to main content
Three ways to do the same thing. Buttons are the modern default; dropdowns are best when there are a lot of options; reactions are the classic approach and still work fine. All require Manage Roles, and mira’s role must sit above every role being handed out.
1

Post the message first

Whatever the members will click on. Use !embed if you want it to look designed:
2

Attach roles to it

Every command below takes that message — as a link, an ID, or a reply.

Button roles

The best default. Clear, mobile-friendly, and clicking toggles the role.
Arguments after the role are optional and positional: style, emoji, label. If a message gets edited by something else and loses its buttons:
Aliases: buttonroles, btr. render aliases: refresh, sync. Better past about five roles — one compact menu instead of a wall of buttons.
Members can select multiple options, and deselecting removes the role. Aliases: dropdownroles, selectrole, dropdown, dd.
Discord caps a dropdown at 25 options. Past that, use a second message.

Reaction roles

Aliases: reactionroles, rr.

Limiting picks

Caps how many roles a member can take from that message. Set to 1 for mutually exclusive choices — picking a new one removes the old.

Inverting

Reacting removes the role instead of granting it. Useful for opt-outs: “react to stop being pinged for events”.

Fixing desyncs

Discord occasionally drops reaction events during outages, leaving people with a reaction but no role. This walks the reactions and fixes every mismatch. Aliases: fix, refresh.

Which should I use?

Buttons. One click, visible without interacting, works well on mobile.
Dropdown. Keeps the message short and supports per-option descriptions, which matters when the role names aren’t self-explanatory.
Multiple messages, one per category — colours, pings, games. A dropdown each, or buttons if each category is small.
Reactions. Some people prefer how they look, and they’re the only option that works on very old messages you can’t edit. They’re also the least reliable — reaction events get dropped, which is what reactionrole sync exists for.
Nothing stops you mixing them. Buttons and a dropdown on the same message both work — dropdownrole render re-applies the dropdown and any button roles on that message.

A worked example

Command reference