!delcommand Fortgeschritten !delcom · !cmddel · !removecommand
Löscht den Persisted Global dyn_<name> und entfernt den Namen aus dem Command-Index.
Input %input0% Operation Is Null or Empty
1a Then Send Message to Channel Twitch › Chat › Send Message to Channel Message @%user% nutze !delcommand !name
Stoppt die laufende Action. Alle folgenden Sub-Actions in derselben Action werden übersprungen.
2 Set Argument: Command-Name normalisieren Core › Arguments › Set Argument Variable Name delCmdName Value $lower($replace(%input0%, !, ))$
Input %delCmdName% Operation Is Null or Empty
3a Then Send Message to Channel Twitch › Chat › Send Message to Channel Message @%user% Command-Name fehlt. Beispiel: !delcommand !regeln
Stoppt die laufende Action. Alle folgenden Sub-Actions in derselben Action werden übersprungen.
4 Get Global. Existiert? Core › Globals › Global (Get) Global Name $concat("dyn_", %delCmdName%)$ Variable Name existingCmd Persisted aktiv
Input %existingCmd% Operation Is Null or Empty
5a Then Send Message to Channel Twitch › Chat › Send Message to Channel Message @%user% !%delCmdName% existiert nicht.
Stoppt die laufende Action. Alle folgenden Sub-Actions in derselben Action werden übersprungen.
6 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
7 Get Global. Aktueller Index Core › Globals › Global (Get) Global Name dyn_dynCommandsIndex Variable Name cmdIndex Persisted aktiv
8 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%, )$
9 Set Global. Index speichern Core › Globals › Global (Set) Global Name dyn_dynCommandsIndex Value %updatedIndex% Source Global Persisted aktiv
10 Send Message: Bestätigung Twitch › Chat › Send Message to Channel Message 🗑️ @%user% !%delCmdName% gelöscht.
A AzaBot : 🗑️ @ModUser !regeln gelöscht.
↑ So sieht's im Chat aus
1 If/Else: %input0% Is Null or Empty
Then 1a Send Message: Hilfe 2 Set Argument: delCmdName = $lower($replace(%input0%, !, ))$ 3 If/Else: %delCmdName% Is Null or Empty
Then 3a Send Message: Name fehlt 4 Get Global (Persisted): dyn_<name> → existingCmd 5 If/Else: %existingCmd% Is Null or Empty
Then 5a Send Message: Nicht vorhanden 6 Unset Global (Persisted): dyn_<name> 7 Get Global (Persisted): dyn_dynCommandsIndex → cmdIndex 8 Set Argument: updatedIndex = $replace(...) 9 Set Global (Persisted): dyn_dynCommandsIndex = %updatedIndex% 10 Send Message: 🗑️ Bestätigung
Feld Wert Name !delcommandCommands !delcommand!delcom!cmddel!removecommandUser Cooldown 0 Grant Type AllowGroups Moderators
Chat Resultat !delcommand !regelndyn_regeln weg, Index aktualisiert!delcommand regelnAkzeptiert: $replace entfernt fehlendes ! !delcommand !nichtdaFehler: existiert nicht !delcommandFehler: Hilfe-Text
Schritt 8 verschachtelt drei $replace(...)$:
Ersetzungs-Pass Was wird gematcht Beispiel 1. (innerstes) ,delCmdName: wenn der Name nicht-erstes Element istregeln,setup,wasser → ,wasser löschen → regeln,setup2. (mittleres) delCmdName,: wenn der Name erstes Element istwasser,regeln,setup → wasser, löschen → regeln,setup3. (äußerstes) delCmdName: wenn er der einzige Eintrag istwasser → wasser 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).
Import-String folgt
Die Action ist 1:1 nach Anleitung oben nachbaubar.