Self roles & reactions π
Let members pick their own roles by reacting, and have BMO react to messages for you.
This module covers three related tools. All three run on reactions, but they solve different problems:
| Tool | What it does | Typical use |
|---|---|---|
| Self-role panels | BMO posts a tidy embed listing emoji β role pairs; members react to grab a role. | Color roles, pronouns, ping/notification roles, age groups. |
| Custom reaction roles | Attach a role to any existing message β one emoji, one role. | "React β under the rules to get access." |
| Auto-reactions | BMO automatically reacts to messages that match a filter. | β every art post with an attachment, π/π on suggestions. |
Self-role panels
A panel is a message BMO posts and maintains in a channel you choose. It shows a title, an optional description, and a list of options β each option is a custom emoji paired with a role (plus an optional short label like "for event pings"). BMO pre-adds the emoji as reactions, so members just click one:
- React β BMO gives them the role.
- Remove the reaction β BMO takes the role away.
Members manage their own roles this way, and nobody has to ping a moderator for a color change.
Building panels in the dashboard
Open your server in the dashboard and go to the Self roles page:
- Pick the panel channel β the text channel where all your panels get posted
(something like
#pick-your-roles). - Create a panel β give it a title (up to 80 characters) and an optional description (up to 500 characters) that appears above the options.
- Add rows β each row is one custom emoji plus the role it grants, with an optional label shown next to the role in the embed. The dashboard's emoji and role pickers do the matching for you; each emoji can only be used once per panel.
- Choose exclusive or not β see below. New panels are exclusive by default.
- Save and post β BMO posts each panel as its own message in the panel channel and adds the reactions.
You can make as many panels as you like β one for colors, one for pings, one for pronouns β and each one becomes a separate message in the panel channel.
Panel rows use custom emoji (the ones uploaded to a server), not standard Unicode emoji like π΄. Upload an emoji set to your server first if you don't have one β free servers get plenty of emoji slots. Standard emoji do work in custom reaction roles and auto-reactions below.Exclusive mode: pick one, or collect many?
Each panel has an exclusive toggle:
- Exclusive on (the default) β members can hold one role from that panel at a time. When they pick a new option, BMO removes their previous role from the same panel and clears their old reaction, so the message always reflects their current choice. Perfect for colors or age groups, where holding two makes no sense.
- Exclusive off β members can stack as many roles from the panel as they want. Right for notification roles: someone can opt into event pings and giveaway pings.
Updating a panel later
Panels are living messages. When you edit a panel in the dashboard β rename it, add a row, swap an emoji, remove an option β saving updates the existing Discord message in place: the embed is re-edited and BMO's reactions are synced, removing emoji you dropped and adding ones you added. No reposting, and members keep the roles they already have.
Don't delete a panel message in Discord by hand. The dashboard tracks each panel by its message, and a deleted message can't be edited β you'll see an error like "message deleted or no access" when saving. Remove or recreate the panel from the dashboard instead.Worked example: a color-roles panel
Say you want members to pick a name color. Ten minutes, start to finish:
- In Server Settings β Roles, create the color roles β Red, Blue, Green, Purple β each with its display color. Make sure they all sit below BMO's role.
- Upload matching custom emoji (a red heart, a blue circle β whatever fits your server's style) in Server Settings β Emoji, if you don't have suitable ones already.
- In the dashboard's Self roles page, set the panel channel to
#pick-your-roles. - Create a panel titled "Name colors" with the description "React to pick your name color β pick a new one any time."
- Add four rows: red emoji β Red, blue emoji β Blue, green emoji β Green, purple emoji β Purple.
- Leave exclusive on β one color at a time.
- Save. BMO posts the panel in
#pick-your-roleswith all four reactions ready to click.
A member taps the red emoji and turns red. Next week they tap blue β BMO swaps the role and clears their red reaction automatically.
Command alternative: the classic setup
Before custom panels existed, BMO shipped a fixed three-panel starter set, and it still works if you want roles up fast without opening the dashboard:
| Command | What it does |
|---|---|
!selfrole setup #channel | Creates a standard set of roles if missing (six colors, 18-/18+, Female/Male), then posts three panels β Age, Gender, and Colors β with reactions in the channel you name. |
/selfroleemoji list | Shows which emoji the classic panels use for each option. |
/selfroleemoji set key:<key> emoji:<emoji or ID> | Swaps one classic option's emoji for a custom emoji of yours (e.g. key color_red). |
/selfroleemoji reset [key] | Resets one key β or all of them β back to the default emoji. |
All of these need the Manage Server permission.
The classic set is opinionated β fixed panels, preset role names. Once you create your own panels in the dashboard, they take over completely, and that's the recommended path: you choose the titles, roles, emoji, and exclusivity yourself.Custom reaction roles (any message)
Sometimes you don't want a whole panel β you want a role tied to a message that already exists. The classic case: members must react β under your rules message to unlock the rest of the server.
A custom reaction-role rule is just four pieces: a channel, a message ID, an emoji, and the role to grant. When someone adds that emoji to that exact message, they get the role; removing the reaction removes the role. These rules are managed on the dashboard's Self roles page, and unlike panel rows, the emoji here can be a standard emoji (β , π) or a custom one.
To get a message ID: turn on Developer Mode in Discord (User Settings β Advanced), then right-click the message β Copy Message ID. Paste that into the rule along with the channel the message lives in.
BMO doesn't add the reaction to the message for you with these rules β add the emoji yourself once so members have something to click, and make sure the channel and message ID in the rule match exactly. A rule pointing at the wrong channel silently does nothing.Auto-reactions
Auto-reactions flip the direction: instead of members reacting to BMO, BMO reacts to
members. You define rules like "star every message with an attachment in
#art" or "add π and π to everything in #suggestions", and BMO handles it
instantly, around the clock. Great for showcase channels, voting channels, and starboard-style
workflows.
Each rule has three parts:
- Scope β one text channel, or the whole server (every text channel).
- Filter β which messages trigger the reaction (see the table below).
- Emoji β standard or custom; one emoji per rule. Want π and π? Make two rules.
| Filter | BMO reacts when the message⦠|
|---|---|
all | β¦is any message at all in the rule's scope. |
attachments | β¦has a file attached (images, videos, any upload). |
embeds | β¦contains an embed. |
links | β¦contains an http:// or https:// link. |
stickers | β¦includes a sticker. |
Messages from bots are ignored by default, so BMO won't react to other bots' log spam (or to itself). You can have up to 40 rules per server.
Managing auto-reaction rules
Set rules up on the dashboard's Self roles page, or use the
/autoreact command right in Discord (both need Manage Server):
| Command | What it does |
|---|---|
/autoreact add <filter> <emoji> [channel] | Adds a rule for one text channel. Leave the channel blank to use the channel you're typing in. |
/autoreact addserver <filter> <emoji> | Same, but applies to every text channel in the server. |
/autoreact list | Lists all rules with their numbers. |
/autoreact remove <number> | Deletes one rule by its number from list. |
/autoreact clear | Deletes all auto-reaction rules at once. |
Example: to star every art post, type this in #art:
/autoreact add filter_mode:attachments emoji:β
all rules mean BMO reacts to every single message
everywhere β that's a lot of reactions and it gets noisy fast. Prefer per-channel rules with a specific
filter unless you truly want the firehose.
Troubleshooting
- Members react but get no role β BMO's role is probably below the role it's trying to give. Drag BMO's role higher in Server Settings β Roles.
- A panel row shows "(missing role)" β the role was deleted after you built the panel. Edit the panel in the dashboard and point that row at an existing role.
- An emoji won't add as a reaction β BMO can only react with custom emoji from a server it's in. Use emoji uploaded to your server.
- A custom reaction-role rule does nothing β double-check the channel and message ID match the actual message, and that the emoji in the rule is exactly the one being clicked.
- Saving a panel fails β make sure a panel channel is chosen, that BMO can see it, and that the panel message hasn't been deleted in Discord.