Placeholders
How {curly} placeholders work, which ones exist where, and what happens when one cannot be resolved.
A placeholder is a name in curly braces that Arclo replaces with a real value when it sends the message. Welcome {user} to {server}! becomes Welcome @newcomer to Nebula Collective!.
Where they work
- Every text field in every message editor: the plain text, the title and description, the author, fields and footer, and the icon and image slots (where a placeholder such as
{avatar}stands for a picture). - Banner text layers, which have their own shorter list (a banner is drawn, so a mention has nowhere to go).
- Channel name templates in Statistics Channels.
- Custom command responses, automation actions, and the replies of Arclo's own commands.
The list is per field, and the editor knows it
Type { in any field to open a menu of exactly the placeholders that field supports. There is no single global list, because {case_number} means nothing in a welcome message and {inviter} means nothing in a moderation DM.
The ones that appear almost everywhere
| Placeholder | Becomes |
|---|---|
{user} | A mention of the member the message is about |
{username} | Their username, without the mention |
{display_name} | Their per-server display name |
{user_id} | Their Discord id |
{avatar} | The URL of their avatar, for image and icon fields |
{server} | The server's name |
{server_icon} | The URL of the server icon |
{member_count} | The server's member count |
{channel} | A mention of the relevant channel |
{clicker} | In a reply to a button or menu press, a mention of whoever pressed it (blank anywhere else) |
Moderation is the one system that names its people differently: a punishment's channel announcement says {target} and {moderator}, while the DM to the member uses {user}.
System-specific sets
Each system adds what only it knows about. A few examples, all listed in full on the system's own page:
| System | Adds |
|---|---|
| Welcome | {member_count_ordinal}, {account_age}, {joined_at}, and, with Invite Tracking on, {inviter}, {inviter_name}, {inviter_invites}, {invite_code} |
| Moderation | {target}, {moderator}, {action_name}, {reason}, {duration}, {duration_note}, {expires}, {case_number} |
| Levels | {level}, {previous_level}, {total_xp}, {xp_to_next_level}, {rank}, {reward} |
| Giveaways | {prize}, {winners}, {winner_count}, {entries}, {ends_in}, {ends_at}, {host} |
| Tickets | {ticket_number}, {panel_name}, {ticket_type}, {opener}, {claimer}, {close_reason} |
| Social Alerts | {title}, {url}, {creator}, {game}, {viewers}, {thumbnail} |
Behavior
- An unknown placeholder is left alone.
{not_a_real_placeholder}is sent verbatim rather than blanked, so a typo is visible instead of silently eating your sentence. - A known placeholder with no value becomes empty.
{inviter}with Invite Tracking switched off produces nothing, not the word undefined. - Optional trailing lines exist for exactly this. Several systems expose a
{..._note}or{details}placeholder that renders a whole line, or nothing at all, so a permanent ban does not print an empty Duration: row. - Mentions in an embed do not ping. A mention inside an embed shows as a mention but notifies nobody. That is Discord's behavior, and it is why the plain text above an embed is where a ping belongs.
Case and spacing matter
Placeholders are lowercase with underscores and no spaces inside the braces. { member_count } is never recognized, and {Member_Count} only works in Statistics Channels' channel names, the one place that ignores case.
The complete cross-system list is on the placeholder reference.
Still stuck? Ask in the support server: somebody there has almost certainly configured this before.
