How do you build a ticket system on Discord?
6
Configuration steps
5
Final tests
4
Errors solved
~7 min
Reading time
The answer
The short answer
A ticket system on Discord is a panel with a list of categories; once it is used, the bot creates a private channel visible only to the requester and the staff, and on closing it saves a transcript. In Venon Security you start it with the /ticket-crm command, which opens an interactive configuration panel — you point to the channel categories for open and closed tickets, the transcript channel and the support roles, and then publish the panel in your support channel. You can also handle the queue from a browser in Panel → Moderation → the Reports tab.
The content is checked against the bot's configuration — last verified: 2026-08-06.
Context
What the problem is
Without tickets, requests scatter across channels and direct messages. Members tag random moderators, the same case comes back in three places, and a week later nobody knows whether anyone handled it. On top of that, some cases — appeals against penalties, reports about other members — simply should not be public.
Without an extra bot
What you can do with Discord alone
- 01
Create a Support channel category and make it visible only to staff roles.
- 02
Leave one public contact channel describing how to raise a case.
- 03
Agree on how quickly you reply and who is on duty on a given day.
- 04
Separate the types of case: a general question, an appeal against a penalty, a report about a member, a technical issue.
Venon Security
What Venon Security adds
Ticket CRM creates a private channel for every case, assigns a category and watches the SLA deadline.
Once a case is closed an HTML transcript is generated and sent to the archive channel you chose.
The queue is also visible in the web panel: the Queue card and the Case details view with actions for taking over, replying and extending the deadline.
Configuration
Configuration step by step
0 of 6 steps
Prepare the channel structure
Discord server settings → ChannelsTicket CRM needs somewhere to put the channels for open and closed cases, plus a channel for transcripts. Preparing that up front saves tidying up later.
- A category for open tickets — visible to the support roles.
- A category for closed tickets — an archive before the channels are deleted.
- A transcript channel — read-only for the staff.
- The Venon Security role needs Manage Channels in order to create and close case channels.
Open the Ticket CRM configuration panel
/ticket-crmThe whole configuration fits in one command — it opens an interactive panel for choosing channels, roles and categories. The command requires the Manage Server permission.
- Point to the open and closed ticket categories and the transcript channel.
- Set the support roles that should see the case channels.
- Check the default SLA time — it is what decides the deadline shown on a case.
Define the ticket categories
The category decides who gets the case and how quickly. Three well-described categories work better than eight nobody can tell apart.
- Start with: a general question, an appeal against a penalty, a report about a member.
- Give every category a readable title — it goes straight into the panel members see.
- A category with no description produces cases landing in the wrong queue; describe it in one sentence.
Publish the panel in the support channel
/ticket-crmThe panel is a message with the list of categories — a member picks one and gets a private channel. Publishing is a separate action in the configuration panel.
- The channel with the panel has to be visible to everyone who should be able to raise a case.
- The panel will not work without at least one active category — add them before publishing.
- Write above the panel what not to raise through tickets, to keep the noise down.
Set up queue handling in the web panel
Panel → Moderation → the Reports tabA queue in the browser is more convenient with a larger number of cases — it shows the status, the deadline and who is handling it without clicking through channels.
- The Queue card shows every open case with its deadline.
- Case details carries the Requester, Concerns and Handled by fields plus the Reply to the requester action.
- The deadline can be moved with the New deadline field or with the /extend <id> <duration> <reason> command.
Agree on closing rules and the archive
A ticket with no closing rule stays open forever. Agree when a case counts as finished and what happens to the channel after closing.
- After closing, the bot generates an HTML transcript — it goes to the transcript channel.
- The case channel moves to the closed category; agree how long after that you delete it.
- Agree who may close a case: only the person handling it, or anyone with a support role.
The steps you tick are saved in your browser — you can come back and finish later.
Verification
How to check the configuration worked
- 1
Click a category in the panel from a test account — a private channel visible only to you and the support roles should appear.
- 2
Check in Panel → Moderation → Reports whether the new case showed up in the queue with an SLA deadline.
- 3
Assign the case to yourself and check that the Handled by field updated in the case channel too.
- 4
Close the ticket and check that the HTML transcript reached the archive channel.
- 5
Verify from an account without a support role that somebody else's case channel is invisible.
Diagnostics
When something does not work
The panel does not create a channel after a category is clicked.
- Cause
- The bot lacks the Manage Channels permission, or the channel category you chose was deleted.
- Fix
- Check the bot role's permissions and point to the open ticket category again in /ticket-crm.
Publishing the panel fails with a missing-category error.
- Cause
- There is no active ticket category.
- Fix
- Add at least one category in the /ticket-crm configuration panel and publish again.
The whole staff sees every ticket, though they should not.
- Cause
- The support roles have access to the entire channel category rather than to individual cases.
- Fix
- Limit the permissions at the category level and leave access only to the roles that genuinely handle cases.
Cases hang for weeks with no reply.
- Cause
- Nobody watches the deadline, because the queue is only checked on Discord.
- Fix
- Use the Queue card in the panel, assign someone to every case, and extend deadlines deliberately with /extend instead of ignoring them.
Honestly
What this configuration does not solve
Tickets live on Discord and in Venon's panel — there is no integration with external systems such as Jira, Zendesk or email.
The transcript records the content of the case channel. It does not cover conversations held alongside it, in direct messages.
The system does not assign cases automatically based on their content — a human names the person handling it.
A ticket will not replace clear rules. If the rules are unclear, you get the same questions over and over, only in a private channel.
The number of channels on a Discord server is limited, so closed cases have to be archived and deleted periodically.
Commands
The commands used in this guide
Read on
Related guides
How do you check Discord moderation logs?
How to check Discord moderation logs: the audit log, the bot's log categories, the penalty channel, the access role and data retention.
Read the guideWhich Discord moderation bot speaks Polish?
How to pick a Polish-speaking Discord moderation bot: the list of requirements, what to compare, and what Venon Security does and does not do.
Read the guideHow do you set up verification on Discord?
How to set up verification on Discord: the entry channel, the access role, the verification type, a minimum account age and a test on a second account.
Read the guide
FAQ
FAQ – common questions
Can a ticket be used for an appeal against a penalty?+
Yes, and it is one of the best uses, because the conversation stays private and the transcript is evidence of how the case went. It is worth giving appeals their own category, though, so they do not mix with ordinary questions.
How many ticket categories should you start with?+
Three. A general question, an appeal against a penalty and a report about a member cover most of the traffic. Add more only once you see a recurring type of case in the queue that fits none of the existing ones.
Can tickets be handled without opening Discord?+
The queue, the case details and replies can be handled from the web panel in the Reports tab. The private case channel still exists on Discord, and that is where the conversation with the requester happens.
What happens to a ticket after it is closed?+
The bot generates an HTML transcript and sends it to the archive channel you chose, and the case channel moves to the closed category. When you delete the channel itself is your decision — the transcript stays.
Set this up in your own Venon Security panel
Every screen mentioned in the guide is in the web panel. You save the configuration by hand and see its state before anything takes effect on the server.
