AAAWgmp1bWIAAAAeanVtZGMycGEAEQAQgAAAqgA4m3EDYzJwYQAAABZcanVtYgAAAEdqdW1kYzJtYQARABCAAACqADibcQN1cm46YzJwYTowZGVmNzkxNy04ZmQxLTQ5ZDAtYjZkNS0zZGE3ZTFiNGI4YWMAAAADl2p1bWIAAAApanVtZGMyYXMAEQAQgAAAqgA4m3EDYzJwYS5hc3NlcnRpb25zAAAAALxqdW1iAAAARGp1bWRjYm9yABEAEIAAAKoAOJtxE2MycGEuaW5ncmVkaWVudC52MwAAAAAYYzJzaA0QVueflQX8L88hk801DHQAAABwY2JvcqNpZGM6Zm9ybWF0bWltYWdlL3N2Zyt4bWxqaW5zdGFuY2VJRHgseG1wOmlpZDoxNTVmMTRhZi1iNzRhLTQzNWItOWQ5NC0yYWZjZmJlZDA1MDVscmVsYXRpb25zaGlwaHBhcmVudE9mAAAB4mp1bWIAAABBanVtZGNib3IAEQAQgAAAqgA4m3ETYzJwYS5hY3Rpb25zLnYyAAAAABhjMnNowuToGFKrVHhNxkFCX+N6DQAAAZljYm9yomdhY3Rpb25zgqJmYWN0aW9ua2MycGEub3BlbmVkanBhcmFtZXRlcnOha2luZ3JlZGllbnRzgaJjdXJseC1zZWxmI2p1bWJmPWMycGEuYXNzZXJ0aW9ucy9jMnBhLmluZ3JlZGllbnQudjNkaGFzaFgg3dkZOBmYpNhOOpZh8KpVx8NlKcpHkO3bUK//UyZFJqykZmFjdGlvbngdY29tLmFudGhyb3BpYy5jbGF1ZGUucHJvdmlkZWRqcGFyYW1ldGVyc6F4H2NvbS5hbnRocm9waWMub3JpZ2luLWNvbmZpZGVuY2VndW5rbm93bmtkZXNjcmlwdGlvbnhmQ2xhdWRlIHByb3ZpZGVkIHRoaXMgZmlsZSBhdCB0aGUgcmVxdWVzdCBvZiBhIHVzZXIgYW5kIG1heSBoYXZlIGNyZWF0ZWQgb3IgbW9kaWZpZWQgdGhlIGZpbGUgY29udGVudHMubXNvZnR3YXJlQWdlbnShZG5hbWVmQ2xhdWRlcmFsbEFjdGlvbnNJbmNsdWRlZPUAAADIanVtYgAAAEBqdW1kY2JvcgARABCAAACqADibcRNjMnBhLmhhc2guZGF0YQAAAAAYYzJzaMIkGPG1zoTf2ifzBIqufoYAAACAY2JvcqVjYWxnZnNoYTI1NmNwYWRNAAAAAAAAAAAAAAAAAGRoYXNoWCADEkLkAhj+QEl0LItFmItbZh2T6F5C+bwx1yAY3vGOzWRuYW1lbmp1bWJmIG1hbmlmZXN0amV4Y2x1c2lvbnOBomVzdGFydBh8Zmxlbmd0aBkeBAAAAj5qdW1iAAAAJ2p1bWRjMmNsABEAEIAAAKoAOJtxA2MycGEuY2xhaW0udjIAAAACD2Nib3KlY2FsZ2ZzaGEyNTZpc2lnbmF0dXJleE1zZWxmI2p1bWJmPS9jMnBhL3VybjpjMnBhOjBkZWY3OTE3LThmZDEtNDlkMC1iNmQ1LTNkYTdlMWI0YjhhYy9jMnBhLnNpZ25hdHVyZWppbnN0YW5jZUlEeCx4bXA6aWlkOmRmOGY4MTdiLTZhMjktNDdmNy1iZDdkLTUyNzM3NTc4N2VhNXJjcmVhdGVkX2Fzc2VydGlvbnODomN1cmx4LXNlbGYjanVtYmY9YzJwYS5hc3NlcnRpb25zL2MycGEuaW5ncmVkaWVudC52M2RoYXNoWCDd2Rk4GZik2E46lmHwqlXHw2UpykeQ7dtQr/9TJkUmrKJjdXJseCpzZWxmI2p1bWJmPWMycGEuYXNzZXJ0aW9ucy9jMnBhLmFjdGlvbnMudjJkaGFzaFggALwyZVty+LWYNocf+W6a2I5E1+svWMPqzujxfy4qMDmiY3VybHgpc2VsZiNqdW1iZj1jMnBhLmFzc2VydGlvbnMvYzJwYS5oYXNoLmRhdGFkaGFzaFggz2x30HKgw4CIrRIU6vhAozLKWzZ9TR6HLV8uKuH0uDB0Y2xhaW1fZ2VuZXJhdG9yX2luZm+jZG5hbWVvQW50aHJvcGljIEZpbGVzZ3ZlcnNpb25lMS4wLjBrc3BlY1ZlcnNpb25lMi40LjAAABA4anVtYgAAAChqdW1kYzJjcwARABCAAACqADibcQNjMnBhLnNpZ25hdHVyZQAAABAIY2JvctKEWQISogEmGCFZAgowggIGMIIBjaADAgECAhRA5aAK7sI50L64g/oGQgU9Z1UTADAKBggqhkjOPQQDAzBJMRcwFQYDVQQKEw5BbnRocm9waWMsIFBCQzEuMCwGA1UEAxMlQW50aHJvcGljIENvbnRlbnQgQ3JlZGVudGlhbHMgUm9vdCBDQTAeFw0yNjA4MDcxODQzNTZaFw0yODA4MDYxOTQzNTZaMEQxFzAVBgNVBAoTDkFudGhyb3BpYywgUEJDMSkwJwYDVQQDEyBBbnRocm9waWMgQ2xhdWRlIENvbnRlbnQgU2lnbmluZzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJh6CmvLUBgFFNU0vUKlOVtE6djd17L5SuwX0LemFisBM3dkd/3cyjxFA3Qo5S46fX0/ihY0VZ7mfb9KF703t5OjWDBWMA4GA1UdDwEB/wQEAwIHgDAVBgNVHSUEDjAMBgorBgEEAYPoXgIBMAwGA1UdEwEB/wQCMAAwHwYDVR0jBBgwFoAUzlHiBIFOZFsj+OPEz5o+nMHXXMIwCgYIKoZIzj0EAwMDZwAwZAIwMXMdFJ4BetLLVY7ORuE9noqbbAZOZn/aArXyTwFAZfKrPzxF2vPoJNf1+UCdg1XGAjBwX1zd9WGqYkqmL5SFqw1QySjr1zJfpJM9+1rdDwSPLMOPOjKuiXjoU/pUUeG9RwmhY3BhZFkNngAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPZYQFZY5oVrl0KaTRLE9de3Ug4I9X6eJUeOudSMvMWueLcf64BmMPkJJo7FRn4EB0Cajl6yo/KKdi1CtR5OiLdDI8Y=
Sirius
Sirius command builder

