Automations
If-then rules — the bot reacts by itself to what happens on the server.
A rule consists of three parts: when something happens, then the bot does up to three things. No more — and that is deliberate. Anyone who needs nested conditions creates a second rule; that stays readable when you want to look up in six months why the server does something.
/auto regel name:begruessung wenn:Jemand tritt bei
The rule is created paused. Only once there are actions in it do you arm it.
Triggers
| When … | Needs |
|---|---|
| Jemand tritt bei (someone joins) | — |
| Jemand verlässt den Server (someone leaves the server) | — |
| Jemand bekommt eine Rolle (someone gets a role) | the role |
| Jemand verliert eine Rolle (someone loses a role) | the role |
| Jemand reagiert auf eine Nachricht (someone reacts to a message) | message ID, optionally a particular emoji |
Actions
- Nachricht senden (send a message) into a channel of your choice
- Privat anschreiben (send a direct message) — only works if the person allows DMs from server members
- Rolle geben (grant a role)
- Rolle wegnehmen (remove a role)
In every text you can use placeholders: {user} for the mention, {username} for the bare name,
{server} and {count} for the current member count.
An example
When someone gets the Verifiziert role, then remove the Neu role and write in
#allgemein: "Willkommen an Bord, {user}!"
That is two actions in one rule, set up in two minutes.
What the bot cannot do
React to keywords in messages. For that it would have to read along with every message on your
server. Fishbot deliberately does not ask for that permission — not even for a handy feature. If
you need automatic replies to words, custom commands are the more honest way: the person types
/regeln instead of the bot listening in.
Conditions
A trigger on its own is usually too coarse. Via the Bedingungen (conditions) button on the rule panel you narrow down when the rule runs at all:
| Condition | What for |
|---|---|
| Nur in diesen Kanälen (only in these channels) | The same reaction should do something different in #support than in #offtopic |
| Nur für diese Rollen (only for these roles) | The rule applies only to the team |
| Nie für diese Rollen (never for these roles) | Exempt moderators |
| Nur von … bis … Uhr (only from … until …) | The quiet-hours rule should apply at night |
| Konto mindestens so alt (account at least this old) | Against freshly created second accounts |
| So lange schon dabei (a member for this long) | Only for people who really belong to the server |
Everything that is set has to apply. And an excluded role beats an allowed one: anyone who meets "only for @Member" but also carries "@Gesperrt" is out. The other way round the exclusion would be worthless.
The time window may run past midnight: 22 to 6 means at night, not "never".
Roles for a limited time
With every role action the bot asks directly for the duration. Leaving it empty means permanent,
60 means one hour:
When someone reacts with 🎟️ → grant @Event-Zugang for 180 minutes
The removal date is in the database, not in a timer in memory. That is the difference between "usually" and "always": if the bot restarts in the meantime, the role is removed anyway. If the same rule triggers again, the deadline starts over — which is what you expect when you grant a role "for another hour".
Protection against endless loops
A rule "when role A is granted → grant role A" would trigger itself over and over. Fishbot recognises exactly this case when saving and rejects it.
Two rules that trigger each other, however, cannot be seen when saving. A limit at runtime helps against that: if the same rule triggers more than twenty times in one minute, it pauses for five minutes and reports that once in the log channel. Once, not twenty times — otherwise the report would itself be the problem.
On top of that comes the general limit: the bot sends at most ten messages per minute per server.
Switch the Protokoll (log) channel on when setting things up. After every trigger it says there what happened — that saves you the guesswork.
Limits
| Rules per server | 25 |
| Actions per rule | 3 |
| Text length of an action | 1800 characters |
Replies to keywords
The trigger “Somebody writes a keyword” makes the bot listen for words and react with the action “Answer in the same channel” — with text or a saved embed from the embed builder.
In the dashboard this has a page of its own: Automations → Keyword replies. Keywords, the
reply, channels and the cooldown sit on one page instead of in three windows. What it creates
is an ordinary rule — /auto list shows it just the same.
Four ways to compare:
| Mode | matches “hilfe” |
|---|---|
enthaelt (default) |
“ich brauche hilfe”, but also “Hilfestellung” |
wort |
“ich brauche hilfe”, not “Hilfestellung” |
beginnt |
only if the message starts with it |
genau |
only if the whole message is exactly that |
The cooldown is not decoration. Without it the bot answers five messages carrying the same word five times — that is no longer a hint, it is noise. The default is 15 seconds, counted per rule and channel: two rules on different words do not lock each other out.
It does not work without message content. Discord only delivers the text of a message to bots whose operator has switched on the “Message Content” permission. With it off, messages arrive empty and none of these rules can fire. The bot writes this into the log once rather than quietly doing nothing.
Last updated: 14 October 2026
