Placeholders
This page shows the common, readable set of placeholders and the smaller, context-specific additions used in certain messages.
Treat the tables below as:
- Base placeholders: available everywhere.
- Context additions: only present in specific message types (ticket events, panels, support-hours, etc.).
Base placeholders
These are available in most message contexts.
| Placeholder | Description |
|---|---|
| {currentTime} | Current timestamp (Unix) |
| {guild.id} | Server ID |
| {guild.name} | Server name |
| {guild.memberCount} | Member count |
| {guild.createdAt} | Server creation timestamp (Unix) |
| {member.id} | Member ID |
| {member.displayName} | Member display name (nickname or username) |
| {member.username} | Member username |
| {member.avatarUrl} | Member avatar URL |
| {member.joinedAt} | When the member joined (Unix) |
| {member.createdAt} | Member account creation (Unix) |
| {member.roles} | List of member role IDs |
- All timestamps are provided in Unix format. Learn how to parse them
Statistics placeholders
These are global placeholders that resolve to numbers (or 0 when unavailable).
| Placeholder | Description |
|---|---|
| {statistics.tickets.averageRating} | Average ticket rating |
| {statistics.tickets.created} | Total tickets created |
| {statistics.tickets.closed} | Total tickets closed |
| {statistics.tickets.open} | Total tickets currently open |
| {statistics.tickets.claimed} | Total tickets claimed |
| {statistics.applications.total} | Total applications submitted |
| {statistics.applications.pending} | Total applications pending |
| {statistics.applications.accepted} | Total applications accepted |
| {statistics.applications.denied} | Total applications denied |
| {statistics.giveaways.total} | Total giveaways created |
| {statistics.giveaways.totalParticipants} | Total giveaway participants (all giveaways combined) |
| {statistics.giveaways.averageParticipants} | Average participants per giveaway |
| {statistics.verifications.total} | Total verifications processed |
| {statistics.verifications.failed} | Total failed verifications |
| {statistics.verifications.passed} | Total passed verifications |
Context-specific placeholders
Below are additional placeholders that are only available in specific contexts (tickets, panels, support hours). Expand the sections to view details.
Ticket-related placeholders. These are merged with the Base placeholders for ticket messages.
| Placeholder | Description |
|---|---|
| {ticket.number} | Ticket numeric identifier |
| {ticket.id} | Ticket unique id |
| {ticket.creator.id} | Ticket creator's member ID |
| {ticket.creator.displayName} | Ticket creator's display name |
| {ticket.creator.username} | Ticket creator's username |
| {ticket.creator.avatarUrl} | Ticket creator's avatar URL |
| {ticket.closer.id} | Ticket closer's member ID (when closed) |
| {ticket.closer.displayName} | Ticket closer's display name |
| {ticket.claimer.id} | Ticket claimer's member ID (when claimed) |
Note: all messages that are about a ticket will include ticket.creator.*. Close-related messages will include ticket.closer.*; claim events include ticket.claimer.*.
Panel-related placeholders exposed on panel views and messages.
| Placeholder | Description |
|---|---|
| {panel.name} | Panel display name |
| {panel.supportRoles} | Array of role IDs that can support this panel |
| {panel.openTickets} | Number of currently open tickets for this panel |
These map to your panel document such as panelDocument.panelName, panelDocument.supportRoles, and panelDocument.openTickets.
Support hours placeholders shown where support-hours are configured.
| Placeholder | Description |
|---|---|
| {supportHours.status} | Current support status (open/reduced/emergency/closed) |
| {supportHours.nextOpen} | Timestamp of next open time (Unix) |
| {supportHours.closesAt} | Timestamp of when support closes (Unix) |
Roblox placeholders are available everywhere where member placeholders are available.
| Placeholder | Description |
|---|---|
| {roblox.bloxlink.id} | The member's roblox account ID |
| {roblox.bloxlink.url} | The link to the member's roblox profile |
| {roblox.bloxlink.name} | The member's roblox profile username |
| {roblox.bloxlink.displayName} | The member's roblox profile display name |
| {roblox.bloxlink.about} | The about description of the roblox profile |
| {roblox.bloxlink.createdAt} | Roblox account creation timestamp (Unix) |
Placeholder resolution behavior
Use these rules when deciding which placeholders to include in a message:
- Base placeholders (for example,
member.*andguild.*) are available in most message contexts. - Context-specific placeholders (for example,
ticket.*,panel.*,supportHours.*) only resolve when that context exists. - Statistics placeholders resolve to a number and fall back to
0when data is unavailable. - If a context-specific placeholder is used where that context does not exist, it may resolve to an empty value or remain unresolved depending on the message type.
When combining placeholders with parsers, place the placeholder inside the parser payload, for example: {timestamp(relative):{member.joinedAt}}.
Parser reference
Use these parser pages for formatting, logic, and text manipulation:
| Parser | Purpose | Link |
|---|---|---|
| Date | Format timestamps using custom date/time patterns | /docs/placeholders/parsers/date |
| Timestamp | Convert timestamps into readable formats | /docs/placeholders/parsers/timestamp |
| String Format | Change casing, escape text, and format ordinals | /docs/placeholders/parsers/stringFormat |
| Replace | Replace characters or substrings | /docs/placeholders/parsers/replace |
| If | Return one of two values from a condition | /docs/placeholders/parsers/ifStatements |
| Includes | Check whether text contains a value | /docs/placeholders/parsers/includes |
| Join | Join values into a single string | /docs/placeholders/parsers/join |
| Slice | Extract part of a string by range | /docs/placeholders/parsers/slice |
| Truncate | Shorten text to a fixed length | /docs/placeholders/parsers/truncate |
| Padding | Pad text to a target length | /docs/placeholders/parsers/padding |
| Math | Run arithmetic expressions | /docs/placeholders/parsers/math |
| Logical | Evaluate boolean-style expressions | /docs/placeholders/parsers/logical |
| Stop | Prevent further processing when a condition is met | /docs/placeholders/parsers/stop |
Practical examples
Ticket notification
Ticket #{ticket.number} opened by {member.displayName} at {date(MM/DD/YYYY HH24:MI):{currentTime}}.Support-hours status message
Support status: {upper:{supportHours.status}}
Next open: {timestamp(relative):{supportHours.nextOpen}}Conditional message output
{if({contains(1234567890):{member.roles}}):Welcome back, staff member.|Welcome!}Common mistakes and troubleshooting
- Use escaped placeholders in docs/examples (
\{placeholder}) when you want to display literal placeholder syntax. - Verify context before using context-specific placeholders. For example,
ticket.*placeholders are only available in ticket-related messages. - Keep parser syntax exact. Missing separators like
:or|can cause the parser to return unexpected output. - Confirm timestamp format expectations before parsing. Use
dateortimestampparsers when you need readable output. - If a value appears blank, test with a known base placeholder first (for example,
{member.username}) to confirm the message context is correct.