Documentation

From your first command to parameters, conditions and lists. Read it top to bottom once; after that, the Reference and Recipes are what you'll come back to.

1 · Getting started

What custom commands are

A custom command is a reply you design on this dashboard: some text, up to 10 embeds, or both. When someone runs it, Sirius sends that reply, filling in live data like the current arbitration or the name of whoever ran it.

The message

What gets sent: text and embeds.

Placeholders

Words in {braces} that are replaced with real data when it runs.

Parameters

Values people give when they run it: a user, an item, a choice…

Logic

Show things only in some cases, and repeat things for every entry of a list.

Template
Hey {user.mention}! Arbitration is on {arbitration.node} ({arbitration.tier} tier), ends {arbitration.ends}.
In Discord
Hey @Tenno! Arbitration is on Casta (Ceres) (A tier), ends in 42 minutes.

Commands are made per server (anyone with dashboard access to it) or bot-wide by the bot owner (they work in every server and in DMs). If a server has a command with the same name as a bot-wide one, the server's wins there.

Your first command

  1. Open your server → Commands → New command. You can start from a template (Sortie, Fissures, Baro…) or from scratch.
  2. Name it. Lowercase, no spaces, e.g. arby. The description shows in Discord's command list.
  3. Write the message in Message text and/or the embed. Click in any box to insert a placeholder.
  4. Check the preview on the right. It's made by the bot itself with live data, so it's exactly what Discord will get.
  5. Publish. Until then it's only a draft (autosaved). After publishing, run /c name:arby in Discord.

How people run them

WayWhat they doNotes
/c name:arbyPick the command in /c's list (it autocompletes).Always available.
Pop-up formIf the command has parameters, /c opens a form asking for them.Up to 5 parameters.
/c name:price text:rhinoType the value straight into /c's text option.Only when the command has exactly one text-like parameter.
/arbyA real slash command, with real options.Needs Real slash command turned on. Up to 10 parameters.

Functions: When · Only if · Do

Every command is a function: When something happens (someone runs the command) → Only if some checks pass → Do some steps, in order. A plain command is just one step: “Send a message”. Add more steps to post in another channel too, show one of Sirius's own embeds, react, or clean up after a while.

When

