Skip to main content

Overview

Tickets route support requests through a panel instead of a flood of DMs. Everything below requires the Manage Guild permission unless it’s a per-ticket action any member can use. The dashboard has the same under Community → Tickets: panels with a live preview, support types, ticket forms, access, settings, quick replies and the open tickets.
The Ticket panels page with the setup steps done and a panel with Support, Report a member and Partnership buttons

Dashboard → Community → Tickets: the setup steps and a panel with its preview in Discord.

!ticketconfig shows in one card what the server has set for tickets and every ticket command.
liam types !ticketconfig and Petto answers with the Tickets config card: claim mode, closing, ratings, log channels, limits and staff hours, then every ticket command

In Discord: !ticketconfig with the settings of tickets and the commands to change them.

!ticketconfig shows in one card what the server has set for tickets and every ticket command. !ticketconfig shows in one card what the server has set for tickets and every ticket command. !ticketconfig shows in one card what the server has set for tickets and every ticket command. !ticketconfig shows in one card what the server has set for tickets and every ticket command. !ticketconfig shows in one card what the server has set for tickets and every ticket command. !ticketconfig shows in one card what the server has set for tickets and every ticket command.

Guided setup

!ticket setup opens a panel with menus and buttons that sets up everything in one place: pick the channel for the ticket panel, the support roles and a log channel, write the title and text, add the ticket types (name, emoji and short description), choose the button color and whether members see buttons or a dropdown, and publish it all with one press. If the panel cannot be posted, nothing is kept. Each type can then be fine-tuned from the dashboard or with !ticket category edit.
1

Run !ticket setup

Petto answers with the setup panel. Nothing is posted until you press Publish, and the panel channel starts as the channel you typed in.
liam types !ticket setup and Petto answers with the setup panel: the panel channel, the support roles and the log channel, an example Support type, three menus and the Title & text, Add type, Color, Use dropdown, Publish and Cancel buttons

In Discord: the setup panel of !ticket setup as it opens.

2

Pick the channels and the roles

Use the three menus: where to post the panel, the support roles that answer tickets, and an optional log channel for opened and closed tickets. Each line gets a check when it is set.
The setup panel with #open-a-ticket as panel channel, Helpers and Moderators as support roles and #ticket-logs as log channel, each with a check

In Discord: the panel channel, two support roles and the log channel are set.

3

Write the title and the text

Title & text opens a form with the title and the text of the panel.
The Panel title and text form with Need help? as title and the text shown above the buttons

In Discord: the form of Title & text.

4

Add the ticket types

Add type asks for the name of the button, an emoji, a short description for the dropdown and, if you want, the welcome text of that type.
The Add a ticket type form with Report a member as name, the siren emoji, a short description and a welcome text with {user}

In Discord: the form of Add type.

5

Choose the look

Color changes the color of the buttons each time you press it, and Use dropdown switches to a dropdown (up to 25 types instead of 5). The panel shows what members will see.
The setup panel with the title Need help?, the Support, Report a member and Partnership types with green dots, and the line Own welcome text set, Buttons, Green buttons, 3/5 ticket types

In Discord: three types, green buttons and the welcome text of one type.

6

Publish

Publish posts the panel and makes the types. Without a panel channel or a support role, Petto says what is missing and nothing is posted.
Petto answers that the ticket system is ready, with the panel in #open-a-ticket and 3 ticket types

In Discord: the setup panel becomes the ready message.

The panel in #open-a-ticket: Need help?, the text, and the green Support, Report a member and Partnership buttons

In Discord: the panel the setup posted.

Under the setup panel Petto answers, only to liam, to first choose at least one support role

In Discord: Publish with no support role yet.

Panels

The message members click to open a ticket.
kira types !ticket panel create in #open-a-ticket with a title, a text, the button style and the color; Petto posts the card and answers that panel 1 was posted

In Discord: a panel posted with a command, before it has types.

