Skip to content
Axaro

Scenarios

Live

When this happens, do that.

Triggers

A scenario starts from an event, filters it, then chains up to five actions. Beyond that it becomes impossible to read back — and chaining two scenarios covers the cases that truly need it.

TriggerAvailable filters
member.joinMinimum account age
member.leaveNone
message.createChannels, member roles, text fragment
role.addedTracked role
role.removedTracked role
The text filter is a substring, not a regular expression. A regex typed in a dashboard can be crafted to block the process for several seconds on a single input — not a risk worth taking for a word filter.

Actions

ActionEffect
send_messageSends a message, in a chosen channel or the trigger’s channel
send_dmSends a direct message to the member concerned
add_roleAdds a role
remove_roleRemoves a role
webhookPosts the server, the member and the message to an HTTPS address

Each action can wait up to one hour before running. Beyond that it would need a persistent queue: a restart would lose the action in flight without anyone noticing.

A failure does not stop what follows. Actions are often independent, and stopping everything on an out-of-reach role would lose the welcome message that comes next. The run history says exactly which one failed and why.

Safeguards

  • A scenario is validated data, never code: it cannot do anything the schemas above do not allow.
  • Only the triggering member can be mentioned. A template containing @everyone does not turn a scenario into a spam tool.
  • Each scenario is rate-limited. Otherwise a scenario triggered on messages could flood a channel during a raid — that is, help the raid.
  • The last twenty runs are kept, with the detail action by action.
  • The webhook action only accepts HTTPS, follows no redirect, and refuses any private address — loopback, internal network, host metadata. The check sits in the DNS resolver of the connection itself: the address checked is the one the socket opens to, there is no gap to exploit.

From Discord

A scenario is written in the dashboard — it is a form, it belongs there — but two moments call for being in Discord. /automation covers both.

SubcommandWhat it does
/automation listEvery scenario, active or paused, with its last error
/automation testRuns a scenario right now, on you
/automation toggleTurns a scenario on or off

Testing is the first. A scenario triggered when a member leaves can only be checked by waiting for a member to leave: test runs it without waiting, without checking the trigger, and without honouring declared delays — an action delayed by an hour would outlive the interaction.

Emergencies are the second. A runaway scenario is switched off in three seconds from a phone, without opening a browser or logging in again.

The test runs on whoever launches it, and nobody else. A “member” option would turn this command into a way to send a direct message to anyone in the bot’s name.
Discord automations: when this happens, do that · Axaro