What starts it: Command (someone runs /c name, or its own slash command), Message sent (someone sends a message (in some channels, with some text or files)), Schedule (at set times: daily, some weekdays, or every n minutes), Button or menu (someone presses a function's button (or picks a menu option)), Member (someone joins, leaves, gets or loses a role), Reaction added (someone reacts to a message (reaction roles, polls…)), Warframe event (when something changes in the game (new sortie, baro, a fissure…)).

Only if

Checks that must all pass first: roles, channels, a cooldown, a Discord permission or any condition.

Do

Up to 15 steps. Each one can have its own “only if”, and later steps can use what earlier ones did.

Run log

The editor shows the last runs: what it did, or exactly what went wrong.

Later steps read earlier steps' results as {steps.name.result}, where the name is the step's name (shown on its header, like send). For example {steps.send.link} is a link to the message step “send” sent.

Triggers

WhenOptionsPlaceholders it adds
CommandName, description, parameters, real slash command.{user}, {channel}, your parameters.
Message sentChannels or categories (none = all), its text (contains / starts with / is exactly / a regex pattern), what it must have (an image, a file, a link, text only). Bot messages never start it. {message} The message's text
{message.content} The message's text
{message.words} How many words it has
{message.author} Who sent it (display name)
{message.author_mention} Pings who sent it
{message.link} A link to the message
{message.first_link} The first link in it
{message.image} The first image's URL
{message.images} How many images it has
{message.files} How many files it has
{message.has_image} “yes” if it has an image
{message.has_link} “yes” if it has a link
{message.is_reply} “yes” if it's a reply
{message.id} The message's ID
ScheduleEvery day at a time, some days of the week, or every N minutes (at least 5), in the server's timezone (Settings) or its own. Missed runs while Sirius was offline are skipped. Posts in the channel you pick. {run.count} how many times it has run, {run.next}, {run.timezone}
Warframe eventNew sortie, New Archon Hunt, Baro arrives, Baro leaves, New fissure, Arbitration changes, Cycle changes, New Nightwave challenges, Invasion with a reward, Weekly reset, Tracked item available. Filters where they make sense (fissure tiers / missions / Steel Path / storms, arbitration tiers, the open world and its state…). Only things that are new start it - one run each, at most 5 at a time. {event.…}: the thing that happened (its fields are listed in the editor for each event)
Button or menuNo options: a button on any function's message with the action Run a function starts it. Replies can be private.{clicker}, {clicker.mention}, {button}, {button.message_link}
MemberSomeone joins, leaves, gets or loses a role (pick which roles). Posts in the channel you pick, or DMs them. Needs the Server Members intent.{member}, {member.mention}, {member.count}, {member.account_age}, {role}…
Reaction addedSomeone reacts: in some channels, with one emoji, on one message (paste its link) - reaction roles. {reaction.emoji}, {reaction.message_link}, {user}

Buttons & role menus

A Send a message step can have up to 5 buttons and a role menu. A button can run a function (from the Buttons group), give / take a role, count (+1 into {vars.name}), open Sirius's own Set reminder / Set tracker, or open a link. Buttons can have a cooldown per person. They keep working after Sirius restarts.

Variables: the Set a variable step (and counter buttons) remember a value per server; use it anywhere as {vars.name}.

Send a message and Send a built-in embed can be a live message: posted once, then edited on every run - an arbitration board that stays up to date. They can also ping roles you pick (never @everyone).
A message function can't start more than 30 times a minute; the extra messages are skipped and the run log says so. Functions that delete messages must listen to chosen channels, not all of them.
The live preview is a dry run of the whole function: every message it would send, in order, and what the other steps would do. Nothing is sent or deleted. Click a message in the preview to open its step.

Checks (Only if)

Checks run top to bottom; the first one that fails stops the function. Each check has an Otherwise: stop quietly, or stop and reply with a short text only they can see (a DM for message functions; leave it empty for a sensible default). Message functions can also delete their message - the riven-channel template does exactly that for anything that isn't a screenshot.

CheckWhat it does
Has rolesOnly people with (or without) some roles
In channelsOnly in (or not in) some channels or categories
CooldownWait between uses, per person, channel or server
Discord permissionOnly people with a Discord permission
ConditionAny condition over the data, like arbitration.tier in "S,A"
Message hasOnly messages with an image, a file, a link or some text
Max runsAt most N runs per person, channel or server in some hours
Cooldowns count per person, per channel or for the whole server. Run now on the dashboard skips them, so testing doesn't lock you out.

Steps (Do)

StepWhat it doesResults for later steps
Send a messageText and embeds with placeholders, situations and conditions {steps.name.message_id} the message's ID
{steps.name.link} a link to the message
{steps.name.situation} which situation was sent (0 = the default message)
Send a built-in embedSirius's own /arbitration, /sortie, /baro… embed, with your changes {steps.name.message_id} the message's ID
{steps.name.link} a link to the message
{steps.name.title} the embed's title
Grade a rivenRead a riven screenshot and post the grade picture (like /grade) {steps.name.found} “yes” if a riven was read
{steps.name.weapon} the weapon
{steps.name.grades} each stat's grade
{steps.name.best} the first stat's grade
{steps.name.rank} the riven's rank
{steps.name.count} how many cards were graded
{steps.name.message_id} the grade message's ID
{steps.name.link} a link to it
Delete a messageDelete the triggering message or one an earlier step sent, now or after a delay {steps.name.deleted} “yes”, or “later” with a delay
Add a reactionReact with an emoji to the triggering message or one an earlier step sent —
StopEnd the run here (give it an “only if” to stop only sometimes) —
Give a roleGive roles to the person who started it {steps.name.changed} “yes” if a role was given
Take a roleTake roles from the person who started it {steps.name.changed} “yes” if a role was taken
Pin a messagePin their message or one an earlier step sent —
Start a threadStart a thread on their message or one an earlier step sent {steps.name.name} the thread's name
{steps.name.link} a link to it
WaitPause before the next step (up to 15 minutes) —
Set a variableRemember a value or count up, per server: {vars.name} anywhere {steps.name.value} the new value
Show a buildPost a build from /build (compare two, or check for a mod) {steps.name.found} “yes” if the build exists
{steps.name.name} the build's name
{steps.name.item} what it's for
{steps.name.mods} its mods
{steps.name.has} “yes” if it uses the mod you asked about
{steps.name.added} compare: what the second build adds
{steps.name.removed} compare: what it leaves out

Where a message goes: Reply · Reply only they can see · Same channel · A chosen channel · DM them. “Reply only they can see” works for commands. A function sends at most 5 messages per run, and a server can have up to 50 functions.

Delete and React act on a message an earlier step sent. Deleting after a delay (up to 15 minutes) is handy for short-lived answers.
Sirius needs the right permissions where it acts: Manage Messages to delete other people's messages, Add Reactions to react. If it can't, the run log says so.

Builds (/build)

The Builds tab of a server keeps its loadouts: what the build is for, the aura or stance, exilus, up to 8 mods (with ranks), arcanes and archon shards, plus notes, other names and tags. People pull them up in Discord with:

CommandWhat it does
/build showThe build as a picture (or the picture link you gave it).
/build compareWhat the second build adds and leaves out compared with the first.
/build hasWhether a build uses a mod or arcane.

The editor suggests warframes, weapons, mods and arcanes from the game data and checks the build as you type: mods that don't fit, exilus-only mods, the same mod twice, capacity (a rank-30 item with a reactor or catalyst, plus the aura's bonus). The checks are notes - they never stop you saving. Bot-wide builds work in every server; a server's own build with the same name replaces it there.

