Pattern: If/Else — Bedingungen und Range-Cascade¶
Core → Logic → If/Else. Prüft eine Bedingung, führt Sub-Actions im Then- oder Else-Branch aus.
Doku: https://docs.streamer.bot/api/sub-actions/core/logic/if-else
Felder¶
| Feld | Bedeutung |
|---|---|
| Input | Linke Seite des Vergleichs. Argument oder Wert. Unterstützt %arg%, ~global~, $func()$ |
| Operation | Vergleichsoperator (siehe Tabelle unten) |
| Value | Rechte Seite des Vergleichs |
| Auto Type | Toggle, default an. Erkennt automatisch ob Zahl/Bool/String. Aus = nur String-Vergleich |
Verfügbare Operatoren¶
| Operator | Was er prüft | Beispiel |
|---|---|---|
Equals |
Exakt gleich | 5 == 5 |
Not Equals |
Nicht gleich | 5 != 4 |
Equals (Ignore Case) |
String gleich, Groß/Klein egal | Bob == bob |
Not Equals (Ignore Case) |
String ungleich, Case egal | |
Contains |
Linker enthält Rechten als Teilstring | "hallo welt" contains "welt" |
Regex Match |
Linker matcht Regex Rechts. Bietet Capture-Groups als %match[N]% |
^!give (\d+) |
Less Than |
Zahl kleiner (EXCLUSIV) | 5 < 10 |
Greater Than |
Zahl größer (EXCLUSIV) | 5 > 2 |
Does Not Exist |
Argument-Name ist nicht definiert | rechtes Feld leer |
Is Null or Empty |
Wert ist leer oder NULL | für Input-Validierung |
Wichtig: Es gibt KEIN Less Than or Equal. Workaround: Less Than mit Wert+1. Statt <= 10 schreib < 11.
Then/Else Verhalten¶
Wenn die Bedingung wahr ist, laufen die Sub-Actions die NACH dem If/Else stehen — bis ein weiteres If/Else, eine Group oder Action-Ende. Standard ist: alle nachfolgenden Sub-Actions laufen, wenn nichts den Flow unterbricht.
Genauer Mechanismus in Streamer.bot v1.0.4: Wenn If/Else nicht matcht und du Break aktiviert hast → Action endet. Üblicherweise nutzt man mehrere If/Else hintereinander für Range-Cascade, jedes mit Break im Then-Branch.
Range-Cascade Pattern (wichtigster Use-Case)¶
Beispiel !iq: Random Number 0-200 generieren, dann je nach Wert andere Message.
Reihenfolge im Action-Tree:
1. Get Random Number (min=0, max=200)
2. If/Else: %randomNumber% Less Than 50
├─ Send Message: "@%user% du hast nur %randomNumber% IQ. Aua."
└─ Break
3. If/Else: %randomNumber% Less Than 100
├─ Send Message: "@%user% %randomNumber% IQ — Durchschnitt halt."
└─ Break
4. If/Else: %randomNumber% Less Than 150
├─ Send Message: "@%user% %randomNumber% IQ — schon ganz nice."
└─ Break
5. Send Message: "@%user% %randomNumber% IQ — Galaxy Brain."
Logik:
- < 50 matcht → Message + Break → Action endet
- Sonst weiter zu < 100
- Sonst weiter zu < 150
- Letzter Send Message ist der Default für alles ≥ 150 (kein If/Else davor)
Empty-Check Pattern¶
Bevor du Get User Info for Target aufrufst musst du sicherstellen dass %input0% nicht leer ist. Sonst läuft die Sub-Action ins Leere.
1. If/Else: %input0% Is Null or Empty
├─ Set Argument: targetLogin = %userName% (Sender als Fallback)
└─ (kein Break — fällt durch)
2. If/Else: %input0% Is Null or Empty (mit "Not")
├─ Set Argument: targetLogin = $replace(%input0%, @, )$
└─
3. Get User Info for Target (User Login = %targetLogin%)
Schöner: Set Argument mit Default zuerst, dann nur überschreiben wenn nicht leer. Aber Streamer.bot hat kein direktes "If Not" — also entweder zwei If/Else oder Operations-Toggle benutzen (siehe nächster Abschnitt).
Reverse via Operation¶
Statt Equals+Else nutze Not Equals+Then. Oder du baust das Inverse mit Does Not Exist / Is Null or Empty und nutzt nur den Then-Pfad.
Regex Match Capture-Groups¶
Bei Regex Match mit Pattern wie ^!give (\d+) (\w+)$:
| Variable | Inhalt |
|---|---|
%match.count% |
Anzahl der Capture-Groups (hier 2) |
%match[0]% |
Komplette Match-Range |
%match[1]% |
Erste Group (\d+) |
%match[2]% |
Zweite Group (\w+) |
Plus Named Captures: (?<amount>\d+) ergibt %amount%.
Häufige Fallen¶
- Less Than or Equal vergessen → Es gibt es nicht. Wert+1
- Auto Type aus, Zahl verglichen → "10" < "9" weil String-Sort
- Bool als String —
%isVip%als String"True"(kapitalisiert). Wenn Vergleich nicht klappt, mitEquals (Ignore Case)arbeiten oder explizitTrueschreiben
Verwendung in Commands¶
- commands/01-clip.md —
%createClipSuccess%Check - commands/04-iq-range-cascade.md — Range-Cascade
- commands/06-shrimp-per-user-counter.md — Erst-Run-Check