The panel of #open-a-ticket now blue and with a small line under it; kira typed !ticket panel edit 1 with a footer and a color and Petto answers that panel 1 changed and its message was updated

In Discord: the panel changes in its place.

kira types !ticket panel delete 2 and Petto answers that panel 2 was deleted

In Discord: a panel deleted.

kira types !ticket panel resend 1 and Petto answers that panel 1 was resent in #open-a-ticket

In Discord: a panel posted again.

kira types !ticket panel list: panel 1 in #open-a-ticket with buttons and 3 categories, panel 2 in #apply as a dropdown with none

In Discord: the panels of the server.

style is button (max 5 categories) or select (dropdown, max 25 categories).
The panel Need help? with the dropdown What do you need help with? open: Support, Report a member and Partnership, each with its emoji and description

In Discord: a panel with style select, its dropdown open.

How a panel looks

A panel is a card: a picture on top (optional), the title, the text, a small line under it, and the buttons or the dropdown under the card. In the dashboard you can pick the color of the card (the stripe on its side; with no color the card has none, even if the preview shows green), the picture (a link that starts with https), the small text and, for a dropdown, the text it shows before choosing. A live preview shows what members will see.
The card of the panel of #open-a-ticket, posted, with the title, the text, the style, the card color, the picture, the small text and the saved design, and on the right the preview with its three buttons

Dashboard → Community → Tickets: a panel with its live preview.

The dashboard also has ready designs you can start from (classic support, help center with a dropdown, reports, applications and minimal). They only fill the form: you can change anything before posting. A design saved in Embeds can still replace the card.
The New panel section with the Classic support, Help center (dropdown), Reports, Applications and Minimal designs, the form to post a panel and its preview

Dashboard → Community → Tickets: New panel, with the ready designs.

Categories

What a panel’s button or dropdown option actually opens.
The Support types page with Support, Report a member and Partnership, 3 of 25, each with How it looks on the panel open, and the Add a support type part with Start with a ready set

Dashboard → Community → Support Types: each type with its panel, look, opening and staff, and the ready set.

kira types !ticket category add 1 partner Partnership SUPPORT @Partner Manager with an emoji and Petto answers that category partner was added to panel 1

In Discord: a category added to panel 1.

kira types !ticket category edit support --emoji 💬 --max_open 2 and Petto answers that category support was updated

In Discord: a category changed with flags.

kira types !ticket category remove partner and Petto answers that category partner was removed

In Discord: a category removed.

kira types !ticket category list: support, report and partner, each with its label, panel 1, the parent channel category and its support roles

In Discord: the categories of the server.

naming supports {number}, {username}, {userid} and {category}, defaults to ticket-{number}. max_open is the cap per user for that category, defaults to 1. Each category can have its own welcome text with --welcome (in !ticket category add and edit, or in the setup panel), without needing a saved embed. It supports {user}, {username}, {category}, {server} and {number}.

Naming and welcome examples

Command
Result
Names are made lowercase, and spaces, accents and symbols become -.
kira sets the naming {category}-{username}-{number} for support, then opens a ticket with !ticket open support and Petto answers Ticket opened: #support-kira-0043

In Discord: the new naming, then a ticket that uses it.

Only these placeholders work in names and welcome texts; other variables like {server_name} stay as written there. !ticket category add and !ticket category edit also take form (the name of a form, or none in edit to remove it) and required_role (a role members need to open the category). In the prefix form, write them as flags: !ticket category edit support --form bug-report.

Support roles & ping roles

Beyond the one required at creation, add more roles that can see a category’s tickets, or roles pinged when one opens.
kira adds @Senior-Staff as a support role of support and Petto confirms it

In Discord: a role added.

kira removes @Senior-Staff from the support roles of support and Petto confirms it

In Discord: a role removed.

kira lists the support roles of support: Helpers and Senior-Staff

In Discord: the roles of a category.

kira adds @on-call as a ping role of support and Petto confirms it

In Discord: a role added.

kira removes @on-call from the ping roles of support and Petto confirms it

