Zum Inhalt springen
  • Dunkel
  • Hell
  • System

!mood: Random Expression aus Pool

!mood

Fortgeschritten

!face !randomface

Zieht eine zufällige Expression aus einem 8er-Pool. Verhindert per Persisted Global dass die gleiche Expression zwei Mal hintereinander kommt.

Steps
5
Cooldown
1 min/User
Cooldown
0sglobal
Zugriff
Public

Der „Pool-Pattern“-Klassiker: perfekt um Repetitivität bei häufig genutzten Commands zu vermeiden. Bei 8 Expressions und Anti-Repeat-Guard sieht der Stream bei jedem Aufruf frisch aus. Pattern setzt Globale Variable %lastExpression% Persisted Global mit dem Namen der zuletzt aktivierten Expression: sorgt für das Anti-Repeat. Variablen-Doku .

Global Get. Letzte Expression

Core Globals Global (Get)

Liest die zuletzt aktivierte Expression um sie aus dem Random-Pool auszuschließen.

Global Name lastExpression
Persisted aktiv
Variable Name lastExpr
Default Value none

Group [Random] · VTS Expression Pool

8 Sub-Actions in einer Group, Group ist auf Random gesetzt (Rechtsklick auf Group → Random). Streamer.bot wählt zufällig genau eine aus. Anti-Repeat per If/Else direkt in jeder Sub-Action. Siehe Pattern-Doku.

Group-Name VTS Expression Pool
Group-Modus Random (Checkmark gesetzt)
Sub-Actions in Group 8 × Integrations > VTube Studio > Set Expression State

Innerhalb von Group: VTS Expression Pool liegen 8 sub-Actions: pro Expression eine, jede mit gleichem 3-Schritt-Pattern:

Sub-Action in GroupSchritte
[Mood] Happy1. If/Else %lastExpr% == "happy" → Re-Roll (siehe unten) · 2. Set Expression happy.exp3.json = Enabled (Fade 400 ms) · 3. Global Set lastExpression = "happy"
[Mood] Sadanalog mit sad.exp3.json
[Mood] Angryanalog mit angry.exp3.json
[Mood] Surprisedanalog mit surprised.exp3.json
[Mood] Confusedanalog mit confused.exp3.json
[Mood] Winkanalog mit wink.exp3.json
[Mood] Loveanalog mit love.exp3.json
[Mood] Sleepyanalog mit sleepy.exp3.json

Delay. Anzeigedauer

Core Delay Delay
Duration 8000 ms

Set Expression State. Reset

Integrations VTube Studio Set Expression State

Disabled die zuletzt gesetzte Expression nach Anzeigedauer. lastExpression hält den Namen aus Sub-Action 2 fest.

Expression %lastExpression%.exp3.json
State Disabled
Fade Time 400 ms

Send Message: Optional

Twitch Chat Send Message to Channel
Message 🎭 @%user% triggered Mood: %lastExpression%
AzazeliBot: 🎭 @Bob triggered Mood: surprised
So sieht's im Chat aus
  1. 1 Global Get: lastExpression → lastExpr (Persisted, default "none")
  2. 2 Group [Random] · VTS Expression Pool (8 Sub-Actions, eine wird gezogen)
    1. 2a [Mood] Happy: If/Else lastExpr == "happy" → Re-Roll, sonst Set Expression + Global Set lastExpression
    2. 2b [Mood] Sad: gleiches Pattern mit sad.exp3.json
    3. 2c ... (weitere 6 analog)
  3. 3 Delay 8000 ms (Anzeigedauer)
  4. 4 Set Expression State: %lastExpression%.exp3.json = Disabled (Fade 400 ms)
  5. 5 Send Message: "🎭 @%user% triggered Mood: %lastExpression%"

Jede Expression-Sub-Action in VTS Expression Pool startet mit:

  1. 1 If/Else: %lastExpr% Equals "happy"
    1. Then 1a Run Action: [Cmd] !mood (Re-Roll der Random-Wahl)
    2. Then 1b Break (Stop weitere Sub-Actions)
  2. 2 Set Expression State: happy.exp3.json = Enabled (Fade 400 ms)
  3. 3 Global Set: lastExpression = "happy" (Persisted)
FeldWert
Name!mood. Random Expression
GroupAzaCraft VTube
Commands!mood, !face, !randomface
SourcesTwitch Message
Global Cooldown0
User Cooldown60
Permissions(leer = alle) oder Allow: Subscribers
ChatResultat
!mood (lastExpression = none)Random aus 8 Pool, z. B. „surprised“
!mood direkt nochmal (lastExpression = surprised)Random aus 7 verbleibenden, z. B. „happy“
!face (60 s später, lastExpression = happy)Random aus 7, NICHT „happy“
!mood (innerhalb 60 s nochmal)Cooldown blockt

Eigene System-Action [Sys] Mood Reset mit Trigger Twitch > Stream > Stream Online:

Global Set: lastExpression = "none" (Persisted)
For each expression:
Set Expression State: <name>.exp3.json = Disabled

Verhindert dass das letzte Mood vom Vorstream noch im Modell hängt.

Channel-Point-Reward Random Mood mit gleichem Group-Random-Pattern. Höherer Cooldown (300 s) + längere Anzeigedauer (15 s). User reagieren mehr drauf wenn’s was kostet.

  • Group-Sub-Action fehlt: wenn du eine der 8 in der Group vergisst, runt Random gelegentlich „nichts“. Group-Inhalt regelmäßig prüfen
  • Filename-Tippfehler: Set Expression State gibt %success% = false, keine Wirkung. Im Group-Action-Set durchgehen
  • lastExpression wird in der Group gesetzt, aber außerhalb gelesen: Persisted-Globals sind action-übergreifend, das funktioniert. ABER: zwischen Group-Sub-Action und Sub-Action 4 (Reset) liegt ein Delay: wenn ein zweiter !mood während des Delays kommt, überschreibt er lastExpression. Sub-Action 4 disabled dann die falsche Expression. Workaround: in der Group-Sub-Action lokales Argument setzen, in Sub-Action 4 das Argument nutzen statt Global lesen
  • Sub-Action 4 nutzt %lastExpression% statt local: bewusst gewählt damit der Re-Roll-Fall (gleiche Expression noch aktiv) sauber funktioniert. Akzeptiertes Risiko bei Cooldown ≥ Anzeigedauer (60 s > 8 s)
  • Pool zu klein: bei 3 Expressions wirkt Anti-Repeat zu deterministisch (immer abwechselnd). Mindestens 5+ Pool-Optionen empfehlenswert
  • Mood-History-Tracking: Persisted Global moodHistory als Komma-Liste der letzten 3 Expressions. Random-Pool exkludiert alle 3 statt nur die letzte
  • Tier-Sub-Pool: Subs bekommen Zugang zu Pool von 12 statt 8 (Premium-Expressions). If/Else auf %isSubscribed% vor dem Random
  • Themen-Pools: !cute zieht aus happy/wink/love, !angry zieht aus angry/confused/surprised. Pro Theme eigene Group
  • VTube-Hotkey statt Expression: wenn die Animation ein Pulse statt Toggle ist, hotkey-on-event als alternative Group-Sub-Action