Tickets
Tickets turn a click on a panel into a private support channel, track who claimed and closed it, archive a transcript, and ask the member to rate the staff who helped. Everything below is configured from the dashboard and happens in Discord.
Where: Dashboard โ Support desk โ Tickets ยท In Discord: /setup โ Tickets
#How it works
- A member clicks a button on a panel, or picks a type from a panel's dropdown.
- FiveUnity creates a private channel. Only the member, the support role and the bot can see it.
- Staff claim it, work it, and close it.
- On close the channel is archived, a transcript link is produced, and the member can be DMed the archive plus a rating request. Closed tickets can be reopened or deleted permanently.
There is no form to fill in first: the channel opens as soon as the member picks a type. A member may hold up to five open tickets at a time by default; once they are at the limit, clicking again points them at the channels they already have. Change the cap with Max open tickets per member under Ticket behaviour.
#Set it up
The fastest route is Run default setup (the same thing as /setup โ Tickets โ Run Default Setup). It creates the built-in ticket categories, a ticket-panel channel with a dropdown panel offering every built-in type, a closed-tickets category, and a queue row per type. It refuses to run if you already have panels, so it can never overwrite your work.
To build your own: fill in Ticket settings and save, create a panel under Create custom panel, then publish it: from the Publish to channel field on the create form, or the Publish button on the panel row.
#Set up with AI
Set up with AI at the top of the Tickets page builds and edits the ticket desk from a plain-English description: panels and types, escalation, naming, behaviour, ticket texts, and cleanup of empty leftover categories or unused panels. Examples: "Set up 3 ticket types: Player Reports, Staff Apps and Store Support. General staff can handle reports, only Leadership can see apps, put them in a Tickets category.", "Add a Ban Appeal type to Support Tickets.", "Turn on rename on escalate and only allow player-report and staff-report as destinations.", or "Delete the empty Legacy Support category and remove Old Panel." It needs the Pro plan and a working AI Assistant key; the manual controls below work on every plan. Save ticket backup above the form stores the current panels and settings (up to five) so you can restore if an AI apply is unexpected; panel messages in Discord are not restored, so republish afterwards.
The assistant never acts on its own. Every request goes through the same steps:
- Plan. Gemini turns your description into a plan: panels, ticket types, embed text and colour, the button or dropdown (including Discord button colour: blurple, grey, green or red), which roles handle what, which channel and categories to use, escalation and other ticket settings, and any empty categories or panels to remove. It refers to roles, channels and categories by name only; it is never shown a Discord id and cannot invent one. When you name an existing panel, the plan updates that panel in place (including its ticket types) instead of creating a second one. Settings-only and cleanup-only plans are allowed when you are not changing panels.
- Check. FiveUnity matches every name to your server. A name that fits exactly one thing is used. A name that could mean several things (staff on a server with Senior Staff and Staff Team) or nothing at all becomes a question with a picker, so nothing is guessed. Existing categories, channels and matching panel names are reused rather than duplicated, and the bot's own permissions (Manage Channels, and Manage Roles if a role is to be created) are checked before anything else. Category cleanup only deletes empty categories that the plan is not still using as an open/closed or panel category.
- Review. You see the panel exactly as Discord will show it (including coloured buttons when the panel uses buttons), and a list of every change: โ channels, categories and roles to create, ๐๏ธ empty categories and panels to remove, โป๏ธ what is reused, ๐ the permission rules that will be applied, ๐พ the database records that will be written or updated and ๐จ the message that will be posted or refreshed. Ask for changes in the chat ("Make the appeals buttons red", "Add @HR to store support", "Also delete the empty Applications category") or press Edit on a panel to change fields and pick roles, categories and channels by hand.
- Apply. Nothing is created or changed until you press Apply configuration and confirm. The steps then run one at a time; creates and panel edits roll back if a later create/update fails. Removals run last and are not recreated on rollback. When it finishes, FiveUnity checks that each channel, category, panel and message really exists (or was removed) and reports the result.
The whole session is kept as an audit record: every version of the plan, the choices you made, what was built, and the verification result.
Role, channel and category names are sent to Google Gemini with your request; member messages are not. In Discord, /setup โ Tickets has a Set up with AI button that opens this section.
#Ticket settings
| Setting | What it does |
|---|---|
| Open tickets category | Where a new ticket lands when its panel names no category of its own. See Where a ticket opens below. |
| Closed tickets category | Where a closed ticket is moved. If it is not set, FiveUnity looks for a category named Closed Tickets, creates one if it is missing, and records it here. |
| Rating channel | Every submitted rating is posted here: the stars per staff member, the written comment and the ticket it came from. Ratings also always go to your Review log channel, set under Core settings; leave this empty if the Review log is enough. |
| DM transcripts to users | On, the member is DMed the closing summary with a transcript link, then the rating request. Off, neither is sent. |
#Ticket texts
The texts members see inside a ticket are part of Ticket settings too. Every field starts with the text FiveUnity has always used, so nothing changes until you edit one. Clear a field and save to put its default back.
| Field | Default | Where it shows |
|---|---|---|
| Welcome title | Ticket #{ticketid} | Title of the welcome embed a new ticket opens with. Up to 256 characters. |
| Welcome message | Welcome, {user}! A staff member will be with you shortly. then, after a blank line, Please describe your issue in detail. | Body of the welcome embed. Up to 2,000 characters. |
| Close button label | Close Ticket | The red button under the welcome embed. Up to 80 characters. |
| Claim button label | Claim Ticket | The green button under the welcome embed. Up to 80 characters. |
| Closing summary footer | Thank you for contacting support! | Footer of the closing summary DMed to the member. Up to 2,048 characters. |
| Archive notice title | Ticket Archived | Title of the notice posted in the channel on close, above the Reopen and Delete Permanently buttons. Up to 256 characters. |
| Archive notice message | This ticket has been moved to the closed tickets archive. | Body of that notice. Up to 2,000 characters. |
Welcome title and Welcome message fill in four placeholders, in any letter case:
{user}: the member the ticket belongs to. It is a mention in the message and their name in the title, because Discord does not show mentions in embed titles.{server}: your server name.{ticketid}: the ticket number.{type}: the ticket type label, e.g.Support Ticket.
The dashboard refuses any other placeholder in those two fields. Every other field is shown exactly as typed. Text longer than its limit is cut to fit when you save.
Tickets opened with /ticket new use the same welcome title and message, with the opening reason added below, and have no buttons. Until you change Welcome message they keep their shorter default, without the Please describe your issue in detail. line.
#Ticket channel naming
Control the channel name a ticket gets when it opens, when it is escalated to another type, and when it closes. Placeholders in curly braces are filled in; everything else is used literally. The dashboard shows a live example under each field and refuses an unknown placeholder or a scheme that renders to nothing.
| Field | Default |
|---|---|
| Open ticket name | {type}-ticket-{number} |
| Closed ticket name | closed-{ticketid} |
| Rename on escalation | On. When a ticket moves to another type (manual /ticket escalate, AI routing, or a panel automation), the channel is renamed with the open scheme and the new type. The existing {number} is kept when the scheme includes it, so the ticket does not burn a new gap-fill slot. |
| Ping support roles on escalation | On. Mentions the destination category's support roles after every escalation path, including automations. Turn off on noisy servers. |
Open ticket name placeholders: {number} (the lowest free number in the category, so deleted tickets' numbers are reused), {type} (the type slug, e.g. support-ticket), {typelabel} (the type label, e.g. Support Ticket), {username}, {userid}, {panel} (the panel it was opened from) and {date} (as YYYY-MM-DD).
Closed ticket name placeholders: {ticketid}, {name} (the name it had while open), {type}, {typelabel}, {username}, {userid}, {date}.
Every name is lowercased, spaces and unsupported characters become dashes, and it is capped at Discord's 100 characters. A scheme itself can be up to 200 characters.
Leave {number} in the open scheme; it is what lets FiveUnity recognise its own ticket channels and fill gaps. Without it, two tickets can end up sharing a name.
By default the member's name is not in the channel name; ownership is recorded in the channel topic instead. Reopening restores the exact name the ticket had while open. Discord allows only two channel renames every ten minutes; a rename that hits that limit is skipped so the escalation itself still succeeds.
#Ticket behaviour
| Setting | What it does |
|---|---|
| Inactivity auto-close | On by default. Off means tickets never close on their own and any automatic countdown already running is cleared, but staff can still arm a one-off timer with /ticket timeout. |
| Close after (hours) | How long a quiet ticket survives after the last staff reply. Default 72 hours. |
| Dual ticket categories | On by default. A ticket moves into a โฐ Staff Reply - โฆ category while it is waiting on staff, and back to its normal category when staff reply. |
| Auto-claim on staff reply | Off by default. When on, the first eligible staff reply in an unclaimed ticket claims it: anyone with ticket.claim (including parent ticket), or anyone holding a support role for that ticket's panel/type (or the server-wide staff role fallback). Later staff can still claim with the button or /ticket claim. |
| Max open tickets per member | How many tickets one member may hold open at once. Default 5, maximum 25. Set it to 1 for the old one-at-a-time behaviour. The limit applies to the panel and to /ticket new alike. |
The countdown. Five minutes after a staff member replies, the bot posts a Timer Started notice and starts the clock. A reply from the member removes the notice and clears the clock. FiveUnity closes expired tickets with the reason Ticket closed due to inactivity. Staff can set a one-off window with /ticket timeout hours:<n>, which works even with inactivity auto-close switched off; that hand-set countdown survives until the member replies or a staff reply re-arms the automatic timer.
Turning dual categories off collapses each pair into one. On save, every open ticket sitting in a โฐ Staff Reply - โฆ category is moved back, panels pointed at one are repointed, and the dashboard reports how many tickets moved. Turning it back on does not re-split anything: tickets start swapping again on the next message.
#Panels
A panel is the message members click to open a ticket. It comes in two styles:
- Dropdown: offers a list of ticket types the member picks from. This is the default and the one
/setupcreates. - Button: one Discord button per ticket type (same type list as a dropdown). Choose Button colour (blurple, grey, green or red) when you use buttons.
Name is what the panel is called in the dashboard, and the default embed title. Changing Panel style rebuilds the Discord message on save.
| Field | What it does |
|---|---|
| Ticket type slug | Button panels only. Used in ticket channel names. |
| Dropdown placeholder / Button label | The grey text in the dropdown, or the text on the button. A Button emoji field appears for button panels. |
| Embed title / description / colour | The look of the panel message. Colour is a hex value such as #3498db. |
| Default category | Where tickets from this panel open. On a dropdown panel it is used by types that have no category of their own. |
| Default support role | The role that gets access to tickets from this panel, and is pinged when one opens. |
#Ticket types
A dropdown panel carries its own list of types, so two panels can offer completely different options. Each row has a Label, a Slug (used in channel names), an optional Emoji and Description, and its own Category and Support role that override the panel defaults. Rows can be reordered, and Reset to built-in types restores the FiveUnity set: Support Ticket, Report Staff Ticket, Tebex Ticket, Gang Ticket, Events Ticket and Ban Appeal Ticket. A panel holds at most 25 types, Discord's limit for a dropdown.
#Where a ticket opens
FiveUnity picks the category most specific first: the ticket type's own Category, then the panel's Default category, then the server-wide Open tickets category, then the built-in category for that type, and finally a pair created for the panel or type (๐ฉ <name> and โฐ Staff Reply - <name>).
#Publishing
Press Publish on a panel row to post it, or Republish to update it. Saving a live panel rewrites its Discord message in place, so the channel never disagrees with the dashboard. Choosing a different Publish channel and pressing Publish moves the panel. Deleting a panel deletes its published message too, so nobody is left with a button that cannot open anything; tickets already open stay open.
A member who picks a type you have since removed is told to ask staff to refresh the panel, rather than getting a ticket of an unknown type. Republish after big edits.
#Automations
Each panel can hold up to ten automations. Choose a trigger (ticket created/reopened/closed, owner left, close request, message found, or no message), optionally restrict message triggers to the ticket owner or staff, set a delay, then choose Close, Delete, Escalate, or a custom command. Escalation requires a destination ticket type and moves the channel exactly like /ticket escalate, including permissions, support-role handover, optional rename, and the destination support-role ping.
Use No message plus Escalate when a queue should be handed to specialists after five quiet minutes. Use Close only when members have been warned that silence will close the ticket.
#Open tickets
Open tickets, at the bottom of the Tickets page, lists every ticket that is still open, oldest first: its number, the member who opened it, its type, the panel it came from, its channel, who has claimed it and when it was opened. Members are shown by name when Discord can still tell FiveUnity who they are, and by user id otherwise. Press Refresh to load the list again. It shows up to 200 tickets; when more are open, the newest are left off and the line above the list gives the total.
A row marked Channel deleted is a record whose channel no longer exists, for example because the channel was deleted by hand instead of closed. Records like that still count towards the member's Max open tickets per member limit, so they can stop the member opening a new ticket.
Reset does what /ticket-reset does. It deletes every open ticket record that member holds in this server, not only the row you pressed it on, so they can open a new ticket straight away. You are asked to confirm first, and it cannot be undone. Reset only changes FiveUnity's records: a ticket channel that still exists stays in Discord, but FiveUnity no longer treats it as a ticket, so delete that channel by hand if it is no longer needed. Anyone who can open this server's dashboard can use it, which means Administrator or Manage Server.
#In the ticket
The new channel opens with a welcome embed titled Ticket #N, a Close Ticket button and a Claim Ticket button, and a ping for the support role. The embed text and both button labels can be changed under Ticket texts.
| Action | How |
|---|---|
| Claim | The Claim Ticket button or /ticket claim; /ticket unclaim removes your claim. More than one staff member can claim the same ticket. With Auto-claim on staff reply on, the first eligible staff message in an unclaimed ticket claims it for them. |
| Add or remove someone | /ticket add user:@Name and /ticket remove user:@Name. The ticket owner cannot be removed. |
| Move it | /ticket move category:<category> moves the channel without touching permissions. |
| Hand it over | /ticket escalate reason:<text> posts a dropdown of every other ticket category, usable only by the staff member who ran it. The channel moves, the destination category's permissions are applied, the channel is renamed when Rename on escalation is on, and its support role is pinged when Ping support roles on escalation is on. |
| Rename it | /ticket rename name:<text> sets the channel name exactly as typed. Discord allows only two channel renames every ten minutes. |
| Summarise it | /ticket summary: optionally add question: to ask about the ticket. Needs the Pro plan and the AI Assistant. See AI Assistant. |
| Transcript now | /ticket transcript creates a transcript (up to 1,000 messages). format: is html (default) or txt; TXT posts to a #transcripts channel. |
| Close it | /ticket close, the Close Ticket button, or an approved /ticket close-request. |
| Reopen it | /ticket open in the closed channel or the archive-panel Reopen button. |
| Delete it | /ticket delete removes the ticket and its channel after five seconds. Needs the delete-ticket permission node. |
#What happens on close
- An online transcript is generated. The channel moves to your Closed tickets category, is renamed with your closed scheme, and the member loses access.
- A Ticket Closed summary with a View Online Transcript button is posted to your ticket log channel.
- The channel gets a Ticket Archived notice with Reopen / Delete Permanently buttons. Delete Permanently needs Manage Channels. The notice title and message can be changed under Ticket texts.
- If DM transcripts to users is on, the member is DMed the summary and transcript link. The summary footer is the Closing summary footer from Ticket texts.
- If at least one staff member claimed the ticket, the member is then DMed a rating request: one to five stars per staff member, an optional comment, and a Submit Ratings button. Each star is saved as it is picked, so the request still works if the bot restarts before the member finishes. Results go to your Review log channel (and your Rating channel if you set one), and
/ratingsshows the scoreboard.
#Other commands
| Command | What it does |
|---|---|
/ticket new user:@Name type:<type> reason:<text> | Opens a Command Style Ticket when that feature is enabled for the channel. Owner defaults to you; type comes from the configured panel. |
/edit-ticket-panel message_id:<id> | Edits a published panel's title, description or buttons from Discord. |
/ticket-reset user:@Name | Admin only. Clears a member's stuck open-ticket record so they can open a new one. Reset under Open tickets does the same from the dashboard. |
/sits log, /sits view, /sits delete | Logs and reviews administrative sits, separate from tickets. |
Who can run each of these is set under Permissions. Claim and close counts feed the numbers on Staff.
#Related
- Queues: order tickets and tell members their position.
- AI Assistant: ticket summaries and a first responder.
- Core settings: where the ticket and review log channels live.