Argumente lesen mit TryGetArg
Jeder Trigger und jede vorherige Sub-Action stellt deiner Action Argumente bereit. Im No-Code-Modus kennst du sie als %userName%, %rawInput% oder %input0%. In C# liest du genau dieselben Werte aus, sicher und typisiert mit CPH.TryGetArg.
Das ist die Brücke zwischen Trigger und deiner Logik: ohne gelesene Argumente weiß dein Code nicht, wer den Command getippt hat oder was dahinter stand.
Doku: docs.streamer.bot · Arguments in C#
TryGetArg
Abschnitt betitelt „TryGetArg“CPH.TryGetArg versucht, ein Argument zu holen, und gibt true zurück, wenn es vorhanden war. Der eigentliche Wert landet über das out-Schlüsselwort in einer Variable, die direkt in der Signatur deklariert wird.
public class CPHInline { public bool Execute() { // Liefert true, wenn das Argument "rawInput" existiert if (CPH.TryGetArg("rawInput", out string rawInput)) { CPH.LogInfo($"rawInput = {rawInput}"); } else { CPH.LogWarn("Kein rawInput vorhanden"); } return true; }}Der if-Check ist der Kern: Du fragst erst, ob das Argument da ist, und arbeitest nur dann mit dem Wert. So vermeidest du leere oder null-Werte mitten in der Logik.
Generische Variante für Typen
Abschnitt betitelt „Generische Variante für Typen“Argumente kommen als Text an. Brauchst du eine Zahl, einen Bool oder einen anderen Typ, nimm die generische Form CPH.TryGetArg<int>(...). Streamer.bot konvertiert dann direkt in den gewünschten Typ.
public class CPHInline { public bool Execute() { // Bits-Betrag direkt als int lesen if (CPH.TryGetArg<int>("bits", out int bits)) { if (bits >= 100) { CPH.SendMessage($"Danke für {bits} Bits!"); } } return true; }}So sparst du dir das manuelle int.Parse und musst keinen Konvertierungsfehler abfangen. Schlägt die Umwandlung fehl, liefert TryGetArg einfach false.
Häufige Argumente
Abschnitt betitelt „Häufige Argumente“Die Namen sind identisch mit den %arg%-Platzhaltern aus dem No-Code-Modus. Du musst also nichts neu lernen, nur die Schreibweise wechselt von %name% zu "name".
| Argument | Bedeutung |
|---|---|
| rawInput | Kompletter Text hinter dem Command, ungefiltert |
| input0 | Erstes Wort nach dem Command |
| input1 | Zweites Wort nach dem Command |
| userName | Login-Name des auslösenden Users (kleingeschrieben) |
| user | Anzeigename des auslösenden Users (mit Groß/Kleinschreibung) |
| userId | Eindeutige Twitch-ID des Users |
| userType | Rolle: broadcaster, moderator, vip, subscriber oder leer |
| message | Voller Chat-Text inklusive Command |
| eventSource | Quelle des Triggers, z.B. Twitch-Command oder Reward |
Weitere existieren je nach Trigger, etwa broadcastUserName für deinen eigenen Kanal. Welche genau ankommen, hängt vom Event ab.
args-Dictionary (Low-Level)
Abschnitt betitelt „args-Dictionary (Low-Level)“Es gibt einen zweiten Weg: das args-Dictionary, ein Dictionary<string, object>, das du direkt indizieren kannst.
// Direkter Zugriff, NICHT empfohlenstring raw = args["rawInput"].ToString();Einige ältere Beispiele auf dieser Seite nutzen noch args[...] direkt, weil das früher der gängige Weg war. Für neuen Code ist TryGetArg der sichere Standard.
Beispiel: Target aus !command @user lesen
Abschnitt betitelt „Beispiel: Target aus !command @user lesen“Ein häufiges Muster: Ein User schreibt !hug @bob und du willst den Namen bob weiterverwenden. Du liest rawInput, entfernst das @ und schreibst den sauberen Namen mit CPH.SetArgument zurück, damit Folge-Sub-Actions ihn als %target% nutzen können.
public class CPHInline { public bool Execute() { if (!CPH.TryGetArg("rawInput", out string rawInput)) { CPH.SendMessage("Bitte einen User angeben, z.B. !hug @bob"); return true; }
// @ entfernen und Leerzeichen kappen string target = rawInput.Replace("@", "").Trim();
if (string.IsNullOrEmpty(target)) { CPH.SendMessage("Bitte einen User angeben, z.B. !hug @bob"); return true; }
// Sauberen Namen für Folge-Sub-Actions verfügbar machen CPH.SetArgument("target", target); return true; }}Nach dem CPH.SetArgument("target", target) steht der Wert in nachfolgenden Sub-Actions als %target% bereit. Mehr dazu auf Argumente zurückgeben.
Häufige Fallen
Abschnitt betitelt „Häufige Fallen“- Tippfehler im Argument-Namen:
TryGetArgwirft keinen Fehler, sondern liefert nurfalseund eine leere Variable. Aus"usrName"statt"userName"wird also stillschweigend nichts. Prüfe den Rückgabewert oder logge mitCPH.LogWarn, wenn etwas fehlt. - Typ-Mismatch beim generischen TryGetArg:
CPH.TryGetArg<int>("rawInput", out int n)schlägt fehl, wennrawInputText wiehalloenthält. Die Methode liefert dannfalse. Lies im Zweifel alsstringund konvertiere bewusst. args[...]auf einen fehlenden Key: wirft eine Exception und kann die Instanz blockieren. ImmerCPH.TryGetArgbevorzugen statt direkt zu indizieren.