Skip to content

BlogGuides

How to Close a Discord Ticket (and What a Close Deletes)

Close a ticket with the red button, /ticket close, or the dashboard. Who is allowed to press it, what the reason feeds, what survives, and why there is no undo.

Dani, Founder, AI Ticket Bot

17 min readUpdated

Closing is the most pressed button in any ticket bot and the least examined one. It is also the only action in the whole lifecycle that cannot be taken back. A ticket can be claimed and unclaimed, transferred, renamed, re-prioritised and handed between staff all day. Closed is where the branching stops: the channel is destroyed, the live messages go with it, and what remains is a transcript at a link.

That is worth saying plainly, because most guides describe closing as tidying up. It is not tidying up. It is a delete with a receipt, and the receipt is the entire reason it is safe.

How do you close a ticket in Discord?

Three entry points, and the differences between them matter more than which one you happen to use.

WhereHowReason fieldAsks first
In the ticketThe red Close button on the opening messageNoNo
In the ticket/ticket close reason: ...Yes, up to 255 charactersNo
Dashboard, one ticketClose ticket, then ConfirmYesYes
Dashboard, many ticketsSelect rows, then Close selectedYes, one shared reasonYes
  1. Decide it is actually over

    The member has confirmed, or the ticket has already gone unanswered past your window

  2. Use the command, not the button

    /ticket close takes a reason. The button takes nothing at all

  3. Write the reason for a stranger

    It is copied to the member, your log channel and your audit trail

  4. Let the sequence finish

    The transcript builds first, so on a long ticket the channel takes a second or two to disappear

  5. Check the opener got it

    The close DM carries the transcript link and the star rating button. If their DMs are shut, send the link yourself

That is a deliberate trade rather than an oversight. A confirmation on a button that staff press forty times a day becomes a reflex within a week, and a reflex confirmation protects nobody. What actually protects you is that the transcript exists before the delete does.

What actually happens when you close a ticket?

  1. Transcript saved
  2. Ticket closed and stats snapshotted
  3. Opener sent the record
  4. Webhooks and log channel fired
  5. Channel deleted

Read that order left to right, because it is the design. Nothing destructive happens until the record is safe. The transcript is built from the messages the bot captured while the ticket was live, so it does not depend on reading the channel back, which is what makes the same code work even when somebody deleted the channel by hand first.

That second stage is one database transaction rather than a run of separate writes, which is what stops a close from half happening. In that single transaction the ticket flips to closed, the timing bounds are computed, the staff who contributed are recorded, and the live message rows are deleted because the transcript now holds the canonical copy.

What a close writes down, once, permanently

Transcript
The full conversation at its own link, kept for as long as your plan says
Closer and reason
Who ended it and what they typed, searchable months later
Solve time
First real message to last, so you can measure how long tickets take
First response time
The gap before somebody other than the opener spoke
Staff contributions
One row per person who actually said something in the ticket
AI reply speed
The average gap between a member message and the bot's answer

One detail there is worth knowing because it changes the numbers you will read later. The lifecycle embeds the bot posts, the welcome message, the claim notice, the inactivity marker, are excluded from those timing bounds. Solve time measures the conversation, not the bracket of automated posts around it. If your reporting elsewhere has ever told you a ticket took four seconds, this is the thing it was missing.

Two closes at the same moment are also handled, which sounds like trivia until the day two staff both reach for the button. The database write is gated on the ticket still being open, so exactly one closer wins. The other one silently skips the transcript, the DM, the audit row and the webhook, and just cleans up the channel. Your member gets one message, not two.

180,000+
tickets over the bot's lifetime
~half
resolved with no human
3,400+
Discord servers
seconds
typical first reply

Where these numbers come from

Sample
Every ticket handled across both generations of the bot, all servers
Window
Lifetime to date, refreshed continuously
Definition
Resolved means the AI closed the ticket without escalating to a human
Check it
The live endpoint at /api/stats/global returns the current figures

Who is allowed to close a Discord ticket?

Who passes the close check

The opener
Yes by default. A server wide switch can turn this off
Staff with the close permission
Set per staff role, separately from claim and transfer
Manage Server
Always allowed, staff roles or not
Anyone else in the channel
Refused after the click, with a message saying why
The AI
Only after asking the member and getting a clear yes in an earlier turn

The Close button lives on the ticket's opening message, so everybody in the channel can see it. The permission is checked after the click rather than by hiding the button, which is the right way round: a hidden button teaches nobody anything, while a refusal explains itself. It also means a permission you forgot to grant shows up as a complaint from staff rather than as tickets quietly never closing.

