Home Commands Terms & Privacy Add to Discord
🌐 Most variables work in both Tags and SlashTags. The main exception is {args}, which is specific to classic Tags. SlashTags receive their input through named slash command options seeded directly as variables.

user / author

Global 🔗
{user} or {author}

Information about the person who invoked the tag or slash command.

{user(id)}User's Discord snowflake ID
{user(name)}Username (without discriminator)
{user(nick)}Server nickname, falls back to username
{user(mention)}Mention string, e.g. <@123456789>
{user(avatar)}Full URL to the user's avatar image
{user(created_at)}Account creation timestamp
{user(joined_at)}Server join timestamp
{user(color)}Hex color of the user's highest role

server / guild

Global 🔗
{server} or {guild}

Information about the Discord server where the tag is used.

{server(id)}Server's Discord snowflake ID
{server(name)}Server name
{server(icon)}Full URL to the server icon
{server(member_count)}Total member count
{server(created_at)}Server creation timestamp
{server(owner)}Server owner mention string

channel

Global 🔗
{channel}

Information about the channel where the tag was used or where the response will be sent.

{channel(id)}Channel's Discord snowflake ID
{channel(name)}Channel name (without the # prefix)
{channel(mention)}Channel mention string, e.g. <#123456789>
{channel(topic)}Channel topic text
{channel(created_at)}Channel creation timestamp

target

Global 🔗
{target} / {member}

Information about the resolved target — typically a mentioned user or a message object. In classic Tags this is usually the first @mention in the arguments. In SlashTags it is the user or message object provided to a user/message-type slash command option.

🏷️ Classic Tags {target} resolves to the first @mention in {args}. If no mention is present, it is empty. {member} is an alias for the target member in this context.
⚡ SlashTags {target} resolves to the user or message passed to a user/message application command. For slash commands with a user option, use the option variable directly (e.g. {user_option}). {target_id} gives the raw ID when targeting a message.
{target(id)}Target user or message snowflake ID
{target(name)}Target username or message author's name
{target(nick)}Target member's nickname in the server
{target(mention)}Mention string for a user target
{target(avatar)}Avatar URL for a user target
{target(created_at)}Account creation or message timestamp
{member(name)}Alias for target member name (classic Tags)
{target_id}Raw ID of the target (SlashTags app commands)
{message(content)}Message content when targeting a message (SlashTags)

uses

Global 🔗
{uses}

Returns the number of times this tag (or slash tag) has been used since it was created.

args

Tags Only 🔗
{args}
🏷️ Classic Tags only {args} contains the raw text typed after the tag name. SlashTags receive input through named options, which are seeded as individual variables (e.g. {reason} for an option named reason).

Returns the full text passed after the tag invocation, or individual words/ranges using index notation.

{args}All text after the tag name
{args(1)}First word (index 1)
{args(2)}Second word (index 2)
{args(3+)}All words from position 3 onwards
{args(+2)}First 2 words only (up to position 2)

Compatibility Shims

Tags Only 🔗

The Tags cog includes two internal compatibility blocks that silently translate legacy syntax into the standard engine format. You don't need to use these explicitly — they handle old-style references automatically.

🏷️ Classic Tags only These translation blocks are loaded exclusively in the Tags cog. They are not present in SlashTags.
{author.name} → {author(name)} ContextVariableBlock — translates dot-notation ({author.name}, {channel.id}, {server.icon}, {guild.name}) into the engine's parenthesis form. Both styles work.
{1} → {args(2)} ConverterBlock — translates numeric argument shortcuts ({0}, {1}, {2}…) into {args(N+1)} calls. The offset of +1 accounts for the tag name itself occupying index 0.

Variable Resolution

Global 🔗

When the TagScript engine encounters {somename}, it checks whether it is a known block first. If it is not, it treats it as a variable lookup. There are two resolution modes:

Loose getter Default behaviour. If the variable was set with {=(name):value}, returns its value. If the variable was never set, returns an empty string silently.
Strict getter ${name} If the variable was set, returns its value. If not set, returns the literal text {name} unchanged — useful for debugging undefined variables.
Both resolution modes are available in Tags and SlashTags. Use loose getters for optional variables and strict getters when you want undefined references to be visible in output.