Ticket Lab Docs

Getting started

Ticket Lab is a support-ticket bot for Discord by Buildable Labs. Members pick a ticket type on a panel, a private channel opens for them, your team handles it, and a transcript is saved when it closes. Five minutes from invite to first ticket.

Set it up in four steps

  1. Invite the bot

    Use ticketlab.buildablelabs.dev/invite. It asks for exactly what tickets need: manage channels, view and send messages, manage messages, embed links, attach files, read history and mention roles. It does not ask for Manage Roles or Administrator.

  2. Run /setup

    A five-step wizard in Discord: staff role → ticket category → transcript channel → your first ticket type → post the panel. Every choice saves the moment you click it. Running /setup again later opens the config editor instead of the wizard.

  3. Open the dashboard

    Sign in with Discord at /dashboard and pick your server. Everything the wizard did is there, plus everything it didn’t ask about. You need Manage Server on the server, or a role listed under Dashboard roles.

  4. Post the panel

    Type /ticketpanel in the channel where members should open tickets. Edit the panel later under Panels and post it again — panels bake at post time, so a repost is how changes reach Discord.

The dashboard server list
  1. 1Manage opens that server’s workspace.
  2. 2Refresh re-reads your servers from Discord.
  3. 3Servers without the bot show an Invite instead.

What you get for free

Ticket Lab’s free tier is deliberately generous. The things other ticket bots charge for — DM transcripts, per-type routing, forms, custom messages, custom commands, threads, backups — are free here, with no ticket limit and no panel watermark you can’t change.

Nothing here needs Message Content. Slash commands, buttons and dropdowns carry everything. The optional $ text commands are the only feature that reads messages, and they are off unless you turn them on.

Dashboard tour

The dashboard is a settings app for your server. A sidebar on the left, one page per topic, and cards of settings that save together. It reads and writes the same configuration /setup does, live for the next ticket.

The dashboard workspace on the Configuration page
  1. 1Go back returns to the server list.
  2. 2Search settings jumps to any row on any page.
  3. 3Pages are grouped: Setup, Messaging, Automation, Activity, Lab.
  4. 4The server you are editing, always visible.
  5. 5A card — its rows save together with the button at the bottom.

The pages

GroupPageWhat lives there
SetupConfigurationRoles, categories, lifecycle switches, limits, naming, logging, advanced, backups.
Ticket typesWhat members pick on the panel, per-type overrides, forms.
PanelsThe message members open tickets from. Style, mode, intro, banner, live preview.
MessagingMessagesFourteen messages the bot sends, with embeds and variables.
ButtonsLabel, emoji, colour and role rules for every ticket button.
AutomationAutomations ProInactivity, missing owner, opening hours, DMs, roles on events, claiming rules.
Custom commandsYour own /cc commands and text triggers.
AutoModSeven protection packs installed as native Discord AutoMod rules.
ActivityTicketsOpen and closed tickets, with Close, Reopen, Transcript and Delete from the browser.
TranscriptsEvery archived ticket, readable in the browser.
Statistics ProOpened vs closed, response times, by type, by staff.
LabApplicationsIn development. Staff applications with the same panel DNA.
Pro WorkspacePlan status and the bot’s custom identity for this server.
BillingPlans, prices, your subscriptions, invoices and cards.

How saving works

  • Each card has its own Save button. Rows inside it save together; other cards are untouched.
  • Ticket types and panels save per item — Save type, Save panel.
  • Changes apply to the next ticket. Open tickets keep the settings they were created with, except messages and buttons, which render live.
  • Panels are the exception: edits reach Discord only when you post the panel again.

Who can use it

Anyone with Manage Server on that Discord server, plus anyone holding a role you list under Configuration → Dashboard roles. The dashboard signs you in with Discord and only ever shows servers you are actually in.

Locked pages. Pro pages stay visible on Free servers behind a frosted card so you can see what they do. Nothing on the dashboard moves behind a paywall without notice.

