Tickets module and the builder

Discord Ticket Bot Maker

A panel members press, a private channel or thread that opens, staff who claim it, a transcript when it closes. Ready made from the Tickets module, or built stage by stage from the same blocks as the rest of your bot. Free, and your bot.

  • No coding required
  • Your bot, your branding
  • Hosted for you
  • Free to use
#supportPanel
NB
Nightfall BotAppPinned

Need a hand?

Click the button below to contact the Nightfall support team. A private ticket opens for you and the staff.

SupportBillingReport a member
ticket-0142Mika and Support Team only
NB
Nightfall BotAppToday at 16:08

Mika's Ticket

  • Subject: Cannot see the members channel
  • Details: Verified an hour ago, still nothing.
  • Opened by: Mika, ticket 142 of 1,204

Support Team has been pinged. Average first reply: 6 minutes.

ClaimCloseTranscript

Design the panel, see what it creates

The decisions a panel asks for in the module, and what each one does to the ticket that opens.

Design decisions
Panel layout

Up to five buttons in a row, or one menu with up to 25 options.

Categories

Each one is a button or option with its own blocks: its own form, its own staff role, its own category.

Ticket name
Ticket lives in
#open-a-ticket

Need help?

Pick what this is about and a private ticket opens for you and the team.

SupportBillingReport a member
When Mika presses Support
ticket-0142

Created under the category you chose, with these overwrites:

  • @everyoneView Channel denied
  • {user}View Channel, Send Messages allowed
  • @Support TeamView Channel, Send Messages, Manage Messages allowed

The module numbers each panel separately and pads to four digits. Builder version: a Server Number variable and an equation.

Every setting here has a builder equivalent. The naming pattern is a variable, the overwrites are fields on Create a Channel, the categories are buttons with their own blocks.

The Tickets module, in full

Ready made and free. Every panel is its own little ticket system, and the rules below apply per panel.

Panels, buttons or a menu

Each panel has its own message, label, colour, emoji, support roles and ticket name. Connect up to 24 for a category picker.

Forms before the ticket

Ask for a subject and details first. The answers land in the ticket as {form}, so staff never open a blank ticket.

Channel or thread mode

Private channels under an open category, or private threads that keep the channel list short.

Two step close

Closing moves the ticket to a closed category and removes the member. Reopen or delete from there.

Transcripts and logging

New, edited and deleted messages are recorded. A logging channel gets every create, close, reopen, add, remove and error.

Limits and cooldowns

Maximum open and active tickets, per panel and per member. A cooldown between tickets, blacklisted roles that cannot open one.

Automations

Auto close or auto delete after inactivity, and a rule for when the ticket creator leaves the server.

DMs and pings

Ping the support roles on open. DM the creator on create, reopen, add, remove and close.

Nine commands, each with an off switch

Members mostly press buttons. The commands are for staff, and for opening a ticket on someone's behalf.

Panels and tickets5 commands
  • /ticket setup

    Send a panel to a channel

  • /ticket create

    Create a ticket, for yourself or for a member

  • /ticket close

    Close the current ticket

  • /ticket reopen

    Reopen the current ticket

  • /ticket delete

    Delete the current ticket

People and automation4 commands
  • /ticket add

    Add someone to the ticket

  • /ticket remove

    Remove someone from the ticket

  • /ticket automation

    Edit automated actions for this ticket

  • /ticket update-countsAdmin only

    Update ticket counts of the ticket system

Add a command to the module and it gets the module's variables: {ticket}, {ticket_name}, {ticket_id}, {form}, {controls}, {ping} and the counts.

Every stage of a ticket, built from blocks

Six stages. Pick one to see what the member and staff see on the left, and the blocks that produced it on the right.

#support
NB
Nightfall BotApp

Need a hand?

Pick what this is about and a private ticket opens for you and the team.

SupportBillingReport a member
Blocks for this stage3 blocks
  1. triggerSlash command /panel, staff only

    Run once in the support channel. A Role Condition keeps members from posting their own panels.

  2. actionSend or Edit a Message with buttons

    An embed in your colour and one button per category. Each button carries its own chain of blocks.

    • Button style
    • Emoji
    • Disabled
  3. actionPin a Message

    So the panel stays at the top of the channel.

Three buttons, three separate flows. The Report a member button can ask different questions and open under a different category than Support.

This is the whole system. About twenty blocks, no ticket specific ones among them, and every stage is yours to change.

Private channel or private thread?

