Docs/Plugins

Role panels plugin

Let members claim roles by reacting to a message or clicking a button. Configure panels from the dashboard only — there are no Discord commands. The dashboard editor has full embed/message customisation and a live preview of exactly what the panel will look like, the same way the Persist sticky-message editor and Welcomer editor work.

Replaces the old command-driven Reaction roles and Role buttons plugins, which are still supported for data created before this change but can no longer create new mappings.

#Configuration

yaml
plugins:
  role_panels:
    enabled: true
    config:
      panels:
        - id: "a1b2c3d4-0000-4000-8000-000000000001"
          name: "Colour Roles"
          enabled: true
          trigger_type: reaction
          post_mode: bot
          channel_id: "123456789012345678"
          selection_mode: single
          remove_on_unreact: true
          content: "React to pick a colour."
          embed:
            enabled: true
            title: "Colour roles"
            description: "One colour at a time."
            color: 5661430
          roles:
            - role_id: "111111111111111111"
              emoji: "🔴"
            - role_id: "222222222222222222"
              emoji: "🔵"
        - id: "a1b2c3d4-0000-4000-8000-000000000002"
          name: "Pronoun Roles"
          enabled: true
          trigger_type: button
          post_mode: existing
          existing_message_link: "https://discord.com/channels/123456789012345678/234567890123456789/345678901234567890"
          selection_mode: multiple
          roles:
            - role_id: "333333333333333333"
              label: "he/him"
              style: primary
            - role_id: "444444444444444444"
              label: "she/her"
              style: primary
            - role_id: "555555555555555555"
              label: "they/them"
              style: primary

#Panel fields

FieldDescription
idStable panel ID. Generated by the dashboard — don't edit by hand
nameDashboard-only label
enabledTurn this panel on or off without deleting it
trigger_typereaction (members react) or button (members click)
post_modebot (Dreamliner posts and owns the message) or existing (attach to a message you already posted)
channel_idChannel to post in. Required when post_mode is bot
existing_message_linkLink to the message to attach to. Required when post_mode is existing
content / embedMessage text and embed. Only used when post_mode is botexisting mode never touches a message's content
selection_modemultiple (toggle roles independently) or single (picking one removes any other role from this panel the member already has)
remove_on_unreactReaction trigger only: remove the role when the reaction is removed
rolesThe roles members can claim. Each entry: role_id, emoji (required for reaction triggers), label and style (button triggers only — primary/secondary/success/danger, label defaults to the role's name)

embed reuses the same fields as Persist's embed (title, description, color, author, thumbnail, image, footer, fields, timestamp).

Saving the dashboard config posts/edits/removes bot-mode messages automatically, and reconciles existing-mode reactions/buttons on save — no separate "publish" step.

#Behaviour

  • post_mode: bot — Dreamliner posts and edits the message in place as the panel changes (never deletes and reposts to "bump" it, unlike Persist). Disabling or deleting the panel deletes the message.
  • post_mode: existing — Dreamliner only ever touches its own contribution to that message: the reactions it added, or a button row it appended. Everything else about the message (content, embeds, other reactions, other components) is left alone, even when the panel changes or is disabled.
  • selection_mode: single — when a member picks a new role on the panel, any other role from the same panel they already hold is removed. For reaction panels this also removes their other reaction(s) on that message.
  • A pre-existing legacy /reactionrole mapping or /rolebutton panel on the same message as a new Role Panel will both fire independently and harmlessly (role add/remove is idempotent) — not recommended, but not broken either.

#Requirements

  • The bot needs Manage Roles, and its highest role must be above every role in the panel.
  • Reaction panels need Add Reactions; button panels need Send Messages (to edit the message).
  • selection_mode: single reaction panels need Manage Messages in the target channel, to remove a member's other reaction when they pick a new role — the dashboard's Validate action warns if this is missing.
  • post_mode: existing button panels need at least one free action row (max 5 per message) on the target message; the dashboard reports how much room is left.