Configuration

The server-wide settings. Ticket types can override some of them (staff role, category, mode); everything else applies to every ticket.

Roles & access

RowMeaning
Staff roleThe support team. Sees every ticket, gets every ticket permission and is pinged on open.
More staff rolesAdditional roles with the same powers as the staff role.
Observer rolesCan read tickets but cannot send. Good for trainees and auditors.
Dashboard rolesMay use this dashboard without Manage Server.
Blacklisted rolesCannot open tickets or use ticket buttons.
Bypass rolesExempt from limits and the schedule.

Categories

Ticket category is where new tickets are created. Closed category is where they move when closed (two-step mode). Overflow categories take over when the main one hits Discord’s 50-channel cap — list a few and Ticket Lab fills them in order. Transcript channel receives the transcript when a ticket closes.

Lifecycle

SwitchDefaultWhat it does
Two-step ticketsOnClose puts the ticket in a closed state with Reopen / Delete / Transcript. Off: Close deletes right away, saving a transcript first.
Confirm before closingOnClose asks “are you sure?” first.
Pin the ticket messageOffThe welcome message is pinned when a ticket opens.
Claim buttonOnStaff can claim tickets so everyone sees who is on it. Claiming rules live under Automations.
DM transcriptsOnA copy of every transcript goes to whoever opened the ticket.
Ping staff on openOnMention the staff role when a ticket opens.

Limits

Four counters, all 0 = no limit: open tickets per member (across all types), open per server, closed tickets kept per member, closed kept per server. Bypass roles ignore them.

Naming

Templates for channel names. Variables render first, then the name is lowercased and cleaned for Discord.

TemplateDefaultNote
Open tickets{count}-{type}Try {count}-{ticket.user.name} or {type}-{ticket.user.name}.
When closedclosed-{count}Skipped quietly if Discord rate-limits renames (two per ten minutes per channel).
When claimedemptyLeave empty to keep the name. Reverts on unclaim.
Number padding44 → 0001. Set 0 for plain numbers.

Logging

One line per event into the Log channel — open, claim, unclaim, close, reopen, delete, transcript, transfer, rename, add and remove. Toggle each event on or off. Leave the channel empty to log into the transcript channel.

Advanced

  • Command prefix — for text commands like $close. Default $.
  • Transcript format — HTML (rich, readable in the browser) or plain text.
  • Ticket mode — Channels (one channel per ticket) or Private threads under a Thread parent channel. Types can override this.
  • Bloxlink API key Pro — unlocks the {roblox.*} variables and the optional Roblox embed on tickets.

Backup & restore

A key or a JSON file carries the whole setup — configuration, types, panels and custom commands. Never tickets or transcripts. Generate key gives you a 16-character key valid for 30 days; Download JSON gives you a file you keep. Restore from either on any server the bot is in, choosing which sections to bring over.

Ticket types & forms

A type is what a member picks on the panel — “Support”, “Bug report”, “Partnership”. Each has its own emoji, description, team, category and optional form. Up to 25 per server.

A ticket type expanded on the Ticket types page
  1. 1How many of the 25 types you use.
  2. 2Emoji — unicode or a custom <:name:id>.
  3. 3Which panel lists this type.
  4. 4Remove a type. Existing tickets are unaffected.

Fields

FieldWhat it does
NameShown on the panel and as {type.name}. Up to 80 characters.
EmojiAny unicode emoji, or a custom server emoji as <:name:id> (animated: <a:name:id>). Get the code by typing \:emojiname: in Discord.
DescriptionThe grey line under the name in the dropdown. Up to 100 characters.
Staff roleThis type’s team. Empty = the server staff role.
CategoryWhere this type’s tickets open. Empty = the server category.
Ticket modeChannel or private thread. Empty = the server default.
PanelWhich panel shows this type. Extra panels are Pro.
Ticket messageOverrides the server ticket message for this type only. Markdown and variables work.

