A ticket panel is a message with a button. A member clicks it and Cloudy creates a private channel under a Discord category, visible to that member and your staff roles.
| License | Premium |
| Needs | Manage Channels, Manage Roles, View Channels, Send Messages, Read Message History, Manage Messages, Attach Files, Embed Links |
Without Administrator Cloudy can only grant permissions it holds itself — the opener gets Attach Files and Embed Links in the ticket, the staff roles Manage Messages — which is why those are on the list although Cloudy hardly uses them itself.
Required · fixed after creation
Where the panel message is posted. Members need to see this channel to open a ticket.
At least one · required
What the panel offers. Every type points at the Discord category its ticket channels are created under — create an empty category for this, do not point it at one that already holds normal channels. Type 1 also decides what the panel's button says. See Ticket types.
1–10 roles · required
Roles that can see and respond to every ticket on this panel. At least one is mandatory: a ticket nobody can read is useless.
Optional
Ticket events (created, claimed, deleted) and transcripts are posted here. Strongly recommended — without it, a closed ticket is gone.
One panel can offer several kinds of ticket. This is the feature that changes how the panel looks:
| Types | Panel renders as |
|---|---|
| 1 | A single button |
| 2–25 | A dropdown with one option per type |
25 is Discord's cap on select-menu options.
Each type has its own settings, and empty fields inherit from the panel:
| Field | Limit | Empty means |
|---|---|---|
| Discord category | required | — |
| Label | up to 100 characters | — |
| Description | up to 100 characters | No second line in the dropdown |
| Emoji | optional | No icon. A malformed emoji, or a server emoji Cloudy cannot see (deleted, or from another server), is skipped and the option still works |
| Staff roles | up to 10 · optional | The panel's staff roles apply |
| Opening message | up to 2000 characters · optional | The panel's welcome message is used |
Removing a type from a panel leaves tickets already opened under it untouched.
All optional; empty uses the built-in default in your server's language (English defaults shown).
| Field | Limit | Default |
|---|---|---|
| Panel title | 256 characters | 🎫 Ticket System |
| Panel description | 2000 characters | Click 'Create Ticket' to open a support ticket. |
| Button label | 80 characters | Create Ticket — the label of type 1 once the panel has types |
| Button emoji | 64 characters | 📧 — unicode or <:name:id> |
With two or more types the button label becomes the dropdown's placeholder text.
The panel can also be built as a full embed with the embed builder.
Every ticket opens with the welcome message, a ping of the staff roles and two buttons:
Claim Ticket (staff only) and Delete Ticket (the opener or staff). /ticket close does the
same as Delete Ticket, under the same rule.
Staff means: a member with one of the ticket's current staff roles, or anyone who can manage messages in the ticket channel (administrators included). The second half keeps a ticket workable after you change the staff roles — the team that could see it when it was opened can still claim and close it.
Up to 2000 characters · optional
Posted inside a newly created ticket. Supports {user} to mention the opener; the embed variant also
takes {server} and {number}.
Hello {user}, please describe your issue — include screenshots if you have them.
Use it to ask for the information your staff always ends up asking for anyway.
Up to 100 characters · optional
How new ticket channels are named. Placeholders {user} and {number}, where {number} is a
counter that increments per panel.
Default: {number}-ticket-{user} → 7-ticket-nova
Up to 5 questions asked in a modal before the ticket channel exists. The answers are posted right after the welcome message inside the new ticket.
This is the single highest-value setting on the page. Without it every ticket starts with "hi", then "what's your problem", then a wait. With it, staff opens a channel that already contains the answer.
| Field property | Notes |
|---|---|
| Label | Up to 45 characters — Discord's limit |
| Placeholder | Optional grey hint inside the input, up to 100 characters |
| Style | Short (one line) or paragraph (multi-line) |
| Required | Whether it can be left empty |
The form is set per panel and applies to every type on it. The modal's heading is the panel title, cut to 45 characters.
Every ticket carries a priority: low, normal, high or urgent. Anything other than normal shows as an emoji prefix on the channel name (🟢 🟠 🔴), which is what lets a queue be worked in the right order.
Set the starting priority per panel — a "Report a raid" panel can open at urgent while
general questions open at normal. The channel carries its marker from the moment it is created.
Staff changes it later with /ticket priority, which also puts back a marker that went missing from
the channel name.
Two timers, both off by default (0), that close tickets nobody is answering. Each goes up to
10080 minutes (7 days).
| Setting | Effect |
|---|---|
| Warn after (minutes) | Counted from the last message in the ticket, by anyone. Cloudy posts a reminder and pings the opener |
| Close after (minutes) | Counted from the warning. Cloudy writes the transcript, closes the ticket and deletes the channel |
Any new message resets both — even one that arrives while Cloudy is already about to close the ticket. A close time without a warning time is rejected — the close timer starts at the warning. With only a warning set, the reminder says nothing about closing. Cloudy sweeps for inactive tickets every five minutes, and only while the plugin is enabled for the server; a ticket someone already asked to delete gets no reminder.
1–25 · default 1
How many tickets one member may have open at the same time. A ticket someone already pressed Delete Ticket on no longer counts, even while its channel is still waiting for the auto-delete.
category or panel · default category
| Value | Meaning |
|---|---|
| Per category | The limit applies within each ticket type's category — one support ticket and one report ticket at once |
| Per panel | Every type on the panel counts together — one open ticket, full stop |
0–1440 minutes (24 h) · default 0
How long a ticket channel survives after someone presses Delete Ticket before Cloudy removes it.
0 keeps the built-in 5-second default, i.e. the channel disappears almost immediately. The
deletion is stored with the ticket, so a bot restart in between does not cancel it — Cloudy removes
the channel within a minute of the time it announced.
Useful values: 0 if you always want a clean category, 1440 (24 h) if staff sometimes needs to
reread a ticket the next day.
With a log channel set, Cloudy exports the ticket as an HTML transcript before the channel goes: the file is posted to the log channel and the "Ticket Deleted" entry carries a View Transcript button that jumps to it. The link does not expire. A very long ticket keeps its newest 3000 messages plus its first ones, so the opening request and the form answers are always in it. Tickets closed by the inactivity timer get the same treatment.
Images posted in the ticket are embedded into the transcript, oldest first, up to 2 MB per image and 4 MB per transcript — Discord deletes the files together with the channel. Images beyond that stay links and stop loading once the channel is gone. If the transcript would still exceed the server's upload limit, it is posted with links only.
If Cloudy cannot post in the log channel (missing View Channel, Send Messages, Embed Links or Attach Files), the log entry and transcript are skipped — the ticket still closes.
| Command | Does | Requires |
|---|---|---|
/ticket add | Add a member to the current ticket | Manage Messages |
/ticket remove | Remove a member from the current ticket (not the opener, not a bot) | Manage Messages |
/ticket priority | Change this ticket's priority | Manage Messages |
/ticket transfer | Hand the ticket to another staff member who can see it | Manage Messages |
/ticket close | Close and delete the current ticket, exactly like Delete Ticket | The opener or staff |
/ticket-stats | Throughput per staff member, optionally for the last days (1–365, default 30) | Manage Server |
Panels themselves are created and edited in the dashboard, not through commands.
/ticket close works even while the plugin is switched off or the license has lapsed, like the
button. Discord shows /ticket only to members with Manage Messages by default; open it to
everyone under Server Settings → Integrations if openers should be able to close their own
tickets with it — every other subcommand still checks Manage Messages itself.
A staff member presses Claim Ticket to signal they are handling it; the channel is renamed to
include their name and the button locks. If two staff members press it at the same moment, exactly
one gets the ticket and the other is told who has it. /ticket transfer passes the claim on without
losing the history, and renames the channel and the claim button to the new holder. Both are
recorded on the ticket itself, which is what /ticket-stats reads.
/ticket-stats lists, per staff member who claimed tickets, how many they claimed, how many of those
are closed and their median first-response time. Use it to find the queue that is quietly not being
worked, not to rank people.
/ticket close and claimed with /ticket transfer.