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

# Verification System

> Protect your server with automated member verification before granting access

## Overview

The Verification system lets you gate access to your server behind a verification step. New members receive an unverified role on join, restricting their access to all channels until they complete verification. Once verified, the unverified role is removed and the verified role is assigned automatically. Channel permissions are synced across the entire server so unverified members cannot see or interact with any channels except the verification channel.

***

## Verification Types

<CardGroup cols={3}>
  <Card title="Button" icon="computer-mouse">
    User clicks a single **Verify** button to instantly gain access. Best for low-security servers.
  </Card>

  <Card title="Captcha" icon="robot">
    User solves a randomly generated math or text captcha. Includes attempt tracking and a 10-minute cooldown after too many failures.
  </Card>

  <Card title="Reaction" icon="face-smile">
    User reacts to a message with a configured emoji. Can be linked to any existing server message.
  </Card>
</CardGroup>

***

## Commands

<AccordionGroup>
  <Accordion title="verification" icon="shield-check">
    Opens the interactive setup panel to configure the verification system. Roles and a `#verify` channel are created automatically if they do not already exist.

    <CodeGroup>
      ```bash Syntax theme={null}
         ,verification
      ```

      ```bash Example theme={null}
         ,verification
      ```
    </CodeGroup>

    **Aliases:** `vsetup`, `setverify`, `setverification`
    **Permissions:** Server Owner, Extra Owner, or Antinuke Admin
  </Accordion>

  <Accordion title="verification disable" icon="shield-xmark">
    Disables the verification system and removes all configuration for the server. Does not delete any roles or channels.

    <CodeGroup>
      ```bash Syntax theme={null}
         ,verification disable
      ```

      ```bash Example theme={null}
         ,verification disable
      ```
    </CodeGroup>

    **Aliases:** `verification off`, `verification remove`
    **Permissions:** Server Owner, Extra Owner, or Antinuke Admin
  </Accordion>

  <Accordion title="verification verified" icon="user-check">
    Changes the role assigned to a member after they successfully verify.

    <CodeGroup>
      ```bash Syntax theme={null}
         ,verification verified <role>
      ```

      ```bash Example theme={null}
         ,verification verified @Member
      ```
    </CodeGroup>

    **Permissions:** Server Owner, Extra Owner, or Antinuke Admin
  </Accordion>

  <Accordion title="verification unverified" icon="user-clock">
    Changes the role assigned to new members before they verify. Automatically re-syncs channel permissions across the server after updating.

    <CodeGroup>
      ```bash Syntax theme={null}
         ,verification unverified <role>
      ```

      ```bash Example theme={null}
         ,verification unverified @Unverified
      ```
    </CodeGroup>

    **Permissions:** Server Owner, Extra Owner, or Antinuke Admin
  </Accordion>

  <Accordion title="verification channel" icon="hashtag">
    Moves the verification panel to a different channel. The old panel is deleted and a new one is sent in the specified channel.

    <CodeGroup>
      ```bash Syntax theme={null}
         ,verification channel <#channel>
      ```

      ```bash Example theme={null}
         ,verification channel #verify
      ```
    </CodeGroup>

    **Permissions:** Server Owner, Extra Owner, or Antinuke Admin
  </Accordion>

  <Accordion title="verification emoji" icon="face-grin">
    Sets a custom emoji for reaction-type verification. Supports both unicode and custom server emojis. Only applies when verification type is set to **reaction**.

    <CodeGroup>
      ```bash Syntax theme={null}
         ,verification emoji <emoji>
      ```

      ```bash Example theme={null}
         ,verification emoji ✅
         ,verification emoji <:verified:123456789>
      ```
    </CodeGroup>

    **Permissions:** Server Owner, Extra Owner, or Antinuke Admin
  </Accordion>

  <Accordion title="verification message" icon="message">
    Links verification to an existing message in your server. The bot will add a reaction to that message instead of sending its own panel. Only works with **reaction** type verification.

    <CodeGroup>
      ```bash Syntax theme={null}
         ,verification message <link|id>
      ```

      ```bash Example theme={null}
         ,verification message https://discord.com/channels/...
         ,verification message 1234567890123456789
      ```
    </CodeGroup>

    **Permissions:** Server Owner, Extra Owner, or Antinuke Admin
  </Accordion>
