DocsReference

Variables

Every placeholder Sortr fills in, what it becomes and which messages it works in.

Variables are placeholders in curly brackets, like {user} or {ticket.number}. Sortr swaps each one for the real value when it sends a message, so one message can greet every member by name.

#How variables work

Type a variable anywhere in a message, or press one of the buttons under the Message and Description boxes. Those buttons list the variables that make sense for the message you are editing, and resting the pointer on one says what it holds in that message. For example:

Thanks {user.name}. Ticket {ticket.number} is with {staff.roles}.

becomes "Thanks Ren Oakley. Ticket 0042 is with @Support."

  • Variables work in the message text and in every text part of an embed: author name, title, description, field names and values, and footer text. They are not filled in the Title link or Author link boxes, which take only a whole web address.
  • The preview shows your real server name, panel name and support roles, and example values for the rest.
  • A variable with nothing to fill it, such as {ticket.number} before a ticket exists, comes out blank.
  • Write them exactly as shown, in lower case with the dots. Anything else in curly brackets is left as you typed it.
  • Names, reasons and answers that members typed never ping anyone, even if they contain @everyone.
  • Member names, reasons and answers are shown as typed. A name like {staff.roles} stays that text and does not become pings, a {create.form.1} typed into a /close reason stays that text too, and a masked link such as [click here](https://example.com) in a name, reason or answer shows as text, not as a link.

Below, "every ticket message" means the opening message and every message on Ticket Messages. "The refusal messages" are the seven shown when a ticket cannot open: Open ticket limit reached, Panel is full, Closed ticket limit reached, Opening too quickly, Blocked from opening tickets, Not for their role and Outside support hours.

#Server

VariableBecomesExampleWorks in
{server.name}Your server's nameAurora SMPThe panel message and every ticket message
{server.members}How many members the server has when the message is sent18,426The panel message and every ticket message. On the panel message it is counted when the panel is sent or updated.
{staff.roles}A mention of each support role on the panel, or "the support team" when there are none@SupportThe panel message and every ticket message

#Panel

VariableBecomesExampleWorks in
{panel.name}The panel's name, as set with RenameBilling & purchasesThe panel message, every ticket message, and channel names: the name a ticket gets when it opens, closes and reopens
{tickets.open}How many tickets are open in the server when the panel is sent or updated9The panel message. The number stays as it was until the panel is sent or updated again.

#The member

VariableBecomesExampleWorks in
{user}A mention of the member@ren.oakleyEvery ticket message
{user.name}Their display name in your serverRen OakleyEvery ticket message
{user.username}Their Discord usernameren.oakleyThe Transcript log entry
{user.avatar}A link to their profile pictureAn imageThe Transcript log entry, where it fills the author icon

In most messages the member is the ticket owner. The exceptions: in the Close confirmation it is whoever pressed Close, in Member added and Member removed it is the person added or removed, and in the refusal messages it is the member who tried to open a ticket. Leave them out of the panel message: nobody has opened a ticket when it is posted.

#The ticket

VariableBecomesExampleWorks in
{ticket.number}The ticket number, padded to the digits set on Ticket channel0042Every ticket message except the refusal messages, and channel names
{ticket.duration}How long the ticket was open, in its largest unit. Time it spent closed before a reopen is left out.15 minutesTicket closed, Closed for inactivity, Close message to the member, Transcript log entry
{ticket.opened}When the ticket opened, in UTC2026-09-28 13:47Transcript log entry
{ticket.channel}The ticket channel's name when the transcript was savedclosed-renoakleyTranscript log entry
{ticket.quiet}How long nobody has written in the ticket2 daysQuiet ticket reminder

#Staff

VariableBecomesExampleWorks in
{staff}A mention of the staff member who acted@mira.kTicket closed, Closed for inactivity, Ticket reopened, Before deletion, Member added, Member removed, Transcript log entry
{staff.name}Their display nameMira KTicket closed, Closed for inactivity, Close message to the member, Ticket reopened, Member added, Member removed, Transcript log entry

When Sortr closes or deletes a ticket on its own timer, the staff member is Sortr. In the Transcript log entry it is whoever closed the ticket or saved the transcript.

#Closing and transcripts

VariableBecomesExampleWorks in
{reason}The reason typed with /close, or "no reason given". After an automatic close, how long the ticket was quiet, such as "No activity for 2 days".Refund issuedTicket closed, Closed for inactivity, Close message to the member, Transcript log entry
{transcript.link}A link to the transcript: the web copy if you keep one, otherwise the Discord message with the file. In the three closing messages it is the copy saved at the close: Ticket closed and Closed for inactivity are posted first and get the link once the copy is saved, a moment later. In Before deletion it is the copy the delete saved. In the Transcript log entry it is the web copy only.https://sortr.xyz/t/…Ticket closed, Closed for inactivity, Close message to the member, Before deletion, Transcript log entry
{transcript.users}Everyone who wrote in the ticket, most messages first, one per line with their count, mention and username7 - @mira.k - mira.kTranscript log entry
{transcript.direct}How to open the transcript: "Use the button", "Open the attached file" or "The file was too large to attach"Use the buttonTranscript log entry

{transcript.link} is empty whenever no copy was saved at that moment:

  • in the three closing messages, when the panel's Save it is set to When the ticket is deleted, since nothing is saved at the close;
  • in Before deletion, when the delete saved no copy, because the ticket already had one from its close.

A [text](…) link built around an empty {transcript.link} is left out entirely. Transcripts explains when a copy is saved.

#Limits and timers

VariableBecomesExampleWorks in
{limit}The limit the member reached2Open ticket limit reached, Panel is full, Closed ticket limit reached
{delay}In Opening too quickly, the time left before they can open another ticket. In Before deletion, the seconds until the channel goes. In the Quiet ticket reminder, the time until Sortr closes the ticket on its own, or blank if it will not.10 secondsOpening too quickly, Before deletion, Quiet ticket reminder
{ping.roles}A mention of the roles picked under Automations@SupportQuiet ticket reminder

#Form answers

VariableBecomesExampleWorks in
{create.form.1} to {create.form.5}The member's answer to that question on Questions, counted in the order shown there. An optional question left empty reads "No answer". For a question that takes files, the files' names, separated by commas, or "No answer" when nothing was attached.SR-20461The opening message only. Anywhere else they are removed.

#Channel names

The Name while open and Name once closed patterns on Ticket channel have their own, shorter set:

VariableBecomesExample
{ticket.number}The padded ticket number0042
{ticket.user.name}The Discord username of the member who opened it, without its dots. Not their display name.renoakley
{ticket.user.id}Their Discord ID100000000000000001
{panel.name}The panel's name. It works in both patterns, so it fills in when a ticket opens, closes and reopens.billing-purchases

{user.name} and {user.id} are accepted here too, and mean the same: here {user.name} is the username as well. Discord's naming rules then apply: capitals become lower case, spaces and underscores become dashes, accents are taken off letters, and anything else that is not a letter, a digit or a dash is dropped, such as emoji and full stops, up to 100 characters. Letters of other alphabets stay. So ticket-{ticket.number} gives ticket-0042, and closed-{ticket.user.name} gives closed-renoakley for the member ren.oakley.

If Name while open is blank, or leaves nothing when a ticket opens, Sortr names the channel ticket- plus the number. If Name once closed is blank, or leaves nothing, a closed ticket keeps the name it had.

Something unclear or out of date? Tell us and we will fix it.

Updated 28 October 2026