Plugins

Tickets

Premium
Support tickets from a panel button or dropdown — ticket types, staff roles, limits, transcripts and channel naming.

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.

LicensePremium
NeedsManage 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.

Creating a panel

Panel channel

Required · fixed after creation

Where the panel message is posted. Members need to see this channel to open a ticket.

Ticket types

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.

Staff roles

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.

Log channel

Optional

Ticket events (created, claimed, deleted) and transcripts are posted here. Strongly recommended — without it, a closed ticket is gone.

Ticket types

One panel can offer several kinds of ticket. This is the feature that changes how the panel looks:

TypesPanel renders as
1A single button
2–25A 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:

FieldLimitEmpty means
Discord categoryrequired—
Labelup to 100 characters—
Descriptionup to 100 charactersNo second line in the dropdown
EmojioptionalNo icon. A malformed emoji, or a server emoji Cloudy cannot see (deleted, or from another server), is skipped and the option still works
Staff rolesup to 10 · optionalThe panel's staff roles apply
Opening messageup to 2000 characters · optionalThe panel's welcome message is used
Give each type its own Discord category if the ticket kinds need different staff visibility — support, reports and applications rarely want the same audience.

Removing a type from a panel leaves tickets already opened under it untouched.

Panel branding

All optional; empty uses the built-in default in your server's language (English defaults shown).

FieldLimitDefault
Panel title256 characters🎫 Ticket System
Panel description2000 charactersClick 'Create Ticket' to open a support ticket.
Button label80 charactersCreate Ticket — the label of type 1 once the panel has types
Button emoji64 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.

Inside a ticket

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.

Welcome message

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.

Channel name template

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

Cloudy lowercases the name and replaces anything that is not a letter, digit, dash or underscore with a dash. A template with capitals or punctuation still works, it just does not look the way you typed it.

Intake form

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 propertyNotes
LabelUp to 45 characters — Discord's limit
PlaceholderOptional grey hint inside the input, up to 100 characters
StyleShort (one line) or paragraph (multi-line)
RequiredWhether 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.

Five is Discord's hard cap on inputs in one modal, not a Cloudy limit. Ask the questions that change what staff does first; the rest belongs in the conversation.

Priority

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.

Inactivity handling

Two timers, both off by default (0), that close tickets nobody is answering. Each goes up to 10080 minutes (7 days).

SettingEffect
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.

A common pair is a warning after 24 hours and a close 48 hours after that. It clears the abandoned tickets without cutting off anyone who is still replying.

Limits and cleanup

Open tickets per member

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.

Count that limit

category or panel · default category

ValueMeaning
Per categoryThe limit applies within each ticket type's category — one support ticket and one report ticket at once
Per panelEvery type on the panel counts together — one open ticket, full stop

Auto-delete after close

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.

Set a log channel before raising this above zero, or set it high. Once the channel is deleted the conversation exists only in the transcript — if there is no log channel, it exists nowhere.

Useful values: 0 if you always want a clean category, 1440 (24 h) if staff sometimes needs to reread a ticket the next day.

Transcripts

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.

Commands

CommandDoesRequires
/ticket addAdd a member to the current ticketManage Messages
/ticket removeRemove a member from the current ticket (not the opener, not a bot)Manage Messages
/ticket priorityChange this ticket's priorityManage Messages
/ticket transferHand the ticket to another staff member who can see itManage Messages
/ticket closeClose and delete the current ticket, exactly like Delete TicketThe opener or staff
/ticket-statsThroughput 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.

Claiming and transferring

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.

Behaviour notes

  • The bot posts a new panel within about 30 seconds (Pending badge). If the panel channel was deleted in the meantime, the panel is removed instead.
  • Editing branding re-renders the existing message — the button keeps working.
  • Deleting a panel takes the Discord message down first, then the entry. Tickets already open stay, and so does the record of every ticket the panel ever opened (history, transcript links, stats). A ticket whose panel is gone can still be claimed and closed by anyone with Manage Messages in its channel.
  • If the panel message itself is deleted, the panel entry is removed as well; open tickets stay.
  • A ticket channel deleted by hand is recorded as closed.
  • After a white-label handover, a panel the main Cloudy bot posted is reposted by your own bot the next time it is refreshed (a bot cannot edit another bot's message).
  • A button always reaches the bot that posted it. During a white-label handover your own bot therefore reposts the Claim / Delete buttons of every open ticket, and the main bot's old buttons are removed. Tickets that were open before this existed (or whose buttons could not be moved) are closed with /ticket close and claimed with /ticket transfer.
  • A member can only have one ticket creation in flight at a time; a double-click does not open two.
  • Cloudy needs Manage Channels on the ticket category and its role above the staff roles it grants access to.