Zum Inhalt springen
  • Dunkel
  • Hell
  • System

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# Code

Doku: docs.streamer.bot · Execute C# Code

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.

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.

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.

  • 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 null ablegt, 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 an SetArgument übergibst.