Zum Inhalt springen
  • Dunkel
  • Hell
  • System

!delcommand

If/Else: Kein Arg?

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

Send Message to Channel

Twitch Chat Send Message to Channel
Message @%user% nutze !delcommand !name
Then

Break

Core Logic Break

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

Set Argument: Command-Name normalisieren

Core Arguments Set Argument
Variable Name delCmdName
Value $lower($replace(%input0%, !, ))$

If/Else: Name leer?

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

Send Message to Channel

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

Break

Core Logic Break

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

Get Global. Existiert?

Core Globals Global (Get)
Global Name $concat("dyn_", %delCmdName%)$
Variable Name existingCmd
Persisted aktiv

If/Else: Nicht vorhanden

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

Send Message to Channel

Twitch Chat Send Message to Channel
Message @%user% !%delCmdName% existiert nicht.
Then

Break

Core Logic Break

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

Unset Global. Command löschen

Core Globals Global (Set)

Unset entfernt den Global komplett: beim nächsten Get ist er null.

Global Name $concat("dyn_", %delCmdName%)$
Source Global
Persisted aktiv

Get Global. Aktueller Index

Core Globals Global (Get)
Global Name dyn_dynCommandsIndex
Variable Name cmdIndex
Persisted aktiv

Set Argument: Namen aus Index entfernen

Core Arguments Set Argument

$replace ersetzt alle Vorkommen. Trailing-Komma wird im Folgeschritt bereinigt.

Variable Name updatedIndex
Value $replace($replace($replace(%cmdIndex%, $concat(",", %delCmdName%), ), $concat(%delCmdName%, ","), ), %delCmdName%, )$

Set Global. Index speichern

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

Send Message: Bestätigung

Twitch Chat Send Message to Channel
Message 🗑️ @%user% !%delCmdName% gelöscht.
AzaBot: 🗑️ @ModUser !regeln gelöscht.
So sieht's im Chat aus
  1. 1 If/Else: %input0% Is Null or Empty
    1. Then 1a Send Message: Hilfe
    2. Then 1b Break
  2. 2 Set Argument: delCmdName = $lower($replace(%input0%, !, ))$
  3. 3 If/Else: %delCmdName% Is Null or Empty
    1. Then 3a Send Message: Name fehlt
    2. Then 3b Break
  4. 4 Get Global (Persisted): dyn_<name> → existingCmd
  5. 5 If/Else: %existingCmd% Is Null or Empty
    1. Then 5a Send Message: Nicht vorhanden
    2. Then 5b Break
  6. 6 Unset Global (Persisted): dyn_<name>
  7. 7 Get Global (Persisted): dyn_dynCommandsIndex → cmdIndex
  8. 8 Set Argument: updatedIndex = $replace(...)
  9. 9 Set Global (Persisted): dyn_dynCommandsIndex = %updatedIndex%
  10. 10 Send Message: 🗑️ Bestätigung
FeldWert
Name!delcommand
Commands!delcommand
!delcom
!cmddel
!removecommand
User Cooldown0
Grant TypeAllow
GroupsModerators
ChatResultat
!delcommand !regelndyn_regeln weg, Index aktualisiert
!delcommand regelnAkzeptiert: $replace entfernt fehlendes !
!delcommand !nichtdaFehler: existiert nicht
!delcommandFehler: Hilfe-Text

Schritt 8 verschachtelt drei $replace(...)$:

Ersetzungs-PassWas wird gematchtBeispiel
1. (innerstes),delCmdName: wenn der Name nicht-erstes Element istregeln,setup,wasser,wasser löschen → regeln,setup
2. (mittleres)delCmdName,: wenn der Name erstes Element istwasser,regeln,setupwasser, löschen → regeln,setup
3. (äußerstes)delCmdName: wenn er der einzige Eintrag istwasserwasser löschen → “ (leer)

Die Reihenfolge ist wichtig: wenn Pass 3 zuerst liefe, würde er aus wasser,regeln das Substring wasser rausschneiden und übrig bliebe ,regeln mit Leading-Komma.

  • Tippfehler löscht falschen Command: kein Confirmation-Dialog. Wer !delcommand !wasser statt !walzer tippt, hat den falschen weg. Daher Audit-Log empfohlen (siehe unten).
  • Index-Mehrfach-Einträge: sollten nicht vorkommen, aber wenn doch (manuell editiert), entfernt $replace alle Vorkommen.
  • Race-Condition: wie bei add: zwei gleichzeitige !delcommand können Index überschreiben. In der Praxis kein Problem; im schlimmsten Fall steht ein Name noch im Index, obwohl der Global weg ist: der Listener gibt dann nichts aus.
  • Unset Global vs Set Global = empty: Unset entfernt den Eintrag aus der LiteDB. Set-zu-leer würde den Eintrag mit Empty-String behalten. Listener-Check ist Is Null or Empty: beide funktionieren, aber Unset ist sauberer.
  • Audit-Log via Discord: vor Schritt 6 eine Discord-Webhook-Notification senden („@ModUser löscht !regeln, letzter Inhalt: …“). Siehe Discord-Webhook-Setup.
  • Soft-Delete mit Undo: statt Unset, den Global nach dyn_trash_<name> umbenennen. Ein !undelete <name> könnte ihn wiederherstellen.
  • Bulk-Delete: !delcommand all löscht alle dynamischen: gefährlich, also extra Confirm-Step (!delcommand all confirm).