Zum Inhalt springen
  • Dunkel
  • Hell
  • System

Variable bleibt leer

Du erwartest dass der Bot postet:

StreamerBotBot: @MaxMustermann Hi!
So sieht's im Chat aus

Aber im Chat steht stattdessen:

StreamerBotBot: @%user% Hi!
So sieht's im Chat aus

Die Variable wurde nicht aufgelöst.

Sub-Action öffnen → Message-Feld prüfen → muss exakt %user% sein, mit Prozentzeichen vor und nach dem Namen, keine Leerzeichen dazwischen. Tippfehler wie % user% oder %user % oder %User% werden nicht aufgelöst.

GeschriebenRichtigFunktioniert?
%user%Ja
%User%Nein: case-sensitive
% user%Nein: kein Whitespace
%user % Nein
%users%Nein: falscher Name
{user}Nein: falsche Syntax (SE/Streamlabs nutzt das, SB nicht)
$user$Nein. Dollar ist nur für Functions

Fix: Komplette Variable löschen, neu tippen. Im Variablen-Hover-Picker (Drei-Punkte-Button neben Eingabe-Feldern) gibt es die Liste aller verfügbaren Variablen.

Der Command Triggered-Trigger setzt automatisch Argument %user% Der Display-Name des Chat-Users der den Command getriggert hat. Variablen-Doku , Argument %message% Der komplette Chat-Text inkl. Command-Name. Variablen-Doku und ihre Geschwister. Wenn deine Action aber per Chat → Message-Trigger feuert, existieren diese Variablen nicht.

Prüfen: Action → Tab Triggers → Trigger-Typ.

Trigger%user% verfügbar?Stattdessen
Twitch → Command → Command TriggeredJa
Twitch → Chat → MessageNein%message.user% oder %username% (Spec ändert sich pro Version)
Twitch → Channel → FollowNein (%user% undefined)%followUser% / %user% (Follow-Trigger setzt eigene Vars)
Twitch → Channel → Reward RedemptionNein%userName% (Reward-Vars sind anders benannt)

Fix: Wenn du Variablen aus einem Trigger nutzen willst, musst du den Trigger erst kennen. Im Action-Editor unter Test TriggerRun → Logs-Pane zeigt unten alle aktuell gesetzten Variablen für den letzten Trigger. Das ist die zuverlässigste Quelle.

3. Variable wurde zwar gesetzt, aber später überschrieben oder gelöscht

Abschnitt betitelt „3. Variable wurde zwar gesetzt, aber später überschrieben oder gelöscht“

Beispiel: Sub-Action 1 setzt %clipUrl% via Create Clip. Sub-Action 2 ist ein If/Else, das in den Else-Branch fällt, weil %createClipSuccess% false war. Dort wird %clipUrl% aber bereits referenziert – und ist leer, weil der Create-Clip-Call gefailt ist.

Prüfen: Sub-Action-Reihenfolge durchgehen. Welche Sub-Action setzt die Variable? Wird sie davor referenziert?

Fix: Variable in der richtigen Reihenfolge setzen. Bei Bedarf Core Arguments Set Argument nutzen um einen Default-Wert zu setzen, falls eine vorherige Sub-Action gefailt ist.

Die Sub-Action Fetch URL lädt eine API-Response in %apiResponse%. Standardmäßig ist die Response der Raw-String – und Feld-Zugriffe wie %apiResponse.temperature% funktionieren nicht.

Fix: Sub-Action Fetch URL öffnen → Häkchen Parse JSON Response aktivieren. Danach sind die Felder als %apiResponse.feldname% zugänglich.

Mehr Details: Fetch-URL-Setup.

Im Action-Editor:

  1. Button Test Trigger oben rechts.
  2. Im Dialog die Test-Werte für bekannte Variablen setzen (z.B. user = TestUser).
  3. Run.
  4. Im Logs-Pane (unten) den letzten Block aufklappen: dort steht eine Liste aller Variablen mit Werten.

Diese Liste ist die einzig wahre Quelle. Wenn dort clipUrl nicht steht, kannst du es nicht nutzen – egal, was die Doku sagt.

Streamer.bot trennt:

NamespaceSyntaxBeispielPersistenz
Argument (Trigger-Kontext)%name%%user%, %input0%Per-Trigger, weg nach Action-Ende
Persisted Global~name~~totalClips~Bleibt nach SB-Restart
Non-Persisted Global~name~ (ohne Persist-Flag)~uptime~Weg nach SB-Restart
Function$function()$$random(1, 100)$Pro Call ausgewertet

Wenn du eine Persisted-Variable referenzierst die noch nie gesetzt wurde, ist der Wert "" (leer). Setze sie initial via Core Globals Global (Set) mit dem Häkchen Persisted.