Forms

Up to five questions asked in a Discord modal before the ticket opens. Each question has a label, a placeholder, required or optional, short or paragraph, and a min/max length (Discord allows up to 1,000 characters). Answers land in the ticket as {form.1}{form.5} and, with Show answers in the ticket message on, appear as fields on the welcome embed.

A form modal in Discord before a ticket opens
  1. 1The form title (up to 45 characters).
  2. 2A required paragraph question.
  3. 3An optional short question.
  4. 4Submit opens the ticket with the answers.

Repost the panel after changing types. Panels bake at post time. Names, emoji and descriptions on an already-posted panel update only when you run /ticketpanel again (or press the post button on the panel preview).

Panels

The panel is the message members open tickets from. One panel per audience: the default panel is what /ticketpanel posts; extra panels post with /ticketpanel <name>.

The Panels editor
  1. 1Your panels. The default one is always there.
  2. 2Style: Ticket Lab, Classic embed or Plain text.
  3. 3Dropdown or one button per type.
  4. 4Banner on or off.
  5. 5Your own banner URL. Empty = the cosmic banner.
  6. 6New panel — extra panels are Pro.

Styles

  • Ticket Lab — the signature look: banner on top, intro, a line per type with its emoji, then the dropdown or buttons. Built on Discord’s newest components.
  • Classic embed — a regular embed with title, colour and description, or up to ten custom embeds you build yourself. Banner becomes the embed image.
  • Plain text — just the intro and the controls. For minimalists.

Dropdown or buttons

Dropdown lists every type on the panel in one select menu with emoji and description — best when you have more than three types. Buttons gives each type its own button, up to five per row; set the row width under Buttons per row.

Banner image

Every panel ships with Ticket Lab’s cosmic banner. To use your own, paste a direct https link to a PNG, JPG, GIF or WebP under Banner image URL. Upload the image to Discord (any channel), copy the link, paste it. A 2:1 image looks best. Turn Banner image off to have no banner at all.

A Ticket Lab panel in Discord with a custom banner
  1. 1A custom banner from a URL.
  2. 2The intro — markdown and variables work.
  3. 3One line per type, with its emoji (custom emoji work too).
  4. 4The dropdown members open tickets from.
The panel dropdown open in Discord
  1. 1A type with a custom server emoji.
  2. 2A type with a unicode emoji and its description.

Posting and updating

  1. Edit and save

    Change anything in the editor and press Save panel. The live preview on the right shows exactly what Discord will get.

  2. Post it

    Run /ticketpanel in the channel (or /ticketpanel name for an extra panel). The old panel message keeps working, so delete it when you are done.

Extra panels are Pro. The default panel — every style, both modes, custom banner, custom embeds — is free and stays free. Pro adds more panels for more audiences: a staff-only panel, a partner panel, a VIP lane.

Messages & variables

Every message the bot sends during a ticket is editable. Leave one empty to keep the built-in text. Markdown, embeds and variables all work everywhere.

The Messages editor
  1. 1The fourteen messages.
  2. 2{ } opens the variable picker and inserts at the cursor.
  3. 3Add embed — up to ten per message.
  4. 4A live preview with sample values.
  5. 5Reset to default when you want the built-in text back.

The messages

MessageWhen it is sent
Ticket messagePosted inside every new ticket, with the Claim and Close buttons.
Close confirmationAsked when someone presses Close (Confirm before closing on).
ClosedPosted when a ticket enters the closed state, with Reopen / Delete / Transcript.
ReopenedPosted when a closed ticket is reopened.
DeletedPosted right before the channel is deleted.
Claimed / UnclaimedPosted when staff claims the ticket or releases the claim.
TranscriptPosted with the transcript in the ticket and the log channel.
TransferredPosted when a ticket moves to another type.
DM on open / DM on closeSent to the opener when their ticket opens, and when it closes (with the transcript).
Outside hoursShown when someone opens a ticket outside the schedule Pro.
Inactivity warningPosted when the opener goes quiet and the inactivity action is “warn” Pro.

