Tickets

A panel with buttons, ticket channels, claim and close, custom messages, staff-only transcript pages.

Set it up

Run ,ticket setup #support (or use Tickets on the dashboard). That turns tickets on and posts a panel. Pressing its button makes a ticket channel and posts the ticket's message with Close and Claim buttons. By default it pings your support roles; you decide who gets pinged (see below).

,ticket setup #channel           turn on + post the panel
,ticket support add @Staff       roles that see, claim and close tickets
,ticket type add Purchase help 🛒  one button per type on the panel
,ticket category Tickets         where ticket channels go
,ticket name {type}-{number}     channel name ({number} {user} {type})
,ticket limit 2                  open tickets per member
,ticket closemode controls|delete [seconds]
,ticket dm on|off                DM the opener when their ticket closes
,ticket privacy private|public
,ticket claim · ,ticket close [reason] · ,ticket rename (name) · ,ticket list
,ticket transcript · ,ticket reopen · ,ticket delete     (staff, in a ticket)

Your own messages

Every message the bot posts for tickets is an embed script you can change, here or on the dashboard (each ticket type can also have its own opened message):

,ticket message panel (script)      the panel (buttons are added under it)
,ticket message opened (script)     posted in each new ticket
,ticket message closed (script)     posted when it closes
,ticket message controls (script)   the staff controls after closing
,ticket message dm (script)         the DM to the opener
,ticket message closed reset        back to the default

Variables: {ticket.opener} {ticket.opener.name} {ticket.support} {ticket.support.names} {ticket.number} {ticket.type} {ticket.description} {ticket.channel} {ticket.claimer} {ticket.closer} {ticket.reason}, plus the usual {user.mention}, {guild.name}…

Nobody is pinged unless you say so: put {ticket.opener} or {ticket.support} in the message text ({content: …}). The default pings the support roles only; the opener is shown in the embed. Use the .name / .names versions to show who without pinging.

Closing

Closing takes the opener's access away and posts the closed message. Then, by default, the channel stays for staff with Transcript, Reopen and Delete buttons. With ,ticket closemode delete the channel is deleted a few seconds later instead. The transcript is kept either way.

Transcripts

Every message in a ticket is saved. Transcript posts a link to a readable web page of the whole ticket (avatars, mentions, formatting) that can also be downloaded as an .html file. The link is random, not your user id, so it can't be guessed.

Only staff can open a transcript: the server owner, admins, and the ticket's support roles. Not the opener. And you have to log in again (within the last 15 minutes) before one opens, so a forwarded link or a browser left logged in isn't enough.

Private tickets on Yapper

Yapper can only make a channel private to roles, not to one person. NotGreed gives each private ticket its own temporary role and deletes it when the ticket closes, as soon as Yapper lets bots create roles (it can't yet; NotGreed checks by itself). Until then the opener is let in with an access role from a pool you make (a few empty roles like ticket-1, ticket-2, added with ,ticket access add @ticket-1). Each open ticket uses one and gives it back on close.

Right now Yapper answers "OK" to bot role changes without applying them (a bug on Yapper's side), so openers can't be let into private tickets yet. The bot checks, tells staff in the ticket and tells the opener privately. Switch to ,ticket privacy public if anyone may read tickets.
Next
Counters
→