Ticket System
This page explains how Ticketo's ticket system works end-to-end — from creation to closure.
Overview
A ticket in Ticketo is a private Discord channel (or thread) created for a user to communicate with your server's support staff. Tickets track the full conversation, can be claimed by individual staff members, and produce transcripts when closed.
Ticket Creation
There are several ways to create a ticket:
1. Panel Button (Most Common)
Users click a button or select an option on a ticket panel — an embed message posted in a channel by an administrator.
Each button/option can be configured with:
A ticket category (determines the Discord category channel)
Custom questions (shown as a modal before creation)
Required roles (only users with specific roles see the button)
Custom opening messages
Thread or channel mode
2. Slash Command
/createticket— Staff can create a ticket on behalf of another userOptions:
user(required),type(optional category),reason(optional)
3. Context Menu
Right-click a message → Create Ticket — Creates a ticket referencing that message
Right-click a user → Create Ticket — Staff can create a ticket for a user (staff only)
What Happens During Creation
When a ticket is created, Ticketo performs these steps in order:
Rate limit check — 5-second cooldown per user per guild
Blocklist check — Rejects users/roles on the blocklist
Communication check — Rejects users who are timed out
Quota check — Enforces
maxActiveTickets(guild-wide) andmaxActiveTicketsPerUserTopic prompt — If the category has
requireTopicenabled and no topic was provided, a modal appearsQuestions modal — If the panel has custom questions, a modal appears for the user to fill in
Ticket number — A sequential number is assigned (continuous across categories, or per-user depending on settings)
Channel/thread creation — A private channel or thread is created in the configured Discord category
Permissions — The ticket creator and support staff roles are granted access; everyone else is denied
Opening message — An embed is posted with ticket info, answers to questions, and action buttons (Claim, Close)
Staff thread (optional) — If
createStaffThreadis enabled, a private thread is created for staff discussionSupport role ping (optional) — If
pingSupportRolesis enabled, support roles are mentionedDatabase record — The ticket is saved with all metadata
Ticket Channels vs. Threads
Ticketo supports two ticket styles:
Channel
Creates a private text channel in a Discord category
Default; best for longer support interactions
Thread
Creates a private thread in the current channel
Good for quick questions; less channel clutter
The ticket style can be set:
Per-guild via the
manualTicketStylesettingPer-panel via the panel's
ticketStylepropertyPer-button via the button's
useThreadoverride
Thread Ticket Behavior
When a thread ticket closes:
archiveThreadTickets: "archive"— The thread is archived (can be reopened)archiveThreadTickets: "delete"— The thread is deleted (default)
Ticket States
A ticket progresses through these states:
State
open
claimedById
closedAt
Description
Open
true
null
null
Active ticket, any staff can view
Claimed
true
User ID
null
Active ticket, assigned to specific staff
Closed
false
—
Timestamp
Resolved; channel deleted or archived
Claiming
Claiming assigns a ticket to a specific staff member, optionally restricting access to only that person.
How to Claim
Click the Claim button on the ticket's opening message
Use the
/claimslash command in the ticket channel
Claiming Modes
disabled
Claiming is not available
no-changes
Ticket is marked as claimed but no permission changes occur
readonly
Needs verification — Behavior not fully confirmed
private
Other support roles lose access; only the claimer and creator can view
Unclaiming
Click the Unclaim button (replaces Claim after claiming)
Use the
/releaseslash commandUnclaiming restores access for all support roles
Claim Notifications
If pingTicketAuthorOnClaim is enabled, the ticket creator is pinged when a staff member claims their ticket.
Closing
Close Flow
Closing a ticket can follow one of three paths depending on settings:
Flow A — Confirmation Prompt (default when confirmClosePrompt is true):
Flow B — Reason Required (when closeRequiresReason is true):
Flow C — Direct Close (when confirmClosePrompt is false):
Who Can Close
The ticket creator can always close their own ticket
Staff members (support roles) can close any ticket
If
closeRequiresSupportRoleis enabled, only support role holders can close
Close Request
The /closerequest command allows anyone in a ticket to request closure. This posts a message asking staff or the creator to confirm.
What Happens on Close
Archive threads (if applicable)
Fetch and save pinned messages
Update the database record:
open→falseclosedAt→ current timestampclosedById→ the user who closedclosedReason→ encrypted reason textmessageCount→ number of archived messages
Generate a transcript snapshot (if
archiveis enabled)Delete or archive the channel/thread
Send a DM to the ticket creator with:
Ticket number and dates
Close reason
Feedback rating (if submitted)
Link to transcript (if archived)
Log the close event to log channels
Invalidate caches
Feedback
If enableFeedback is enabled (globally or per-category), the ticket creator is shown a feedback modal after closing:
Rating — 1 to 5 stars
Comment — Optional free-text comment (encrypted at rest)
Feedback is stored in the Feedback table and viewable on the dashboard's Feedback page.
Feedback is only collected from the ticket creator, not from staff.
Auto-Close & Stale Tickets
Ticketo can automatically close inactive tickets to keep your server clean.
Configuration
autoClose— Close tickets after this many milliseconds of inactivitystaleAfter— Mark tickets as stale (show a warning) after this duration
How It Works
The bot runs a background check every 15 minutes:
Warning Phase — If a ticket has been idle longer than the threshold, a warning embed is posted: "This ticket will be closed soon due to inactivity."
Grace Period — The grace period is 25% of the threshold (minimum 15 minutes, maximum 4 hours)
Mid-Grace Reminder — Halfway through the grace period, a "closing soon" message is sent
Auto-Close — When the grace period expires, the ticket is automatically closed
Reactivation
If anyone sends a message in the ticket during the warning or grace period, the auto-close is cancelled and the ticket returns to its normal active state.
Auto-Close on Leave
If autocloseLeave is enabled, tickets are automatically closed when the creator leaves the Discord server.
Escalation
Staff or ticket members can escalate a ticket to a specific role.
How to Escalate
This:
Posts a public message in the ticket channel mentioning the target role
Includes the optional reason
Logs the escalation to the log channel (if configured)
Escalation does not change the ticket's status or assigned staff — it simply notifies the target role.
Priority
Staff can assign a priority level to a ticket:
Available priorities:
HIGH
MEDIUM
LOW
Priority is stored on the ticket record and can be used for filtering in the dashboard.
This command is rate-limited to 2 changes per 10 minutes to prevent abuse.
Adding and Removing Members
Add to Ticket
Grants the specified user or role access to view and send messages in the ticket channel.
Remove from Ticket
Revokes access from the specified user or role.
Only the ticket creator or staff can add/remove members.
Renaming Tickets
Changes the Discord channel name of the ticket. Limited to 1-100 characters.
This command is rate-limited due to Discord's channel rename rate limits.
Staff Threads
If createStaffThread is enabled in settings, each new ticket automatically creates a private thread alongside the ticket channel. This thread is visible only to staff and is used for internal discussion about the ticket.
Use /thread to manually create a staff thread in any ticket.
Ticket References
Tickets can reference:
Another ticket — For follow-ups or related issues
A specific message — When created from the message context menu
Referenced content is displayed in the ticket's opening message.
Last updated