Variables

Write them in curly braces anywhere text goes — messages, embeds, channel names, custom commands. The names are compatible with Ticket Tool, so existing templates paste straight in.

GroupVariables
Server{server.name} {server.id} {server.icon}
Ticket{ticket} {ticket.id} {channel.name} {channel.id} {count} {type} {type.name} {panel.name} {reason}
Ticket owner{ticket.user} {ticket.user.name} {ticket.user.id} {ticket.user.nickname} {ticket.user.tag} {ticket.user.icon}
Who acted{user} {user.name} {user.id} {user.nickname} {user.tag} {claim.user} {claim.user.name}
Form answers{form.1}{form.5}
Time{time} {time.created} {time.closed} {time.claimed} {time.created.age} {time.closed.age}
Roblox Pro{roblox.name} {roblox.id} {roblox.url} {roblox.age} {roblox.verified} — needs a Bloxlink key.
Other{@Role Name} mentions a role by name · {random} · {argument.1} and {regex.NAME} in custom commands

Modifiers

Add a modifier after a ? to transform a value.

ModifierExampleResult
?uc / ?lc{ticket.user.name?uc}UPPERCASE / lowercase
?pl=N{count?pl=5}Pad with zeros to N digits → 00042
?fb=text{reason?fb=no reason}Fallback when the value is empty
?ml=N{form.1?ml=200}Cut to at most N characters
?pr=N{form.2?pr=20}Keep only the first N characters (prefix)
?clean{ticket.user.name?clean}Strip everything Discord channel names reject
?rlist=a|b{random?rlist=🍎|🍊|🍇}Pick one from the list
?rmin=N ?rmax=N{random?rmin=1&rmax=6}Random number in a range

Buttons

Seven buttons appear during a ticket. Each one has a label, an emoji, a colour, and role rules for who may press it.

The seven buttons

ButtonWhereDefault
ClaimTicket messageGrey. Staff only.
CloseTicket messageRed. Staff and the ticket owner.
Confirm / CancelClose confirmationRed / grey.
ReopenClosed messageGreen. Staff.
DeleteClosed messageRed. Staff.
TranscriptClosed messageGrey. Staff.

Per button

  • Show this button — hide a button entirely (hide Claim if you do not use claiming).
  • Label and Emoji — up to 80 characters; unicode or custom emoji.
  • Style — Blurple, Grey, Green or Red (Discord’s primary, secondary, success, danger).
  • Allowed roles — only these roles may press it. Empty = the defaults above.
  • Disabled roles — these roles may never press it, even if they are staff.

Changes render live: the next time the bot sends a message with that button, it uses the new label and colour. Buttons on old messages update when a ticket changes state.

Ticket lifecycle

Open → (claim) → close → closed state → reopen or delete. Every step works from a button, a slash command, a text command and the dashboard, and they all agree on the state.

Opening

A member picks a type on the panel. If the type has a form, the modal appears first. Ticket Lab checks the blacklist, the limits and the schedule, then creates the channel (or private thread) under the right category, names it from the naming template, gives the opener and the team access, and posts the ticket message with a ping to the staff role.

A freshly opened ticket in Discord
  1. 1Channel named from the template — 0008-audit-support.
  2. 2The opener and the staff role are pinged.
  3. 3Form answers shown as fields.
  4. 4Claim — staff take ownership.
  5. 5Close — with confirmation if enabled.

Claiming

Staff press Claim (or /claim). The ticket shows who is on it, the channel can be renamed with the When claimed template, and — under Automations → Claiming — you can lock actions to the claimer, hide the ticket from other staff, move it to a category or allow takeovers. Unclaim reverts all of it.

Closing

With Two-step tickets on (the default), Close moves the ticket into a closed state: the channel is renamed with the When closed template, moved to the closed category, the opener loses Send, a transcript is saved, and staff get three buttons.