The first decision. Both are one setting in the module and one block in the builder.

Channel mode

A private channel per ticket

The classic. A text channel under an Open Tickets category that only the member and the support roles can see.

Good when
  • You want tickets grouped in a category staff can scan
  • Closed tickets should move to a second category and stay for a while
  • Members should be able to find their ticket in the sidebar
  • You want per ticket permission overwrites for adding people
Watch out for
  • Discord caps a server at 500 channels, so busy servers need auto delete
  • A long channel list is noisy for staff who are not in the support role
  • Each ticket is a real channel, which shows in the audit log
Blocks
  • Create a Channel text channel, category, topic, permission overwrites by role or user.
  • Edit a Channel rename on claim, move on close, adjust overwrites to add or remove people.
  • Delete a Channel after the Wait block or from a Delete button.
Thread mode

A private thread per ticket

A private thread inside the panel channel. Invisible to everyone who is not in it, and it never touches the channel list.

Good when
  • You run hundreds of tickets a week
  • Staff live in one channel and want tickets to stack under it
  • You do not need closed tickets to hang around
  • Members on mobile prefer threads to hunting for a channel
Watch out for
  • Threads archive on their own after the period you choose, up to a week
  • Permissions come from who is invited, not from overwrites
  • Moving a thread to a closed category is not a thing; use archive and lock instead
Blocks
  • Create a Thread private thread, name, slowmode, auto archive after an hour, a day, three days or a week.
  • Send a message in the thread mentioning the member and the support role adds them.
  • Edit a Thread archive and rename on close, and Delete a Thread when it is done.

The twenty blocks a ticket system is made of

General purpose blocks, grouped by the job they do in a ticket. Open one to see what it asks for.

Opening5 blocks
The ticket itself5 blocks
Staff tools5 blocks
Closing and after5 blocks
Every field takes a variable, so a form answer, a button press or a stored value can drive any of them.

Four things dedicated ticket bots charge for or cannot do

Each one is a real flow you can drag out block by block.

  1. TriggerSupport button pressed

    On the panel.

  2. ConditionComparison: {BGVAR_open_ticket} equals 1

    A per member Number variable set to 1 when a ticket opens and 0 when it closes.

  3. ActionTrue: reply with a link to their open ticket

    Store the channel ID in another user variable at open time so the link is one variable away.

  4. ActionFalse: carry on to the form

    The rest of the open flow runs as normal.

The module is built from ordinary events

Open the module's Events tab and you find a timed event, a member leave event and three message events. Pick one to see what it does and how you would change it.

Event builder triggers8 music events
The Tickets module is built from these
Also useful for tickets
Selected event

Inactive Tickets Handler: when a timed event runs

Auto close is a timed event. The module checks every open ticket against its last activity and closes or deletes the ones past the limit.

  1. 1Timed event on a schedule.
  2. 2Compare the last activity variable to now.
  3. 3Run the close flow with an inactivity reason, or delete outright.
Variables this event gives you
{timestamp}

Tickets in any message

The module's variables and the builder's, typed straight into an embed. Switch to see the template behind the reply.

Module variables
  • {ticket}Mentions the ticket
  • {ticket_name}Its name
  • {ticket_id}Its ID
  • {panel_count[4]}Ticket number for this panel, padded to 4 digits
  • {total_count}Ticket number across every panel
  • {form}The form answers, formatted
  • {controls}The ticket buttons
  • {ping}Mentions of all support roles
Builder variables
  • {support.subject}A form field, named by you
  • {transcript.url}View link from Create Transcript
  • {transcript.download_url}Download link
  • {BGVAR_ticket_count}Your own counter
  • {user}The member
ticket-0142
NB
Nightfall BotAppToday at 16:08

Mika's ticket, ticket-0142

Ticket {panel_count[4]} on this panel, 1204 overall.

  • Form:Subject: Cannot see the members channel. Details: Verified an hour ago, still nothing.
  • Support:@Support Team
  • Transcript on close:{transcript.url}

Every variable above works in the module and in your own commands.

How it compares to dedicated ticket bots

Ticket Tool, Tickets, Ticket King and the rest do tickets well. The difference is whose bot it is and what else it can do.

FeatureYour BotGhost botDedicated ticket botsCoding your own
Runs under your own bot name, avatar and colourYesPaid planYes
Panels with buttons or a select menuYesYesCode
Forms before the ticket opensYesVariesCode
Channel or thread ticketsYesVariesCode
Two step close, transcripts, limits, auto closeYesVariesCode
Change how any stage worksYesNoCode
AI first response and triageYesVariesCode
Applications, appeals and reports from the same blocksYesLimitedCode
Moderation, economy, music and the rest in the same botYesNoCode
CostFreeFree tiers and paid tiersServer bills and your time