Functions can use builds too: the Show a build step posts one, compares two, or only looks one up so later steps can use {steps.build.found}, {steps.build.mods} or {steps.build.has}.

Changing builds needs the “Manage builds” permission on the Access tab (administrators always have it).
2 · The message

Text & embeds

A reply can have message text (normal chat text) and up to 10 embeds (the boxes with a coloured stripe). Both support Discord markdown: **bold**, *italic*, [link](https://…), `code`, > quote, # heading.

Embed partWhat it is
ColourThe stripe on the left. Pick one, or take it from a placeholder like {boss.color}.
AuthorSmall line at the top, with an optional icon and link.
Title · Title linkBold title; with a link it becomes clickable.
DescriptionThe main text.
FieldsName + value pairs. Inline fields sit side by side (up to 3 per row).
Thumbnail · Big imageSmall picture top-right · large picture at the bottom. Must be an https:// link (or a placeholder that gives one).
Footer · timestampSmall text at the bottom, and optionally the time it was sent.
Own message textText that replaces the normal message text whenever this embed is shown. See Show things only sometimes.

Only visible to them (on the command) makes the reply ephemeral: only the person who ran it sees it. The ⧉ button on an embed duplicates it.

Placeholders

A placeholder is a name in braces. When the command runs, it's replaced with a value.

  • Dots go deeper: {user} is a name, {user.mention} pings them, {user.avatar} is their picture.
  • Unknown names stay as written. {usr} is sent as the text "{usr}", so a typo is visible. The editor lists unknown names under the preview.
  • Times like {sortie.ends} are Discord timestamps: everyone sees them in their own timezone.

You don't need to memorise names: the button and the Placeholders panel in the editor list everything available, including your parameters. The full list is in the Reference.

Template
{user} checked the sortie: {sortie.boss}, ends {sortie.ends}.
In Discord
Tenno checked the sortie: Vay Hek, ends in 5 hours.

Filters

Filters change how a value looks. Add them inside the braces after a |. You can chain several; they run left to right. Some take a setting after a colon: text goes in quotes.

Template
{target.name | upper}
{amount | default: "1"}
{price | number} platinum
{name | trim | title}
In Discord
TENNO 1 1,250 platinum Rhino Prime
FilterDoes
| defaultvalue to use when it's empty
| upperUPPERCASE
| lowerlowercase
| titleTitle Case
| capitalizeFirst letter capital
| trimremove spaces around it
| truncatecut to N characters
| roundround a number to N decimals
| number1234567 -> 1,234,567
| lengthhow many characters / entries
| yesnotrue/false -> "Yes,No" (or your own words)
| plural3 -> "3 items" with plural: "item,items"
| joina list as text: join: ", " (or "\n" for lines)
| urlmake it safe inside a link
| wikiname -> [name](its wiki page)
| linkmake it a link: link: some.url
| codewrap in `code`
| boldwrap in **bold**
The most useful one is default: it gives a fallback when a value is empty. Without quotes it uses another placeholder: {note | default: user}.
3 · Parameters

Parameter basics

A parameter is a question the command asks when it runs: who?, which item?, which boss?. Its name becomes a placeholder: a parameter called target gives {target}, {target.mention} and more, depending on its type.

SettingWhat it does
NameLowercase letters, numbers and _. Can't be a built-in name (arbitration, archon, baro, cetus, channel, circuit, clicker, coda, command, date, event, input, now, param, server, sortie, steps, time, timestamp, user, vallis, vars), so {user} always means the person who ran it.
TypeWhat kind of value it is: text, number, user, item… See Parameter types.
DescriptionShown to people in the form / slash command, e.g. "Who gets the hug".
RequiredOn: they can't run the command without it. Off: they can leave it empty.
If they leave it empty, useOnly for optional parameters: a fallback value used when it's left empty.

Every parameter also gives {name.given}: yes when the person filled it in themselves, empty when they didn't (even if a fallback was used). Use it to react to "nothing picked"; see Show things only sometimes.

Required parameters are always asked first; Discord needs that order, so the editor sorts them for you.

Parameter types

The type decides what people enter and which placeholders you get. p below stands for your parameter's name.

Text

Any text they type
People enter
A text box.
Settings
Minimum / maximum length, fallback value.
Placeholders
{p} what they typed{p.length} how many characters{p.given} they filled it in
Template
You said: {msg}
In Discord
You said: hello there

Whole number

1, 2, 30…
People enter
A text box that only accepts whole numbers.
Settings
Minimum / maximum, fallback value.
Placeholders
{p} the number{p.given} they filled it in
Template
{amount} × 20 = {if amount > 5}a lot{else}not much{end}
In Discord
3 × 20 = not much

Number

Decimals allowed: 2.5
People enter
A text box for numbers; 2.5 and 2,5 both work.
Settings
Minimum / maximum, fallback value.
Placeholders
{p} the number{p.given} they filled it in
Template
{hours | round: 1} hours
In Discord
2.5 hours

Yes / No

A true/false switch
People enter
A Yes / No dropdown (a true/false option as a slash command).
Settings
Fallback value.
Placeholders
{p} yes or no{p.given} they filled it in
Template
{if loud}**{msg | upper}**{else}{msg}{end}
In Discord
**HELLO**

Choice

Pick from your own list
People enter
A dropdown with your options (up to 25).
Settings
Options with a label, an optional value and extra columns; fallback value.
Placeholders
{p} the chosen label{p.label} the chosen label{p.value} its value{p.given} they filled it in
Template
{boss} drops {boss.shard} shards
In Discord
Nira drops Amber shards

Long list

Autocomplete from rows you paste in (up to 500)
People enter
A text box; as a slash command it autocompletes from your rows (up to 500).
Settings
Rows (label, optional value, extra columns), Allow any text, fallback value.
Placeholders
{p} the chosen label{p.label} the chosen label{p.value} its value{p.found} yes if it matched a row{p.given} they filled it in
Template
{build}: {build.note}
In Discord
Saryn Prime: Spores build

User

A member of the server
People enter
A member picker.
Settings
Empty = themselves (use the person running it when nobody is picked).
Placeholders
{p} display name{p.name} display name{p.mention} pings them{p.username} @username{p.id} user ID{p.avatar} avatar image URL{p.joined} when they joined the server{p.created} account age{p.color} role colour (#hex){p.top_role} highest role{p.given} they filled it in
Template
{user} hugs {target.mention}!
In Discord
Tenno hugs @Ordis!

Role

A server role
People enter
A role picker.
Settings
—
Placeholders
{p} role name{p.name} role name{p.mention} pings the role*{p.id} role ID{p.color} colour (#hex){p.members} member count{p.given} they filled it in
Template
{role} has {role.members} members
In Discord
Staff has 12 members

Channel

A server channel
People enter
A channel picker.
Settings
—
Placeholders
{p} #name{p.name} name{p.mention} clickable link{p.id} channel ID{p.given} they filled it in
Template
Moved to {where.mention}
In Discord
Moved to #general

Warframe item

Any item, with autocomplete
People enter
A text box; as a slash command it autocompletes from every Warframe item.
Settings
Only certain kinds of items (Warframes, Mods…), fallback value.
Placeholders
{p} item name{p.name} item name{p.link} name linked to the wiki{p.wiki} wiki URL{p.category} Warframe, Mod, Primary…{p.description} short description{p.tradable} Yes / No{p.image} picture (wiki){p.market} warframe.market URL{p.price} lowest sell price{p.price_max} lowest sell, maxed rank{p.buy} top buy price{p.avg} average trade price{p.volume} trades lately{p.ducats} ducat value{p.rarity} rarity{p.max_rank} max rank{p.vaulted} Yes / No{p.given} they filled it in
Template
{it.name}: {it.price | default: "not tradable"}
In Discord
Rhino Prime Set: 45p

Star chart node

A mission node, with autocomplete
People enter
A text box; as a slash command it autocompletes from the star chart.
Settings
Fallback value.
Placeholders
{p} node name{p.name} node name{p.planet} planet{p.tier} arbitration tier{p.tier_emoji} tier emoji{p.link} name linked to arbi.guide{p.tileset} arbi.guide URL{p.mission} mission type{p.faction} enemy faction{p.next} next time it's an arbitration{p.given} they filled it in
Template
{node} is {node.tier} tier, next arbitration {node.next}
In Discord
Casta (Ceres) is A tier, next arbitration in 3 days

File

An uploaded file or image
People enter
A file upload.
Settings
Images only.
Placeholders
{p} file URL{p.url} file URL{p.name} file name{p.size} size in KB{p.image} yes if it's an image{p.given} they filled it in
Template
Image: {pic.url}
In Discord
Image: https://cdn.discordapp.com/…/build.png

Choice & Long list

Both let people pick from a list you write. The difference is size and how they pick:

ChoiceLong list
How manyUp to 25Up to 500
How people pickA dropdownTyping, with autocomplete suggestions
Anything not in the list?NoOnly with Allow any text on
Good forA few fixed options (bosses, modes)Many entries (builds, guides, a glossary)

Each row has three parts

LabelWhat people see and type. {p} and {p.label} show it.
ValueOptional short ID, e.g. saryn. Handy in conditions because it never changes even if you rename the label: p.value == "saryn". If empty, it's the same as the label.
Extra columnsYour own data per row. Add a column called image, fill it in per row, and {p.image} gives the right picture for whatever was picked. Up to 10 columns.
Embed
Title: {build}
Description: {build.note}
Big image: {build.image}
In Discord
Saryn Prime Spores build (the Saryn picture)

Filling it in quickly

Use Paste many rows at once: one row per line, parts separated by |, in this order: Label | value | column 1 | column 2…. Tabs work too, so you can copy cells straight from a spreadsheet.

Saryn Prime | saryn | Spores build | https://…/saryn.png
Mesa Prime | mesa | Peacemaker | https://…/mesa.png
Rhino Prime | | Tank | https://…/rhino.png

Allow any text (Long list)

Normally, text that isn't one of the rows is refused with "Couldn't find…". With Allow any text on, it's accepted as it is: {p} is what they typed, the extra columns are empty, and {p.found} tells you which case you're in (yes = it matched a row).

Template
{if build.found}{build}: {build.note}{else}No build called “{build}” yet.{end}
In Discord
No build called “Nekros” yet.
4 · Making it dynamic

Conditions

A condition is a yes/no question like "was a target picked?" or "is the boss Nira?". They're used by every tool in the next section. In conditions you write names without braces.

WriteMeans
target.givenit has a value (anything except empty, "no", "false" or 0)
not baro.herethe opposite
boss.value == "nira" · !=is / is not (upper and lower case don't matter)
amount > 5 · < · >= · <=compare numbers
it.name contains "Prime"the text contains it
startswith · endswiththe text starts / ends with it
boss.value in "nira,boreal"is one of these
a and b · a or b · ( … )combine; brackets group
You rarely need to type these. Every condition box in the editor has a ✨ button: pick what to check, how, and the value. For Choice and Long list parameters it lists their options, and it can add to an existing condition with and / or.

Show things only sometimes

There are four tools, from smallest to biggest. All of them use a condition.

You want to…UseWhere
change a few words in a text{if} … {end}inside any text box
hide or show one fieldOnly show it if…field → Repeat / show only if
hide or show a whole embedOnly show this embed if…top of the embed
change the message text together with an embedOwn message texttop of the embed
send a completely different messageSituationthe Messages card → + Situation

{if} in text

Write {if condition}, the text, and {end}. Optionally add {elif another condition} and {else} in between.

Template
{if target.given}Hey {target.mention}!{else}Hey everyone!{end}
That is {if amount > 10}a lot{elif amount > 1}a few{else}just one{end}.
In Discord
Hey everyone! That is a few.

Only show a field / an embed

Write the condition in the box; when it's false, the field or embed is left out. Example: an embed with Only show this embed if… set to boss.value == "nira" only appears when Nira was picked. Tip: a field whose value comes out empty is left out automatically, so often you don't even need a condition.

Own message text (an embed's text)

Turn on Own message text in an embed and write a text there. Whenever that embed is shown, its text is sent instead of the normal message text, so the two come as a pack. Combined with Only show this embed if… this is how you condition the message text: e.g. an embed shown only when boss.value == "nira" can bring its own "Nira is up!" text. If several shown embeds have their own text, the first one wins. An embed can even be just a text (no title or fields) to act as a conditional message.

Situations

A situation is a whole other message (its own text and embeds) plus a condition. When the command runs, situations are checked left to right and the first one whose condition is true is sent. If none match, the Default message is sent. Up to 10 per command.

SituationCondition
Baro is awaynot baro.here
Nobody was pickednot target.given
No sortie right nownot sortie.active
A top-tier arbitrationarbitration.tier_rank >= 5

Tip: Copy the default message here starts a situation from what you already have.

Lists & loops

Some data is a list: the fissures open right now, the sortie's 3 missions, Baro's inventory. To show a list, write the part for one entry once, between {each x in list} and {end}. It's repeated for every entry, and x (any name you like) is the current entry.

Template
{each m in sortie.missions}{loop.index}. {m.node} — {m.type}
{end}
In Discord
1. Everest (Earth) — Exterminate 2. Cervantes (Earth) — Sabotage 3. Oro (Earth) — Assassination

Which fields an entry has (node, type…) is listed in Warframe data. Put {else} inside to say something when the list is empty.

Picking and ordering entries

Add options after the list name, each after a |:

| where: f.steel_pathkeep only entries where the condition is true (you can add several)
| sort: f.tier_numsort by a field; -f.tier_num sorts the other way
| limit: 5 · | skip: 2 · | reverseonly the first 5 · skip the first 2 · reverse the order
| group: f.tiergroup entries that share a value. Each group is {g} (the shared value) with {g.count} and a list g.items.
Template
{each f in fissures | where: f.steel_path | sort: f.tier_num | limit: 3}{f.tier} {f.node} — {f.mission}
{else}No Steel Path fissures.{end}
In Discord
Lith Hepit (Void) — Capture Axi Ukko (Void) — Capture

Handy extras

{loop.index}inside a loop: 1, 2, 3…
{loop.first} · {loop.last}inside a loop: "yes" on the first / last entry, e.g. {if not loop.last}, {end} for commas
{fissures.count}how many entries (no loop needed)
{fissures.first.node} · {fissures.2}a single entry (numbers start at 1)
{circuit.warframes | join: ", "}the whole list as one line of text

Repeating fields

Instead of a loop inside one field, you can make one field per entry. Open a field → Repeat / show only if and fill in Repeat this field for each… with x in list. Use {x…} in the field's name and value.

Field
Repeat for each:  m in sortie.missions
Field name:       {loop.index}. {m.node}
Field value:      {m.type}
In Discord
1. Everest (Earth) 2. Cervantes (Earth) 3. Oro (Earth) Exterminate Sabotage Assassination

The list options work here too, e.g. g in fissures | group: g.tier makes one field per relic tier.

5 · Testing & publishing

Preview & testing

  • Live preview is made by the bot with the same code it uses in Discord. Turn Live data off to see your raw template.
  • Test values are pretend answers for your parameters, only for the preview. Change them to check every case.
  • Under the preview, notes tell you about unknown placeholders, missing test values, and which situation your test values pick.
  • Send a test posts what's in the editor to a channel, published or not.

Drafts & publishing

  • Your work is autosaved as a draft a few seconds after you stop typing, even if it has errors. Save draft saves right away.
  • Publish checks everything and makes it live in Discord. If something's wrong, the problems are listed and your work stays in the draft.
  • Editing a live command doesn't change Discord until you publish; the list shows Unpublished changes. Discard changes goes back to the live version.
  • New commands that were never published are listed under Drafts on the Commands page.
  • History (in the editor's side panel) keeps the last 25 published versions and what changed in each. Restore puts an old version back in the editor as unpublished changes - publish it to make it live again.
  • Export / import on the Functions page downloads every function as a file, or reads one back in (from a backup or another server). Imported functions come in as drafts, so nothing goes live until you check their channels and roles and publish them.

Slash commands & access

  • Real slash command also registers the command as its own /name, with real options. Server administrators can turn it on for their server's commands (only that server gets it); only the bot owner can for bot-wide ones.
  • It can't use the name of one of Sirius's own commands. Discord can take a moment to show a new slash command.
  • Who can edit: the server's administrators, plus roles they allow on the Access tab.
  • Replies can ping users, but never @everyone, @here or roles.
6 · Reference

All placeholders

Always available, in every command. Your parameters add their own (see Parameter types).

You & the server

{user}Their display name
{user.mention}Pings them
{user.username}Their @username
{user.id}Their user ID
{user.avatar}Their avatar (image URL)
{server}Server name
{server.members}Member count
{server.icon}Server icon (image URL)
{server.id}Server ID
{channel}Channel name
{channel.mention}Channel link
{input}Text they typed after the command

Time

{date}Today's date (their timezone)
{time}Current time (their timezone)
{now}Date and time
{timestamp}Unix timestamp

Arbitration

{arbitration.node}Current node
{arbitration.mission}Mission type
{arbitration.faction}Enemy faction
{arbitration.tier}Tier letter (S-F)
{arbitration.tier_emoji}Tier emoji
{arbitration.ends}When it ends
{arbitration.link}arbi.guide tileset page
{arbitration.next}Next hour's node

Sortie

{sortie.boss}Sortie boss
{sortie.faction}Sortie faction
{sortie.ends}When it resets

Archon Hunt

{archon.boss}This week's Archon
{archon.shard}Shard colour it drops
{archon.next}Next week's Archon
{archon.ends}When it resets

Baro Ki'Teer

{baro.status}In town / away
{baro.location}Relay he's at (or going to)
{baro.arrives}When he arrives
{baro.leaves}When he leaves

Cycles

{cetus.state}Day / Night on the Plains
{cetus.ends}When it changes
{vallis.state}Warm / Cold in Orb Vallis
{vallis.ends}When it changes

Circuit & Coda

{circuit.warframes}This week's Circuit Warframes
{circuit.incarnons}This week's Incarnon adapters
{coda.batch}Eleanor's Coda batch (A/B)
{coda.weapons}Coda weapons on sale
{coda.ends}When the batch switches

Warframe data

More data you can read, updated live. list means it has several entries: use it with {each}; the last column is what each entry has.

Arbitration

NameWhat it isEach entry has
arbitration.upcoming listnext 24 hoursnode, mission, faction, tier, tier_rank, tier_emoji, link, tileset, day, date, starts, starts_time, ends
arbitration.days listnext 7 days (each has .arbitrations)day, date, arbitrations
arbitration.tier_rankS=6 A=5 B=4 C=3 D=2 F=1—

Sortie

NameWhat it isEach entry has
sortie.activeyes while there's a sortie—
sortie.missions listthe 3 missionsnode, type, modifier, modifier_info, number

Archon Hunt

NameWhat it isEach entry has
archon.missions listthe 3 missionsnode, type
archon.shard_emojishard emoji—
archon.imageshard picture (URL)—
archon.colorshard colour (#hex)—

Fissures

NameWhat it isEach entry has
fissures listactive fissures, sorted by tiernode, mission, tier, tier_num, enemy, steel_path, storm, ends, ends_time, ends_date, ends_unix

Invasions

NameWhat it isEach entry has
invasions listactive invasionsnode, desc, attacker, defender, attacker_reward, defender_reward, progress

Nightwave

NameWhat it isEach entry has
nightwaveseason name—
nightwave.challenges listthis week's challengestitle, desc, standing, kind, daily, weekly, elite, ends, ends_time, ends_date, ends_unix

Bounties

NameWhat it isEach entry has
bounties listone entry per syndicatesyndicate, jobs (type, levels, rewards, standing, vault), ends, ends_time, ends_date, ends_unix

Baro Ki'Teer

NameWhat it isEach entry has
baro.hereyes while he's in a relay—
baro.inventory listwhat he sells (while here)item, ducats, credits

Steel Path

NameWhat it isEach entry has
steelpathTeshin's current reward—
steelpath.rotation listTeshin's full rotationname, cost

Cycles

NameWhat it isEach entry has
cambion.stateFass / Vome—
zariman.stateGrineer / Corpus—
earth.stateDay / Night—
duviri.stateDuviri spiral mood—

Circuit & Coda

NameWhat it isEach entry has
circuit.warframes listthis week's Warframes (list)name, link
circuit.incarnons listthis week's Incarnons (list)name, link
circuit.warframe_weeks listevery week of the rotationweek, current, choices, starts
circuit.incarnon_weeks listevery week of the rotationweek, current, choices, starts
coda.weapons liston sale now (list)name, link
coda.next_weapons listnext batch (list)name, link

Sirius

NameWhat it isEach entry has
bot.logoSirius logo (URL)—
bot.avatarthe bot's avatar (URL)—
bot.mentionpings the bot—
asset.NAMEa picture from the bot's assets folder—
emoji.NAMEone of the bot's emojis, e.g. emoji.Sirius_Clock—

Times come in four forms: ends ("in 2 hours"), ends_time ("18:00"), ends_date (full date) and ends_unix (a number, for sorting and comparing).

Emojis & pictures

{ping.ROLE}Pings a role of this server, e.g. {ping.arbi_ping} for “Arbi Ping” (lowercase, spaces become _). The editor lists them under Placeholders → Ping a role. Only roles in your own text ping - mentions people type never do, and @everyone never does. The role must be mentionable, or Sirius needs “Mention @everyone, @here and All Roles”.
{emoji.NAME}One of the bot's emojis, e.g. {emoji.Sirius_Clock}. Works in any text.
{asset.NAME}A picture from the bot as a link, e.g. {asset.TauAmber}. For image, thumbnail and icon boxes.
{bot.logo} · {bot.avatar}Sirius's logo / avatar.

The editor's placeholder panel lists every emoji and picture available.

Limits & auto-fit

Discord's limits apply to what's sent (after placeholders and loops are filled in). Sirius fits it for you:

Message text2000 characters (cut with …)
Embeds10 per message, 6000 characters all together
Title · description256 · 4096 characters
Fields25 per embed. Values over 1024 characters continue in extra fields; past 25 the last one says "…and N more".
Loops100 entries per loop, 3000 steps per message.
Parameters5 with /c's form, 10 as a real slash command.
7 · Help

Recipes

Show an embed only when a parameter has a certain value

  1. Add the parameter, e.g. a Choice called boss with the options Amar, Nira and Boreal.
  2. In the embed, find Only show this embed if… and click its ✨ button.
  3. Pick {boss} → is → Nira, then Use it. It writes boss.value == "nira".

Variations: several values boss.value in "nira,boreal" · a Long list row build.value == "saryn" · anything picked boss.given · typed text that isn't a row not build.found.

Change a colour, picture or word depending on the choice

Give the Choice extra columns, e.g. color, image and shard, fill them per option, then:

Colour from a placeholder:  {boss.color}
Thumbnail:                  {boss.image}
Title:                      {boss} drops {boss.shard} shards

Something different when nobody is picked

Small difference: {if target.given}{target.mention}{else}everyone{end}. Whole other message: a situation with not target.given. Or turn on Empty = themselves on the User parameter.

A build lookup

Long list build with columns note and image. Paste your builds (Saryn Prime | saryn | Spores build | https://…png). Embed title {build}, description {build.note}, big image {build.image}. Turn on Allow any text and add a situation with not build.found to answer nicely when a build doesn't exist.

Good arbitrations for the week, one field per day

Repeat for each:  d in arbitration.days
Field name:       {d}
Field value:      {each a in d.arbitrations | where: a.tier_rank >= 4}{a.starts_time} {a.tier_emoji} {a.node}
                  {else}nothing B+{end}

Price check

Item parameter it. Title {it.name}, title link {it.wiki}, thumbnail {it.image}, and:

{if it.tradable == "Yes"}Lowest sell: **{it.price | default: "none online"}**{else}Not tradable.{end}

Templates

Every template on the New command page is a complete, working example; several rebuild Sirius's own commands:

SortieVoid fissuresSteel Path fissuresArbitrationGood arbitrations this weekArchon HuntBaro Ki'TeerNightwaveInvasionsBountiesOpen worldsThe CircuitCoda weaponsPrice checkHug someone

Troubleshooting

A placeholder shows up as {something} in Discord.
That name doesn't exist (a typo, or a parameter that was renamed). The preview lists unknown names. If it may be missing on purpose, add | default: "…".
A field or embed is missing.
Its value came out empty (an empty list, or an {if} that was false), or its "only show if" condition is false.
"Couldn't find … for build".
The Long list has no such row. Add it, or turn on Allow any text.
My condition does nothing.
Conditions use names without braces (target.given, not {target.given}). For choices, compare .value: boss.value == "nira". The ✨ button writes it for you.
The preview shows a different message than the tab I'm editing.
The note under the preview says which situation your test values pick; change the test values or open that tab.
I can't publish.
The errors are listed at the top of the editor. Your work is safe in the draft meanwhile.