A ticket in the closed state
  1. 1Renamed to closed-0008.
  2. 2Reopen — back to open, opener regains Send.
  3. 3Delete — saves a transcript, deletes the channel after five seconds.
  4. 4Transcript — save one right now without changing state.

With Two-step off, Close saves a transcript and deletes the channel straight away.

Threads instead of channels

Set Ticket mode to private threads (server-wide or per type) and tickets open as private threads under the Thread parent channel. Same buttons, same commands, same transcripts — with none of the channel-count pressure.

From the dashboard

The Tickets page lists open and closed tickets with who opened them, their type and age. Each row has Close, Reopen, Transcript and Delete, so the team can tidy up without opening Discord. Actions are logged to the log channel like any other.

Transcripts

Every closed ticket is archived — readable in the browser, forever, free. The opener gets the same link by DM.

The Transcripts page
  1. 1Ticket name, type, message count, when, and how long it was open.
  2. 2Open — the hosted HTML transcript, same link the opener got.
  3. 3View — read it inline without leaving the dashboard.

Where transcripts go

  • Hosted at ticketlab.buildablelabs.dev/t/<token> — a private, unguessable link. Anyone with the link can read it; nobody can list them.
  • Transcript channel — the Transcript message plus a .txt attachment (Discord shows HTML as raw code, so the attachment is text on purpose) and the hosted link.
  • Opener’s DMs — with DM transcripts on, the same link and file. Skipped quietly if their DMs are closed.
  • Dashboard — the Transcripts page, with Open and View.

Format

HTML (default) renders messages, embeds, attachments and reactions in a Discord-like page. Plain text is a simple log. Switch under Configuration → Advanced. Transcripts keep the name the ticket had when it was opened.

On demand

Press Transcript on a closed ticket, run /transcript in any ticket, or use the Tickets page. Each saves a fresh snapshot without changing the ticket’s state.

Automations Pro

Things the bot does on its own — inactivity, missing owners, opening hours, roles on events and claiming rules. The bot working while your staff sleep.

The Automations page on a Pro server
  1. 1After — hours of owner silence before anything happens (0 = off).
  2. 2Then — warn, close or delete.
  3. 3Missing user — what happens when the owner leaves.
  4. 4The Pro tag. On Free servers the page shows the same settings behind a frosted lock card with See plans.

Inactivity

When the ticket owner goes quiet. Set After in hours (up to 720; 0 = off), then choose what happens: Warn once and close after another equal wait, Close the ticket, or Delete it. Staff silence never counts. Bypass roles are exempt. The warning text is the Inactivity warning message. The sweep runs every five minutes.

Missing user

When the ticket owner leaves the server: leave the ticket open, close it, or delete it.

Schedule

Opening hours. Pick a timezone, paint the hour grid (presets: Always open, Weekdays 9–17, Every day 8–22, Clear), and decide what happens outside hours: refuse with the Outside-hours message, or open anyway with a notice. Bypass roles skip the schedule.

Direct messages

DM transcripts (the same switch as Configuration), plus the DM on open and DM on close messages. Skipped quietly when the member’s DMs are closed.

Roles on events

Add or remove roles when a ticket is opened, closed or claimed — for example a “Has open ticket” role, or a “Customer” role after the first close. This is the one feature that needs the bot to have Manage Roles, and its role must sit above the roles it hands out.

Claiming

  • Only the claimer can unclaim.
  • Claiming locks actions — only the claimer and the ticket owner may close, reopen, delete or transcript.
  • Claims can be taken over — claiming an already-claimed ticket takes it over instead of failing.
  • Hide from other staff while claimed — others keep View but lose Send until unclaimed.
  • Move on claim — move the ticket to a category when claimed.

The Claim button itself is switched on and off under Configuration → Lifecycle.

Custom commands

Your own commands, answered by the bot. Each works as /cc <name> everywhere, and can also match plain messages where the bot can read them.

