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. In goodbye messages it is the plain name instead — the member already left, so a mention would point at nobody
{user.name}Display nameNo ping
{username}Discord usernameNo ping
{user.tag}Full tagNo ping
{user.id}Numeric user idUseful in log-style messages
{userMention}A mentionCustom commands only — same result as {user} there

Server placeholders

PlaceholderBecomes
{server}Server name
{server.memberCount}Current member count
{memberCount}Member count — custom commands only

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
{streamer}Stream alerts — custom messageStreamer name
{url}Stream alerts — custom messageLink to the stream
{title}Stream alerts — custom messageStream title

Which plugin supports what

PluginFieldSupported
Welcome & GoodbyeWelcome text{user} {user.name} {username} {user.tag} {user.id} {server} {server.memberCount}
Welcome & GoodbyeGoodbye textSame, but {user} is the plain name
LevelingLevel-up message{user} {level} {user.name} {username} {server} {server.memberCount}
BirthdaysCelebration message{user} {age}
TicketsWelcome message{user}
TicketsChannel name template{user} {number}
Temp VoiceName template{user} (the owner's display name)
Custom CommandsResponse content{user} {userMention} {server} {memberCount}
Reaction RolesFeedback texts{user} {role}
AutoModWarn / timeout notice{user} {rule}
AutoModEscalation notice{user} {count} {action}{rule} is not available here
Stream AlertsCustom message{streamer} {url} {title}
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.

Role mentions work too — type @rolename in the field and Discord resolves it when the message is sent. The bot needs permission to mention that role.

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.

Every message field has a live preview next to it showing exactly what the bot will post, with placeholders left visible so you can see where they sit. Use it before saving.