Close is its own permission on a staff role, alongside claim, transfer and the AI training rights. Turning one on does not turn the others on, and that separation is intentional. A trial moderator who should work tickets is not automatically somebody who should end them.

Staff click Close and get refused
That role does not have the close permission, or the person is not on a staff role at all
The member cannot close their own ticket
The server switch for it is off, which also leaves them stuck at their open ticket limit
Somebody can claim but not close
Two separate permissions on the same role. Enabling one never enables the other
Only admins can close anything
Nobody has been given the close permission, so Manage Server is the only thing passing the gate

Closing from the dashboard passes through one extra check that is worth knowing about if you care how the web side is secured. The browser cannot claim to have Manage Server. The request names who is acting, the bot resolves that person in the real Discord server, reads their real roles, and gates on those. Somebody holding an API key still cannot close a ticket in a server they are not a member of. If you are wiring staff permissions generally, what a ticket bot needs to work covers the server side of it.

Should members close their own tickets?

Usually yes, and the reason is not politeness.

Let members close

  • The member knows they are done before your staff do
  • It frees their slot, so they can open the next ticket at all
  • Fewer stale channels means the open list stays a real to-do list
  • It costs nothing on any plan and needs no configuration

Keep closing to staff

  • Servers where a close needs a decision, such as appeals or reports
  • Queues where the ticket is evidence and closing it early loses the thread
  • Teams that log outcomes per ticket and need a staff reason on every close
  • Any panel where members close by accident and immediately reopen a duplicate

The slot point is the one people miss. The active ticket limit counts tickets that are open or claimed on that panel, so an abandoned ticket keeps its place forever. On the free plan that limit is one ticket per panel, three on Premium and five on Pro. A member who says "the ticket button does not do anything" is very often a member with an ancient ticket nobody ever closed.

If you do turn member closing off, put something else in the queue's way. That is what the inactivity settings are for, and they are the only path that closes a ticket without a person pressing anything.

What is the close reason actually for?

Not for you. The reason you type travels further than any other free text field in the product.

It is shown to the member in the close DM. It is posted in your log channel. It lands in the audit trail with your name against it. And it is the field /ticket search searches when you look for a closed ticket months later.

One place it does not travel is the outgoing webhook. If you have a webhook wired to this panel, the close event tells your server who closed the ticket and where the transcript is, and nothing else. The reason lives in the log channel embed and in the ticket record, so read it from there rather than expecting it in the payload.

  • Refunded on order 4471, member confirmed

    The next person to read this needs no context and no follow up question

  • spam

    True at the time, meaningless in a search result, and the member sees it

  • Duplicate of ticket 1180, answering there

    Points at the real conversation, which is what a duplicate needs to do

  • closed

    The status field already says that. This is the most common reason typed and the least useful

  • No reply after the reminder, happy to pick it up in a new ticket

    Tells the member what happened and what to do next

  • test

    Ends up in your log channel forever, usually on the ticket somebody used to test the panel

The cap is 255 characters, which is roughly two sentences. That is enough for what happened and what to do next, and deliberately not enough for a case note. Anything longer belongs in the ticket itself, where it becomes part of the transcript.

Can you reopen a closed Discord ticket?

No. There is no reopen command, no reopen button, and no admin override that brings one back. This is the single most important thing to understand before you hand the close permission to anybody.

In channel mode the Discord channel is deleted. In thread mode the thread is archived and locked instead, and the lock is not decoration:

So the conversation history stays reachable and the closed ticket can't be revived by the opener sending a new message.

The bot's own reason for locking a closed thread rather than only archiving it

What you do instead is simple and works fine once your staff know it. The member opens a new ticket, and whoever picks it up pastes the old transcript link into it. The new ticket starts with the full history one click away, and your numbers stay honest because two problems are two tickets rather than one that never ends.

The closed ticket is not inert, either. It can still be used to teach the AI, which is the one thing that genuinely benefits from a ticket being finished: the mistake and the correction are both in there.

Channel mode deletes, thread mode locks

Which mode your panel runs decides what a close leaves behind in your server, and most people choose the mode for the wrong reason.

Channel mode

  • Each ticket gets its own channel
  • Close deletes the channel outright
  • Nothing remains in the server afterwards
  • Eats into Discord's 50 channels per category
  • The transcript is the only surviving copy
  • Easier for staff who work from the channel list