The Custom commands editor
  1. 1New command.
  2. 2Trigger type: strict, wildcard or regex.
  3. 3The trigger text a message must match.
  4. 4Flags: case sensitive, delete the trigger, admins only, DM the user, DM the ticket owner.
  5. 5The response — text, markdown, variables, embeds.

Triggers

TypeExample triggerMatches
Strict!rulesExactly that text.
Wildcardhow do I * my ticket* matches anything.
Regex^order (?<id>\d+)$A regular expression. Named groups become {regex.id}.

Arguments after the trigger are split by the Args separator (default ,) into {argument.1}, {argument.2}… Inside a ticket, ticket variables like {ticket.user} work too.

Testing

The Test box at the bottom of the editor takes a message “the way a member would type it” and shows whether it matches and what the bot would answer — before you save.

Text triggers need message access. /cc name always works. Matching plain messages requires the text-command mode, which reads message content — off by default. Slash usage needs nothing extra.

AutoMod

Seven protection packs installed as native Discord AutoMod rules. They run inside Discord, not inside the bot — protection your server owns, not a bot you have to trust.

The packs

PackBlocks
ScamFree-Nitro, fake giveaway and wallet-drainer phrasing and domains.
InvitesDiscord invite links from other servers.
LinksLink shorteners and known malicious hosts.
ExplicitSlurs and sexual content, using Discord’s own keyword presets.
MentionsMention spam above a sane threshold.
SpamDiscord’s spam detection preset.
ProfilesMember profile names that match the scam patterns.

Installing

Toggle packs on the AutoMod page or run /automod. Installing rules needs the bot to have Manage Server, which the standard invite does not include — re-invite with /invite?automod=1 once. Rules appear under Server Settings → AutoMod like any other, and you can edit or delete them there; removing the bot keeps them.

Statistics Pro

How your support is doing, over the last 7, 30 or 90 days.

Numbers

KPIMeaning
OpenedTickets opened in the period.
ClosedTickets closed in the period.
Open nowCurrently open, across all types.
First replyAverage time from open to the first staff message.
Ticket lengthAverage time from open to close.

Charts

  • Opened vs closed — a line per day.
  • By type — which types carry the load.
  • By staff — claimed and closed per team member.

Statistics are computed from Ticket Lab’s own ticket log, so they are complete from the day the bot joined — no message scanning involved.

Pro Workspace & Billing

Pro is per server, in euros, tax included. Cancel any time and keep it until the paid period ends. The free tier never loses features.

What Pro adds

Plans

Pro 1 server
€4.99 / month
or €39 / year (−35%)
  • Everything above, on one server
  • Founding price €2.99 / month, locked forever, for the first 50 servers
Max 3 servers
€9.99 / month
or €79 / year (−35%)
  • Everything in Pro
  • Up to three servers, swap any time
  • One invoice for all of them
  • Priority support in the community
The Billing page
  1. 1This server’s plan status.
  2. 2Monthly / Yearly toggle.
  3. 3The Founding price while it lasts.
  4. 4Get Pro / Get Max opens Stripe Checkout.

Billing

  1. Pick a plan

    On the server you want to upgrade, open Billing and press Get Pro or Get Max. Checkout is Stripe’s — cards, Apple Pay, Google Pay, SEPA where available. VAT is included in the price; add a VAT ID at checkout for a business invoice.

  2. Pro turns on

    Within seconds of payment the server is Pro: locked pages unlock, extra panels post, the bot identity applies. You land back on the Pro Workspace.

  3. Manage it

    Your subscriptions lists every plan you pay for. Cancel keeps Pro until the period ends and shows the date; Resume undoes a cancel before then. Manage billing opens the Stripe portal for invoices, receipts and cards. On Max, Servers picks which three servers are covered — swap whenever you like.

