Discord Reaction Roles 2026: Carl-bot, YAGPDB, Onboarding

Published on | Updated

Set up Discord reaction roles with Carl-bot's /reactionrole commands, a YAGPDB role menu or Discord's own Onboarding, with the current menu names, the 20 reaction limit and fixes.

Cartoon bot mascot sitting on a small server box with online status lights

To set up reaction roles today, invite Carl-bot and run /reactionrole setup, or build a role group in YAGPDB's control panel and run /rolemenu create with the group's name. Both bots now work through slash commands: Carl-bot switched off its prefix commands such as !rr make on 5 October 2026, and YAGPDB's documentation says typed commands like -rolemenu are now simply ignored.

If your server has Community turned on, Discord's own Onboarding lets members pick roles without a bot at all. The menu names below are the ones Discord's help center uses in October 2026.

Which method fits your server

MethodWhere you set it upGood forLimit to know
Discord OnboardingServer Settings > OnboardingPicking roles and channels while joining, no bot neededCommunity servers only, set up on desktop
Carl-bot/reactionrole commandsClassic reaction boards with modes such as unique and verify20 different reactions per message
YAGPDBRole Commands in the control panel, then /rolemenuRole groups with "only one" or minimum and maximum rules20 roles per menu
Your own botYour codeYour own logic and loggingYou host and maintain it

Before any bot: role order and permissions

Most reaction role problems come from these four settings, so set them first:

  1. Role order. Open Server Settings > Roles and drag the bot's role above every role it should hand out. Discord's roles and permissions guide explains that a role can only affect roles below its own position, and Carl-bot's docs add that you need a higher role than the one you assign as well.
  2. Manage Roles. In Server Settings > Roles, open the bot's role, go to the Permissions tab and turn on Manage Roles under General Server Permissions.
  3. Slash commands. Members and the bot need the Use Application Commands permission, set per role in Server Settings > Roles or per channel. Carl-bot's notice names it as the first thing to check when its commands do not appear.
  4. A clean roles channel. In your roles channel, right-click it, choose Edit Channel > Permissions and turn off Add Reactions for @everyone. Discord's channel permissions page says members can then still use any reaction that is already on a message, so they can click the bot's reactions but cannot add their own. Turn off Send Messages for @everyone too if the board should stay readable.

