> ## Documentation Index
> Fetch the complete documentation index at: https://docs.confine.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Reaction Roles

> Let members pick up roles by reacting to a message.

## Overview

Attach an emoji to a role, and anyone who reacts with it gets that role. Take the reaction off and the role comes back off — unless you make it persistent.

Unlike button roles, these work on **any** message in your server, including ones confine didn't send.

<Info>
  You need **Manage Roles** to run these commands, and confine needs it too.
</Info>

## Adding a reaction role

<CodeGroup>
  ```javascript Syntax theme={null}
  ,reactionrole add (message) (emoji) (role)
  ```

  ```javascript Example theme={null}
  ,reactionrole add https://discord.com/channels/... ✅ Member
  ```
</CodeGroup>

Confine adds the reaction to the message for you, so members have something to click straight away.

### Pointing at the message

| Input        | When to use it                                                     |
| ------------ | ------------------------------------------------------------------ |
| Message link | Anywhere — right-click or long-press the message and copy its link |
| Message ID   | Only when you're in the same channel as the message                |

### Persistent roles

Add `$persistent` and the role sticks even after the member removes their reaction.

```javascript theme={null}
,reactionrole add https://discord.com/channels/... ✅ Member $persistent
```

<Tip>
  This is what you want for verification. Members verify once and keep access even if they clear their reaction later.
</Tip>

## Roles confine won't accept

<AccordionGroup>
  <Accordion title="Roles with dangerous permissions">
    Self-assignable moderation power is a security hole, so any role carrying one of these is rejected:

    `administrator`, `manage_guild`, `manage_channels`, `manage_messages`, `kick_members`, `ban_members`, `moderate_members`, `manage_roles`, `manage_threads`, `view_audit_log`, `manage_webhooks`, `manage_expressions`, `mention_everyone`
  </Accordion>

  <Accordion title="Roles above confine">
    Confine can't hand out a role positioned higher than its own — drag confine's role above it.
  </Accordion>

  <Accordion title="Roles above you">
    Unless you own the server, you can't configure a role sitting at or above your highest one.
  </Accordion>

  <Accordion title="Managed and default roles">
    `@everyone` and roles tied to bots or integrations are off limits.
  </Accordion>
</AccordionGroup>

## Removing reaction roles

### One emoji

<CodeGroup>
  ```javascript Syntax theme={null}
  ,reactionrole remove (message) (emoji)
  ```

  ```javascript Example theme={null}
  ,reactionrole remove https://discord.com/channels/... ✅
  ```
</CodeGroup>

### Every emoji on one message

<CodeGroup>
  ```javascript Syntax theme={null}
  ,reactionrole removeall (message)
  ```

  ```javascript Example theme={null}
  ,reactionrole removeall https://discord.com/channels/...
  ```
</CodeGroup>

### Every reaction role in the server

```javascript theme={null}
,reactionrole reset
```

<Warning>
  This clears everything and can't be undone.
</Warning>

Confine asks you to confirm with buttons first — only whoever ran the command can respond, and it expires after 30 seconds.

## Viewing what's configured

`,reactionrole list` pages through every reaction role with its message link, role, emoji, and whether it's persistent.