Thread mode

  • Each ticket is a thread under one channel
  • Close archives and locks the thread
  • The history stays, greyed out in the thread list
  • Does not touch that limit at all
  • Transcript plus the locked thread in Discord
  • Easier for servers that want a visible archive

Neither is more correct. Channel mode is the default because it keeps the server clean and staff can see the queue in their sidebar. Thread mode suits servers that want the record visible in Discord itself, and it is what the website chat widget uses. The setup guide covers picking one before you publish, which is the right time, because switching later only affects new tickets.

What happens to the conversation after the close?

  1. On close

    The transcript is written

    Built from captured messages, before anything is deleted

  2. Seconds later

    The channel is gone

    Live message rows are removed, the transcript is now the only copy

  3. Day 90

    Free plan expiry

    The transcript body is purged, the ticket row stays in your history

  4. Day 730

    Paid plan expiry

    Two years on Premium, Pro and Enterprise

  5. Any time

    Transcripts turned off

    A server switch. Nothing is stored and the close DM carries no link

The opener is sent the link automatically. That send is best effort, so a member with direct messages closed simply does not get it, and the close still succeeds because the transcript is the record rather than the DM. If somebody needs their copy, the link works for them from the dashboard side too. Who else can read a transcript, and what a server should think about before turning them on or off, is covered in ticket transcripts.

The star rating attached to every close

The close DM carries one more thing that most ticket bots do not have: a Feedback button. The member rates the ticket from one to five stars and can add a note of up to 1,000 characters.

MemberToday at 21:04

perfect, that sorted it. thanks

StaffToday at 21:05

Glad it worked. Closing this one now, the transcript is in your DMs

AI Ticket Bot
AI Ticket BotAPPToday at 21:06

Ticket #1284 closed by @Mod. Reason: resolved, member confirmed

MemberToday at 21:07

five stars, was expecting to wait until tomorrow

Four properties are worth stating because they decide whether the data is usable:

  • Only the opener can rate. The rating is checked against who opened the ticket, not who clicks, so nobody can pad a score.
  • One rating per ticket, forever. The database enforces it. The button disabling itself is only the polite version.
  • It works on every plan, including free. There is nothing to enable.
  • Staff read it, not just admins. /ticket feedbacks in Discord needs Manage Server, and the rating also shows on the ticket's page in the dashboard next to the close reason.

Ratings are the only outcome signal a support queue gets for free, and the rate at which they arrive tells you something too. Support analytics covers what to do with them once you have a few hundred.

How do you close a lot of tickets at once?

Through the dashboard's ticket list. Filter to what you want, select the rows, write one shared reason, confirm. The mechanics are worth reading before you use it on a real backlog:

  • Up to 100 tickets per request. The selection is de-duplicated and checked immediately, so a bad request fails straight away rather than halfway through.
  • The closes then run in the background, one at a time and deliberately paced to stay inside Discord's rate limits. A full batch of 100 takes the better part of a minute.
  • Each one is a complete close. Transcript, opener DM, audit row, webhook, log channel post, channel deleted. Nothing is skipped for being part of a batch.
  • There is no rollback and no progress bar. Each close is committed on its own. A failure affects that ticket alone and is recorded in the logs and the audit trail.

For a queue that has grown past the point of reading, this beats the alternative, which is nothing. For a queue that is merely untidy, inactivity settings get you there gradually and with a warning to the member first, which is the kinder route.

The five kinds of close in your audit log

Not every close is somebody pressing a button, and your audit trail distinguishes them. When you are working out what happened to a ticket, this is the list to read against.

Ticket closed
Somebody pressed Close, ran the command, or used the dashboard
Ticket auto-closed, user left
The opener left the server while their ticket was open
Ticket auto-closed, inactivity
The window ran out after the member was warned and stayed silent
Ticket force-closed by admin
A panel or category was deleted and its open tickets were closed properly with it
Ticket force-closed, channel deleted
Somebody deleted the Discord channel by hand and the bot reconciled afterwards

The last two are the ones people mistake for bugs. Deleting a panel does not orphan its tickets, and deleting a ticket channel by hand does not lose the conversation, because the transcript is built from what the bot already captured rather than from reading the channel back.

Where closing goes wrong

Five failure modes worth knowing before they happen

Deleting the channel instead of closing it. It works, in the sense that the bot notices and reconciles, and the member still gets a transcript. What you lose is the reason, and the member receives a blunter notice explaining the channel was removed. Use Close.

