Skip to content

BlogGuides

Discord Staff Applications: A Ticket Bot Cannot Rank Them

Applications only mean something next to each other, and a ticket bot is built to keep tickets separate. The setup that works anyway, and what breaks first.

Dani, Founder, AI Ticket Bot

9 min read

Applications arrive through the same door as everything else. Somebody wants to be a moderator, a partner server wants to talk, a creator wants a content role, and all three press the same button as the member whose role never applied. So the obvious move is to give them a category and treat them like tickets.

That works, and the point where it stops working is sharper than most guides admit. Worth knowing before you build a hiring round on top of it.

Can you run staff applications through a ticket bot?

Yes. Give applications their own category on a panel you already have, switch the AI off for that category, and each application arrives as a private channel with the applicant in it. On a paid plan the category can ask its questions first, so the channel opens with the answers already posted at the top. None of this is exotic and plenty of servers do it: a Discord ticket bot will not stop you.

The reason to read further is that a ticket and an application are not the same object, and the difference is not a missing feature. It is what each one is for.

What an application needs that a support ticket does not

A support ticket

  • Arrives because something went wrong
  • Is judged on its own
  • Wants the fastest correct answer
  • Ends in a resolution
  • Is finished when it closes

A staff application

  • Arrives because you asked for them
  • Is only worth something next to the others
  • Wants the same questions asked of everyone
  • Ends in a verdict you may have to explain
  • Is the thing you want to reread in six months

The right column is a review workflow. It wants a queue you can see at once, one set of answers you can read across, somewhere to record a verdict, and a record that outlives the decision. A support tool supplies none of them, and that is not an oversight.

Why a ticket bot keeps tickets apart

Five mechanics, and every one of them is doing its job correctly.

A ticket is a room with its own permission list. When the ticket opens, the bot writes Discord permission overwrites onto the new channel: everyone denied, the opener and the bot allowed, then whichever staff roles are entitled to be there. That is what makes a ticket private, and it is also why twelve applications are twelve channels rather than twelve rows. More on how those roles are drawn in how a support team is structured.

Closing deletes the room, with no reopen. What survives is a transcript at its own link, one per ticket, which is a conversation rather than a record card. What a close actually does covers the rest of it.

The answers expire with the transcript. Form answers are stored on the ticket and posted into it as an embed. When the transcript's retention window ends, the body is purged and those stored answers are cleared with it: 90 days on the free plan, 730 on paid. An application you turned down in March is unreadable by the summer.

There is no field for a verdict. A ticket has a status, open or claimed or closed, and a priority with three values. Neither is a score, and nothing else on the row is yours to fill in.

Search does not read the conversation. Past tickets filter by status, priority, panel, opener, claimer, closer, time window and what the AI did. The one free-text option searches the close reason and nothing else, so "the applicant who mentioned they already moderate somewhere" is not a query you can run.

None of that is a defect. A support queue is built so any ticket can be picked up by whoever is free, handled in isolation, then forgotten. Applications want the opposite of all three.

The setup that works anyway

  1. Give applications their own category

    On the panel you already run. The free plan is one panel holding five categories, so this costs you one of the five

  2. Turn the AI off for that category

    Each category overrules its panel with an On, Off or Default switch. An application has no answer to look up, so there is nothing for the AI to do but get in the way

  3. Spend the form questions carefully

    Paid plans ask up to five questions before the channel exists, and five is Discord's own cap on a pop-up. On a ticket bot those five are the application, so ask what you would otherwise have to chase everybody for

  4. Name the channels after the applicant

    The panel's naming template takes the username and the category name, and it is free on every plan. Your sidebar then reads as a list of people instead of a column of numbers

  5. Point the category at the role that decides

    Every category carries its own responsible staff role and its own open ping, so applications land with the people who can act on them and nobody else has to watch

  6. Write the verdict into the close reason

    Closing takes an optional reason of up to 255 characters. It is the only free-text field you control and the only one search can look inside

Which is worth knowing before somebody types a candid note into it. "Not this round, reapply after March" is fine, and arguably better delivered than withheld. Anything you would not say to the person belongs in a staff channel instead.

Getting the pile into one place

The missing list is the part you cannot configure your way out of. Three things get you closer, in ascending order of effort.

The channel sidebar is the free one. Put the applicant's name in the naming template and the category becomes a list: one channel per person, named after them, in arrival order. Not sortable, and still a list.

A log channel puts the events in one place. Any panel can post opened, claimed, closed and transferred into a channel you choose, free and with no plan gate. The opened line carries the applicant, the category and a jump button; the closed line carries your verdict, because the close reason is a field on it. And it stays put after the rooms themselves are gone.

The export is the closest thing to a spreadsheet. From the ticket list in the dashboard you can tick rows and download them, either as a file of one row per ticket with a transcript link on each, or as an archive that includes every message and the form answers. It needs Manage Server, and it is a download rather than a queue: nothing you do in the spreadsheet finds its way back.

