Argumente zurückgeben mit SetArgument
C# muss nicht alles selbst machen. Oft ist die sauberste Lösung: nur die Rechen- oder Parse-Logik in C# erledigen und das Ergebnis an die folgenden No-Code-Sub-Actions weitergeben. Genau dafür gibt es CPH.SetArgument. Du schreibst einen Wert in ein Argument, und die nächste Send Message nutzt ihn als %name%, ganz so als hättest du eine Set Argument Sub-Action geklickt.
Das ist die Brücke zwischen C# und dem No-Code-Editor, den du schon kennst.
Core C# Code Execute C# CodeDoku: docs.streamer.bot · Execute C# Code
SetArgument
Abschnitt betitelt „SetArgument“Der Aufruf nimmt zwei Dinge: den Namen des Arguments (ohne %) und den Wert.
public class CPHInline { public bool Execute() { CPH.SetArgument("ergebnis", "Pentakill"); return true; }}Ab jetzt ist der Wert in jeder folgenden Sub-Action als %ergebnis% verfügbar. Eine Send Message direkt danach mit dem Text @%user% %ergebnis% postet also @duck Pentakill in den Chat. Du musst nichts importieren und keinen Scope wählen, das Argument lebt für den Rest dieser Action.
Muster: C# als Mini-Helper
Abschnitt betitelt „Muster: C# als Mini-Helper“Die Idee: Eine Action besteht aus genau zwei Sub-Actions. Zuerst ein kleines C#-Snippet, das nur rechnet oder auswählt und das Ergebnis per SetArgument ablegt. Danach eine ganz normale No-Code Send Message, die das Argument als Platzhalter ausgibt. Die C#-Sub-Action enthält keine Chat-Logik, die Ausgabe bleibt im vertrauten No-Code-Editor.
Beispiel: ein !hype-Command, der eine zufällige Ansage zieht.
public class CPHInline { public bool Execute() { string[] ansagen = { "GG, das war clean.", "Reset und nochmal, ihr packt das.", "Clutch incoming.", "Standing 1v3, kein Stress." };
var rng = new System.Random(); string gewaehlt = ansagen[rng.Next(ansagen.Length)];
CPH.SetArgument("hypeText", gewaehlt); return true; }}Die folgende Send Message braucht dann nur das Feld:
@%user% %hypeText%Die Auswahllogik steckt in C#, die Ausgabe formatierst du bequem im No-Code-Editor. Wenn du lieber direkt in C# in den Chat schreibst, geht das auch, siehe Chat senden.
Beispiel: input bereinigen
Abschnitt betitelt „Beispiel: input bereinigen“Ein klassischer Fall, der an Argumente lesen anknüpft: Ein Zuschauer tippt !stats @Bob und du willst den sauberen Login bob für eine API oder eine Anzeige. C# liest rawInput, entfernt das @ und macht alles klein, danach landet das Ergebnis als %targetLogin% im No-Code-Teil.
public class CPHInline { public bool Execute() { if (!CPH.TryGetArg("rawInput", out string rawInput)) { rawInput = ""; }
string targetLogin = rawInput.Replace("@", "").Trim().ToLower();
CPH.SetArgument("targetLogin", targetLogin); return true; }}In der folgenden Send Message nutzt du dann %targetLogin%, etwa @%user% Stats für %targetLogin% folgen gleich. Das Bereinigen passiert einmal in C#, ohne dass du verschachtelte $replace($lower(...))$-Funktionen in jedes Textfeld kopieren musst. Den gleichen Effekt im reinen No-Code-Weg zeigt das Set Argument Pattern.
SetArgument ist nicht auf Strings beschränkt. Du kannst auch Zahlen oder Wahrheitswerte ablegen.
public class CPHInline { public bool Execute() { CPH.SetArgument("treffer", 42); CPH.SetArgument("istClutch", true); CPH.SetArgument("ratio", 1.75); return true; }}Sobald der Wert in einem Textfeld als %treffer% oder %istClutch% auftaucht, wird er als Text interpoliert. Aus 42 wird also der String 42 und aus true der String true. Wenn ein folgendes If/Else die Bedingung %treffer% Greater Than 10 prüft, erkennt Streamer.bot die Zahl trotzdem korrekt, weil das No-Code-If/Else seine eigene Typ-Erkennung hat.
Häufige Fallen
Abschnitt betitelt „Häufige Fallen“- Name passt nicht zum Platzhalter: Du setzt
CPH.SetArgument("ergebnis", ...), schreibst im Textfeld aber%result%. Der Platzhalter bleibt dann leer. Argument-Name und%name%müssen exakt gleich heißen, Groß- und Kleinschreibung inklusive. - Reihenfolge falsch: Die
SetArgument-Sub-Action muss vor der Sub-Action stehen, die den Wert nutzt. Steht die Send Message darüber, ist das Argument zu diesem Zeitpunkt noch nicht gesetzt. - Wert ist null: Wenn deine Logik
nullablegt, etwa weil ein vorheriger Lookup nichts gefunden hat, erscheint im Text ein leerer Platzhalter oder das rohe%name%. Sichere unsichere Werte vorher ab, zum Beispiel mit?? "", bevor du sie anSetArgumentübergibst.