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 @bobz.B. anbob)
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:
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
Persistedlassen - Set ohne Get → Wert ist gespeichert, aber in der Action nicht als
%arg%verfügbar. Get nachschalten
Verwendung in Commands¶
- commands/06-shrimp-per-user-counter.md — User (redeemer) Counter