Automations: IF-UNLESS-THEN Rules Without Code
How Kage's automations work: combine triggers, conditions and actions, schedules in UTC, placeholders, safety limits, plan limits and troubleshooting.
Last checked for accuracy: 14 October 2026
With automations, you build your own rules following the pattern IF – UNLESS – THEN, without code: a trigger (IF) starts the rule, any number of conditions (UNLESS) check whether it really applies, and the actions (THEN) run one after another. Example: *If someone joins, unless the account is older than 7 days, then send a message to the team.*
For short walkthroughs, see the guides Automations and Automation rules.
Requirements
- Access to the module: You sign in to the dashboard with Discord and need the Manage Server permission (or access granted for this module).
- Kage's permissions: Depending on the action, Kage needs Send Messages, Manage Roles, Manage Messages (delete, pin), Add Reactions or Create Threads.
- Role order: For role actions, Kage's role must be above the target role.
- Plan: The plan notice at the top of this page shows which plan the module needs. If the plan lapses, Kage pauses all rules.
Structure of a rule
A rule has a name, a trigger, zero to 20 conditions and up to 10 actions. Without conditions it fires on every trigger. Without actions it does nothing.
Triggers (IF)
| Trigger | When it fires |
|---|---|
| Message sent | A member writes a message (no bots). |
| Member joined | Someone joins (no bots). |
| Member left the server | Someone leaves the server (no bots). |
| Reaction added | Someone reacts to a message (no bots). |
| Schedule (recurring) | At a fixed time or at an interval, see below. |
Bot messages and bot members never trigger a rule. This is a fixed safety rule and cannot be switched off.
Conditions (UNLESS)
The dashboard shows only the sensible conditions for each trigger.
| Condition | Checks |
|---|---|
| Message contains text | The text appears anywhere in the message (case-insensitive). |
| Message starts with text | The message begins with the text. |
| Message matches pattern (regex) | A regular expression matches. If it is invalid, the condition counts as not met. |
| Member has role / does NOT have role | Role membership. |
| Channel is | The message or reaction is in this channel. |
| Emoji is | The reaction has this emoji (including custom server emojis). |
| Random chance (%) | Applies with this probability. |
| Account younger than (days) | The Discord account is younger than the given value. |
| Time between (HH:MM) | The current time (UTC) is within the window. A window across midnight is allowed. |
| Member count above / below | The number of server members is above or below. |
By default all conditions must match (AND). You can switch the combination to OR: then one matching condition is enough. There are no nested brackets.
Actions (THEN)
| Action | Effect | For which triggers |
|---|---|---|
| Send message | Posts text in a channel (or the triggering one) | all |
| Send direct message | DM to the member | message, join, reaction |
| Add / remove role | Changes the member's roles | message, join, reaction |
| Grant temporary role (hours) | Role for a time, see Temporary roles | message, join, reaction |
| Add reaction | Reacts to the triggering message | message, reaction |
| Send embed template | Posts a template from the embed module | all |
| Log to channel | Writes text to a log channel | all |
| Delete triggering message | Deletes the message | message |
| Pin triggering message | Pins the message | message |
| Award XP | Grants event XP | message, join, reaction |
| Start thread on the message | Creates a thread (name up to 100 characters) | message |
The "Member left the server" trigger allows only message, embed template and log. The schedule trigger likewise allows only these three. Kage skips actions that do not exist for a trigger (for example deleting without a message).
There is no kick, ban or timeout action. Otherwise a wrongly set up rule could lock out whole groups. For that, use moderation.
Placeholders
You can use these placeholders in texts:
| Placeholder | Result |
|---|---|
{user} | Mention of the triggering member |
{username} | Name of the member |
{guild} | Server name |
{membercount} | Member count |
{channel} | Channel name with #, if present |
{date} | Date (DD.MM.YYYY, UTC) |
{time} | Time (HH:MM, UTC) |
Unknown placeholders stay as they are. Kage truncates texts to 2,000 characters. For schedule rules there is no triggering member, so {user} stays empty there.
The schedule trigger
| Mode | Meaning |
|---|---|
| Daily at time | Once a day at the given time |
| Weekly on weekday + time | Once a week on the chosen weekday (0 = Monday) |
| Every N minutes | At an interval, at least 15 minutes |
All times are UTC; there is no time zone per rule. Kage checks every minute and triggers a rule only once per time window.
How Kage runs a rule
- An event occurs. Kage looks for all active rules with a matching trigger.
- Each rule has a minimum pause of 3 seconds, so that a rule that sends messages itself does not create an endless loop.
- Kage checks the conditions (AND or OR).
- If they match, Kage runs the actions in order. If one fails (for example due to missing permissions), the next one runs anyway.
- Kage counts the run and notes the time; you see both in the dashboard ("run N×", "last …"). The Logs tab lists every trigger.
In the dashboard
Under Automations you create rules, edit, pause and delete them. With templates you start from examples. Each rule shows the trigger, the number of conditions and actions and its run statistics.
The dashboard limits the number of rules by plan: Premium up to 25 rules, Enterprise up to 150. Existing rules above the limit are not trimmed; only further growth is blocked.
Settings at a glance
| Dashboard field | Meaning | Default |
|---|---|---|
| Automations active | Turns the module on. Only active rules in an active module fire. | off |
| Rule active | Pauses a single rule | on |
| Combination | AND (all) or OR (at least one) | AND |
Checking the result
- Simple test rule: Trigger "Message sent", condition "Message contains text" with "!ping", action "Send message" with "pong".
- Trigger it: Write "!ping". Kage replies with "pong".
- Statistics: The rule shows "run 1×", and the Logs tab names it.
Troubleshooting
The rule does not fire
Check that the module and the rule are active, that the trigger matches the event, and that all conditions (with AND) match. Bots never trigger. For schedules, the time in UTC counts.
An action does not happen
Usually Kage lacks a permission, or the role order is wrong. The operating log names the action; no message appears in Discord. Also, the action does not exist for every trigger (see table).
The rule fires too often or in loops
A rule pauses for 3 seconds after each trigger. Build conditions so that the rule's own reply does not trigger it again. Bots never trigger anyway.
The schedule comes at the wrong time
All schedules run in UTC. In Central Europe local time is 1 to 2 hours ahead. Convert the time.
The rule cannot be saved
Your plan's upper limit is reached, or the rule has more than 20 conditions or 10 actions.
Further reading
Simple text replies: Custom commands. Fixed schedules for messages: Auto messages. Designed messages: Embeds.
Related Kage modules
- AutomationsFrom Premium
- Custom CommandsIncluded in Basic
Keep reading
More questions? Ask Kage AIAI
Describe what you need – Kage AI picks out the right guide and gives you the sources.
Try Kage on your server
Sign in with Discord, invite the bot and set up the modules in the dashboard. The Basic plan is free forever.