Panel Types
Reaction Roles supports multiple panel formats. The dashboard editor normalizes
older formats into MIXED because MIXED supports every interaction style in
one panel.
MIXED
MIXED is the recommended format for new panels.
It can include:
- Select menu options
- Buttons
- Emoji reactions
- Sub-panels
- Links from buttons/select options to sub-panels
- A check-current-roles helper button
Use MIXED when you want one polished panel with multiple interaction styles or
future flexibility.
SELECT
SELECT panels show a Discord dropdown menu. Users can select one or more
options, and the plugin adds/removes roles to match the current selection.
Good for:
- Many notification roles
- Cleaner panels with fewer visible buttons
- Users managing several roles at once
Limit: Discord select menus support up to 25 options.
BUTTON
BUTTON panels show clickable buttons. Each button toggles one role.
Good for:
- Small sets of important roles
- Simple visual calls to action
- Mobile-friendly role toggles
Limit: Discord allows 5 buttons per row and 5 rows per message.
REACT
REACT panels use emoji reactions directly on the panel message.
Good for:
- Classic reaction role behavior
- Very compact role menus
- Servers that prefer reaction-based UX
If auto_remove_user_reactions is enabled, the bot removes the user’s reaction
after toggling the role. This keeps the panel clean but requires Manage
Messages.
CATEGORY
CATEGORY is a legacy structured format with main role options and category
buttons. It is useful for older configs, but new dashboard-created panels should
usually use MIXED plus sub-panels.
Sub-Panels
Sub-panels are private ephemeral menus opened from a MIXED panel. They are
useful when a single public message should lead users into deeper choices
without cluttering the channel.
Examples:
- Main panel: “Choose your game”
- Sub-panel: game-specific region/platform/rank roles
- Main panel: “Notification settings”
- Sub-panel: product-specific notification groups
Sub-panels can contain their own buttons and select menus. They can also link to other sub-panels, allowing chained flows.
Role Change Behavior
For buttons and reactions, each click/reaction toggles one role:
- User does not have role -> add role
- User already has role -> remove role
For select menus, the selected values become the desired state:
- Selected option and user lacks role -> add role
- Unselected option and user has role -> remove role
Current Roles Button
When enabled, the panel includes a “Check My Current Roles” button. It replies privately with the user’s current roles from that panel and a short tip.
This is especially useful for select-menu panels because Discord does not always display a user’s previous selections after page reloads or message refreshes.
Validation
Before assigning a role, the plugin checks:
- The member exists.
- The role exists.
- The role is below the bot’s highest role if hierarchy checks are enabled.
- The user has not exceeded
max_roles_per_user. - The user has no bypass role unless bypass is intended.
Panel Records
Every sent panel is stored in MongoDB with:
- panel name
- guild ID
- channel ID
- message ID
- embed title
- panel type
- updated timestamp
Those records let the plugin avoid duplicate panels on restart and recover when a panel message was deleted.