Support ticket system with multi-panel functionality
Add a user to your ticket
- Usage:
[p]add <user> - Slash Usage:
/add <user> - Checks:
guild_only
Rename your ticket channel
- Usage:
[p]renameticket <new_name> - Slash Usage:
/renameticket <new_name> - Checks:
guild_only
Close your ticket
Examples
[p]close - closes ticket with no reason attached
[p]close thanks for helping! - closes with reason "thanks for helping!"
[p]close 1h - closes in 1 hour with no reason attached
[p]close 1m thanks for helping! - closes in 1 minute with reason "thanks for helping!"
- Usage:
[p]close [reason] - Slash Usage:
/close [reason] - Checks:
guild_only
View ticket analytics and statistics.
- Usage:
[p]ticketstats - Restricted to:
ADMIN - Aliases:
tstats - Checks:
guild_only
Reset statistics data.
Targets:
staff <user>- Reset a specific staff member's statsuser <user>- Reset a specific user's ticket statsserver- Reset all server-wide statsresponsetime- Reset the response time data shown on ticket panelsall- Reset ALL statistics (staff, user, server, and response times)
Examples:
-
[p]ticketstats reset staff @User -
[p]ticketstats reset server -
[p]ticketstats reset responsetime -
[p]ticketstats reset all -
Usage:
[p]ticketstats reset <target> [user=None]
View statistics for a user who has opened tickets.
Arguments:
<user>- The user to view stats for[timespan]- Time period to filter stats (e.g., 7d, 24h, 30m)
Examples:
-
[p]ticketstats user @User -
[p]ticketstats user @User 30d -
Usage:
[p]ticketstats user <user> [timespan=None]
View when tickets are opened most frequently.
Shows hourly and daily distribution of ticket opens.
Arguments:
-
[timespan]- Time period to analyze (e.g., 7d, 30d) -
Usage:
[p]ticketstats busytimes [timespan=None] -
Aliases:
peak and busy
Set how many days of detailed event data to retain.
Older events are pruned but cumulative counters (lifetime stats) are preserved.
Arguments:
[days]- Days to retain (0 = unlimited). Shows current if not specified.
Examples:
-
[p]ticketstats retention- View current setting -
[p]ticketstats retention 90- Keep 90 days of events -
[p]ticketstats retention 0- Keep all events forever -
Usage:
[p]ticketstats retention [days=None] -
Aliases:
dataretention
View detailed statistics for a support staff member.
Arguments:
[member]- The staff member to view stats for (defaults to you)[timespan]- Time period to filter stats (e.g., 7d, 24h, 30m, 2w, 1mo)
Examples:
-
[p]ticketstats staff- Your all-time stats -
[p]ticketstats staff @User- User's all-time stats -
[p]ticketstats staff @User 7d- User's stats for last 7 days -
Usage:
[p]ticketstats staff [member=None] [timespan=None]
View staff leaderboard for a specific metric.
Metrics:
response- Fastest average response timeclosed- Most tickets closedclaimed- Most tickets claimedmessages- Most messages sentresolution- Fastest average resolution time
Arguments:
<metric>- The metric to rank by[timespan]- Time period to filter (e.g., 7d, 24h, 2w)
Examples:
-
[p]ticketstats staffboard response -
[p]ticketstats staffboard closed 7d -
Usage:
[p]ticketstats staffboard [metric=response] [timespan=None] -
Aliases:
leaderboard and lb
View the average staff response time for tickets.
This shows the average time it takes for staff to send their first
response in a ticket, based on the last 100 tickets.
- Usage:
[p]ticketstats responsetime - Aliases:
avgresponse
View server-wide ticket statistics.
Arguments:
[timespan]- Time period to filter stats (e.g., 7d, 24h, 30d)
Examples:
-
[p]ticketstats server -
[p]ticketstats server 7d -
Usage:
[p]ticketstats server [timespan=None] -
Aliases:
global and overview
View statistics for ticket panels.
Arguments:
[panel_name]- Specific panel to view (shows all if not specified)[timespan]- Time period to filter (e.g., 7d, 30d)
Examples:
-
[p]ticketstats panel- All panels overview -
[p]ticketstats panel support 7d- Support panel last 7 days -
Usage:
[p]ticketstats panel [panel_name=None] [timespan=None] -
Aliases:
panels
View users who open the most tickets.
Arguments:
[limit]- Number of users to show (default: 10, max: 25)[timespan]- Time period to filter (e.g., 7d, 30d)
Examples:
-
[p]ticketstats frequent -
[p]ticketstats frequent 20 30d -
Usage:
[p]ticketstats frequent [limit=10] [timespan=None] -
Aliases:
frequentusers and topusers
Base support ticket settings
- Usage:
[p]tickets - Restricted to:
ADMIN - Aliases:
tset - Checks:
guild_only
Toggle blocking ticket creation outside working hours
When enabled, users cannot create tickets outside of the configured working hours.
When disabled (default), users can still create tickets but will see a notice about delayed responses.
- Usage:
[p]tickets blockoutside <panel_name>
(Toggle) Show average response time to users when they open a ticket
- Usage:
[p]tickets showresponsetime
Suspend the ticket system
If a suspension message is set, any user that tries to open a ticket will receive this message
- Usage:
[p]tickets suspend [message]
Set the category ID for a ticket panel
- Usage:
[p]tickets category <panel_name> <category>
Set the row of a panel's button (0 - 4)
- Usage:
[p]tickets row <panel_name> <row>
(Toggle) If users can rename their own tickets
- Usage:
[p]tickets selfrename
Toggle a panel's exclusion from analytics/telemetry tracking.
Panels on the analytics blacklist will not have any ticket events
(opens, closes, claims, messages, response times) recorded.
Arguments:
<panel_name>- The panel name to toggle
Examples:
-
[p]tickets analyticsblacklist apply- Exclude "apply" panel from analytics -
[p]tickets analyticsblacklist apply- Run again to re-include it -
Usage:
[p]tickets analyticsblacklist <panel_name>
Add a support ticket panel
- Usage:
[p]tickets addpanel <panel_name>
View/Delete a ticket message for a support ticket panel
- Usage:
[p]tickets viewmessages <panel_name>
Set the priority order of a panel's button
- Usage:
[p]tickets priority <panel_name> <priority>
Toggle a panel on/off
Disabled panels will still show the button but it will be disabled
- Usage:
[p]tickets toggle <panel_name>
(Toggle) If users can close their own tickets
- Usage:
[p]tickets selfclose
Cleanup tickets that no longer exist
- Usage:
[p]tickets cleanup
(Toggle) Ticket transcripts
Closed tickets will have their transcripts uploaded to the log channel
- Usage:
[p]tickets transcript
Set the button color for a support ticket panel
- Usage:
[p]tickets buttoncolor <panel_name> <button_color>
Set a custom message to display when a ticket is created outside working hours
Leave message empty to reset to default.
The default message will inform users that response times may be delayed.
Example
[p]tickets outsidehoursmsg support Our team is currently offline. We'll respond during business hours!
- Usage:
[p]tickets outsidehoursmsg <panel_name> [message]
Set the button emoji for a support ticket panel
- Usage:
[p]tickets buttonemoji <panel_name> <emoji>
Add a message embed to be sent when a ticket is opened
You can include any of these in the embed to be replaced by their value when the message is sent
{username} - Person's Discord username
{mention} - This will mention the user
{id} - This is the ID of the user that created the ticket
The bot will walk you through a few steps to set up the embed including:
-
Title (optional)
-
Description (required)
-
Footer (optional)
-
Custom color (optional) - hex color code like #FF0000
-
Image (optional) - URL to an image
-
Usage:
[p]tickets addmessage <panel_name>
View the configured working hours for a panel
- Usage:
[p]tickets viewhours <panel_name>
Create an embed for ticket panel buttons to be added to
- Usage:
[p]tickets embed <color> <channel> <title> <description>
Add a modal field a ticket panel
Ticket panels can have up to 5 fields per modal for the user to fill out before opening a ticket.
If modal fields are added and have required fields,
the user will have to fill them out before they can open a ticket.
There is no toggle for modals, if a panel has them it will use them, if they don't then it just opens the ticket
When the ticket is opened, it sends the modal field responses in an embed below the ticket message
Note
field_name is just the name of the field stored in config,
it won't be shown in the modal and should not have spaces in it
Specify an existing field name to delete a modal field (non-case-sensitive)
- Usage:
[p]tickets addmodal <panel_name> <field_name>
Set working hours for a specific day on a panel
Times should be in 24-hour format (HH:MM), e.g., 09:00 or 17:30
Days: monday, tuesday, wednesday, thursday, friday, saturday, sunday
Examples
[p]tickets workinghours support monday 09:00 17:00
[p]tickets workinghours support friday 10:00 18:00
To remove working hours for a day, use [p]tickets workinghours <panel> <day> off
- Usage:
[p]tickets workinghours <panel_name> <day> <start_time> <end_time>
Set the max tickets a user can have open at one time of any kind
- Usage:
[p]tickets maxtickets <amount>
Toggle whether channels are mentioned in the active ticket overview
- Usage:
[p]tickets overviewmention
Ticket Setup Guide
- Usage:
[p]tickets setuphelp
Add/Remove roles required to open a ticket for a specific panel
Specify the same role to remove it
- Usage:
[p]tickets openrole <panel_name> <role>
Set the button text for a support ticket panel
- Usage:
[p]tickets buttontext <panel_name> <button_text>
Set the timezone for a panel's working hours
Use IANA timezone names (e.g., America/New_York, Europe/London, Asia/Tokyo)
Default is UTC if not set.
Examples
[p]tickets timezone support America/New_York
[p]tickets timezone support Europe/London
[p]tickets timezone support UTC
- Usage:
[p]tickets timezone <panel_name> <timezone_str>
Auto-close ticket if opener doesn't say anything after X hours of opening
Set to 0 to disable this
If using thread tickets, this translates to the thread's "Hide after inactivity" setting.
Your options are:
-
1 hour
-
24 hours (1 day)
-
72 hours (3 days)
-
168 hours (1 week)
Tickets will default to the closest value you select. -
Usage:
[p]tickets noresponse <hours>
Set the channel ID where a ticket panel is located
- Usage:
[p]tickets channel <panel_name> <channel>
Set the default ticket channel name for a panel
You can include the following in the name
{num} - Ticket number
{user} - user's name
{displayname} - user's display name
{id} - user's ID
{shortdate} - mm-dd
{longdate} - mm-dd-yyyy
{time} - hh-mm AM/PM according to bot host system time
You can set this to {default} to use default "Ticket-Username
- Usage:
[p]tickets ticketname <panel_name> <ticket_name>
View/Delete a ticket message for a support ticket panel
- Usage:
[p]tickets viewmodal <panel_name>
(Toggle) The bot sending DM's for ticket alerts
- Usage:
[p]tickets dm
Set the logging channel for each panel's tickets
- Usage:
[p]tickets logchannel <panel_name> <channel>
View/Delete currently configured support ticket panels
- Usage:
[p]tickets panels
Add/Remove ticket support roles (one at a time)
Optional: include true for mention to have that role mentioned when a ticket is opened
To remove a role, simply run this command with it again to remove it
- Usage:
[p]tickets supportrole <role> [mention=False]
(Toggle) Auto-add support and panel roles to thread tickets
Adding a user to a thread pings them, so this is off by default
- Usage:
[p]tickets autoadd
View support ticket settings
- Usage:
[p]tickets view
Add/Remove roles for a specific panel
To remove a role, simply run this command with it again to remove it
Optional: include true for mention to have that role mentioned when a ticket is opened
These roles are a specialized subset of the main support roles.
Use this role type if you want to isolate specific groups to a certain panel.
- Usage:
[p]tickets panelrole <panel_name> <role> [mention=False]
Set a channel for the live overview message
The overview message shows all active tickets across all configured panels for a server.
- Usage:
[p]tickets overview [channel]
Toggle whether a certain panel uses threads or channels
- Usage:
[p]tickets usethreads <panel_name>
Set how many staff members can claim/join a ticket before the join button is disabled (If using threads)
- Usage:
[p]tickets maxclaims <panel_name> <amount>
(Toggle) If users can manage their own tickets
Users will be able to add/remove others to their support ticket
- Usage:
[p]tickets selfmanage
Add/Remove users or roles from the blacklist
Users and roles in the blacklist will not be able to create a ticket
- Usage:
[p]tickets blacklist <user_or_role>
(Toggle) Thread tickets being closed & archived instead of deleted
- Usage:
[p]tickets threadclose
Set an alternate channel that tickets will be opened under for a panel
If the panel uses threads, this needs to be a normal text channel.
If the panel uses channels, this needs to be a category.
If the panel is a channel type and a channel is used, the bot will use the category associated with the channel.
To remove the alt channel, specify the existing one
- Usage:
[p]tickets altchannel <panel_name> <channel>
Get a direct download link for a ticket transcript
The HTML transcript can be downloaded and opened in any web browser.
- Usage:
[p]tickets getlink <message>
Update a message with another message (Target gets updated using the source)
- Usage:
[p]tickets updatemessage <source> <target>
Set the message ID of a ticket panel
Run this command in the same channel as the ticket panel message
- Usage:
[p]tickets panelmessage <panel_name> <message>
Throw a modal when the close button is clicked to enter a reason
- Usage:
[p]tickets closemodal <panel_name>
(Toggle) Interactive transcripts
Transcripts will be an interactive html file to visualize the conversation from your browser.
- Usage:
[p]tickets interactivetranscript - Aliases:
intertrans, itrans, and itranscript
Set a title for a ticket panel's modal
- Usage:
[p]tickets modaltitle <panel_name> [title]
Open a ticket for another user
- Usage:
[p]openfor <user> <panel_name> - Slash Usage:
/openfor <user> <panel_name> - Restricted to:
MOD