Most of the time it takes to put a ticket system on a Discord server is not spent setting it up. It is spent undoing the decisions somebody made in the first ten minutes, before they knew what their server actually asks for.
So this is the short version: five steps, and a list at the end of what to leave alone until you have a week of tickets to look at.
1. Invite the bot, and know what it is asking for
The invite asks for four things, and it is worth knowing why, because a bot that asks for Administrator and will not say why is a bot to be suspicious of.
- Manage Channels, to open a channel per ticket and to archive it afterwards.
- Manage Roles, to give the member who opened it access to their own channel, and nobody else's.
- Read Message History, to build the transcript when it closes.
- Send Messages and Embeds, to post the panel and answer in the channel.
It does not need Administrator, and it will not ask for it.
2. Pick three categories, not ten
This is the step everybody gets wrong, and it is the only one on this list that is expensive to change later.
Almost every server creates eight or ten categories on the first afternoon. Bugs, Billing, Reports, Appeals, Partnerships, Suggestions, Other. Two months later six of them have never been used and every member picks "Other" because they cannot tell which of the ten is theirs.
Start with three. You will find the fourth by reading a week of tickets that should not have been in any of the first three, and the one you find that way is worth having. The one you imagined is usually not.
3. Decide who answers
One role. If your server already has a Support or Staff role, use that one rather than making a second.
Three questions get settled here, and they are separate on purpose:
- Who can claim a ticket, which is the role above.
- Who can close one, which is usually the same.
- Who may not open one, which is the mute list, and most servers leave empty until the first person discovers that a ticket is a way to DM the staff.
4. Post the panel
From the panel, not from a command. Pick a template, write the sentence at the top in your own words, and press publish. It lands in the channel you chose, and you can edit it afterwards without deleting anything.
Put it in a channel nobody can write in. A panel in a busy channel scrolls away in an hour and then nobody can find it.
5. Set your opening hours
This is the one that cannot be improvised later without somebody noticing, because every timer in the product counts against it.
Set the hours the team is realistically around. Everything that measures how long something took, whether that is first response, time to close or the staff performance page, counts only the minutes you were open, so nobody is measured on the eight hours everyone was asleep. And members see "closing in four hours" on the panel instead of waiting all night for an answer that was never coming.
What to leave alone for now
Four things, all of which are easier to decide once you have tickets to look at.
- The AI. It is off, and it should stay off until you know what gets asked. There is a whole article about when to turn it on.
- Autoclose. Work out how long your tickets actually stay open before you decide when one is abandoned.
- The status board. Worth having once there is a queue to report on.
- Payouts. For when the team is big enough that somebody is keeping score.
That is it. The setup is the easy part; the part worth taking time over is the three categories.