ModulesTags
Placeholders
Every placeholder a tag can use: the member, the one they replied to, the server, the words typed after the name, random picks, if / else, and recipes to copy.
A placeholder is a word in braces that Dexy fills in each time a tag is used. Write Welcome {user}! once, and every member who uses the tag sees their own name in it.
Placeholders work in every part of a tag: its text, an embed's title, description, footer and picture links, and, on Discord, a layout's texts and links. In chat, d!tag placeholders lists them all. On Discord, the tag editor has a Placeholders button too, and the dashboard's editor puts them under the text as chips you can click.
d!tag create hi Welcome {user}! You're member number {membercount} of {server}.
d!tag placeholders
d!tag create hi Welcome {user}! You're member number {membercount} of {server}.
d!tag placeholders
The member who used it#
| Placeholder | Becomes | For example |
|---|---|---|
{user} | The member who used the tag, mentioned and pinged. | @Starling |
{username} | Their username. | starling |
{displayname} | The name they show in this server. | Starling |
{user.id} | Their user ID. | 1460000000000000077 |
{user.avatar} | A link to their avatar. As an embed's picture or thumbnail, it shows the avatar. | https://…/avatar.png |
When a tag answers by itself (a trigger), the member is whoever wrote the message.
The member they replied to#
To point someone to a tag, reply to their message with it: write d!tag rules as a reply. Dexy answers their message, pings them, and fills in:
| Placeholder | Becomes | For example |
|---|---|---|
{reply} | The member whose message was replied to, mentioned and pinged. Empty when the tag wasn't used in a reply. | @Nova |
{reply.name} | Their display name. | Nova |
{reply.id} | Their ID. | 1460000000000000079 |
Because {reply} is empty when nobody was replied to, a tag can say something different in each case:
{if:{reply}|Hey {reply}, here are the rules:|Here are the rules:}
1. Be kind. 2. No spam. 3. Keep it in the right channel.
A few things to know:
- A tag answers the replied message by default. Turn Answer the message they replied to off (dashboard, the Discord editor's How it answers, or
d!tag rule rules followreply off) and it always answers whoever used it;{reply}still works. - Replying to your own message or to a bot doesn't count as a reply.
- Slash commands can't reply to a message, so
{reply}is empty in/tag. - A tag that answers by itself fills
{reply}when the member's message was a reply, but it still answers the member.
The member it's about#
{target} is for tags about someone: a greeting, a warning, a hug. It's the first of these that exists:
- the member who was replied to;
- the first member named after the tag's name (
d!tag hi @Orion); - the member who used the tag.
| Placeholder | Becomes | For example |
|---|---|---|
{target} | That member, mentioned. | @Orion |
{target.name} | Their display name. | Orion |
{target.id} | Their ID. | 1460000000000000078 |
{target} pings only when it's the member who used the tag or the one they replied to. A member named after the tag's name isn't pinged unless the tag's Ping the other members it names rule is on (see Pings).
The server and the channel#
| Placeholder | Becomes | For example |
|---|---|---|
{server} | The server's name. | Dexy Lounge |
{server.id} | The server's ID. | 1302000000000000001 |
{membercount} | How many members the server has. | 1,391 |
{channel} | The channel the tag was used in, as a link. | #general |
{channel.name} | Its name. | general |
{channel.id} | Its ID. | 1302000000000000010 |
What they typed after the name#
Anything typed after the tag's name can go into the answer.
| Placeholder | Becomes |
|---|---|
{args} | Everything typed after the name, as it was typed. |
{1} | The first word. |
{2} … {9} | The second word, up to the ninth. |
"Quoted words" count as one word. A word that wasn't typed is empty.
| Typed | {args} | {1} | {2} |
|---|---|---|---|
d!tag remind friday | friday | friday | (empty) |
d!tag remind "movie night" friday | "movie night" friday | movie night | friday |
d!tag hi @Orion | @Orion | @Orion | (empty) |
What members type is put in exactly as it is. It's never read as a placeholder, so typing {user} after a tag's name just shows {user}.
With a name that has spaces (server ip), the words start after the whole name: in d!tag server ip java, {1} is java.
The tag and the time#
| Placeholder | Becomes | For example |
|---|---|---|
{tag} | The tag's name. | rules |
{uses} | How many times it has been used, this time included. | 128 |
{date} | Today's date. | Nov 3, 2026 |
{timestamp} | Now, as a Unix time. | 1793702400 |
{timestamp} is most useful inside a timestamp tag, which every reader sees in their own time zone:
| Write | Shows |
|---|---|
<t:{timestamp}:R> | just now (counts up: 5 minutes ago) |
<t:{timestamp}:t> | 12:54 AM |
<t:{timestamp}:F> | Tuesday, November 3, 2026 12:54 AM |
Random picks#
| Write | Does | For example |
|---|---|---|
{random:Heads|Tails} | Picks one of the choices, each time. Any number of choices, split by |. | Tails |
{range:1-6} | A whole number between the two, both included. Negative numbers work, in either order. | 4 |
{choose:…} and {pick:…} are other names for {random:…}. Choices can hold other placeholders: {random:Hi {user}!|Hello {displayname}!}.
If / else#
{if:condition|then|else} shows the then text when the condition holds, and the else text when it doesn't. The else part can be left out: {if:condition|then} shows nothing when the condition doesn't hold.
| Condition | Holds when |
|---|---|
{1}==yes | Both sides are the same. Text ignores capitals; numbers compare as numbers (5 and 5.0 are the same). |
{1}!=yes | The two sides are different. |
{1}>10 · {1}<10 · {1}>=10 · {1}<=10 | Both sides are numbers and the comparison is true. With a word on either side it doesn't hold. |
{args} contains help | The left side has the right side in it, ignoring capitals. |
{reply} (nothing to compare) | The text isn't empty, and isn't 0, false, no or off. |
{if:{1}|Okay {displayname}, I'll remember: {args}|Tell me what to remember: d!tag note <what>}
{if:{1}>=18|Welcome to the lounge!|Sorry, this channel is 18+.}
{if:{args} contains price|Prices are in #shop.|Ask in #help!}
Capitals#
| Write | Becomes |
|---|---|
{upper:{1}} | The text in capitals: hello → HELLO. |
{lower:{args}} | The text in small letters. |
Putting them together#
Placeholders can sit inside each other, up to 8 levels deep:
{if:{reply}|{reply}, {random:please read|have a look at|check} the rules!|{upper:{tag}}}
A tag fills in at most 300 placeholders each time it's used; anything past that is left as typed.
Pings#
| Who | Pinged? |
|---|---|
The member who used it ({user}, and {target} when it's them) | Yes |
The member they replied to ({reply}, and {target} when it's them) | Yes |
| Other members the answer names (someone typed after the tag's name, a mention written in the tag) | Only when the tag's Ping the other members it names rule is on |
| Roles, @everyone and @here | Never |
Mentions inside an embed never ping anyone (that's how embeds work). Put a mention in the tag's text, above the embed, when it should ping.
What stays as typed#
- A name Dexy doesn't know, like
{usr}or{weird}, stays exactly as written. When you save a tag with one, the editor (andd!tag create) points it out, in case it's a typo. - A brace that's never closed, like
{user, stays as typed too. - What members type after the name is never read as a placeholder.
- A tag never runs commands or code. Placeholders, random picks and if / else are all it can do.
To show braces on purpose, write something Dexy doesn't know, like {example}: it stays as it is.
Recipes#
Copy these into d!tag create <name> … or the dashboard's editor.
| Tag | Text |
|---|---|
| A coin flip | {user} flipped a coin: **{random:Heads|Tails}** |
| A dice roll | 🎲 {displayname} rolled **{range:1-6}** |
| A magic 8-ball | {if:{args}|🎱 {random:Yes.|No.|Maybe.|Ask again later.}|Ask me a question after the tag's name.} |
| A greeting | Welcome {target}! Grab your roles in #roles and say hello. |
| Pointing someone to the rules | {if:{reply}|{reply}, please read the rules:|The rules:} then the rules |
| A hug | {if:{target.id}=={user.id}|{user} hugs themselves 🤗|{user} hugs {target} 🤗} |
| A reminder note | {if:{1}|📝 Noted for {displayname}: {args} (<t:{timestamp}:R>)|What should I note? d!tag note <what>} |
| An avatar | An embed with the title {target.name}'s avatar and {user.avatar} as its picture |
Limits#
- A text tag is at most 2,000 characters after its placeholders are filled in; anything longer is cut.
- An embed keeps Discord's and Fluxer's embed limits (256 for the title, 4,096 for the description).
- Placeholders nest up to 8 deep, and a tag fills in at most 300 each time.
Back to Tags.