In Discord: a role removed.

kira lists the ping roles of support: Helpers and on-call

In Discord: the roles of a category.

Required roles

Limit a category to members that have a role (for example, a paid or verified role).
kira makes @VIP required for vip-support and Petto confirms it

In Discord: a role added.

kira removes @VIP from the required roles of vip-support and Petto confirms it

In Discord: a role removed.

kira lists the required roles of vip-support: VIP

In Discord: the roles of a category.

Under the panel, now with a VIP support button, Petto answers only to the member: You need @VIP to open this ticket

In Discord: a member without @VIP presses VIP support.

To keep a member or a role from opening tickets at all, use the ticket blacklist (a role entry applies to every member with that role). The dashboard has it in Ticket Access.
kira types !ticket blacklist add @griefer_99 with a reason and Petto answers that griefer_99 was added to the ticket blacklist

In Discord: a member blocked from tickets, with a reason.

kira types !ticket blacklist remove @griefer_99 and Petto answers that griefer_99 was removed from the ticket blacklist

In Discord: a member taken out of the blacklist.

kira types !ticket blacklist list: griefer_99 with the reason, and the Muted role

In Discord: who cannot open tickets.

The Ticket access page with griefer_99 and the Muted role blocked, each with Unblock, and the form to block a member or role

Dashboard → Community → Ticket Access: the blocked members and roles.

To keep a member or a role from opening tickets at all, use the ticket blacklist (a role entry applies to every member with that role). The dashboard has it in Ticket Access.
To keep a member or a role from opening tickets at all, use the ticket blacklist (a role entry applies to every member with that role). The dashboard has it in Ticket Access.
To keep a member or a role from opening tickets at all, use the ticket blacklist (a role entry applies to every member with that role). The dashboard has it in Ticket Access.
To keep a member or a role from opening tickets at all, use the ticket blacklist (a role entry applies to every member with that role). The dashboard has it in Ticket Access.
To keep a member or a role from opening tickets at all, use the ticket blacklist (a role entry applies to every member with that role). The dashboard has it in Ticket Access.
To keep a member or a role from opening tickets at all, use the ticket blacklist (a role entry applies to every member with that role). The dashboard has it in Ticket Access.

Staff hours and limits

In Ticket Settings you can set:
  • Open tickets at the same time per member, for the whole server (0 for no limit). Each type has its own limit too.
  • Staff hours: days, from and until, and a timezone. Outside them the ticket opens with a note that says when the staff answers (you can write the message, with {start}, {end} and {timezone}, for example Our team is offline. We answer from {start} to {end} ({timezone}).), or you can choose to not let tickets open at all.
Under the panel, Petto answers only to the member that they already have 1 open ticket and the limit of the server is 1

In Discord: a member at the limit of the server tries to open another ticket.

A new ticket with its welcome card and, under it, the note that the staff is away and answers between 14:00 and 22:00 (America/Bogota)

In Discord: a ticket opened outside the staff hours gets the note.

  • Reminder for unclaimed tickets: after the minutes you choose, the support roles of the type are pinged once in a ticket nobody has claimed (0 for no reminder).
In ticket 0042 enderwolf asks for help; later Petto pings Helpers: the ticket has been waiting for 30 minutes and nobody claimed it

In Discord: nobody claimed the ticket in 30 minutes, so its support roles are pinged once.

Every ticket channel also gets a topic with its number, its type and who opened it, so staff see it at a glance.
  • Automatic deletion: the channel of a closed ticket is deleted after the hours you choose (the transcript is kept). 0 keeps the channels until someone deletes them.
The Ticket settings page: a reminder after 30 minutes, closed channels deleted after 48 hours, the transcripts channel, 2 open tickets per member and staff hours from 9:00 to 22:00, Monday to Saturday, with their own message

Dashboard → Community → Ticket Settings: claiming, closing, transcripts, autoclose, ratings, logs, limits, staff hours and blocked roles.

