Zum Inhalt springen
  • Dunkel
  • Hell
  • System

Dynamic-Commands: Setup

Dynamic-Commands sind Commands, die nicht in Streamer.bot angelegt sind, sondern als Persisted Global gespeichert werden. Mods können sie per Chat anlegen, ändern und löschen: du musst nie wieder das Streamer.bot-Fenster öffnen, nur um einen neuen Spruch-Command zu bauen.

WasWo gespeichertWer darf
Statische Commands (!discord, !socials)In Streamer.bot als ActionDu, im Editor
Dynamische Commands (!regeln, !setup, !tipp)Als Persisted Global mit Prefix dyn_Mods per Chat

Der Grund für die Trennung: Komplexe Commands mit Sub-Actions (!so, !followage, !quote) gehören in Streamer.bot. Simple Text-Commands („was ist deine Settings?“) können Mods selbst pflegen.

Global-NameInhaltSource
dyn_regeln„Sei nett. Kein Spoiler. Viel Spaß.“Global, Persisted
dyn_setup„Siehe !pc, !mouse, !keyboard, !chair.“Global, Persisted
dyn_dynCommandsIndexregeln,setup,tipp,wasserGlobal, Persisted

Der Prefix dyn_ ist Pflicht: sonst kannst du eigene und SB-Built-in-Globals nicht unterscheiden. Der Index dyn_dynCommandsIndex ist eine kommagetrennte Liste aller Command-Namen ohne ! und ohne dyn_-Prefix. Wird beim Add/Edit/Del mitgepflegt und für !commands gelesen.

[Cmd] !addcommand → Persisted Global setzen + Index updaten
[Cmd] !editcommand → Persisted Global überschreiben (mit Existenz-Check)
[Cmd] !delcommand → Persisted Global löschen + Index updaten
[Cmd] !commands → Index ausgeben
[Listener] dyn-router → Auf jede Chat-Message reagieren, wenn !word → dyn_word ausgeben

Die ersten vier sind Mod-Commands und werden in den folgenden Seiten erklärt. Der Listener ist der Kern: ohne ihn machen die Globals nichts. Er kommt jetzt.

Trigger: Twitch → Chat Message (jede Nachricht, nicht Command-spezifisch).

If/Else: Startet mit !

Core Logic If/Else

Frühe Abkürzung: 99% aller Chat-Messages sind keine Commands.

Input %messageStripped%
Operation Starts With
Comparison !
Else

Break

Core Logic Break

Wenn kein !-Prefix, ist es keine Command-Anfrage.

Set Argument: Erste Wort als Command-Name extrahieren

Core Arguments Set Argument

messageStripped ohne ! und ohne alles ab dem ersten Leerzeichen.

Variable Name dynName
Value $lower($substring($replace(%messageStripped%, !, ), 0, $indexOf($concat($replace(%messageStripped%, !, ), " "), " "))$)$

Get Global: dyn_<name>

Core Globals Global (Get)

Lädt den Response-Text. Wenn Global nicht existiert, ist dynResponse leer.

Global Name $concat("dyn_", %dynName%)$
Variable Name dynResponse
Persisted aktiv

If/Else: Kein dynamischer Command

Core Logic If/Else
Input %dynResponse%
Operation Is Null or Empty
Then

Break

Core Logic Break

Send Message to Channel

Twitch Chat Send Message to Channel

Der dynamische Response: kann %user%, %targetUser%, %channel% enthalten.

Message %dynResponse%
FeldWert
Action-Name[Listener] dyn-router
TriggerTwitch → Chat Message (nicht „Command Triggered“!)
GroupEigene Group Listeners oder direkt in Misc
Enabledaktiv

Da Send Message Argument-Parsing macht, kannst du SB-Variablen direkt in den gespeicherten Text einbauen:

Im Persisted Global gespeichertAusgabe im Chat
Hi @%user%, willkommen!Hi @AzaCraft, willkommen!
Stream läuft seit %streamUptime%Stream läuft seit 02:14:33
@%targetUser% du bist toll!wenn jemand !nice @bob schreibt → @bob du bist toll!

Mods müssen also nicht extra Templating lernen: die normalen SB-Variablen funktionieren überall.

  • Collision mit statischen Commands: wenn du !regeln als statischen Command angelegt hast und Mods !addcommand !regeln ... ausführen, feuern beide. Der statische Command via „Command Triggered“, der dynamische via Listener. Mod-Process-Reihenfolge ist undefiniert. Lösung: in [Listener] dyn-router einen If/Else einbauen, der bekannte statische Command-Namen abfängt und Break setzt.
  • Performance: der Listener läuft auf jeder Chat-Message. Das ist okay (SB packt locker tausende Messages pro Sekunde), aber halte die Sub-Actions schlank: kein C# Execute mit Heavy Logic.
  • Casing: Schritt 2 macht $lower(...)$ damit !REGELN und !Regeln denselben Global treffen. Das musst du beim Anlegen (!addcommand) auch tun: sonst landet der Global als dyn_REGELN und der Listener findet ihn nicht.
  • Sonderzeichen im Command-Namen: !discord-link würde als dyn_discord-link gespeichert. Globals erlauben Bindestriche, aber Mods werden eher Underscore tippen wollen. Du kannst in Schritt 2 noch ein $replace(..., -, _)$ einbauen, wenn du das vereinheitlichen willst.
  • Index pflegen: der dyn_dynCommandsIndex ist optional, aber !commands braucht ihn. Wenn du ihn nicht pflegst, fällt nur die Listing-Funktion weg.

Add/Edit/Del haben standardmäßig Allow + Moderators als Permission. User können nur lesen (per Chat triggern), nicht schreiben. Wenn du VIPs oder Subs auch schreiben lassen willst, ergänze die Groups im Command-Trigger: siehe Permissions-Setup.

PageWofür
!addcommandNeuen dynamischen Command anlegen
!editcommandBestehenden überschreiben
!delcommandLöschen
!commandsListe aller dynamischen Commands