The staff role that cannot close. Close is a per role permission and it is easy to add a role without it. The symptom is staff saying the button is broken, which it is not.

Members with closed DMs. The transcript link never arrives. The transcript exists, so paste the link into the new ticket when they come back. Nothing is lost, but nothing tells them that either.

Tickets from a connected third party bot. If you run our AI inside another bot's tickets, our close deliberately refuses. That bot owns its channels, and closing them from here would delete something we did not create. See adding AI to an existing ticket bot.

The command has a cooldown. Five closes per minute per person through /ticket close. It exists so a mistake cannot cascade. If you are hitting it, you want the bulk close on the dashboard rather than a faster finger.

/ticket close
Close this ticket, with an optional reason of up to 255 characters
/ticket settings
Whether members may close their own tickets, and whether transcripts are stored
/ticket search
Find closed tickets by panel, status, person, or text in the close reason
/ticket feedbacks
Browse the star ratings members left on closed tickets, Manage Server only
/staff
Give a role the close permission, separately from claim and transfer

A short checklist before you press it

Worth thirty seconds on any ticket that mattered

  • Has the member confirmed, or has the ticket already gone silent past your window
  • Does the reason tell a stranger what happened and what to do next
  • Is there anything in this conversation worth teaching the AI, which is easier now than in three months
  • If this needed a specialist, was it transferred rather than closed and reopened elsewhere
  • If the member is likely to come back, do they have the transcript link
  • If you are closing in bulk, would you be comfortable with every one of those members reading your reason

None of that applies to the fifty routine tickets a week that end with "thanks, that worked". Those should be closed on the button without ceremony, which is exactly why the button has no ceremony.

Closing is a habit, not a setting

There is almost nothing to configure here. Whether members can close, whether transcripts are stored, and how long a quiet ticket survives are three switches, and the rest is what your staff do forty times a day.

The two habits that pay for themselves: write a reason a stranger could use, and treat the close as final because it is. Everything else in a ticket bot forgives a mistake. This one hands you a transcript and a member who has to start again.

Frequently asked questions

Inside the ticket, click the red Close button on the opening message, or run /ticket close and add a reason. Staff can also close a ticket from the web dashboard, which asks for a reason and a confirmation first. All three run the same sequence underneath: the transcript is saved, the ticket is marked closed, the opener is sent the record, your log channel and any webhooks are told, and only then is the channel deleted.

Three groups. The member who opened it, unless the server has turned that off. Any staff role that has been given the close permission, which is a separate switch from claim and transfer. And anyone with Manage Server, regardless of staff roles. Everyone else is refused after the click, because the button is on a message the whole channel can see and the check happens server side rather than by hiding it.

No. There is no reopen anywhere in the product, and that is deliberate. In channel mode the Discord channel is deleted on close. In thread mode the thread is archived and locked, specifically so a closed ticket cannot be revived by the member posting in it again. What survives is the transcript at its own link, so the history is not lost. If the conversation needs to continue, the member opens a new ticket and staff paste the old transcript link into it.

It is written to a transcript first, before anything is deleted, and the opener is sent the link by direct message. The live message rows are then removed, so the transcript is the only copy. Transcript bodies are kept for 90 days on the free plan and 730 days on paid plans, after which the body is purged and the ticket itself stays in your history. A server can also turn transcripts off entirely, in which case a close stores nothing and the DM carries no link.

Yes by default, and there is a server wide switch to stop it. Leaving it on is usually right, because a member who cannot close is also a member who stays at their open ticket limit, which is one ticket per panel on the free plan. If you turn it off, expect the queue to grow and plan for staff or the inactivity timer to do the closing instead.

From the tickets list on the web dashboard. Select the rows you want, add one shared reason, and confirm. The bot accepts up to 100 tickets per request, validates the batch immediately, then closes them one at a time in the background at a pace that stays inside Discord's rate limits. Every ticket in the batch still gets its own transcript, its own direct message to its opener, and its own webhook, so a bulk close is not a quiet cleanup.

Almost always because the last one was never closed. The active ticket limit counts tickets that are open or claimed on that panel, so an abandoned ticket keeps occupying the slot. The limit is one per panel on the free plan, three on Premium and five on Pro. Closing the old ticket frees it immediately, which is why a stale queue shows up as members saying the button does not work.

It’s not just an AI, it’s your AI.

See it on your own server.

Add the bot free, teach it a few of your most common answers, and watch it clear the repeat tickets on its own.

Free plan, no card. Your first panel starts 14 days of Premium.