Ticket System
1. Feature Brief
Section titled “1. Feature Brief”The Ticket System provides a complete, GUI-driven support workflow for your server. A persistent ticket menu embed lives in a designated channel; members pick a type from a dropdown, fill in a modal form, and receive a private channel instantly. Staff manage tickets through a pinned control panel inside each channel, and an HTML transcript is automatically generated and delivered on close.
- Type-based creation - members choose a ticket type from a dropdown; each type triggers its own custom modal with up to 5 intake questions
- Private ticket channels - each ticket gets its own text channel inside a configured category, visible only to the opener, the support role, and the bot
- Pinned control panel - a control panel embed is pinned in every ticket channel with Claim, Add User, and Close buttons
- Staff claim system - staff can claim a ticket to indicate ownership; the Claim button disables and shows who claimed it
- Add User - staff can add any server member to a ticket channel by entering their user ID via a modal
- HTML transcript on close - closing a ticket generates a full HTML transcript, DMed to the ticket creator and posted to the log channel
- Ticket type manager - admins can add, remove, and edit ticket types and their per-type questions from the
/ticket adminGUI without re-running setup - Auto-incrementing ticket IDs - each ticket is numbered sequentially per server with built-in protections to prevent duplicate IDs even during high traffic
2. Sub-Systems
Section titled “2. Sub-Systems”The ticket menu is a persistent embed posted in the configured menu channel. It lists all active ticket types with their names and descriptions, shows the current active ticket count for the server, and contains a dropdown to select a type.
- The menu is automatically updated (active count, type list) whenever a ticket is opened or closed
- If the menu message is deleted, it is recreated automatically the next time an update is triggered
Each member can have only one open ticket at a time. Attempting to open a second ticket shows a link to the existing one.
After selecting a ticket type, a modal opens with the questions configured for that type. Up to 5 questions per type. Each question has:
| Property | Options |
|---|---|
| Label | Up to 45 characters |
| Placeholder | Up to 100 characters |
| Style | short (single line) or paragraph (multi-line) |
| Required | Yes or No |
| Max Length | 100 for short, 1,000 for paragraph |
If a ticket type has no questions, the ticket channel is created directly without showing a modal. The modal has a 10-minute submission window before it times out.
All answers are displayed as fields in the ticket channel’s opening embed, with “No answer provided” for any skipped optional fields.
Default ticket types (active until customised):
| Type | Questions |
|---|---|
| General Support | Subject, Description |
| Report Issue | Report Type, Details, Evidence (optional) |
| Appeal/Complaint | Action Being Appealed, Why it should be appealed, Additional Info (optional) |
| Application | Position, Experience & Qualifications, Why should we accept you |
A control panel embed is sent to the ticket channel immediately after creation and pinned automatically.
| Button | Who can use it | Behaviour |
|---|---|---|
| Claim | Support role or Manage Channels | Marks the ticket as claimed by the staff member; adds a “Claimed By” field to the embed; disables the Claim button |
| Add User | Support role or Manage Channels | Opens a modal to enter a user ID; grants the member View, Send, Read History, and Attach Files permissions; notifies the added user in-channel |
| Close | Ticket creator, support role, or Manage Channels | Shows a confirmation prompt with a 30-second window; on confirm, generates a transcript, sends it via DM and to the log channel, then deletes the ticket channel |
A ticket can only be claimed once - attempting to claim an already-claimed ticket shows who currently holds it.
Transcripts are generated as a full HTML file capturing the entire message history including images. The file is named transcript-<channel-name>-<timestamp>.html.
On close, the transcript is:
- DMed to the ticket creator with an embed showing the channel name, who closed it, and the close timestamp
- Posted to the log channel (if configured) alongside a log embed showing the user, channel, closer, ticket type, creation time, and total duration
Event logging posts colour-coded embeds to the log channel for:
| Event | Colour |
|---|---|
| Ticket created | 🟢 Green |
| Ticket closed | 🔴 Red |
| Ticket claimed, user added | 🟠 Orange |
Accessible via /ticket admin → Manage Types. The admin panel closes after 5 minutes of inactivity.
Type operations:
- Add Type - modal to set the type’s name, ID, emoji, and description; new types start with no questions
- Remove Type - dropdown to pick and delete a custom type (only available when at least one custom type exists)
- Reset Types - resets back to the 4 default types, removing all custom types and questions
Per-type question operations (via the Questions button on a type):
- Add Question - modal with label, placeholder, style (
short/paragraph), and required (yes/no) fields - Edit Question - select a question from a dropdown then edit all its properties via modal; max length is auto-set (100 for short, 1,000 for paragraph)
- Remove Question - select a question from a dropdown to delete it
Once any custom type or question is added, the server switches to Custom Configuration mode and the default types no longer apply.
3. Setup
Section titled “3. Setup”-
Run the setup command - use
/ticket setupwith the required options:menu-channel- the channel where the ticket selection embed will be postedcategory- the channel category where ticket channels will be created
Optional options:
log-channel- a channel to receive creation, closure, claim, and user-add eventssupport-role- a role that is pinged on new tickets and has staff permissions in all ticket channels
-
Verify the menu - confirm the ticket embed has appeared in the menu channel with the correct types listed and a working dropdown.
-
Customise ticket types Optional - run
/ticket adminand open Manage Types to add server-specific types, or edit the default ones’ questions to fit your intake needs. -
Test a ticket - open a test ticket as a regular member, verify the channel is created with the correct permissions and a pinned control panel, then close it to confirm the transcript DM and log channel post work correctly.