Zum Inhalt springen
  • Dunkel
  • Hell
  • System

Chat senden: SendMessage, SendAction, SendWhisper

Fast jeder C#-Command endet mit einer Chat-Ausgabe. Du hast Argumente gelesen, etwas berechnet, und jetzt soll eine Antwort in den Twitch-Chat. Dafür gibt es drei Methoden auf dem CPH-Objekt: SendMessage für die normale Nachricht, SendAction für den /me-Style und SendWhisper für eine private Nachricht. Das ist das C#-Pendant zur No-Code-Sub-Action Send Message to Channel.

Core C# Code Execute C# Code

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

Die wichtigste Methode. Sie schickt Text in den Chat des verbundenen Twitch-Kanals.

public class CPHInline {
public bool Execute() {
CPH.SendMessage("Willkommen im Stream!");
return true;
}
}

Der zweite, optionale Parameter ist ein bool und steuert, über welchen Account gesendet wird. Standard ist true (Bot-Account). Mit false läuft die Nachricht über den Broadcaster-Account, also über deinen eigenen Channel-Account.

public class CPHInline {
public bool Execute() {
// Über den Bot-Account (Standard):
CPH.SendMessage("Antwort vom Bot");
// Über den Broadcaster-Account:
CPH.SendMessage("Antwort von dir selbst", false);
return true;
}
}

In C# baust du Werte mit dem $"..."-Präfix direkt in den String ein. Was in den geschweiften Klammern steht, wird ausgewertet und eingesetzt. Das ersetzt die %variablen%-Interpolation aus den No-Code-Actions.

public class CPHInline {
public bool Execute() {
string userName = "Aza";
CPH.SendMessage($"@{userName} hallo und willkommen!");
return true;
}
}

Im Chat landet dann: @Aza hallo und willkommen!. Das @ schreibst du selbst davor, {userName} liefert nur den nackten Namen.

SendAction sendet die Nachricht im /me-Style. Bei Twitch erscheint der Text dann farbig und ohne Doppelpunkt, so als hättest du /me ... getippt. Gut für Aktionen statt Aussagen.

public class CPHInline {
public bool Execute() {
string userName = "Aza";
CPH.SendAction($"wirft {userName} eine Flashbang zu");
return true;
}
}

Die Signatur ist identisch zu SendMessage: Text als erster Parameter, optionaler bool für den Account.

SendWhisper schickt eine private Nachricht an einen einzelnen User. Der erste Parameter ist der Ziel-User, der zweite der Text.

public class CPHInline {
public bool Execute() {
CPH.SendWhisper("aza_viewer", "Deine Belohnung ist eingelöst, viel Spaß!");
return true;
}
}

Hier liest die Action den Sender mit TryGetArg aus und antwortet personalisiert. TryGetArg haben wir auf der Seite Argumente lesen behandelt: es liefert false, wenn das Argument fehlt, statt zu werfen.

public class CPHInline {
public bool Execute() {
// Sender-Name sicher lesen, mit Fallback:
if (!CPH.TryGetArg("userName", out string userName)) {
userName = "Freund";
}
CPH.SendMessage($"@{userName} willkommen! Viel Erfolg beim nächsten Match.");
return true;
}
}

Im Chat: @Aza willkommen! Viel Erfolg beim nächsten Match.

Twitch kappt jede Chat-Nachricht bei 500 Zeichen. Alles darüber wird abgeschnitten, ohne Fehlermeldung. Bei kurzen Antworten ist das egal, aber sobald du Listen oder zusammengesetzte Texte baust, musst du aktiv kürzen.

Praktisch heißt das: lange Ausgaben entweder begrenzen (nur die ersten N Einträge), auf mehrere Nachrichten aufteilen, oder den String vor dem Senden hart abschneiden.

public class CPHInline {
public bool Execute() {
string text = BuildLongList(); // kann theoretisch sehr lang werden
if (text.Length > 500) {
text = text.Substring(0, 497) + "...";
}
CPH.SendMessage(text);
return true;
}
private string BuildLongList() {
return "Beispiel-Liste";
}
}

Wie das mit einer echten, potenziell langen Liste aussieht, zeigt der !lurkers-Command: dort werden alle Lurker enumeriert und die Ausgabe bewusst auf das Limit zugeschnitten.

  • Bot-Account nicht verbunden: Wenn SendMessage ohne zweiten Parameter still bleibt, ist meist kein Bot-Account in Streamer.bot verknüpft. Entweder den Bot-Account in den Twitch-Einstellungen verbinden oder bewusst mit false über den Broadcaster senden.
  • @ doppelt: Schreib das @ nur einmal selbst, also $"@{userName}". Manche Argumente enthalten den Namen bereits mit @. Dann wird daraus aus Versehen @@aza. Im Zweifel prüfen, was im Argument wirklich steckt.
  • Zeilenumbruch wird nicht gesendet: \n im String führt im Twitch-Chat nicht zu einer neuen Zeile, Twitch erlaubt keine Umbrüche in einer Nachricht. Für mehrere Zeilen schickst du mehrere SendMessage-Aufrufe nacheinander.