Start by creating your roles in Server Settings > Roles, then drag Carl-bot's own role above all of them. Next, build the reaction-role message on the Carl-bot dashboard at carl.gg or with its reaction-role slash command in Discord. Then pick a mode (unique if members should hold only one role from the message, verify if the role should stay after they remove the reaction) and choose emoji or buttons. When reaction roles do nothing, the cause is usually role order, not Carl-bot.
Checked on each bot's own site or docs on 3 November 2026. We make PeakBot. Nobody paid to be in this post.
This guide is for first-time setup. If you already have a message and it has stopped working, see Reaction Roles Not Working? Carl-bot and Other Bot Fixes instead.
Before you start
You need:
- The Manage Roles permission on the server, or to be the owner. Discord only lets you create, edit and reorder roles below your own highest role, and you can only turn on permissions you have yourself.
- Carl-bot invited to the server. The invite link is on carl.gg.
- A channel for the message, for example
#rolesor#pick-your-roles.
Part 1: Set up the roles in Discord
This part happens in Discord, and it's the same whichever bot you use.
- Open the role settings. On desktop, right-click the server name, choose Server Settings, then Roles. On mobile, tap the server name, tap Settings, then Roles. Discord's permissions guide goes through the same menus.
- Create each role. Click Create Role (on mobile, tap the +), give the role a name and a colour, and save. Roles that members pick for themselves, like pronouns, regions or game pings, normally don't need any permissions. Leave them all off.
- Move Carl-bot's role above the roles it will give out. Drag Carl-bot's role up the Roles list until it's higher than every role on your reaction-role message. A bot can only give roles below its own highest role (Discord developer docs). New roles land at the bottom of the list, just above @everyone, so a bot you've just invited usually starts too low. Giving the bot Administrator won't fix this, because role position still decides which roles it can give.
- Check the channel permissions. In the roles channel, Carl-bot needs View Channel, Send Messages, Embed Links and Add Reactions. If the channel has permission overrides, open its settings, go to Permissions, and make sure none of them deny these to Carl-bot.
- Optional: stop members adding new reactions. Turn off Add Reactions for @everyone in that channel. Members can still click reactions already on the message, but they can't pile on stray emoji that do nothing. This works the same for any bot.
For more on role hierarchy, see How to Set Up Discord Roles & Permissions the Right Way.
Part 2: Build the message on the Carl-bot dashboard
The dashboard is easier if you want to see the message before it goes live.
- Go to carl.gg, log in with Discord and pick your server.
- Find the reaction-role section in the dashboard's menu. We don't quote its exact label here. The well-known walkthroughs of this menu date from 2022, and the dashboard may have changed since.
- Start a new reaction-role message and choose the channel from Part 1.
- Write the title and description. Say what each option gives, for example "🎮 Game night pings".
- Add each emoji and the role it should give.
- Choose the mode (explained below), then save or post.
- Test it with a non-admin account. Admin accounts can hide permission problems.
If a screen doesn't match these steps, check Carl-bot's own docs, linked from carl.gg. They'll be more current than any third-party screenshot.
Part 3: Or build it with a command in Discord
Lots of guides still show the old prefix wizard, !rr make. Several recent pages say Carl-bot has moved to slash commands, and on many servers the prefix version no longer responds. Here's how to see what your server supports right now:
- In any channel, type
/and pick Carl-bot in the command picker. - Find its reaction-role command (search for "reaction" or "rr") and run it.
- Answer the prompts: the channel, the message text, then each emoji and role pair.
- Finish the wizard, then react on the posted message to test it.
If a command you copied from a guide does nothing, the guide is probably out of date. Go by the commands in the / picker or Carl-bot's docs, not an old screenshot.
Choosing a mode: unique, verify and the rest
The mode decides what happens when someone reacts or removes their reaction. Most servers only need these two:
- Unique: a member can hold only one role from this message, so picking a new option swaps out the old role. Use it for colour roles, regions, or "pick your team".
- Verify: reacting gives the role, and removing the reaction does not take it away. Use it for a "click to accept the rules" message, so members can't undo it by accident.
Carl-bot has other modes too, for example ones that only remove roles or that flip the usual behaviour. Its docs on carl.gg list them all and explain each one. With no special mode, reaction roles usually work as a toggle: react to get the role, remove the reaction to lose it.
To give members two separate one-of choices, like a colour and a region, make two messages, each in unique mode. One unique message with every role on it would only let people keep one role in total.
Buttons or emoji?
Both appear on the message, but Discord handles them differently:
| Emoji reactions | Buttons | |
|---|---|---|
| How it looks | Small emoji under the message, with a count | Buttons with text labels |
| Clarity | Members have to match each emoji to your description | The label says what the role is |
| Clutter | Members can add stray reactions unless you turn off Add Reactions | No stray reactions |
| Feedback | No confirmation unless the bot sends one | The bot can reply privately with a confirmation |
| If the bot is offline | Reactions still get added, but nobody gets a role | Discord shows that the interaction failed |
| Custom emoji | The bot must be in the server the emoji comes from | A text label works, an emoji is optional |
Emoji suit a short, playful list where the counts are fun to see. Buttons are better for long lists, rules acceptance, or anywhere the meaning has to be clear. If the Carl-bot dashboard or wizard offers buttons for the message you're building, use them where they fit. There's a longer comparison in How to Set Up Reaction Roles in Discord (Emoji vs Buttons, No Coding).
If you also want every new member to get a role on joining, that's a different Carl-bot feature, covered in How to Set Up Auto Roles in Carl-bot.
How PeakBot does it
We make PeakBot, so read this section knowing that. If Carl-bot already works on your server, there's no need to switch.
In PeakBot, all role automation lives on the Roles page of the dashboard at peakbot.pro: self-assign roles, auto roles on join, and if/then rules. For a "click to get in" gate, the Verification page builds a panel with a button, optional questions, unverified and verified roles, and an auto-kick for anyone who never verifies. Both are set up on the dashboard, not by a command, and the dashboard shows the result before you post it. All of this is on the Free plan, which has no time limit.
Role order matters here too: PeakBot's role has to sit above the roles it gives, just as in Part 1. You can see everything else it does on the features page.
Frequently Asked Questions
Why isn't Carl-bot giving roles when people react?
Usually Carl-bot's role sits below the role it's trying to give. Drag it higher in Server Settings > Roles. Then check that the channel doesn't deny Carl-bot View Channel or Add Reactions, and that the bot is online. The full checklist is in Reaction Roles Not Working?.
Does !rr make still work?
On many servers it doesn't, and recent guides point to Carl-bot's slash commands instead. Type /, pick Carl-bot, and use the reaction-role command it lists. Or skip commands and use the dashboard at carl.gg.
How do I make members pick only one role?
Put that message in unique mode, and only include roles that should rule each other out, for example all your colour roles. For a second one-of choice, make a second message.
Why does my reaction disappear after I click it?
Some modes remove your reaction once the role is handled, so check which mode the message uses. If it shouldn't do that, Carl-bot may be failing to give the role. Check role order and channel permissions.
How do I get the message ID for Carl-bot?
Turn on Developer Mode in Discord: User Settings > Advanced > Developer Mode. Then right-click the message (long-press on mobile) and choose Copy Message ID. You need it when adding reaction roles to a message that already exists.
Can members pick roles that have strong permissions?
Yes. Anyone who can see the message can take any role listed on it, whatever permissions they already have. Never put a role with moderator or admin permissions on a reaction-role message.