Quick replies

Texts the staff send inside a ticket with one command, for the questions that come up again and again.
kira saves the quick reply rules and Petto answers that it was saved and how to send it

In Discord: a quick reply saved.

In ticket 0042 enderwolf says it works now; shi types !qr send solved and Petto posts the text with the name of the member, the number 0042 and Petto Land, then Sent

In Discord: a quick reply sent in a ticket.

shi types !quickreply list: booster-role, rules and solved, each with the start of its text

In Discord: the quick replies of the server.

kira types !quickreply remove booster-role and Petto answers that it was deleted

In Discord: a quick reply deleted.

add and remove need Manage Server; send only works inside an open ticket and only for its staff. You can use {user}, {username}, {category}, {server} and {number}. You can keep up to 50, and they can also be managed in the dashboard (Quick replies).
The Quick replies page with booster-role, rules and solved, each with !qr send and its text, and the New quick reply form

Dashboard → Community → Quick replies: the saved texts and a new one.

In the dashboard, the Live tickets page also shows the numbers of your tickets, and Support Types can add a ready set (Support, Report a player, Purchases and Appeals) in one press.
The Live tickets page: 3 open, 1 without a claimer, 11 opened and 8 closed in 7 days, 3 h 38 min open on average and a 4.5 rating, the three open tickets, the closed ones with a Transcript button and the chart of 14 days

Dashboard → Community → Live tickets: the numbers, the open tickets and the closed ones with a transcript.

Every automatic thing here starts off or at 0: the reminder, the automatic deletion of closed channels, the limit, the staff hours and the autoclose. Nothing is deleted or closed on its own until you turn it on.

Ticket AI (soon)

The AI assistant for tickets is a closed beta: only the servers the Petto team turned it on for see an AI assistant page under Community → Tickets, and only there it can greet members and write first answers in tickets. Other servers have no such page yet. It will be a separate Premium product, sold on its own and not included in the Premium plan. !ticket stats (Manage Server) shows the numbers of your tickets: how many are open and unclaimed, opened and closed in the last 7 and 30 days, the average time a ticket stays open, the average rating and who claims the most.
liam types !ticket stats: 5 open (2 without anyone claiming), 16 opened and 11 closed in 7 days, 3 h 31 min open on average, a 4.5 rating out of 41, and shi, chu, kira and Chillet as the ones who claim the most

In Discord: the numbers of the tickets of the server.

Closing with a reason, the DM with the transcript, ratings, reopening and deleting a closed ticket are in the same page. Like every DM from Petto, the transcript and close DMs start with a From <server> line and have info, delete and report buttons: see DMs from Petto.

Transcripts

A transcript is the saved conversation of a ticket. It is made when the ticket closes, or when staff press the transcript button. In Ticket settings > Transcripts you choose:
  • Transcripts channel: every transcript is also sent there, apart from the logs. Empty means it is not used.
  • How it is sent: automatic (a link, or the file if the server has no link), only the link, only the HTML file, or both. It applies to the logs, the transcripts channel and the message to the opener (who only gets it if the option to send it on close is on).
The Transcripts card with #transcripts as transcripts channel and Link and file as how it is sent

Dashboard → Community → Ticket Settings: the Transcripts card.

In #transcripts Petto posts the transcript of ticket 42 opened by enderwolf, with View online, the View Transcript button and the file ticket-42-transcript.html

In Discord: the transcript of a closed ticket in the transcripts channel, with the link and the file.

A DM from Petto: Your ticket 0042 was closed, with the server, the category, who handled and closed it, the reason, when it opened and the channel, the five star buttons to rate it and View Transcript

In Discord: the DM the member gets when the ticket closes.

Closed tickets with a saved transcript are listed in the Live tickets page of the dashboard, each with a Transcript button that opens it.
The Closed, with transcript list: tickets 0041 to 0030 with their type, who opened them, when they closed and the reason, each with a Transcript button, and the chart of the last 14 days

