Zum Inhalt

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):

  1. If/Else prüfen: %input0% Is Null or Empty
  2. Then-Branch: Set Argument targetLogin = %userName% (Sender)
  3. Else-Branch: Set Argument targetLogin = $replace(%input0%, @, )$
  4. 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.