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

# Tickets

> Private support channels between your members and your team: panels with buttons, forms, transcripts and more. All free.

<Warning>
  Tickets are in **beta**: for now they only work in Lucie's support server. They'll reach every server very soon.
</Warning>

With tickets, a member presses a button and Lucie opens a **private channel** where it's just them and your team. There you can talk calmly, solve the issue and close it, and the conversation is saved as a transcript.

Everything is configured from the [web panel](https://lucie.elxy.dev); the commands are for day-to-day work inside each ticket. And it's **completely free**: no paid plan and no locked features.

<Note>
  On this page, "panel" on its own means a **ticket panel**: the message with the button that opens tickets. The website where you configure everything is the **web panel**.
</Note>

## Getting it running

<Steps>
  <Step title="Open the section">
    Go to [lucie.elxy.dev](https://lucie.elxy.dev), pick the server and, in the **Support** group, click **Tickets**. You need the **Manage Server** permission.
  </Step>

  <Step title="Create your first panel">
    Click **Create the first panel**. Each panel has its own settings: team, category, texts, buttons and form.
  </Step>

  <Step title="Choose the team and the category">
    In the **Team** tab, choose the **Team roles** that will handle the tickets. In **Opening**, choose the **Open tickets** category where Lucie will create the channels.
  </Step>

  <Step title="Save and post">
    Save with the bar at the bottom, choose the channel in the panel bar and click **Post**: Lucie sends the message with the button there.
  </Step>

  <Step title="Turn them on">
    Switch on **Tickets on** in the header and save. It's the last step on purpose: you can have everything ready before anyone can open tickets.
  </Step>
</Steps>

<Tip>
  The **Overview** tab has a **Getting started** checklist that ticks off what you've done and takes you to what's missing. Once it's all set, `/ticket debug` on Discord confirms that Lucie has what she needs.
</Tip>

## The life of a ticket

1. **Open.** Lucie creates the channel (`ticket-0001` by default; each panel numbers its own) with a welcome message and the **Close**, **Claim** and **User card** buttons. Only the person who opened it, your team and anyone added can see it.
2. **Closed.** By default, the person who opened it can still read it but no longer write. The channel moves to the closed category (if there is one) and the **Team controls** appear: **Reopen**, **Transcript** and **Delete**.
3. **Deleted.** Lucie posts a notice in the channel, saves the transcript if needed and deletes the channel a few seconds later.

A closed ticket can be reopened as many times as needed. If you'd rather closing be final, turn off **Keep the closed ticket** and closing will delete it right away.

## The web panel, tab by tab

The section has six tabs. **Overview** covers the whole server; the other five belong to one panel, the one you pick in the **Panel:** bar at the top. Changes to all panels are saved together with the bar at the bottom.

### Overview

* **Counters**: tickets open right now, created and closed in the last 7 days, and claimed.
* **Access and limits** (applies to every panel): **Roles without tickets** (can't open any), **Roles without limits** (skip the limits and waits) and **Server limit** (100 by default; 0 = no limit).
* **Log and privacy**: **Log channel**, **Keep transcripts**, **Panel for /ticket new**, **User card** and **AI summary**.
* **Panels**: create, edit, clone or delete panels (up to 25 per server) and see which ones are posted.
* **Recent tickets**: the server's latest, filterable by state or by user ID, with their transcripts.
* **Change history**: who changed what in tickets from the web panel, over the last 90 days.

### Opening

| Block | What you set |
| - | - |
| **Panel** | Name, style (**Buttons**, 1 to 5 per row, or **Dropdown**) and **Message options**: add other panels to offer them together in the same message. |
| **Categories** | Up to 5 for **Open tickets** and 5 for **Closed tickets**, in order: when one reaches 50 channels, Lucie uses the next. |
| **Name and numbering** | Channel name **When opened** (empty = `ticket-0001`), **When closed** and **When claimed** (empty = not renamed). Accepts variables. |
| **Limits** | **Open per person** (1 by default), **Closed per person** (3) and **Open in the panel** (no limit). 0 = no limit. |
| **Form** | Up to 5 questions (short text, paragraph or dropdown) answered before the ticket opens. The answers show up in the welcome message. |

<Note>
  Without a closed category, closed tickets stay in the open one and keep filling it up. Also, Discord only lets a channel be renamed twice every 10 minutes, so a new name can take a while to show.
</Note>

### Messages

The 13 messages Lucie sends —the posted panel, the welcome, the close confirmation, the channel notices, the DMs to the author…— can all be rewritten: a content and an embed with title, description, color and footer. Each one uses the default text, in the server's language, until you change it; **Reset** brings it back. Some notices can be turned off with **Don't send this message**.

The editor has a **preview** and a **Variables** helper: click one and it's inserted at the cursor. Mentions only ping if they're in the content, not in the embed. The most useful variables:

| Variable | Becomes |
| - | - |
| `{ticket.user}` | Mention of whoever opened the ticket (`{ticket.user.name}` is their name) |
| `{user}` | Whoever does the action: closes, reopens, claims… |
| `{ticket.number}` | Ticket number; `{ticket.number?pl=4}` pads it with zeros (`0042`) |
| `{server.name}` · `{panel.name}` | Name of the server and of the panel |
| `{create.reason}` · `{close.reason}` | Reason when opening and when closing |
| `{create.form.0}` … `{create.form.4}` | Form answers, from the first to the fifth |
| `{claim.user}` | Whoever is handling the ticket |
| `{transcript.url}` | Link to the transcript |

### Buttons

Text (up to 80 characters), emoji, color (blue, gray, green or red) and whether it shows, for the 8 editable buttons: **Open ticket**, **Close**, **Cancel closing**, **Confirm closing**, **Reopen**, **Delete**, **Transcript** and **Claim**. A button can go without text or without an emoji, but not without both.

<Warning>
  An emoji from another server only works if Lucie is in that server. If she can't use it, the tab flags it and Discord shows the default emoji instead.
</Warning>

### Team

* **Team roles** (up to 10): see every ticket in the panel and can close, claim and delete them and use the rest of the actions.
* **Additional roles** (up to 10): see the tickets with the permissions of their row, but without the team actions.
* **Claiming**: **Allow claiming**, **Only the claimer releases it**, **Take over a claim** and **Rest of the team read-only** (while it's claimed, the rest of the team can't write).
* **Channel permissions**: what each group (author and added, team, additional) can do while the ticket is **Open** and **Closed**. `@everyone` never sees tickets.

<Note>
  Whoever manages the server (owner, **Administrator** or **Manage Server**) always counts as team in every panel. If a panel has no team roles, only those people will see its tickets.
</Note>

### Closing

| Block | What you set |
| - | - |
| **Closing** | **Ask for confirmation**, **Keep the closed ticket**, **Ask for a reason**, **The author can close it** and **Wait before deleting** (3 to 30 seconds; 5 by default). |
| **Transcripts** | Save one **When closing** and **When deleting**, **Attach .html to the log** and **Send the .html to the author**. |
| **Log** | A channel of its own for this panel (empty = the server's) and what to log: opened, closed, reopened, deleted, claimed, released and transcript saved. |
| **Direct messages** | Notify the author **When opened** (off by default) and **When closed**, with the reason and the transcript. |

## Posting the panel in a channel

In any of a panel's tabs, the top bar has the channel and the **Post** button. Lucie posts what's **saved**, so save first.

* Once posted, the button becomes **Update**. If you change something and save, the **Unposted changes** badge reminds you to press it.
* If you post in **another channel**, Lucie deletes the previous message: you never end up with two copies of a panel working.
* **Update from link** reuses a Lucie ticket panel that already exists: paste its link (right-click the message › Copy link) and Lucie edits it with this panel.

Lucie needs **View Channel**, **Send Messages** and **Embed Links** in that channel.

## Inside a ticket

### Opening

The member presses the panel's button (or picks its option in the dropdown). If the panel has a form, they fill it in first; if not, the channel opens right away and Lucie replies with the link. They can also use `/ticket new`, which opens with the **Panel for /ticket new**.

### Closing

**Close** on the welcome message. Depending on the panel, Lucie asks for a reason, asks for confirmation (**Close ticket** / **Cancel**) or closes it directly. By default the person who opened it can close it too. `/ticket close` closes without a confirmation step.

### Reopening and deleting

With the ticket closed, the team has **Reopen** (restores the open permissions and the open category) and **Delete** (asks for confirmation, posts a notice in the channel and deletes it after the configured wait). Only the team can reopen and delete.

### Claiming

**Claim** assigns the ticket to whoever presses it, and the button becomes **Release**. Lucie tells the author who is handling it, without pinging the person who claimed. If someone on the team already has it, the others can't take it unless you turn on **Take over a claim**; whoever manages the server always can.

### Adding and removing

`/ticket add` gives a user or a role access, and `/ticket remove` takes it away. Added people get the same permissions as the author. At most **20** users and roles can be added per ticket.

You can't add or remove `@everyone`, Lucie or the author, or remove whoever is handling the ticket. Team roles and additional roles are changed in the web panel, not from here.

### Close request

When you think the issue is solved, `/ticket closerequest` asks the author whether it can be closed. It reaches them with **Yes, close** and **No, keep it open**, and only they can answer: if they accept, the ticket closes; if not, it stays open and the message says so.

### Renaming

`/ticket rename` changes the channel's name. Discord only allows 2 renames every 10 minutes per channel, so Lucie applies it as soon as she can.

## Commands

They all work with `/ticket` and with `!ticket` (aliases `tickets` and `tk`). Except for `new` and `debug`, they're used **inside the ticket's channel**. `!ticket` on its own shows the help. "Team" includes whoever manages the server.

| Subcommand | What it does | Who |
| - | - | - |
| `new [motivo]` | Opens a ticket with the **Panel for /ticket new** | Anyone |
| `close [motivo]` | Closes the ticket | Team and, if the panel allows it, the author |
| `reopen` | Reopens a closed ticket | Team |
| `delete [motivo]` | Deletes the ticket | Team |
| `claim` · `unclaim` | Claims or releases the ticket | Team |
| `add` · `remove` | Gives or removes access for a user or a role (mention or ID) | Team |
| `rename <nombre>` | Changes the channel's name | Team |
| `transcript` | Saves the transcript and gives you the link | Team |
| `closerequest [motivo]` | Asks the author to confirm closing | Team |
| `debug` | Checks the settings and Lucie's permissions | Team |

With the prefix, the verbs also work in Spanish and Portuguese: for example `!ticket cerrar` or `!ticket fechar` for `close`, and `!ticket reclamar` or `!ticket assumir` for `claim`.

**Examples**

```text theme={"dark"}
!ticket new I can't get into the server
!ticket close solved
!ticket add @usuario
!ticket rename pending-payment
/ticket add usuario: @usuario
```

<Note>
  If the panel has a form, `!ticket new` can't show it: use the panel's button or `/ticket new`.
</Note>

## The user card

The **User card** button on the welcome message shows, **to the team only** and only to whoever presses it, the background of the person who opened the ticket in your server:

* When they created their account, since when they're a member and who invited them.
* Their previous tickets in the server, with links to their transcripts.
* Their moderation cases, their active warnings and whether they have a global ban.

The opening log also includes a one-line summary. You can turn it off in **Overview** → **User card**.

## Transcripts

A transcript is a copy of the ticket's conversation: messages, replies, embeds, stickers and attachments (images are re-hosted so they don't get lost). It's saved when closing and when deleting, depending on the panel, and when someone on the team presses **Transcript** or uses `/ticket transcript`.

### The web viewer

Each transcript has its own page at `lucie.elxy.dev/t/…`. You need to **sign in with Discord** to view it, and only these people can:

* Whoever opened the ticket and the added users.
* The panel's team roles and the roles added to the ticket.
* Whoever manages the server and the Lucie team.

Private channels mentioned in the ticket show up as `#private-channel`, so the author doesn't see the names of internal channels.

### The .html copy

Lucie also creates a **portable copy**: a single `.html` file that opens in any browser, no account needed. By default it's attached to the server's **log** and to the author's **closing DM**, if it fits Discord's upload limit. Small images go inside; the other attachments link to the web version while it exists.

<Warning>
  The `.html` copy lives on Discord: anyone who can see the log channel (or the DM) can see it, and it **doesn't expire** with Lucie's retention. It's the long-lasting copy; if you don't want it, turn off **Attach .html to the log** and **Send the .html to the author** in the **Closing** tab.
</Warning>

### How long they're kept

In **Overview** → **Keep transcripts** you choose **30, 60, 90, 180 or 365 days** (60 by default). When the time is up, Lucie deletes the transcript and its files, along with that ticket's form answers, reasons and AI summary.

The change also applies to what's already stored: if you lower it, the oldest ones are deleted for good (the web panel asks you to confirm). You can delete a transcript early from **Recent tickets**.

### Limits

* Up to **5,000 messages** per transcript: the most recent ones, with a notice if it falls short.
* Attachments of up to **8 MB** each and **100 MB** per transcript.
* **200 transcripts a day** and **2 GB** stored per server; past that space, they're saved without attachments.
* Pressing **Transcript** with no new messages returns the same one; with new messages, at most one every 5 minutes per ticket.

## AI summary

Optional and **off by default**. If you turn it on in **Overview** → **AI summary**, when a ticket is closed Lucie summarizes the conversation in four sections —**Problem**, **What was done**, **Outcome** and **Pending**— and adds it to the closing log and to the transcript's header, in the server's language.

To do that she sends DeepSeek a condensed version of the conversation, **without IDs**. There's a maximum of 50 summaries a day per server.

## Permissions Lucie needs

<Note>
  The official invite link already requests everything she needs. This is for you if you removed permissions from her or if your categories have overrides.
</Note>

| Where | Permissions | What for |
| - | - | - |
| Server | **View Channel**, **Manage Channels**, **Manage Roles**, **Send Messages**, **Embed Links**, **Attach Files** and **Read Message History** | Creating the channels and setting their permissions |
| Ticket categories | **View Channel**, **Manage Channels** and **Manage Roles** | Creating and moving channels inside them |
| Panel channel | **View Channel**, **Send Messages** and **Embed Links** | Posting the panel |

Lucie can only grant or deny in a ticket the permissions she has herself: if she's missing one, the **Channel permissions** table flags it. Also put her role above the team roles.

## Anti-abuse limits

On top of each panel's limits and the server's, there are some fixed ones so nobody can flood the server with channels:

| Limit | Value |
| - | - |
| Between two tickets from the same person | 10 seconds |
| Tickets from one person in an hour (whole server) | 5 |
| New tickets in the server | 10 every 10 seconds |

Whoever manages the server and the **Roles without limits** skip all the limits and waits except the 10 seconds between tickets. **Roles without tickets** blocks everyone except whoever manages the server.

## If something goes wrong

When something fails, Lucie replies with a message that carries a **code** (like `TK-PERMS`) and a link to its explanation. In [Ticket errors](/en/tickets/errores) you'll find the cause and the fix for each one.

To check everything at once, use `/ticket debug`: it tells you whether tickets are on, which permissions Lucie is missing, how the categories are doing and what problems each panel has.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.