Dashboard → Community → Live tickets: the closed tickets with a transcript.

Forms

A form is a short questionnaire (a Discord pop-up) shown to the member before the ticket opens, so staff get the details they need up front. Create a form once and attach it to any category.
The Ticket forms page with bug-report and partner-info, each with its title and fields, and the New form part

Dashboard → Community → Ticket Forms: the forms and their fields.

kira types !ticket form create bug-report with two fields and a title and Petto answers that the form bug-report was created

In Discord: a form made from its fields.

kira types !ticket form edit bug-report --title and Petto answers that the form was updated

In Discord: a new title for a form.

kira types !ticket form delete partner-info and Petto answers that it was deleted

In Discord: a form deleted.

kira types !ticket form list: bug-report with 2 fields and partner-info with 3

In Discord: the ticket forms of the server.

The easy way is with buttons: !ticket form create <name> (and !ticket form edit <name>), without fields, opens a panel where you add questions with a button (short answer, paragraph, choices, file upload, member, role or channel picker, or a text), set a hint and whether each one is required, remove the last one, change the title and save. The dashboard has a fuller builder, with every kind of question. The fields text below still works for anyone who prefers it.
kira types !ticket form create appeal and Petto answers with the builder: Ticket details with a short answer and a paragraph question, both required, and the Add short answer, Add paragraph, Remove last, Title, Save and Cancel buttons

In Discord: the form builder with two questions.

The Add a short question form with the question Which sanction?, the hint and yes in Required

In Discord: Add short answer asks for the question, a hint and whether it is required.

fields are 1 to 5 fields separated by ;, and each field is type|id|label|placeholder|required: title is the title of the pop-up, up to 45 characters (default “Ticket details”). The answers are posted in the new ticket, and saved with it.
The Report a bug form with What happened? (required) and Device, filled in by the member

In Discord: the form a member fills before the ticket opens.

The new ticket 0043 with its welcome card, then Petto posts Submitted form with the answer to What happened? and Device

In Discord: the answers, posted in the new ticket.

Kinds of question

Besides short answers and paragraphs, a question can be any of these. A form still holds at most 5 parts (a text that only informs counts as one, it is a Discord limit) and at least one of them has to be something members answer. Every question can also have a short help text under it. A question is required unless you make it optional, except a single checkbox, which Discord cannot require and which Petto only requires if you ask it to.
Example

Pictures and files

Discord’s links to the files a member uploads in a form can stop working, so Petto copies each file into the ticket: it downloads it (only from public addresses, up to 8 MB per file, never more than the server’s upload limit) and uploads it again in the ticket channel, where it stays as long as the ticket does. A ticket copies up to 10 files.
  • Pictures (PNG, JPG, GIF and WebP) are drawn in the answers as a gallery.
  • Other files are shown as files, with their name and size, ready to download.
  • A question set to pictures only checks the type and the first bytes of each file. Anything else is refused with a private message in the form, and no ticket is opened.
  • If a file cannot be copied (it is too big, the download failed or the ticket already has 10 files), the answers keep its link, name and size and say that the link may stop working.

How the answers look

The answers are posted in the new ticket, after the welcome message, and nobody is notified by them: mentions of members, roles and channels are shown but do not ping, and @everyone never works. A long answer is cut at 1000 characters, and when there is a lot of text, many files or a lot of weight, the answers continue in more cards. The transcript shows the same card, with the pictures drawn once and the files as links, and file names are shown as plain text. In the dashboard (Community > Ticket Forms) each question has its own kind, the choices are written one per line, a file upload says whether it takes pictures only or any file and how many (1 to 5), a question can be required, the arrows move it up or down, and a preview shows the Discord window. It saves forms the same way as before, and the forms you already have keep working as they are.

Using a ticket

Ticket buttons fix themselves. A button pressed late, or on a ticket whose channel is already gone, no longer shows an error. If something really fails, Petto tells the member to try again and that the team was told.
Ticket 0042 of the Support type pings Helpers with the welcome card and the Claim, Close, Transcript, Add Member and Remove Member buttons; enderwolf explains the problem and shi claims the ticket

