Tickets concept
This page explains how the ticket system works across the player shop, the admin queue, and Discord.
Use it when you need the shared mechanics behind ticket visibility, status changes, participants, and Discord behavior.
What a ticket contains
Each ticket combines:
- a subject
- a status
- a participant list
- a message history
- an optional assignee
- an optional Discord channel
Shop-created tickets automatically add the creator as a participant. Staff-created tickets can start without participants and be filled later from the admin queue.
Ticket lifecycle
Tickets move through these states:
- Open: newly created or reopened
- In progress: the first public reply turns an open ticket into in progress
- Closed: the ticket is resolved but can still be reopened
- Archived: the ticket is finished and the Discord channel is removed
Important behavior:
- reopening a closed ticket keeps the existing Discord channel and unlocks it again
- reopening an archived ticket creates a fresh Discord channel and replays the recent public history
- if Tickets Auto Archive is enabled, closing a ticket archives it immediately instead of leaving it in the closed state
Participants and visibility
Participants define which players can see a ticket in Shop -> Tickets.
Staff can add:
- single players
- all current members of a faction
Important behavior:
- only participants can see a ticket in the shop
- internal notes are never shown to players
- adding or removing a participant also updates Discord channel access for linked Discord accounts
Discord behavior
Navigation path for setup:
Server Admin->Settings->Discord
Relevant settings:
- Discord Server
- Discord Tickets Category
- Discord Tickets Channel Prefix
- Discord Tickets Support Role
- Tickets Auto Archive
When Discord is configured and the bot is installed:
- each ticket gets its own Discord text channel
- the configured support role can access every ticket channel
- players with
tickets.viewreceive the synced ticket-access Discord role - public messages are mirrored between dzbot and Discord
- internal notes stay private in dzbot and only post a short notice into the Discord channel
- archived tickets send participants a DM with reopen and view actions
Attention state and Discord channel naming
Each active ticket tracks who sent the last public message. This drives two indicators:
In-app badges — shown on every ticket row in the admin queue and the player shop list:
- Needs Attention — the last public message is from a player; support has not yet replied
- Waiting for Response — the last public message is from support; the player has not yet replied
Discord channel name icon prefix — the channel name is automatically prefixed with an icon whenever the attention state changes:
- 🔴 — the ticket needs support attention (player replied last)
- 🟢 — the ticket is waiting for the player to respond (support replied last)
The prefix is prepended to the configured channel prefix, for example 🔴-ticket-my-subject. When a ticket has no public messages yet, no icon is added.
Discord channel header actions
The pinned header message in every ticket channel contains interactive controls:
- Close / Reopen / Archive — status buttons visible to anyone with the corresponding access right
- Assign to me / Remove assignee — assignment buttons
- Add participant user-select — a Discord user-select that lets moderators pick any Discord user to add as a participant directly from the channel; requires the
tickets.add_participantaccess right
When a selected user has no linked player account, the bot replies with an error message in the channel. Re-selecting an existing participant is silently ignored.
Access-right model
Player-facing rights:
tickets.viewto open the shop ticket areatickets.createto create new ticketstickets.send_messageto reply and edit the subject while the ticket is activetickets.closeto close active ticketstickets.archiveto archive resolved tickets when auto-archive is not active
Admin-facing rights:
tickets.admin_viewfor read-only access to the admin queuetickets.replyfor public support replies and staff-created ticketstickets.internal_messagefor internal notestickets.assignfor assignee, participants, and subject management in the admin paneltickets.change_statusfor manual status changestickets.add_participantto add participants via the Discord channel user-select
For group strategy and mixed staff/player setups, see Access control.