Zum Inhalt

Pattern: Globals — Werte über Sessions halten

Globals sind Variablen die außerhalb einer Action leben. Drei Scopes:

  • Global — gilt für die ganze Streamer.bot-Instanz (z.B. lastClipUrl)
  • User (redeemer) — Variable die an den User gebunden ist der die Action ausgelöst hat (Sender)
  • User (target) — Variable die an einen Target-User gebunden ist (für !iq @bob z.B. an bob)

Persisted = überlebt Restart. Non-Persisted = nur in Memory bis SB beendet wird.

Doku: - Set: https://docs.streamer.bot/api/sub-actions/core/globals/global-set - Get: https://docs.streamer.bot/api/sub-actions/core/globals/global-get

Global (Set)

Pfad: Core → Globals → Global (Set)

Feld Bedeutung
Variable Name Name der Variable. OHNE % oder ~. Beispiel: shrimpCount
Value Wert. Unterstützt %arg% und $func()$
Mode Value = überschreibt / Increment = addiert / Decrement = subtrahiert
Increment/Decrement Amount Bei Inc/Dec der Wert (default 1)
Destination Global / User (redeemer) / User (target)
Persisted Persisted (default) oder Non-Persisted

Wichtig: Set MACHT den Wert nicht direkt als Argument verfügbar. Wenn du den Wert in den nachfolgenden Sub-Actions brauchst → erst Set, dann Get.

Global (Get)

Pfad: Core → Globals → Global (Get)

Feld Bedeutung
Variable Name Welcher Global geholt werden soll. OHNE ~
Default Value Falls Global noch nicht existiert wird er mit diesem Wert angelegt
Source Global / User (redeemer) / User (target)
Persisted Persisted (gleich wie beim Set genutzt)
Variable Name (Destination) Lokales Argument in das der Wert geschrieben wird

Nach Get ist der Wert als %<Destination>% in den folgenden Sub-Actions nutzbar.

Beispiel: Per-User-Counter (Shrimp)

Use-Case: Jedes Mal wenn User !shrimp tippt zählt SB hoch und postet wie oft er es schon getan hat.

1. Global (Set)
   Variable Name:   shrimpCount
   Mode:            Increment
   Increment Amount: 1
   Destination:     User (redeemer)
   Persisted:       Persisted

2. Global (Get)
   Variable Name:        shrimpCount
   Default Value:        1
   Source:               User (redeemer)
   Persisted:            Persisted
   Variable Name (Dest): myShrimpCount

3. Send Message to Channel
   Message: @%user% du hast %myShrimpCount% mal Shrimp gerufen.

Beispiel: Letzter Clip merken (Global)

Use-Case: Nach !clip URL in Global speichern damit !lastclip sie nochmal posten kann.

1. Create Clip
2. If/Else: %createClipSuccess% Equals true
3. Global (Set)
   Variable Name: lastClipUrl
   Value:         %createClipUrl%
   Mode:          Value
   Destination:   Global
   Persisted:     Persisted
4. Send Message: "@%user% Clip: %createClipUrl%"

In !lastclip-Action dann:

1. Global (Get)
   Variable Name:        lastClipUrl
   Default Value:        (leer)
   Source:               Global
   Variable Name (Dest): lastUrl
2. If/Else: %lastUrl% Is Null or Empty
   ├─ Send Message: "Es gibt noch keinen Clip"
   └─ Break
3. Send Message: "Letzter Clip: %lastUrl%"

Variablen-Interpolation mit Tilden

Im Text-Feld einer Send Message kannst du Globals AUCH direkt mit Tilden interpolieren ohne vorher Get aufzurufen:

Letzter Clip: ~lastClipUrl~

Vorteil: kein Get-Schritt nötig. Nachteil: kein Default-Fallback, kein If/Else darauf möglich. Für reine Anzeige reicht Tilden, für Logik immer Get.

Mode Increment auf User (target)

Das ist mächtig: Counter pro Target-User in einer einzigen Sub-Action.

Use-Case: !hug @bob zählt wie oft Bob umarmt wurde.

1. Get User Info for Target (User Login = $replace(%input0%, @, )$)
2. If/Else: %addTargetResult% Equals true
3. Global (Set)
   Variable Name:    hugCount
   Mode:             Increment
   Destination:      User (target)
   Persisted:        Persisted
4. Global (Get)
   Variable Name:         hugCount
   Default Value:         1
   Source:                User (target)
   Variable Name (Dest):  hugs
5. Send Message: "@%user% gibt @%targetUser% eine Umarmung. Bisher %hugs% Umarmungen für %targetUser%."

Hinweis: Get User Info for Target MUSS vor dem User-Set/Get stehen, weil User (target) den %targetUser% Argument-Kontext braucht.

Non-Persisted Use-Case

Zum Beispiel "Rate-Limit pro Stream-Session". Nach restart ist alles weg, perfekt für In-Memory-Zähler.

Häufige Fallen

  • % oder ~ im Variable-Name-Feld → Falsch. Nur den nackten Namen
  • Destination = User (target) ohne Get User Info for Target davor%targetUser% Argument fehlt
  • Persisted-Flag vergessen → Counter nach Restart 0. Standard: auf Persisted lassen
  • Set ohne Get → Wert ist gespeichert, aber in der Action nicht als %arg% verfügbar. Get nachschalten

Verwendung in Commands