</AccordionGroup>

***

## How Setup Works

Running `,verification` opens an interactive setup menu. Select a verification type and the bot will:

1. Create or reuse an **Unverified** role (no permissions)
2. Create or reuse a **Verified** role
3. Create or reuse a `#verify` channel visible only to unverified members
4. Sync permission overwrites across every channel in the server so unverified members cannot view them
5. Send the verification panel in `#verify`

<Note>
  Running setup again on an already-configured server will re-sync all channel permissions and update the panel, but will keep your existing roles and channel intact.
</Note>

***

## Captcha System

When verification type is set to **captcha**, members must solve a randomly generated challenge before gaining access.

<Tabs>
  <Tab title="Math Captcha">
    A simple arithmetic problem using addition, subtraction, or multiplication. Example: `34 + 17`
  </Tab>

  <Tab title="Text Captcha">
    A random 6-character alphanumeric code the member must type exactly. Characters that are visually ambiguous (I, O, 0, 1) are excluded.
  </Tab>
</Tabs>

The system tracks failed attempts per member. After reaching the limit, a **10-minute cooldown** is applied before they can try again.

| Setting           | Value      |
| ----------------- | ---------- |
| Max attempts      | 5          |
| Cooldown duration | 10 minutes |
| Captcha expiry    | 5 minutes  |

***

## Channel Permission Sync

When setup runs or the unverified role is changed, the bot automatically edits permission overwrites in every channel to deny the unverified role the following:

* View Channel
* Send Messages
* Read Message History
* Connect (voice channels)
* Send Messages in Threads (forum and media channels)

The verification channel itself is excluded from this sync and remains visible to unverified members.

<Warning>
  Channels where the bot is missing **Manage Channels** permission will be skipped. The bot will report how many channels were skipped after syncing.
</Warning>

***

## Reaction Verification

When type is set to **reaction**, members react to a message with the configured emoji to verify. By default this is ✅, but you can change it with `verification emoji`.

You can also link verification to **any existing message** in your server using `verification message`. The bot will react to that message and listen for matching reactions. This is useful if you want verification embedded inside a rules or welcome message.

<Note>
  When a custom message is linked, the bot's own verification panel is removed since the custom message takes over.
</Note>

***

## New Member Flow

1. Member joins the server
2. Bot assigns the **Unverified** role automatically
3. Member receives a DM directing them to the verification channel
4. Member completes verification
5. Bot removes the **Unverified** role and assigns the **Verified** role
6. Member now has full access to the server

<Info>
  If a jailed member leaves and rejoins, they are re-jailed immediately and do not go through the verification flow.
</Info>

***

## Role Safety

The bot validates roles before using them to prevent misconfigurations. A role will be rejected during setup or when using subcommands if it:

* Is a managed or integration role
* Is positioned above the bot's highest role
* Has dangerous permissions such as Administrator, Manage Guild, Manage Roles, Ban Members, or Kick Members

***

## Best Practices

* Use **captcha** type for public servers that are frequently targeted by bot raids.
* Use **button** type for invite-only or community servers where a simple gate is sufficient.
* Use **reaction + custom message** to embed verification naturally into a rules channel.
* After setup, double-check the unverified role is not assigned any channel-level allow overwrites elsewhere.
* Ensure the bot's role is positioned above both the verified and unverified roles in your role list.

<Warning>
  If the bot's role is below the verified or unverified role in the hierarchy, role assignment will silently fail and members will not be verified.
</Warning>