If a payment fails, Stripe retries and Ticket Lab DMs you. The server keeps Pro for a 7-day grace period; after that it returns to Free until the invoice is paid. Nothing is deleted — your settings wait for you.

Bot identity

On a Pro server, the bot wears your server’s identity: a nickname, an avatar and a banner that show only in that server. Set them under Pro Workspace → Bot identity (PNG, JPG, GIF or WebP, up to 512 KB each). It is the same bot — a different face per paying server. If the plan lapses the identity reverts to Ticket Lab’s own.

The Pro Workspace page on a Free server
  1. 1Plan status for this server.
  2. 2On Free, See plans. On Pro, the identity editor sits here.

Commands reference

Nineteen slash commands. Admin commands need Manage Server; ticket commands work inside a ticket for staff (and some for the ticket owner).

Setup

CommandWhoWhat it does
/helpEveryoneWhat Ticket Lab is and where everything lives.
/setupAdminFirst run: the five-step wizard. After that: the config editor.
/ticketpanel [panel]AdminPost the default panel here, or a named extra panel.
/automodAdminInstall protection packs as native AutoMod rules.
/un-setupAdminErase all Ticket Lab configuration for this server. Asks twice.

Inside a ticket

CommandWhoWhat it does
/closeStaff, ownerClose this ticket.
/reopenStaffReopen this closed ticket.
/deleteStaffDelete this ticket (saves a transcript first).
/transcriptStaffSave a transcript now.
/claim [user]StaffClaim it, or claim it for another team member.
/unclaimStaffRelease the claim.
/rename nameStaffRename the channel.
/add targetStaffGive a user or role access to this ticket.
/remove targetStaffTake that access away.
/transfer type [reason]StaffMove the ticket to another type — new team, new category.

Anywhere

CommandWhoWhat it does
/new type [user] [reason]StaffOpen a ticket, for yourself or on behalf of someone.
/tickets [user]StaffList open tickets, or only one member’s.
/cc name [args]EveryoneRun a custom command. Autocompletes names.

Text commands

For teams that prefer typing: $close, $open, $reopen, $delete, $transcript, $claim, $unclaim, $rename, $add, $remove, $transfer, $new, $tickets, $ca (close all) and $closerequest. The prefix is yours to change under Configuration → Advanced. Text commands read message content, so they are off unless enabled for the bot.

FAQ & support

Short answers to the questions we get most. Everything else: the support server.

The panel did not update

Panels bake when posted. After editing types, the intro, the banner or the style, run /ticketpanel again and delete the old message.

A custom emoji shows as text

Use the full code <:name:id> (type \:name: in Discord to get it) and make sure the emoji belongs to a server the bot is in. Ticket Lab validates emoji on save and refuses anything that is not an emoji.

The bot cannot create channels

Check that its role has Manage Channels and can View the ticket category, and that the category has room (50 channels). Add overflow categories if you run hot. Re-inviting with the standard link restores the default permissions.

Roles on events do nothing

That feature needs Manage Roles, which the standard invite leaves out on purpose. Grant it to the bot’s role and move that role above the roles it should hand out.

The opener did not get a DM

Their DMs are closed for this server, or they blocked the bot. Ticket Lab skips DMs quietly and never fails a close because of it.

Closing did not rename the channel

Discord allows two channel renames per ten minutes. When rate-limited, Ticket Lab skips the rename and carries on; the ticket is still closed.

Who can see the dashboard?

Members with Manage Server, and any roles under Configuration → Dashboard roles. The dashboard only lists servers you are in, and every request is checked server-side against your Discord membership.

Data and privacy

Ticket Lab stores your configuration, ticket metadata and transcripts, and nothing else. Transcripts are yours: delete them from the dashboard any time. Billing is handled by Stripe; Ticket Lab never sees card numbers. /un-setup erases the server’s configuration.

Support

Join the Buildable Labs community on Discord — discord.gg/HSJQyGbnwa. The people who build Ticket Lab are in there. Pro and Max servers get priority.