Dedicated bot features vary by bot and plan. White labelling is a paid tier on the major ones. Checked September 2026.

Built for the servers where people need a private word

The same stages, tuned very differently

Community support desks

The questions that used to land in DMs, in one place with a record.

  • A Support and a Report panel with different teams
  • One open ticket per member
  • Auto close after two quiet days
  • Transcripts for the mod team

Businesses and stores

Customer service where your customers already are.

  • Billing form asks for the order number first
  • AI first response from your FAQ
  • Claim so nobody answers twice
  • Rating DM when the ticket closes

Applications and appeals

Private review rooms with Accept and Decline buttons.

  • Staff applications in a private thread
  • Ban appeals next to the case history
  • Minimum answer lengths on the form
  • Decisions DMed with a reason

Tournaments and events

Disputes, check ins and prize claims, without a channel per team forever.

  • Thread mode so the channel list stays clean
  • A panel that only exists during the event
  • Limits per team role
  • Auto delete when it is over

Built on the platform behind millions of bots

Tickets run on infrastructure that has been hosting Discord bots since 2018.

1.5M+
Users
Builders using BotGhost
10M+
Commands Created
Custom commands built by the community
2M+
Bots Created
Discord bots made with BotGhost

Live in six steps

From a fresh bot to a panel in your support channel

1

Create your bot and invite it

Sign in to BotGhost, create a bot, and invite it with Manage Channels, Manage Threads and Manage Messages.

2

Enable the Tickets module

Open Modules and switch on Tickets. Set the manager roles, the embed colour and the cooldown between tickets.

3

Create a panel

Name it, write the panel message, pick a button or a select menu, choose support roles, and turn on the form if you want questions first.

4

Pick where tickets live

Channel mode with an open and a closed category, or thread mode. Set the ticket name pattern and the creation message.

5

Send it and add rules

Run /ticket setup in your support channel. Add limits per panel and per member, and an automation for inactivity.

6

Build the parts only your server needs

Open the builder for an AI first response, an applications panel, or a rating DM. This page shows every block.

How to make a Discord ticket bot

What a ticket system is made of, the two ways to add one on BotGhost, and how to keep it from rotting.

What a ticket system actually is

Under every ticket bot there are six moves: show a panel, ask a question, create a private room, let staff take it, close it, and write down what happened. Dedicated ticket bots do those six moves well and charge for the branding. Shared bots do them the same way in every server.

BotGhost gives you the six moves twice. The Tickets module does them ready made, with panels, forms, limits, automations and transcripts. The builder does them as blocks, so the move you want to change is the only one you rebuild. Both run in a bot with your name on it.

Making one without writing code

The module route is a few minutes. The builder route is an afternoon the first time and an hour the second, because the shape is always the same:

  • Send a message with buttons. Each button is a category.
  • Behind the button, a Send a Form block with the questions you want answered first.
  • Create a Channel or Create a Thread, named from a variable, with the member and the support role allowed.
  • Send the welcome embed with the answers, plus Claim, Close and Transcript buttons.
  • Behind Close: Create Transcript, Edit a Channel to move it, Delete after a Wait.

Where the builder beats a ticket bot

A ticket bot decides what a ticket is. The builder does not. An application is a form and a private thread with the admins. An appeal is a form and a channel with Approve and Deny buttons. A prize claim is a form and a DM. None of those are tickets to a ticket bot, and all of them are the same five blocks here.

And because the rest of your bot is in the same builder, a ticket can do things ticket bots cannot: check a member's warning history from the moderation module, refund coins from the economy, or ask a model to draft the first reply from your FAQ.

Keeping it tidy

Ticket systems rot from the edges: abandoned tickets, duplicate tickets, a channel list nobody can read. The module has limits per panel and per member, a cooldown, blacklisted roles, and automations that close or delete after inactivity or when the creator leaves.

In the builder the same rules are a Comparison Condition on a per member variable, a button cooldown, a Role Condition, and a timed event that compares a timestamp. Nothing exotic, and all of it visible on the canvas.

Discord Ticket Bot FAQ

Ghost

Ready to build your ticket bot?

Create a bot, switch on the Tickets module, and have a panel in your support channel in minutes. No code, nothing to install.