{object.property}. When the script runs, it’s swapped for the real value.
If a variable doesn’t exist in the current context, it’s left in the output as literal text. Seeing
{user.rank} in your message means that variable isn’t available there — not that it’s spelled wrong.Member
{user} on its own renders as a mention.
Server
Aliases:
guild, server, sv, g, s. {server.name} works.
Channel
Aliases:
channel, ch, c.
Context-specific variables
Invites — welcome, goodbye and rejoin
Invites — welcome, goodbye and rejoin
Available in welcome, goodbye and rejoin messages: who invited the member, and through which invite.
When the join wasn’t from a person’s invite — someone came in through your vanity URL, or mira couldn’t tell which invite was used — there’s no inviter to describe, so the inviter variables fall back to the server: the name and mention read as your vanity link, the avatar is the server icon, and every count is
0. Nothing is left as a raw {inviter.mention}, so a template never breaks; use {inviter.is_vanity} to word it differently:{inv.*} and {invited_by.*} work as aliases for {inviter.*}, and {invite_url} for {invite}.Invite tracking needs mira to be able to see invites (Manage Server). Without it, every join counts as unknown and gets the server fallback above.
Levels
Levels
Available in
!level message:Moderation
Moderation
Available in
!invoke responses, which override what moderation commands reply with:!invoke variables lists them in Discord.Tickets
Tickets
Available in ticket option messages:
{case}, {panel}, {option}, {creator}, {claimer}, {reason}, plus {user} for whoever triggered the action.Vanity and tag roles
Vanity and tag roles
In
!vanity message and !tag message, {user} is the member who was awarded a role and {role} is the role they got.Counter channels
Counter channels
Counter channel names use a different, flatter variable set — no
user. or guild. prefix. {members}, {boosters}, {online}, {messages_today}, {voice_week} and so on. See Counters for the full list, or run !counter variables.Last.fm
Last.fm
Available in See Now playing for every property, the crown and whoknows aliases, and the
!lastfm mode and !lastfm reskin username. Four objects, each rendering as its name on its own:{old_track}, {old_artist} and {old_album} hold whatever played before the current track..lower / .upper / .hyperlink suffixes.VoiceMaster
VoiceMaster
!voicemaster default name accepts {user.name}, and defaults to something like {user.name}'s channel.Timestamps and durations
Any date variable renders as a raw Unix timestamp, which you can drop straight into Discord’s timestamp markdown:{user.created_at.relative} does the same thing without the markup — and every
duration takes .short, .seconds, .hours and friends.
See timestamps & durations for the full set, which works
identically on every date and duration in the bot.
Finding what’s available
Most modules have avariables subcommand that lists exactly what that context supports: