What reaction roles do and how they work
Reaction roles let members click an emoji on a Discord message to join a group automatically. When someone reacts with an emoji, a bot adds them to the corresponding role — no typing commands, no asking a moderator. It's a self-service system for organizing people by interest, language, game, timezone, or any other category you want.
The process works in three parts: you write a message that explains the groups, you set up a bot to watch that message, and you tell the bot which emoji connects to which role. When a member clicks an emoji, the bot sees the reaction and assigns the role in seconds. If they click the emoji again, the bot removes the role.
Reaction roles are useful because they reduce moderation work and let people change their own group membership without asking permission. They're also visible — members can see which roles exist by looking at the message, and they can see which roles they have in their member profile.
Key Takeaways
- You need a bot that supports reaction roles — Carl-bot and Dyno are the most common, and both are free to add to your server.
- The bot must have permission to manage roles and read message history in the channel where you post the reaction message.
- You create a message describing each group, then tell the bot which emoji pairs with which role using a command or the bot's dashboard.
- Members can join or leave groups by clicking and unclicking the emoji — the bot handles the role assignment automatically.
- Reaction roles only work if the role already exists in your server; the bot does not create new roles for you.
Setting up a bot that handles reaction roles
The two most widely used bots for reaction roles are Carl-bot and Dyno. Both are free, both work the same way, and both have been around long enough that they're unlikely to disappear. Carl-bot is simpler if you prefer typing commands; Dyno has a web dashboard if you prefer clicking buttons.
To add Carl-bot to your server, go to carl.gg, click "Invite", and select your server from the dropdown. Discord will ask you to confirm that you want to give Carl-bot permission to read messages and manage roles. Click "Authorize". The bot will appear in your member list as "Carl-bot" with a checkmark next to its name.
To add Dyno, go to dyno.gg, click "Invite", and follow the same process. You'll see "Dyno" in your member list when it's done.
Both bots need specific permissions to work. Go to your server settings, click "Roles", find the bot's role (it will be named after the bot), and make sure these are turned on: "Manage Roles", "Read Messages/View Channels", and "Read Message History". If these are off, the bot won't be able to assign roles when members react.
Creating the message and assigning emojis to roles
First, create the roles you want members to join. Go to your server settings, click "Roles", and click the plus sign. Name each role — for example, "Python Learners", "Game Nights", "East Coast", or "Notifications". You don't need to give these roles any special permissions; they're just labels that organize your members.
Next, write a message in a channel that explains what each role is for. For example: "React with 🐍 to join Python Learners. React with 🎮 to join Game Nights. React with 🌅 to join East Coast." Post this message and note its ID (right-click the message, click "Copy Message Link", and the last number in the URL is the message ID).
Now tell the bot to watch that message. If you're using Carl-bot, type this command in any channel: !reactrole [message ID] [emoji] [role name]. For example: !reactrole 1234567890 🐍 Python Learners. Repeat this command for each emoji and role pair. Carl-bot will confirm each one with a checkmark.
If you're using Dyno, go to dyno.gg/manage, select your server, click "Modules", find "Reaction Roles", and click the toggle to turn it on. Then click "Reaction Roles" again to open the settings. Paste the message ID, then add each emoji and role name in the form. Click "Save" when you're done.
Permissions the bot needs to work correctly
The bot can only assign roles that are lower in the role hierarchy than its own role. Go to your server settings, click "Roles", and look at the order. The bot's role should be above (higher than) any role you want it to assign. If a role is above the bot's role, the bot can't assign it, and members will get an error when they try to react.
The bot also needs permission to see the channel where the reaction message is posted. If the channel is hidden from certain members, the bot can still assign roles — but members won't be able to see the message to react to it in the first place. Make sure the channel is visible to the people you want to use the reaction roles.
If a member reacts but nothing happens, check three things: Is the bot's role above the target role in the hierarchy? Does the bot have "Manage Roles" permission? Is the emoji the exact one you specified in the command (some emojis look the same but are different characters)? If all three are correct and it still doesn't work, remove the bot and add it again — sometimes permissions get stuck.
What members see and how they use reaction roles
When a member opens the channel with the reaction message, they see your explanation and the emojis below it. They click an emoji to join that group. The bot assigns the role in a few seconds — they'll see it appear in their member profile under "Roles".
If they click the emoji again, the bot removes the role. They can join and leave as many times as they want. There's no limit to how many roles one person can have, so a member can click all the emojis if they want to join every group.
Members can see which roles they have by clicking their own name in the member list and looking at the "Roles" section. They can also see which other members have a role by clicking the role name in the channel member list (if you've set the role to be visible).
Troubleshooting when reactions don't assign roles
If a member reacts with an emoji and the role doesn't appear, the most common cause is that the emoji in the command doesn't match the emoji on the message. Some emojis that look identical are actually different — for example, a custom emoji from one server looks the same as a custom emoji from another server, but they have different codes. Always copy the emoji directly from your server's emoji picker instead of typing it.
Another common issue is that the role doesn't exist. If you deleted a role after setting up the reaction, the bot will try to assign a role that's no longer there and fail silently. Create the role again with the same name, and the bot will work.
If the bot has permission to manage roles but still can't assign them, the bot's role might be below the target role in the hierarchy. Move the bot's role higher in your server settings. The bot's role should be near the top, above most other roles.
If you're still stuck, try removing the bot and adding it again. Sometimes the permission cache gets out of sync. Remove it from "Server Settings" > "Integrations", then re-add it from the bot's website and set up the reaction roles again.
Privacy and safety considerations with reaction roles
Reaction roles are visible to everyone in your server — any member can see which roles exist and which members have them (if the roles are set to visible). If you want a role to be private, go to your server settings, click "Roles", click the role, and turn off "Display role separately from online members". The role will still work, but it won't show up in member profiles.
The bot stores information about which members have which roles, but this data stays on Discord's servers and the bot's servers — it doesn't go anywhere else. Carl-bot and Dyno both have privacy policies that explain what they do with this data. If you're concerned, you can read them at carl.gg/privacy and dyno.gg/privacy.
Reaction roles don't give members any special permissions unless you explicitly set the role to have permissions. A role is just a label until you add permissions to it. So if you create a "Python Learners" role and don't give it any permissions, members who join it can't do anything special — they just have a label next to their name.
Frequently Asked Questions
Can I use reaction roles to give people permission to access channels?
Yes. Create a role, set up the reaction role as described above, then go to that channel's settings and restrict it so only that role can see it. When members react to join the role, they'll automatically gain access to the channel. This is useful for opt-in announcement channels or age-restricted discussion areas.
What happens if I delete a message that has reaction roles set up?
The bot stops watching that message, and members can't react anymore. The roles themselves don't disappear — members who already have them keep them. If you want to set up reaction roles again, create a new message and tell the bot to watch it instead.
Can I use custom emojis for reaction roles?
Yes, but only if the emoji belongs to your server. If you use a custom emoji from another server, the bot won't recognize it. Use your server's emoji picker to add custom emojis, then use those in your reaction role commands.
Do reaction roles work if my server is very large?
Yes, but there's a practical limit. Discord allows up to 20 reactions per message, so you can have at most 20 reaction roles on a single message. If you need more than 20 groups, create multiple messages and set up reaction roles on each one.
Can members see which other members have a specific role?
Only if you set the role to be visible. Go to your server settings, click "Roles", click the role, and turn on "Display role separately from online members". Then members can click the role name in the member list and see everyone who has it. If you turn this off, the role is hidden and only the person who has it knows they have it.