To add a bot, open its page in the App Directory (Server Settings > App Directory) or its profile, select Add App and then Authorize. You need the Manage Server permission, and the bot then shows up under Server Settings > Integrations > Bots and Apps (Discord's apps guide).

Carl-bot: reaction roles with slash commands

These come from Carl-bot's roles documentation and need the Manage Server permission:

  1. Run /reactionrole channel if you want Carl-bot to create a roles channel with the permissions such a channel usually needs. Optional.
  2. Run /reactionrole setup in that channel and follow the interactive setup. Carl-bot's docs recommend this route if you are new to its reaction roles.
  3. To put reaction roles on a message that already exists, use /reactionrole add with the message ID, the emoji and the role. /reactionrole addmany takes several pairs at once; put each emoji and role pair on its own line with Shift + Enter.
  4. Change how a board behaves with /reactionrole modify, the type and the message ID:
    • unique: a member can hold one role from this message at a time, and the old reaction is removed for them
    • verify: reactions only add roles, and the bot removes the reaction afterwards
    • drop: reacting removes the role
    • reversed: reacting removes the role, removing the reaction adds it
    • binding: verify and unique combined, so members choose once
    • lock: the message stops handing out roles
  5. /reactionrole limit caps how many roles one member can take from a message, and /reactionrole normal sets a board back to the default type. Temporary roles (/reactionrole temp) need Carl-bot Premium.
  6. Pin the board. Carl-bot clears deleted messages from its database, and its docs say a pinned board is safe from purges.

The old mention commands still work, so @Carl-bot rr make starts the same setup as /reactionrole setup.

Getting a message ID. In Discord on desktop, open User Settings > Advanced and turn on Developer Mode. Right-click the message and choose Copy Message ID (Discord's guide).

Custom emoji from another server. For an emoji Carl-bot has no access to, for example one from a server it is not in, react to the board yourself with that emoji first, then run /reactionrole fixforeign with the message ID. Carl-bot's docs say the role works without that command too; it only makes the bot add its own reaction to the message.

Numbers instead of role names on the board. An embed title cannot show mentions. Put the role mentions in the description, separating title and description with |, or write {roles} to list every emoji and role pair (Carl-bot FAQ).

YAGPDB: role commands and role menus

YAGPDB's self assignable roles guide works in two steps: you define the roles in the control panel first, then build the menu in Discord. Our YAGPDB reaction roles guide covers the control panel, Single mode and fixes step by step.

  1. In YAGPDB's control panel, create a role command for each role: a name and the role it gives. Require roles and Ignore roles are optional.
  2. Put those role commands in a role group and pick its mode: None applies only the required and ignored roles, Single allows one role from the group (colours, factions), Multiple sets a minimum and maximum. A group can also require members to keep one of its roles once they have picked one.
  3. In the channel for the menu, run /rolemenu create with the group's name. The bot asks for an emoji per role; react with each one in turn. When setup is done, the setup message says you can delete every message except the menu itself.
  4. For your own message, post it first, copy its message ID and pass that ID to /rolemenu create along with the group name.

The old switches are now options of the slash command, not text you type after a prefix. On /rolemenu create, the dm option turns on confirmation DMs, and the rr option turns off the default mode in which adding a reaction only gives the role and removing it only takes it away. Later, /rolemenu update adds roles you put in the group since, and its nodm and rr options toggle those two settings (YAGPDB's source). /rolemenu editoption, /rolemenu resetreactions and /rolemenu remove handle the rest.

Two rules from YAGPDB's docs: the bot needs Manage Roles and a role above the roles it assigns, and you need the Manage Server permission for every /rolemenu command, whatever your command overrides say.

Discord's own option: Onboarding

Onboarding is Discord's built-in way for members to choose roles and channels, and it needs no bot. It only exists on Community servers. To turn Community on, go to Server Settings > Enable Community; Discord requires a verified email verification level, the explicit media filter for all members, a rules channel and a channel for Community updates (Discord's Community guide).

Then, following Discord's Onboarding FAQ:

  1. Open Server Settings > Onboarding and add your Default Channels. You need at least 7, and at least 5 of them must let @everyone View Channel and Send Messages.
  2. Add Customization Questions. Each answer can assign roles, channels or both.
  3. Per question, choose Ask before a member joins, Allow multiple answers and Make Required as needed.
  4. Use Preview to check that each answer hands out the right roles, then enable it.

Questions without "Ask before a member joins" show up under Channels & Roles > Customize, the tab above the channel list, where members can change their answers at any time. Setting up Onboarding takes Manage Server and Manage Roles, or Administrator, and can only be done on desktop. Members who leave and rejoin go through it again.

Reaction role gating, and Discord's Rules Screening

Reaction role gating means new members only see the community channels after they react to the rules. The reaction is not the gate; channel permissions are:

  1. Make the member channels private: Edit Channel > Permissions, then turn on Private Channel (Discord's guide), or deny View Channel for @everyone on the whole category.
  2. Give a Verified role View Channel on those channels or that category.
  3. Hand out Verified from a rules message with Carl-bot's verify type, so the reaction can only add the role.

On a Community server, Discord has its own version. Rules Screening is under Server Settings > Safety Setup: select Edit next to DM and Spam Protection, then Members must accept rules before they can talk or DM, and add up to 16 rules. Until a member accepts, they cannot talk, react or DM other members. Discord's Rules Screening FAQ recommends it over a bot role gate, because a bot gate does not stop DMs to your members, and asks you to give @everyone its permissions back when you switch. Raid alerts live next to it, under Server Settings > Safety Setup > Raid Protection (Discord's raid guide).

Test it before your members do

View Server As Role shows which channels a role can see. Open Server Settings > Roles, select the role and find View Server As Role on the Display tab, or use the menu next to the role name. Only the owner and members with Administrator have it, and the Disable button in the bar at the top takes you back (Discord's guide).

It does not test the bot. Administrator bypasses every channel restriction, so to see a role actually being handed out, react with an account that has no staff roles.

When reaction roles stop working

!rr make or -rolemenu does nothing. Carl-bot turned off prefix commands on 5 October 2026 and YAGPDB ignores typed commands. Use /reactionrole or /rolemenu, or start the message with a mention of the bot.

The slash commands do not show up. Check Use Application Commands for the channel and the role. If it still fails, Carl-bot's notice says to invite the bot again with the invite link on its dashboard, which refreshes its permissions.

The bot says it lacks permission to assign the role. The role sits above the bot's role, or above yours. Move the bot's role up in Server Settings > Roles.

Members react and nothing happens. If the board was deleted and posted again, the old message ID no longer exists. With Carl-bot, /reactionrole move moves the pairs from the old message ID to the new one, and /reactionrole fix adds back missing reactions. With YAGPDB, /rolemenu resetreactions removes all reactions on a menu and adds them again.

You need more than 20 roles on one board. Discord allows 20 different reactions per message; its API answers with error 30010, "Maximum number of reactions reached (20)" (Discord's error codes). Split the roles over two messages. YAGPDB handles this with /rolemenu complete and the skip option on a second message.

A reaction role bot of your own

If you write your own bot, listen for reactions in a way that also covers messages from before the bot's last restart. In discord.py, on_raw_reaction_add is called "regardless of the state of the internal message cache" and needs the reactions intent. In discord.js, the guide says messages sent before the bot started are not cached, so enable the Message, Channel and Reaction partials together with the GuildMessageReactions intent, plus the User partial if the bot does not use the privileged GuildPresences intent.

Watch the role order in code as well. A role assignment that fails with 403 because the bot's role is too low counts as an invalid request, and Discord temporarily blocks IP addresses that send 10,000 invalid requests in 10 minutes (Discord's rate limit docs). Our guide to Discord rate limits covers the rest.

A reaction role bot for one community fits easily in 512 MB. Our Discord bot hosting runs discord.js and discord.py bots from €0.50 a month on the Growth plan, billed €3.00 every 6 months plus a one-time €0.50 setup fee.

FAQ

Why did Carl-bot stop answering !rr? Carl-bot disabled prefix commands on 5 October 2026. /reactionrole setup replaces !rr make, and mention commands such as @Carl-bot rr make still work.

How many reaction roles can one message have? 20, because Discord allows 20 different reactions per message. For more roles, use a second message.

Can members pick roles without a bot? Yes, with Onboarding on a Community server: Server Settings > Onboarding, Customization Questions whose answers assign roles. Members change their picks later under Channels & Roles.

Carl-bot or YAGPDB? Carl-bot if you want a board quickly and per-message modes such as unique or verify. YAGPDB if you want group rules defined once in the control panel, such as one faction per member and no switching.

Related: Discord role shop guide, Ephemeral roles and event channels, How to set up a Discord server