🎫 Opening a Ticket
This page describes the full flow from a user's perspective when opening a ticket.
User flow
1. User reacts with a number emoji (e.g. 1️⃣) on the panel
2. Bot removes the reaction and posts a confirmation prompt
3. User reacts ✅ to confirm or ❌ to cancel
4. Bot removes the prompt and creates the ticket channel
5. Bot posts a confirmation embed (auto-deletes after 12 s)
Step-by-step
1. Choose a ticket type
The user reacts to the panel embed with the number matching their issue:
🎫 Support Tickets
1️⃣ ❓ General Inquiry
2️⃣ 💳 Billing
3️⃣ 🐛 Bug Report
The bot immediately removes the user's reaction (so the panel stays clean) and posts a confirmation prompt in the same channel.
2. Confirm or cancel
A temporary prompt appears mentioning the user:
@Alice
❓ Open a General Inquiry ticket?
React ✅ to confirm or ❌ to cancel.
This prompt expires in 60 s.
The bot adds ✅ and ❌ reactions to this message.
- If the user reacts ✅ → ticket is created
- If the user reacts ❌ → prompt is deleted, nothing happens
- If neither reaction is received within
selectionTimeoutSecs→ prompt auto-deletes
3. Ticket created
On confirmation, the bot:
- Creates a private channel under the configured category
- Sets permission overwrites (opener + support roles can see it, @everyone cannot)
- Names the channel using the
channelNamePattern(e.g.ticket-general-alice-0042) - Posts a welcome embed mentioning the support roles
- Adds 🔒 🔓 ❌ reactions to the welcome message for staff controls
The opener and support staff are now the only people who can see the channel.
A small confirmation embed appears in the panel channel (auto-deletes after 12 s):
✅ Ticket Created
Your General Inquiry ticket has been opened in #ticket-general-alice-0042.
Duplicate ticket protection
If allowMultipleOpenTickets is false (the default) and the user already has an open ticket, the bot posts an error instead:
⚠️ Ticket Already Open
You already have an open ticket: #ticket-general-alice-0042.
Please use that channel. Close it first if you want to open a new one.
Set "allowMultipleOpenTickets": true in config.json to allow multiple simultaneous tickets per user.
Cooldown
After a ticket is created, the user must wait TICKET_COOLDOWN_SECONDS (default 60 s) before they can open another. This prevents rapid-fire ticket spam.
Channel name format
By default channels are named using:
ticket-{type}-{username}-{id}
| Placeholder | Replaced with |
|---|---|
{type} | The ticket type's id (e.g. general) |
{username} | Sanitized, lowercase opener username (max 20 chars) |
{id} | 4-digit number derived from the channel snowflake |
Example: ticket-general-alice0042
You can change the pattern in config.json:
"channelNamePattern": "support-{username}-{type}"