Tickets
Support in a channel of its own — with your own ticket types, forms, claiming, a transcript and a star rating.
Support over direct messages has three problems: only one person sees them, nobody knows what was already discussed yesterday, and when that person leaves the team, the case is gone.
A ticket is a channel of its own that only the person asking and your team can see. That sounds more awkward, and it is the reason it works.
/ticket setup → set it up, creates four ticket types the first time
/ticket arten → edit ticket types and their forms
/ticket panel → put the panel into a channel
/ticket zahlen → how many, how fast, by whom, rated how
/ticket verlauf 42 → fetch a stored transcript again
/ticket hinzufügen → bring someone into a running ticket
/ticket sperren → forbid someone from opening one
How the panel looks
Two layouts, both configurable under /ticket setup:
Zeilen (rows, the default) — every ticket type gets a row of its own with an explanation and the button right next to it. An embed cannot do that; there all the buttons sit at the bottom, and you have to guess from the label which one belongs to which paragraph.
Knopfreihe (button row) — text, image, warning box, and below that a row of buttons with the names of the types. The classic form familiar from other bots. The right choice when the names speak for themselves and the panel should stay narrow.
From seven ticket types upwards, Zeilen turns into Knopfreihe by itself: seven sections with explanations are longer than the screen, and nobody scrolls through a panel.
On top of that come three small things that make the difference:
- A button colour per ticket type — red, green, blue or grey. Discord does not allow more for buttons. Red for reports, green for purchases: everyone reads that correctly without reading it.
- The image at the top or at the bottom. The bottom is the default — directly above the buttons, where the eye travels anyway. You can upload it in the dashboard under Tickets; the bot attaches it to the message when the panel goes up, so you do not need image hosting of your own. Anyone whose banner is online already enters the address instead — an upload takes precedence.
- Warnkasten (warning box) instead of small print. It sits deliberately above the image: hardly anyone reads what stands below an image, and a notice that threatens a ban belongs where it is still read.
How it runs
Someone clicks a ticket type in the panel → fills in your form → the bot creates a channel, visible only to them and your team roles. At the top of the channel the answers from the form appear in full, with four buttons below:
| Übernehmen (claim) | Your name attaches itself to the channel name. Everyone sees that someone is dealing with it. |
| Erledigt (resolved) | The matter is solved. Only this counts as a success in the statistics. |
| Kein Problem (no problem) | False alarm, double post, sorts itself out. |
| Schließen (close) | Everything else. The person asking may also close their own ticket. |
Four things happen on closure: the transcript goes into the log channel as a file, the person asking gets it by direct message, the figures for the team are updated, and after ten seconds the channel deletes itself.
The traffic light in the channel name
Every ticket channel begins with 🟢. If nobody answers for a day, it turns 🟡, after three days 🔴. Counting runs from the last message, not from the opening — a ticket with lively back and forth stays green.
That is the reason tickets do not get left to drift: in a list of twenty green channels a red one stands out, and nobody has to open an overview for it.
Ticket types
Four suggestions are ready after /ticket setup: Allgemeine Frage, Etwas melden, Einspruch,
Zahlung (general question, report something, appeal, payment). They are a start, not a law.
You can change them in two places, and both can do the same:
/ticket artenin Discord — an overview, pick a type, and from there the name and text, the questions, the notice texts and the details. Four windows instead of one, because a ticket type has over twenty values and a Discord form holds five fields.- Dashboard under Tickets — the same thing on one page, with everything in view at once.
After every change, put the panel up again once with /ticket panel so the buttons are right.
The actual content of a ticket type is its form. What you ask there decides whether a request can be answered straight away or needs three follow-up questions first. An example from practice: "Etwas melden" without the Belege (evidence) field produces the follow-up question "do you have a screenshot?" on every second ticket — and two hours of waiting.
At most five fields per form. That is not thrift but Discord's limit.
Bereiche (areas)
If you have several game servers or locations, enter them under Bereiche — one per line. From two entries upwards the bot asks before the form what the matter concerns, and writes the answer into the ticket. With one or none, the step falls away: a choice with a single entry is not a choice but one click too many.
The transcript
On closure an HTML file is produced: the header data, the form answers in full, then the conversation. A single file with no network access — it has to open on a computer without internet in five years' time as well.
It is stored, for 90 days by default. With /ticket verlauf <nummer> your team can fetch it
again at any time. You set the period yourself; 0 means "send once, keep nothing".
On message content: The transcript contains the messages in full. Should the operator have switched the permission for that off, the transcript only says who wrote when — the file then says itself that and why the text is missing. A transcript silently cut in half would be worse than one honestly marked as such.
And a link with it: On closing, the transcript gets an address of its own, which appears in the log and in the message to the person asking. It works without signing in — whoever has it got it from someone who was allowed to have it — and it expires with the retention period.
The rating
After the closure the bot asks by direct message for a mark from one to five, with labels instead of only stars: "3 out of 5" means quite decent to one person and poor to another. After that an optional field for a sentence — and those sentences are exactly the part you learn something from.
Three rules that keep the figures usable:
- By direct message, not in the channel. Anyone who has to rate in front of the whole team does not give a two.
- Once per ticket, for three days. A rating that arrives three weeks later rates a memory.
- It belongs to one person — the one who claimed the ticket. Without that attribution the average is a server figure and helps nobody.
The ratings land in a channel of your choice and in the dashboard. There you see not only the average but also the distribution — four ones and four fives produce the same three as eight middling ratings, and those are two completely different teams.
The whole thing can be switched off with a checkbox, and on request the ratings appear anonymously.
Who may do what
| Opening a ticket | Every member, as long as they are not blocked. |
| Übernehmen, Erledigt, Kein Problem | Only the team roles. |
| Schließen | Team roles — and the person asking, for their own ticket. |
| Bringing someone in | Team roles and the person asking. |
| Figures and transcripts | Only the team roles. |
Without team roles entered, nobody but the server leadership gets at the tickets. That is the first setting you should make.
Limits
One open ticket per person is the default, up to five are possible. Anyone with five open at once gets a proper answer to none of them. On top of that, a configurable waiting time between two tickets, against people who open them out of boredom.
Discord allows 50 channels per category. With a lot of tickets, a category of their own is worth it — otherwise Discord refuses to create them at some point, and the bot tells you so.
Last updated: 13 October 2026
