๐ซ Ticket System
Ticket System lets players create support tickets from Discord or in-game. Each ticket gets a private Discord channel with transcript generation on close.
Requires Discord module. Enable tickets in
tickets.json and set up a ticket category in Discord.
Jump to
๐ค Discord flow
Creating a ticket
- Use
/ticket create reason:<reason> - A private channel is created under the configured ticket category
- The channel is visible only to the ticket creator and the support role
- If auto-assign is enabled, the support member with the fewest active tickets is automatically assigned and mentioned
- A welcome embed with a Close button is posted
Closing a ticket
- Click the Close button in the welcome embed, or
- Use
/ticket closeinside the ticket channel - If transcripts are enabled, conversation history is saved and uploaded before the channel is deleted
Rate limiting
Ticket creation has a 60-second global cooldown to prevent Discord API rate limiting (429 errors).
Limits
maxTicketsPerUser controls how many open tickets a single user can have at once.
๐ฎ In-game flow
Creating a ticket from Minecraft
/ticket <reason> <message...>
- reason is a single word (no spaces)
- message can contain spaces
- Requires a linked Discord account (see Linking)
- A ticket channel is created on Discord and the message is posted
Replying to a ticket
/reply <message...>
Messages are relayed from Minecraft โ Discord ticket channel and vice versa. If the player has the Voidium client mod, ticket messages appear in a dedicated tab. On vanilla clients, they arrive as private chat messages.
โ๏ธ Configuration
File: config/voidium/tickets.json
Core settings
| Field | Type | Default | Description |
|---|---|---|---|
enableTickets |
boolean | true |
Master switch |
ticketCategoryId |
string | "" |
Discord category ID where ticket channels are created |
supportRoleId |
string | "" |
Role ID that can view/manage all tickets |
enableAutoAssign |
boolean | true |
Automatically assign new tickets to the support member with fewest active tickets |
maxTicketsPerUser |
int | 3 |
Max open tickets per user |
Messages (Discord)
| Field | Description |
|---|---|
ticketCreatedMessage |
Reply when ticket is created |
ticketWelcomeMessage |
Welcome text in the ticket embed |
ticketCloseMessage |
Message when ticket is closed |
noPermissionMessage |
Shown when user lacks permission |
ticketLimitReachedMessage |
Shown when max tickets reached |
ticketAlreadyClosedMessage |
Shown when closing already-closed ticket |
ticketChannelTopic |
Channel topic. Placeholders: %user%, %reason% |
assignedMessage |
Message posted when a support member is auto-assigned. Placeholder: %assignee% |
Messages (in-game)
| Field | Description |
|---|---|
mcBotNotConnectedMessage |
Error when bot is offline |
mcGuildNotFoundMessage |
Error when guild not found |
mcCategoryNotFoundMessage |
Error when category not found |
mcTicketCreatedMessage |
Success message in Minecraft |
mcDiscordNotFoundMessage |
Error when player isnโt linked |
Transcripts
| Field | Type | Default | Description |
|---|---|---|---|
enableTranscript |
boolean | true |
Save conversation on close |
transcriptFormat |
string | "TXT" |
TXT or JSON |
transcriptFilename |
string | "transcript-%user%-%date%" |
Filename. Placeholders: %user%, %date%, %reason% |
๐ Transcripts
When a ticket is closed with transcripts enabled:
- Voidium fetches the last ~100 messages from the ticket channel
- Formats them as TXT (plain text log) or JSON (structured data)
- Uploads the transcript file to the ticket channel
- Waits a few seconds, then deletes the channel
The transcript file remains accessible in Discordโs message history (uploaded before deletion).