> For the complete documentation index, see [llms.txt](https://zoomiescore.gitbook.io/zoomiescore-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://zoomiescore.gitbook.io/zoomiescore-docs/docs/features/reaction-roles.md).

# reaction roles

Let members self-assign roles by clicking a button or adding a reaction to a bot message.

## Styles

* **Buttons** — modern Discord component. Each role gets a labelled button with an optional emoji. Max 25 per panel.
* **Reactions** — classic emoji reactions on the panel embed. Click the reaction to add the role; click again to remove.

## Modes

* **Toggle** (default) — click grants or revokes the role each time.
* **Unique** — clicking one role in the panel automatically removes any other role from the same panel. Great for "pick your pronoun", "pick one region", "pick a color role".

## Setup

Dashboard → **Reaction Roles** → **New panel**:

{% stepper %}
{% step %}

## Pick target channel

{% endstep %}

{% step %}

## Write embed title & description

{% endstep %}

{% step %}

## Add mappings

Emoji + role + optional button label + optional button style (primary/secondary/success/danger).
{% endstep %}

{% step %}

## Choose `buttons` or `reactions` style

{% endstep %}

{% step %}

## Toggle `unique`

Use this if this is a one-of-many picker.
{% endstep %}

{% step %}

## Publish

The bot posts the panel and starts listening.
{% endstep %}
{% endstepper %}

## Notes

* Reaction-role panels are persistent — bot restarts re-attach the handlers on the existing message ID.
* The bot needs **Manage Roles** and its role must sit above every role in the mapping.
* Deleting the source message unregisters the panel; recreate from the dashboard.
