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

# Access & permissions

> Who can see a ticket, who can open one, and how trainee staff work.

Ticket access is deliberately layered so you can run a mixed staff team without giving everyone the same reach.

| Layer              | Set with                       | Applies to                    |
| ------------------ | ------------------------------ | ----------------------------- |
| **Global staff**   | `tickets staff`                | Every ticket, every panel     |
| **Support roles**  | `tickets option supportroles`  | One option's tickets          |
| **Trainee roles**  | `tickets option traineeroles`  | One option's tickets, limited |
| **Required roles** | `tickets option requiredroles` | Who can *open* the option     |
| **Manual access**  | `tickets allow` / `deny`       | One specific ticket           |

## Global staff

```javascript theme={null}
!tickets staff @Support @Moderator
```

Requires **Administrator**. These roles can configure the ticket system and see every ticket in the server. Keep the list short — this is the master key.

## Support roles

```javascript theme={null}
!tickets option supportroles Support general @Support
!tickets option supportroles Support report @Moderator @Admin
```

Full access to that option's tickets: see, reply, claim, close. This is how you route different ticket types to different teams — general questions to `@Support`, user reports to `@Moderator`, appeals to `@Admin`.

Run it with no roles to clear. Aliases: `support`.

## Trainee roles

```javascript theme={null}
!tickets option traineeroles Support general @Trial Staff
```

Trainees can see the ticket, but everything else is toggled individually:

```javascript theme={null}
!tickets option permission Support general trainee_speak on
!tickets option permission Support general trainee_claim off
!tickets option permission Support general trainee_close off
```

The intended shape is a trial staff member who can read tickets and reply, learning how things are handled, without being able to claim or close anything.

Aliases: `trainees`.

## Permission flags

```javascript theme={null}
!tickets option permission <panel> <option> <flag> (on/off)
```

| Flag                     | Effect                                          |
| ------------------------ | ----------------------------------------------- |
| `creator_close`          | The ticket creator can close their own ticket   |
| `trainee_claim`          | Trainees can claim                              |
| `trainee_close`          | Trainees can close                              |
| `trainee_speak`          | Trainees can send messages                      |
| `staff_visible_on_claim` | Other staff still see a claimed ticket          |
| `staff_speak_on_claim`   | Other staff can still speak in a claimed ticket |

Aliases: `perm`.

### The claim flags

These two decide what claiming actually means in your server:

<AccordionGroup>
  <Accordion title="Both on — claiming is just a label">
    ```javascript theme={null}
    !tickets option permission Support general staff_visible_on_claim on
    !tickets option permission Support general staff_speak_on_claim on
    ```

    Everyone still sees and can help. Claiming marks who's taking point, nothing more. Good for small, collaborative teams.
  </Accordion>

  <Accordion title="Visible on, speak off — claiming assigns ownership">
    ```javascript theme={null}
    !tickets option permission Support general staff_visible_on_claim on
    !tickets option permission Support general staff_speak_on_claim off
    ```

    Everyone can read for oversight, but only the claimer replies. Stops the "three staff answering the same question differently" problem. This is the setting most servers want.
  </Accordion>

  <Accordion title="Both off — claiming makes it private">
    ```javascript theme={null}
    !tickets option permission Support general staff_visible_on_claim off
    !tickets option permission Support general staff_speak_on_claim off
    ```

    Only the claimer sees the ticket at all. Appropriate for appeals and reports where a smaller audience matters — but it removes oversight, so use it deliberately.
  </Accordion>
</AccordionGroup>

### `creator_close`

```javascript theme={null}
!tickets option permission Support general creator_close on
```

Lets members close their own ticket once it's resolved. Reduces staff busywork on "never mind, figured it out" tickets. Turn it **off** for reports and appeals, where the member shouldn't be able to end the conversation.

## Required roles

Roles a **member** must have to open the option at all:

<CodeGroup>
  ```javascript Require one theme={null}
  !tickets option requiredroles Support billing @Customer
  ```

  ```javascript Require several theme={null}
  !tickets option requiredroles Support vip @Booster @VIP
  ```

  ```javascript How they combine theme={null}
  !tickets option rolemode Support vip any
  !tickets option rolemode Support vip all
  ```

  ```javascript Clear the requirement theme={null}
  !tickets option requiredroles Support billing
  ```
</CodeGroup>

`any` means one listed role is enough; `all` means they need every one. Aliases: `requires` / `rolematch`.

When someone without the roles tries, they get the option's `denial` message:

```javascript theme={null}
!tickets option message Support billing denial {description: This is for customers only. Buy something first.}
```

## Per-ticket access

Inside an open ticket:

```javascript theme={null}
!tickets allow @someone
!tickets allow @Witness
!tickets deny @someone
!tickets allow list
```

Adds or removes one member or role from **this ticket only**. The usual case is pulling a third party into a report to give their side.

## Blacklists

```javascript theme={null}
!tickets blacklist @someone
!tickets blacklist @Muted
!tickets blacklist
```

Blacklisted members and roles can't open tickets at all. The command toggles, and running it bare lists current entries. Requires ticket staff.

Use it for people who open tickets to argue rather than to resolve anything.

## A worked configuration

A three-tier staff team:

```javascript theme={null}
// global — admins see everything
!tickets staff @Admin

// general help: support handles it, trainees can read and reply
!tickets option supportroles Support general @Support
!tickets option traineeroles Support general @Trial Staff
!tickets option permission Support general trainee_speak on
!tickets option permission Support general trainee_claim off
!tickets option permission Support general trainee_close off
!tickets option permission Support general creator_close on
!tickets option permission Support general staff_speak_on_claim off

// reports: moderators only, private once claimed
!tickets option supportroles Support report @Moderator
!tickets option permission Support report creator_close off
!tickets option permission Support report staff_visible_on_claim off

// billing: customers only
!tickets option supportroles Support billing @Admin
!tickets option requiredroles Support billing @Customer
!tickets option rolemode Support billing any
!tickets option message Support billing denial {description: Billing support is for customers. Open a General Help ticket instead.}
```

## Command reference

| Command                                                      | Aliases     | Description                        |
| ------------------------------------------------------------ | ----------- | ---------------------------------- |
| `tickets staff <roles>`                                      | —           | Global staff roles (Administrator) |
| `tickets option supportroles <panel> <option> <roles>`       | `support`   | Full-access roles                  |
| `tickets option traineeroles <panel> <option> <roles>`       | `trainees`  | Limited-access roles               |
| `tickets option requiredroles <panel> <option> <roles>`      | `requires`  | Roles needed to open               |
| `tickets option rolemode <panel> <option> <mode>`            | `rolematch` | `any` or `all`                     |
| `tickets option permission <panel> <option> <flag> (on/off)` | `perm`      | Toggle a permission flag           |
| `tickets allow <target>`                                     | —           | Add someone to this ticket         |
| `tickets deny <target>`                                      | —           | Remove them                        |
| `tickets allow list`                                         | `ls`        | Manual access entries              |
| `tickets blacklist [target]`                                 | —           | Toggle a blacklist entry           |
