Zum Inhalt springen
  • Dunkel
  • Hell
  • System

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#

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.

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.

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".

ArgumentBedeutung
rawInputKompletter Text hinter dem Command, ungefiltert
input0Erstes Wort nach dem Command
input1Zweites Wort nach dem Command
userNameLogin-Name des auslösenden Users (kleingeschrieben)
userAnzeigename des auslösenden Users (mit Groß/Kleinschreibung)
userIdEindeutige Twitch-ID des Users
userTypeRolle: broadcaster, moderator, vip, subscriber oder leer
messageVoller Chat-Text inklusive Command
eventSourceQuelle 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.

Es gibt einen zweiten Weg: das args-Dictionary, ein Dictionary<string, object>, das du direkt indizieren kannst.

// Direkter Zugriff, NICHT empfohlen
string 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.

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.

Core C# Code Execute C# Code
  • Tippfehler im Argument-Namen: TryGetArg wirft keinen Fehler, sondern liefert nur false und eine leere Variable. Aus "usrName" statt "userName" wird also stillschweigend nichts. Prüfe den Rückgabewert oder logge mit CPH.LogWarn, wenn etwas fehlt.
  • Typ-Mismatch beim generischen TryGetArg: CPH.TryGetArg<int>("rawInput", out int n) schlägt fehl, wenn rawInput Text wie hallo enthält. Die Methode liefert dann false. Lies im Zweifel als string und konvertiere bewusst.
  • args[...] auf einen fehlenden Key: wirft eine Exception und kann die Instanz blockieren. Immer CPH.TryGetArg bevorzugen statt direkt zu indizieren.