Ticket System ✏️
The Ticket System provides a comprehensive solution for managing user support requests, carry service orders, and general inquiries through Discord. Users create tickets via button interactions, and each ticket becomes a private channel where staff can assist them.
Key Concepts
Ticket Panels
A ticket panel is a configuration that defines how tickets behave. Each panel creates a button in Discord that users click to open a ticket. You can have multiple panels on the same server for different purposes (e.g., "Support", "Carry Orders", "Bug Reports").
Ticket States
Tickets move through four distinct states:
Creating - Initial state while the ticket channel is being set up
Open - Ticket is active and ready for support interaction
Closed - Ticket has been resolved and closed, but the channel still exists
Deleted - Ticket has been permanently deleted and the channel removed
Claiming
Support staff can claim tickets to indicate they are handling a specific request. When a ticket is claimed, the channel can be renamed (if configured) and permissions are updated to reflect the claimer's ownership.
Setting Up Ticket Panels
Ticket panels are configured through the Dungeon Hub Dashboard. You can access the ticket panel configuration by navigating to your server and selecting "Ticket Panels" from the menu.
For detailed configuration options, see Ticket Panel Configuration.
Ticket Lifecycle & Visibility Flow
Creation Process
User clicks a ticket creation button in Discord
If form questions are configured, a modal dialog appears for the user to fill out
The bot validates the form responses and creates the ticket in the database (state:
Creating)A private Discord channel is created with appropriate permissions
The channel is moved to the configured open category
An initial welcome message is sent to the channel (configurable via
ticketMessage)The ticket state is updated to
Open
Visibility & Access Control
Who can see and access a ticket depends on its current state:
Open Tickets:
✓ Ticket creator (the user who opened it)
✓ Support roles (configured in
supportRoles)✓ Additional roles (configured in
additionalRoles)✓ Ticket claimer (if the ticket has been claimed)
✗ Everyone else (the
@everyonerole has VIEW_CHANNEL denied)
Closed Tickets:
✗ Ticket creator (loses access when the ticket is closed)
✓ Support roles (maintain access)
✓ Additional roles (maintain access)
✓ Original claimer (if applicable)
✗ Everyone else
Deleted Tickets:
✗ All users (the channel is permanently deleted after 3 seconds)
State Transitions
Open → Closed - Staff or creator closes the ticket using /ticket close ✏️
Closed → Open - Staff reopens the ticket using the "Open" button
Closed → Deleted - Staff deletes the closed ticket using the "Delete" button
Claiming Effects
When a support staff member claims a ticket:
The channel name updates to use the
claimedChannelNametemplate (if configured)Channel permissions are updated to include the claimer
The claimer is tracked and can be referenced in messages via
{claimer.mention}
Transcripts
Transcripts capture the complete message history of a ticket in HTML format. You can configure when and where transcripts are delivered:
On Close - Controlled by
closeTranscriptTargetOn Delete - Controlled by
deleteTranscriptTarget
Both settings support four options:
None- No transcript generatedUser- Transcript sent via DM to the ticket creatorTranscriptChannel- Transcript posted in the configured transcript channelBoth- Transcript sent to both user and channel
The transcript message sent to users can be customized via the userTranscriptDm JSON template.
Forms & Placeholders
Custom Forms
Ticket panels can include custom form questions that users must answer when creating a ticket. Four question types are supported:
Predefined - Pre-built form questions (e.g.,
ign-display,carry-difficulty,carry-amount)TextInput - Short text or paragraph input fields
StringSelect - Dropdown selection from predefined options
TextDisplay - Information text displayed to the user (no input required)
Form responses are stored with the ticket and can be referenced in messages via placeholders like {ticket.form.1} through {ticket.form.5}.
Placeholders
Placeholders allow you to dynamically insert user, ticket, and system data into:
Channel naming templates (
openChannelName,claimedChannelName,closedChannelName)Ticket welcome messages (
ticketMessage)Transcript DM messages (
userTranscriptDm)
For a complete list of available placeholders, see Ticket Placeholders.
Carry Integration
The ticket system integrates deeply with the carry service system:
Related Carry Tier (relatedCarryTier)
Linking a ticket panel to a carry tier enables:
The /log command within tickets, allowing staff to log completed carries directly from the ticket
Access to tier-specific carry data and validation
Tier name available via
{carry-tier.name}placeholder
Related Carry Difficulty (relatedCarryDifficulty)
Specifying a carry difficulty further customizes the ticket:
Visible carry price embeds are automatically displayed in tickets, showing the current pricing (if not provided through the form questions)
The difficulty name is available via
{carry-difficulty.name}placeholder
Predefined Carry Form Questions
Two predefined form questions are available for carry tickets:
carry-difficulty- Dropdown to select from available difficulties for the linked carry tiercarry-amount- Text input for the number of carries requested
See Also
Ticket Panel Configuration - Detailed breakdown of all configuration options
Ticket Placeholders - Complete placeholder reference
/ticket close ✏️ - Close a ticket
/ticket add ✏️ - Add a user to a ticket
/log - Log carries within carry tickets
Server Properties - Configure
TRANSCRIPTS_CHANNELfor ticket transcripts