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.
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.
,ticket privacy public if anyone may read tickets.