{user.joined_at}, {expiration},
{nuke.next}) or a length of time ({duration}, {nuke.interval}), you get the
same full set of suffixes. Learn it once and it works everywhere.
Nothing here is opt-in. If a variable is a date or a duration, every suffix on
this page works on it — including ones added to the bot after you read this.
Dates and times
The bare variable is a raw Unix timestamp — a plain number like1618935600.
That’s deliberate: it’s the one form you can build anything else out of.
Let Discord do it
Discord renders<t:NUMBER:STYLE> in everyone’s own timezone and language. Drop
the bare variable in and pick a style letter:
Or use a named suffix
Every style above also has a name, so you don’t have to remember the letters:Raw parts
For arithmetic or odd formats, the individual components are there too:.year .month .day .hour .minute .second .microsecond
Durations
A length of time — how long a mute lasts, how often a channel is nuked. The bare variable is the long, readable form:muted for 2h — back in 2 hoursThe numeric suffixes are whole numbers, rounded down, counting the total in that unit — a 90 minute duration is
90 minutes and 1 hour, not 1 hour and
30 minutes. Combine with operators when you want the
number formatted: {duration.seconds|comma}.
Where they show up
Some of the more useful ones. Each module’s ownvariables subcommand lists the
rest.
Anything with a member or server
Anything with a member or server
Moderation messages
Moderation messages
Scheduled nukes
Scheduled nukes
Bump reminders
Bump reminders
Gotchas
My timestamp shows a big number
My timestamp shows a big number
You used the bare variable on its own. That’s the raw Unix value — wrap it:
<t:{expiration}:R>, or switch to a named suffix: {expiration.relative}.It renders as literal braces
It renders as literal braces
That variable doesn’t exist in this context. Suffixes only work on something
that’s already a date or duration —
{user.name.relative} is meaningless, and
so is a variable the module never provides. Check the module’s variables
subcommand.A permanent punishment prints Never
A permanent punishment prints Never
Intentional.
{duration} is Permanent and {expiration} is Never when
there’s no end date, and every suffix gives the same word, so
<t:{expiration}:R> would render <t:Never:R>. Branch on it instead:Times are in the wrong timezone
Times are in the wrong timezone
They aren’t — Discord renders
<t:…> in each viewer’s own timezone, so the
same message reads correctly for everyone. .iso is the exception: it’s
always UTC.