Conditionals
{if: condition && then && else} — the else half is optional.
{unless: ...} is the same thing inverted. Aliases: ifnot, ifn, not.
Comparisons
Numbers are compared numerically when both sides look like numbers, and as text otherwise.
Combining conditions
and / & and or / | both work, and and binds tighter than or — the same as most languages. Prefix any single condition with ! to negate it.
Truthiness
A bare value with no comparison is checked for truthiness:0, false, none, null, never, permanent, forever, no reason provided, n/a, nothing, nobody, nowhere. That last group exists so {if: {reason} && ...} behaves how you’d expect when no reason was given.
Text formatting
Numbers
plural also takes explicit words:
Arithmetic
Randomness
random aliases: rand, r, choice. rng aliases: randint, ri, random.randint. repeat aliases: mul, multiply.
Randomness is evaluated each time the message is sent, so a welcome message with {random: ...} in it varies per member — which is the point.
Boolean helpers
Two pipes exist purely to feed{if:}:
Worked example
A level-up message that reads differently at milestones, formats numbers properly and picks a random opener:Nesting
Operators nest freely, and&& is only treated as a separator at the top level — so an inner operator’s own && won’t break the outer one.
