Essentials

Placeholders

Every variable Cloudy replaces in message templates, which plugin supports which, and the traps around mentions.

Message fields accept placeholders in curly braces that Cloudy replaces per message. They are case-sensitive and must be written exactly as listed.

An unknown placeholder is not an error — it is left in the message verbatim. If members see a literal {membercount} in your welcome message, the placeholder was misspelled (it is {server.memberCount}).

User placeholders

PlaceholderBecomesNotes
{user}A mention: @NovaPings the member. Two exceptions: in goodbye messages it is the member's username (they already left, so a mention would point at nobody), and in custom command responses it is the username as well
{user.mention}A mentionAlways pings — use it in custom commands when you do want the ping
{user.name}Display nameNo ping
{username}Discord usernameNo ping
{user.tag}Full tagNo ping
{user.id}Numeric user idUseful in log-style messages

Server placeholders

PlaceholderBecomes
{server}Server name
{server.name}Server name — same as {server}
{server.memberCount}Current member count

Plugin-specific placeholders

PlaceholderWhereBecomes
{level}Leveling — level-up messageThe level just reached
{age}Birthdays — celebration messageAge in years, when the member stored a birth year
{role}Reaction roles — feedback textsThe role that was granted or removed
{rule}AutoMod — warn and timeout noticesName of the rule that fired
{count}AutoMod — escalation noticeCurrent number of active warnings
{action}AutoMod — escalation noticeThe punishment applied (timeout, kick, ban)
{number}Tickets — channel name templateSequential ticket number for the panel

Stream alerts have no placeholders: the custom message is posted verbatim, ahead of the alert embed, and the optional notify role is a separate setting.

Which plugin supports what

PluginFieldSupported
Welcome & GoodbyeWelcome textAll user and server placeholders
Welcome & GoodbyeGoodbye textSame, but {user} is the username (no ping)
LevelingLevel-up messageAll user and server placeholders, plus {level}
BirthdaysCelebration messageAll user and server placeholders, plus {age}
TicketsWelcome message{user}
TicketsChannel name template{user} {number} — lower-cased, Discord-safe characters only
Temp VoiceName template{user} (the owner's display name)
Custom CommandsResponse contentAll user and server placeholders — {user} is the username, {user.mention} pings
Reaction RolesFeedback texts{user} {role}
AutoModWarn / timeout notice{user} {rule}
AutoModEscalation notice{user} {count} {action} — {rule} is not available here
Scheduled MessagesContentServer placeholders only — there is no member involved
AutomationsMessage / reply / DM contentUser and server placeholders
The AutoMod escalation notice fires for an accumulated warning count, not for a single rule hit, so {rule} has no meaning there and stays as literal text if you use it.

Mentions and pings

{user} produces a real mention, which produces a real notification. Two consequences worth planning for:

  • In a welcome message that is usually what you want — the member is notified and finds the channel.
  • In an announcement that goes to a busy channel, prefer {user.name}. It reads the same and pings nobody.

A role mention pasted into a template (<@&roleId>) renders as a role link, but Cloudy does not ping roles from message templates — welcome and goodbye messages only ever notify the member they are about. Where a role should be pinged (stream alerts, for example), the plugin has a dedicated notify-role setting.

Formatting

Message fields support normal Discord Markdown:

**bold**  *italic*  __underline__  ~~strikethrough~~  `code`
> quote
||spoiler||

Line breaks are preserved. Channel links (#channel) and custom emojis (<:name:id>) can be pasted directly into any field.

Most message fields have a live preview next to them showing what the bot will post, with placeholders left visible so you can see where they sit. Use it before saving.