/ticket close
Takes an optional reason up to 255 characters. This is your verdict field
/ticket search
Filters past tickets by panel, opener, status or window. Its text option reads close reasons only
/ticket transfer
Moves a ticket to another category. Applications and Shortlist, with transfer between them, is a crude review stage
/panel unpublish
Takes the panel down between rounds without deleting anything on it

That shortlist trick costs a second category slot, and it is about the most a ticket bot will give you here.

What the AI is actually for during a hiring round

Not the applications. The questions about them.

Announce that you are recruiting and two piles arrive. One is applications. The other, much larger, is when does it close, how old do I have to be, do I need a microphone, can I apply again after being turned down, will you tell me either way, how long until I hear back. Those have exact answers, they do not change during the round, and they get asked by a different person every hour.

That is the shape of question an AI is genuinely good at, and it is a fair part of why roughly half of all tickets across every server running this bot close with no human replying at all. Current figures sit at /api/stats/global, if you would rather check.

How that resolution share is defined

Sample
Every ticket the bot has handled across its lifetime, V1 and V2 combined
Window
Lifetime to date, refreshed continuously rather than pinned to a date
Definition
Closed with no human replying at any point. One staff message and it does not count

Teaching it those answers before the round opens is worth more than anything it could do inside an application. Staff teach each server's own brain in plain language, and where it holds an exact value it quotes that verbatim, so a closing date comes back as the date you wrote. How training works covers the process.

Two guardrails matter here in particular. It cannot invent a fact, a policy or an availability it was never given, so it will say it does not know rather than guess your deadline. And it will not commit your staff to a response time, which is the honest behaviour even where it reads as unhelpful: see support response times. If the true answer to "when will I hear back" is that you do not know, teach it that sentence rather than leaving it to improvise a warmer one.

Where this is the wrong choice

Run them here when

  • A round brings a handful of applications and one person reads all of them
  • Applications are occasional and you already run tickets for support
  • The decision is a yes or a no, not a ranking

Move them out when

  • Two or more people score the same application and have to agree
  • You want a shortlist that survives past the end of the round
  • You need last round's answers on file when the next one opens
  • Applications outnumber your support tickets, which means the support tool is now the wrong shape

This is the same answer we give about whitelist applications on roleplay servers, where the ticket bot's job is the questions around the application rather than the application itself. An application is a review workflow with a queue, a score and a rejection reason. Collect one in a ticket bot by all means; just notice when you have started rebuilding a review tool inside a support tool, because that is expensive and it is never finished.

If you get there, a dedicated application bot holds those three as real fields rather than conventions you maintain by hand. The same team builds one: Mico is a Discord application bot with custom forms, AI-assisted review on every submission and a dashboard for the queue. Somebody else's will do the job too. The point is the shape, not the vendor.

Once you have picked somebody, the ticket bot has one more good use that most servers skip. The tickets your new moderator should read before their first shift already exist, and onboarding new moderators is about finding them.

Frequently asked questions

Yes, and for a small round it is the fastest thing that works. Give applications their own category, switch the AI off for it, and every application arrives as a private channel with your questions already answered. What you are not getting is a review workflow. A ticket bot has no score, no shortlist and no way to read twelve applications side by side, so the setup holds while one person is reading a handful and starts costing you time somewhere above that.

Not inside the ticket bot, no. Each ticket is its own channel with its own permission list, which is exactly what makes a support ticket private, and it means twelve applications are twelve rooms rather than twelve rows. The nearest thing to a list is your channel sidebar, which you can make readable by putting the applicant's name in the panel's naming template. To read them next to each other you have to take them out, either by exporting the tickets to a file or by copying the answers somewhere yourself.

On our bot, yes, so write the close reason as though they will read it. The message the bot sends the opener when a ticket closes carries the reason you typed, and so does the transcript page that message links to. The only place it is deliberately hidden is the member's own list of their past tickets. If you want a candid internal note about somebody, it does not belong in that field.

Only for as long as the transcript lasts. Closing deletes the channel and it cannot be reopened, so what survives is a transcript at a public link holding the conversation and the answers the applicant typed into the form. That transcript has a retention window, 90 days on the free plan and 730 days on the paid ones, and when it expires the form answers stored on the ticket are cleared with it. If you expect to reread this round when the next one opens, take a copy while it is still there.

The questions about applying, not the applications themselves. Announce that you are recruiting and you get a much larger pile of when does it close, how old do I have to be, do I need a microphone, can I apply again after being turned down. Those have exact answers that do not change during the round and get asked by different people all week, which is the shape of question an AI handles well. The application itself has no answer to look up, only a decision from you.

It holds a queue, a score and a rejection reason as real fields rather than as conventions you maintain by hand, so applications can be listed together, ranked, moved through stages and read back a year later. A support queue is built for none of that. The three signals that you have outgrown the ticket bot are the same three: more than one person has to agree on the same application, you want a ranking rather than a yes or a no, or you need this round's answers on file when the next one opens.

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.