Skip to main content

🎫 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:

  1. Creates a private channel under the configured category
  2. Sets permission overwrites (opener + support roles can see it, @everyone cannot)
  3. Names the channel using the channelNamePattern (e.g. ticket-general-alice-0042)
  4. Posts a welcome embed mentioning the support roles
  5. 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}
PlaceholderReplaced 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}"