A standalone Discord bot for managing a support ticket system. Users create tickets via modal forms, and staff manage them through slash commands and button-based controls across configurable lifecycle statuses.
Tickets progress through configurable statuses (Open, In Progress, Awaiting Response, Closed) with button-based controls. Staff can claim, transfer, close, reopen, and change the status of tickets through an interactive control panel.
Multiple ticket categories (General, Bug Report, Appeal, etc.) with customizable modal form templates and fields per category.
| Command | Description |
|---|---|
/ticket setup |
Post the ticket creation panel |
/ticket close |
Close a ticket |
/ticket reopen |
Reopen a closed ticket |
/ticket claim |
Claim a ticket |
/ticket transfer |
Transfer to another staff member |
/ticket status |
Change ticket status |
/ticket find |
Find tickets for a specific user |
/ticket new |
Create a ticket on behalf of a user |
/ticket info |
View ticket information |
/ticket export |
Export tickets to CSV |
/ticket search |
Search tickets with filters |
/ticket stats |
View ticket statistics |
/ticket blacklist-add/remove/list |
Manage user blacklist |
- Auto-close tickets after a configurable inactivity period
- Automatic status transitions based on who replies (user reply -> Open, staff reply -> Awaiting Response)
- Configurable reminders for inactive tickets
- Automatic cleanup of old closed tickets
Message history is archived (up to 500 messages with overflow to MongoDB) and transcripts can be generated and uploaded when tickets are closed.
Prometheus metrics on a configurable port (default 9191) including created/closed ticket counts, response times,
resolution times, staff actions, and active ticket gauges.
Prerequisites: Java 21+, MongoDB, a Discord bot token
mvn clean package
java -Dbot.token=YOUR_TOKEN \
-Ddb.mongodb.uri=mongodb://localhost:27017/ \
-Dbot.environment=DEVELOPMENT \
-Dbot.config=config.json \
-jar target/TicketBot.jardocker build --build-arg BRANCH_NAME=main -t ticket-bot:latest .
docker run -d \
-p 9191:9191 \
-v /path/to/config.json:/app/config.json \
-e "JAVA_OPTS=-Dbot.token=YOUR_TOKEN -Ddb.mongodb.uri=mongodb://mongo:27017/" \
ticket-bot:latest