Plugins

Reaction Roles

Self-service roles from a panel — emoji-to-role bindings, exclusive mode, custom feedback and the 20-binding limit.

Members pick their own roles from a panel you design in the dashboard. Cloudy posts the message, builds a dropdown under it with one entry per role, and keeps the roles in sync with what each member selects.

LicenseFree — no premium needed
NeedsSend Messages, Embed Links, Manage Roles, and Cloudy's role above every bound role

Panels

Up to 25 panels per server.

Panel name

1–40 characters · required · unique on this server

Also used as the embed title unless you set one in the embed builder. Internal-ish, but members do see it — call it Colours, not rr-panel-3.

Channel

Required · fixed after creation

Where the bot posts the panel message — a text or announcement channel. To move a panel, delete it and create a new one.

Exclusive mode

True/false · default false

When on, the dropdown accepts only one selection, so a member can hold only one role from this panel. Picking a new one removes the previous role.

Use for
OffInterests, ping opt-ins, game roles — pick as many as you like
OnColours, regions, pronoun-style single choices
Split your roles across panels by kind. One exclusive panel for colour, one non-exclusive panel for interests, rather than one giant mixed panel.

Roles & emojis

1–20 pairs · required

Each binding is an emoji, a role, and an optional label.

PartRules
EmojiPick a unicode emoji or one of this server's custom emojis from the picker, or paste <:name:id> / <a:name:id> for animated
RoleAny role below Cloudy's own highest role; roles managed by an integration are hidden
LabelOptional, up to 100 characters — the text shown in the dropdown. Empty uses the role name

Need more than 20 roles? Create a second panel.

Three rules the editor enforces:

  • An emoji must be a real emoji — a symbol like ★ is refused, because Discord would reject the panel.
  • Each emoji may appear only once per panel.
  • Each role may be bound to only one emoji per panel.
Custom emojis must come from a server Cloudy is in — usually this one. An emoji from a server the bot cannot see is accepted by the editor, but Discord rejects the dropdown when the bot tries to post it, and the panel stays on posting….

Custom feedback texts

Up to 300 characters each · optional

Shown as an ephemeral reply that only the member who picked can see. Empty uses the built-in default in your server's language.

PlaceholderBecomes
{user}The member (as a mention, without pinging)
{role}The role that was granted or removed
You now have {role}!
You gave {role} back.
These apply to single changes. When several roles change at once, the member gets a summary (Added: … / Removed: …) instead.

Designing the panel

The panel body is a full embed — use the embed builder for a title, description, colour and image. Cloudy always appends a Roles field that lists every emoji, its role and label, so members can see what each option stands for. Below the list it notes that a selection replaces the previous picks — that hint stays even when you write your own description.

Behaviour notes

  • The bot posts a new panel within about 30 seconds (posting… badge).
  • The dropdown is the whole state: what a member selects is what they hold. Deselecting an entry removes that role; clearing the selection removes every role from the panel.
  • Saving an edit re-renders the message and the dropdown. Members keep the roles they already have; removed bindings are simply no longer offered.
  • Deleting a panel removes the Discord message and all its bindings. Roles members already hold are not taken away. Deleting the message in Discord by hand removes the panel from the dashboard too.
  • Panels are only posted and refreshed while the plugin is switched on.
  • Switching roles in a panel adds and removes them one by one, so a member swapping roles always ends up with exactly the ones picked.
  • A custom emoji Cloudy cannot use (from another server, or deleted) is left off its option instead of blocking the whole panel.
  • A panel whose message or channel was deleted is removed from the list.

The one thing that goes wrong

Nine times out of ten, "picking does nothing" is the role hierarchy:

Cloudy can only assign roles that sit below its own highest role.

Open Server Settings → Roles and drag Cloudy's role above every role your panels hand out. The member then sees a generic "could not update your roles" reply, because Discord returns a permission error the bot cannot translate into anything more helpful.