Variablen-Referenz¶
Streamer.bot ersetzt in den meisten Textfeldern Platzhalter zur Laufzeit. Drei Sorten gibt es. Jede hat eigene Klammern.
Drei Klammer-Arten¶
| Syntax | Was | Beispiel |
|---|---|---|
%name% |
Argument (lokale Variable in der laufenden Action) | %userName%, %input0%, %createClipUrl% |
~name~ |
Persisted Global (Variable über Sessions) | ~lastClipUrl~ |
$func()$ |
Inline Function (Berechnung zur Laufzeit) | $lower(%input0%)$, $add(%counter%, 1)$ |
Reine %arg% reichen für 99% aller Commands. Globals nur wenn der Wert nach Restart bleiben soll. Inline Functions für String- und Mathe-Tricks.
Auto-Argumente von Command Triggered¶
Sobald ein Chat-Command matcht, sind diese Variablen in der Action verfügbar:
User-Info¶
| Variable | Inhalt | Beispiel-Wert |
|---|---|---|
%userName% |
Login (lowercase) | azazelitv |
%user% |
Display Name (mit Caps) | AzazeliTV |
%userId% |
Twitch User-ID | 12345678 |
%userType% |
Rolle | broadcaster, moderator, vip, subscriber, leer |
%isSubscribed% |
Bool | true/false |
%isModerator% |
Bool | true/false |
%isVip% |
Bool | true/false |
Nachrichten-Input¶
| Variable | Inhalt | Bei !cmd @bob hallo welt |
|---|---|---|
%message% |
Komplette Chat-Nachricht | !cmd @bob hallo welt |
%rawInput% |
Alles nach dem Command-Trigger (bei Location=Start) | @bob hallo welt |
%input0% |
Erstes Wort nach Command | @bob |
%input1% |
Zweites Wort | hallo |
%input2% |
Drittes Wort | welt |
%inputEscaped0% |
Wort mit escaped Quotes | @bob |
%inputUrlEncoded0% |
URL-encoded | %40bob |
Counter¶
| Variable | Inhalt |
|---|---|
%counter% |
Wie oft Command insgesamt aufgerufen wurde |
%userCounter% |
Wie oft der Sender den Command aufgerufen hat |
Command-Meta¶
| Variable | Inhalt |
|---|---|
%command% |
Der konkrete Alias der gematcht hat (!clip) |
%commandId% |
GUID des Commands |
%commandSource% |
twitch, youtube etc. |
%commandType% |
message, whisper etc. |
Output-Variablen von Sub-Actions¶
Bestimmte Sub-Actions setzen NACH ihrer Ausführung neue Argumente, die du in den nachfolgenden Sub-Actions nutzen kannst.
Create Clip¶
Doku: https://docs.streamer.bot/api/sub-actions/twitch/channel/create-clip
| Variable | Inhalt | Typ |
|---|---|---|
%createClipSuccess% |
War das Erstellen erfolgreich? | bool |
%createClipUrl% |
URL zum Clip | string |
%createClipId% |
Clip-ID | string |
%createClipCreatedAt% |
Zeitstempel der Erstellung | string |
Get Random Number¶
Doku: https://docs.streamer.bot/api/sub-actions/core/logic/get-random-number
| Variable | Inhalt | Typ |
|---|---|---|
%randomNumber% |
Integer in Range (inklusiv beide Enden) | int |
%randomFloat% |
Float zwischen 0 und 1 | float |
%randomPercent% |
Float * 100 | int |
Get User Info for Target¶
Doku: https://docs.streamer.bot/api/sub-actions/twitch/user/get-user-info-for-target
| Variable | Inhalt |
|---|---|
%targetUser% |
Display Name |
%targetUserName% |
Login (lowercase) |
%targetUserId% |
User-ID |
%targetUserType% |
"affiliate" / "partner" / leer |
%targetIsAffiliate% |
bool |
%targetIsPartner% |
bool |
%targetIsModerator% |
bool |
%targetIsVip% |
bool |
%targetIsSubscribed% |
bool |
%targetSubscriptionTier% |
1000, 2000, 3000 |
%targetChannelTitle% |
Stream-Titel |
%targetDescription% |
Channel-Beschreibung |
%game% |
Aktuelles Game |
%gameId% |
Game-ID |
%accountAge% |
Account-Alter in Sekunden |
%createdAt% |
Account-Erstelldatum |
%addTargetResult% |
Bool ob Lookup erfolgreich war |
Get Follow Age Info for Target¶
Sub-Action: Twitch → Followers → Get Follow Age Info for Target. Setzt u.a. %followDate%, %followAgeDays%.
Add Random Users¶
Sub-Action: Twitch → User → Add Random Users. Setzt %randomUser0%, %randomUserName0%, %randomUserId0% etc. pro angefordertem User.
Inline Functions¶
Format: $funcName(arg1, arg2)$. Werden vor Variablen-Interpolation aufgelöst.
| Funktion | Was sie tut | Beispiel |
|---|---|---|
$lower(text)$ |
Klein | $lower(%user%)$ → azazelitv |
$upper(text)$ |
GROSS | $upper(%user%)$ → AZAZELITV |
$proper(text)$ |
Erster Buchstabe groß | $proper(%input0%)$ |
$length(text)$ |
Zeichenanzahl | $length(%input0%)$ |
$replace(text, search, replace)$ |
Ersetzen | $replace(%input0%, @, )$ |
$add(a, b)$ |
Addition | $add(%counter%, 1)$ |
$sub(a, b)$ |
Subtraktion | |
$mul(a, b)$ |
Multiplikation | |
$div(a, b)$ |
Division | |
$mod(a, b)$ |
Modulo | |
$random(min, max)$ |
Zufallszahl inline | $random(1, 100)$ |
$now()$ |
Aktueller Zeitstempel | |
$date(format)$ |
Formatiertes Datum | $date(yyyy-MM-dd)$ |
Funktionen können verschachtelt werden: $upper($lower(%input0%))$.
@-Zeichen vor Usernamen entfernen¶
User tippt !iq @Bob. %input0% enthält @Bob. Für Get User Info for Target brauchst du den Namen OHNE @.
Lösung: $replace(%input0%, @, )$ als Target-Input.
Alternativ: Set Argument Sub-Action mit $replace(%input0%, @, )$ → Variable targetLogin setzen → diese dann verwenden.
Fallback wenn Input leer¶
Wenn User !iq ohne Target tippt ist %input0% leer und Get User Info for Target schlägt fehl.
Lösung mit Set Argument (siehe patterns/07-set-argument-fallback.md):
- If/Else prüfen:
%input0%Is Null or Empty - Then-Branch: Set Argument
targetLogin=%userName%(Sender) - Else-Branch: Set Argument
targetLogin=$replace(%input0%, @, )$ - Danach: Get User Info for Target mit User Login =
%targetLogin%
Globale Variablen (~name~)¶
Globals leben außerhalb der Action und überleben Restarts (wenn Persisted=true). Gesetzt mit Global (Set) Sub-Action, gelesen mit Global (Get) (die liest in ein lokales Argument).
Schreibweise im Text-Feld: ~lastClipUrl~. Vorsicht: in den Sub-Action-Feldern "Variable Name" gibst du NUR den Namen ohne Tilden ein. Tilden nur wenn du den Wert in einem TEXT-Feld interpolierst.
Beispiel im Send Message: Letzter Clip: ~lastClipUrl~.
Details: Globals Pattern.
Wichtige Falle¶
Argumente sind case-sensitive. %userName% ist nicht das gleiche wie %username%. Wenn was nicht funktioniert → Schreibweise prüfen.
Im UI siehst du übrigens beim Sub-Action-Edit-Dialog meistens einen { } Button neben Textfeldern — der öffnet einen Picker mit allen aktuell bekannten Argumenten. Saubererer Weg als Tippen.