Zum Inhalt springen
  • Dunkel
  • Hell
  • System

!addcommand

If/Else: Keine Args?

Core Logic If/Else

Mindestens 2 Args nötig: !commandname + Text.

Input %rawInput%
Operation Is Null or Empty
Then

Send Message to Channel: Hilfe

Twitch Chat Send Message to Channel
Message @%user% nutze !addcommand !name <response-text>
Then

Break

Core Logic Break

Stoppt die laufende Action. Alle folgenden Sub-Actions in derselben Action werden übersprungen.

Set Argument: Command-Name extrahieren

Core Arguments Set Argument

Erstes Wort aus rawInput, ohne ! und lowercase.

Variable Name newCmdName
Value $lower($replace(%input0%, !, ))$

If/Else: Name leer?

Core Logic If/Else

Wenn der User nur `!addcommand` ohne ! geschrieben hat.

Input %newCmdName%
Operation Is Null or Empty
Then

Send Message to Channel

Twitch Chat Send Message to Channel
Message @%user% Command-Name fehlt. Beispiel: !addcommand !regeln Sei nett.
Then

Break

Core Logic Break

Stoppt die laufende Action. Alle folgenden Sub-Actions in derselben Action werden übersprungen.

Set Argument: Response-Text

Core Arguments Set Argument

Alles ab dem zweiten Wort. $args1$ ist der String ab Argument-Index 1.

Variable Name newCmdResponse
Value $args1$

If/Else: Response leer?

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

Send Message to Channel

Twitch Chat Send Message to Channel
Message @%user% Response-Text fehlt. Beispiel: !addcommand !regeln Sei nett.
Then

Break

Core Logic Break

Stoppt die laufende Action. Alle folgenden Sub-Actions in derselben Action werden übersprungen.

Get Global. Existiert schon?

Core Globals Global (Get)

Wenn der Global bereits existiert, ist das ein Edit. User soll !editcommand nutzen.

Global Name $concat("dyn_", %newCmdName%)$
Variable Name existingCmd
Persisted aktiv

If/Else: Schon vorhanden

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

Send Message to Channel

Twitch Chat Send Message to Channel
Message @%user% !%newCmdName% existiert schon: nutze !editcommand zum Ändern.
Then

Break

Core Logic Break

Stoppt die laufende Action. Alle folgenden Sub-Actions in derselben Action werden übersprungen.

Set Global. Persisted Response speichern

Core Globals Global (Set)

Der Listener wird beim nächsten !newCmdName diesen Wert ausgeben.

Global Name $concat("dyn_", %newCmdName%)$
Value %newCmdResponse%
Source Global
Persisted aktiv

Get Global. Aktueller Index

Core Globals Global (Get)

Lädt die kommagetrennte Liste: kann leer sein beim ersten Add.

Global Name dyn_dynCommandsIndex
Variable Name cmdIndex
Persisted aktiv

Set Argument: Neuen Index bauen

Core Arguments Set Argument

Wenn Index leer: nur neuer Name. Sonst: alter Index + Komma + neuer Name.

Variable Name newIndex
Value $if(%cmdIndex% == "", %newCmdName%, $concat(%cmdIndex%, ",", %newCmdName%)$)$

Set Global. Index speichern + Confirm

Core Globals Global (Set)
Global Name dyn_dynCommandsIndex
Value %newIndex%
Source Global
Persisted aktiv

Send Message: Bestätigung

Twitch Chat Send Message to Channel
Message ✅ @%user% !%newCmdName% angelegt.
AzaBot: ✅ @ModUser !regeln angelegt.
So sieht's im Chat aus
  1. 1 If/Else: %rawInput% Is Null or Empty
    1. Then 1a Send Message: Hilfe
    2. Then 1b Break
  2. 2 Set Argument: newCmdName = $lower($replace(%input0%, !, ))$
  3. 3 If/Else: %newCmdName% Is Null or Empty
    1. Then 3a Send Message: Name fehlt
    2. Then 3b Break
  4. 4 Set Argument: newCmdResponse = $args1$
  5. 5 If/Else: %newCmdResponse% Is Null or Empty
    1. Then 5a Send Message: Response fehlt
    2. Then 5b Break
  6. 6 Get Global (Persisted): dyn_<name> → existingCmd
  7. 7 If/Else: %existingCmd% Is Not Null or Empty
    1. Then 7a Send Message: Existiert schon
    2. Then 7b Break
  8. 8 Set Global (Persisted): dyn_<name> = %newCmdResponse%
  9. 9 Get Global (Persisted): dyn_dynCommandsIndex → cmdIndex
  10. 10 Set Argument: newIndex = $if(...)
  11. 11 Set Global (Persisted): dyn_dynCommandsIndex = %newIndex%
  12. 12 Send Message: ✅ Bestätigung
FeldWert
Name!addcommand
Commands!addcommand
!addcom
!cmdadd
User Cooldown0
Grant TypeAllow
GroupsModerators
ChatResultat
!addcommand !regeln Sei nett. Kein Spoiler.Global dyn_regeln = Sei nett. Kein Spoiler.: ab sofort triggerbar mit !regeln
!addcommand !wasser Trink @%user% ein Glas Wasser!Mit Variable im Response: !wasser gibt User-spezifisch aus
!addcommand !setupFehler: Response-Text fehlt
!addcommand regeln Sei nettWird trotzdem akzeptiert: $replace(%input0%, !, )$ ignoriert fehlendes !
!addcommand !regeln neuer text (existiert schon)Fehler-Hinweis auf !editcommand
  • Args-Parsing: $args1$ liefert alle Args ab Index 1 inkl. Leerzeichen. Wenn dein Response Anführungszeichen enthält (!addcommand !test "hi"), kommen die Quotes mit rein.
  • Race-Condition beim Index: wenn zwei Mods gleichzeitig !addcommand triggern, könnten Schritt 9 → 10 → 11 sich überschneiden und ein Eintrag fehlt im Index. Praktisch fast nie ein Problem; Worst-Case einmal !commands mit fehlendem Eintrag → kein Datenverlust, der Command selbst existiert.
  • Casing-Konsistenz: Schritt 2 macht $lower(...)$. !ADDCOMMAND !TEST hi legt dyn_test an, was zum Listener-Lookup (auch lowercase) passt.
  • Maximale Länge: Twitch erlaubt 500 Zeichen pro Chat-Message. Da !addcommand !name <response> deinen 500-Char-Slot teilt, sind in der Praxis ~470 Zeichen Response möglich.
  • Reserved Names: wenn ein Mod !addcommand !so neuer-text macht und du !so als statischen Command hast, feuern beide. Siehe Setup → Edge-Cases.
  • Backup-Export: eine Action die alle dyn_*-Globals via C# in ein JSON exportiert. Damit kannst du Mod-Commands sichern, wenn du Streamer.bot neu aufsetzt.
  • Cooldown pro dynamischem Command: ein weiterer Global dyn_cooldown_<name> mit Timestamp + Listener-Check vor dem Send Message.
  • Statistik: dyn_uses_<name> zählt mit, wie oft jeder Command getriggert wurde: dann kannst du via !commands die meistgenutzten zuerst ausgeben.