In Discord: a new ticket, the member's first message and a staff member claiming it.

Nova types !ticket open support in #bot-commands and Petto answers Ticket opened: #support-0043

In Discord: a ticket opened without a panel.

Under the panel, Petto answers only to the member: Ticket opened: #support-0043

In Discord: a member presses Support on the panel.

shi types !ticket claim in ticket 0042; Petto posts Ticket claimed, shi is taking care of it, and answers You claimed this ticket

In Discord: a ticket claimed.

shi types !ticket unclaim; Petto posts Ticket unclaimed and answers Claim released

In Discord: a claim released.

enderwolf thanks the staff, shi types !ticket close with a reason and Petto posts Ticket 0042 closed with the reason and the Reopen, Delete and View Transcript buttons

In Discord: a ticket closed with a reason.

The Close Ticket form with an optional reason written

In Discord: the Close button asks for an optional reason.

shi types !ticket reopen; Petto posts Ticket reopened by shi with the ticket buttons and answers Ticket reopened

In Discord: a closed ticket opened again.

shi types !ticket delete and Petto answers Deleting this channel

In Discord: the channel of a closed ticket deleted.

shi types !ticket add @Luna and Petto answers Added Luna to this ticket

In Discord: a member added to the ticket.

Petto answers only to the staff member: Who do you want to add?, with a member menu

In Discord: the Add Member button asks who.

shi types !ticket remove @Luna and Petto answers Removed Luna from this ticket

In Discord: a member taken out of the ticket.

shi types !ticket rename with three words and Petto answers that it was renamed with dashes between them

In Discord: a ticket renamed.

shi types !ticket transcript and Petto answers Transcript posted to the ticket log, with the View Transcript button

In Discord: a transcript posted without closing.

shi types !ticket info: ticket 42, Support, opened by enderwolf, open, claimed by shi, high priority, opened 35 minutes ago

In Discord: what Petto knows of the ticket.

Staff tools inside a ticket

shi types !ticket priority high; Petto posts that shi set the priority to high and answers Priority is now high

In Discord: the priority of a ticket.

shi types !ticket transfer @chu; Petto posts that shi handed the ticket to chu and answers that chu has the ticket now

In Discord: a ticket handed to another staff member.

shi saves a note with !ticket note and Petto answers Note saved; then !ticket note without text lists the note of chu and the new one of shi

In Discord: a private note saved, then the notes read.

shi types !ticket request-close with a reason; Petto pings enderwolf asking if it can be closed, with Yes, close it and No, keep it open, and answers Asked enderwolf to confirm

In Discord: the member is asked if the ticket can be closed.

Under the question Petto writes that enderwolf agreed to close it, and posts Ticket 0042 closed by enderwolf with the reason Closed after the member confirmed it was solved

In Discord: the member agrees and the ticket closes.

priority is shown in !ticket info. transfer hands the ticket to another staff member of the category. note saves a private note for staff (write one, or run it without text to read them). request-close asks the member with Yes/No buttons whether the ticket can be closed. open works without a panel at all. close generates a shareable transcript link automatically, transcript posts one without closing. claim/unclaim, reopen, delete, and rename are staff-only.
enderwolf types !ticket claim in his own ticket and Petto answers that only staff for the category can do that

In Discord: a member tries a staff-only command.

Limits

A Free server can have 25 ticket types and a Premium server 50. !ticket category add, !ticket setup and the dashboard all count them the same way, and the setup says how many more fit before it creates anything. A panel still shows at most 5 buttons or 25 dropdown options, as Discord allows. See Premium. A ticket form holds up to 5 parts, with files up to 8 MB each (see Forms).
kira types !ticket category add and Petto answers that the server already has 25 ticket types, the most a free server can have, and that Premium raises it to 50

In Discord: a free server with 25 ticket types tries to add one more.