0. Kurze Orientierung
Was ist dieser Editor?
Der Event-Flow-Editor bildet die Ebene für erweiterte Automatisierung in Social Stream Ninja. Er ergänzt die einfachen Popup-Schalter und erlaubt eigene Weiterleitungslogik. Verwende ihn, wenn du:
- Leite Chat mit Filtern zwischen Diensten weiter (z. B. Twitch nach Discord spiegeln, aber Befehle blockieren).
- Erstelle treuebasierte Befehle, Schlüsselwortspiele oder Teilnahmebedingungen für Verlosungen mit AND/OR/NOT-Logik.
- Löse eigene Overlays, Audio, OBS-Szenen oder Webhooks anhand von Daten aus, die du im Flow ergänzt.
- Kombiniere mehrere Plattformen in einer Automatisierung (Kick + Twitch + YouTube durch einen Flow).
Das Popup bietet schnelle Voreinstellungen; Event Flow ist der Werkzeugkasten für eigene Abläufe.
Start und Grundlagen
- Öffne den Event-Flow-Editor über das Hauptmenü des Dashboards (Desktop oder Erweiterung).
- Jedes Projekt wird bis zum Export lokal gespeichert. Verwende
Exportzum Sichern oder Teilen. - Arbeite auf Arbeitsflächen namens Flows. Jeder Flow kann mehrere Plattformen gleichzeitig abonnieren.
Knoten auf einen Blick
- Eingänge (linke Anschlüsse) erwarten den Nachrichtenkontext.
- Ausgänge (rechte Anschlüsse) geben denselben Kontext samt Änderungen aus.
- Logikknoten können sowohl den Kanal
trueals auch optional den Kanalfalseausgeben.
Nutzdatenstruktur
Jede Nachricht trägt ein JSON-Objekt. Pflichtschlüssel folgen docs/event-reference.html (platform, type, chatname, chatmessage usw.). Eigene Daten gehören unter meta.
Jeder Flow beginnt mit einem Auslöser
Aktionsknoten (grün) laufen nie von selbst. Ein darüberliegender Auslöserknoten (blau) muss folgendes Ergebnis liefern: true. Ein Flow nur aus verketteten Aktionen sieht gültig aus, bleibt aber dauerhaft inaktiv, weil nichts die Kette startet. Knotennamen beschreiben, was der Knoten macht, nicht wann es geschieht: Nachricht hervorheben hebt eine Nachricht hervor, wenn der Flow ihn erreicht — er wird nicht ausgelöst, wenn du anderswo eine Nachricht hervorhebst.
Flow-Actions-Overlay (Aktionsausgabe)
Wähle Spende: Feier + Stimme für eine fertige Animation und einen synthetischen Dankesclip oder die fortgeschrittene Vorlage Spende: Animation + Sound + OBS-Filter . Neue Benachrichtigungsvorlagen starten deaktiviert, damit du sie zuerst konfigurieren und testen kannst. Wähle für die OBS-Vorlage in beiden Filteraktionen eine Quelle und denselben normalerweise ausgeschalteten Filter.
Audioclip abspielen und Multi-Alerts teilen nun eine Bibliothek mit 17 Sounds: Applaus, Trommelwirbel, Rauschen, Registrierkasse und andere Effekte, vier beschriftete synthetische englische Sätze sowie einfache Klänge. Anhören / Stoppen zeigt eine lokale Vorschau mit sichtbarem Wiedergabestatus. Du kannst weiterhin eine Aufnahme hochladen oder eine app-lokale Datei wählen. Für wechselnde Namen oder Nachrichten verwende die bestehende Aktion Text sprechen .
Event Flow spielt über die Browser-Quelle Flow Actions ; Multi-Alerts spielt über seine eigene Browser-Quelle. Lasse für dasselbe Ereignis nur in einer den Sound aktiviert, um doppelte Wiedergabe zu vermeiden. Navigiere mit Tab zu einem Flow-Knoten und drücke Eingabe oder Leertaste, um seine Eigenschaften zu bearbeiten.
Knoten wie Audioclip abspielen, Medien-Overlay anzeigen, und die OBS-Steuerungen benötigen eine Darstellungsfläche. Diese Fläche ist die Flow-Actions-Overlay-Seite unter actions.html. Lasse sie in deiner Streaming-Software (OBS-/Streamer.bot-Browser-Docks usw.) laufen, damit Event-Flow-Aktionen einen Ort zur Darstellung haben.
- Öffne das Social-Stream-Ninja-Hauptpopup (das Fenster aus popup.html oder das Erweiterungssymbol).
- Scrolle zur Karte „Flow Actions“. Verwende die Schaltfläche [Link kopieren] oder klicke auf die URL in der Karte.
- Der Link sieht so aus:
https://socialstream.ninja/actions.html?session=YOURSESSION. Füge ihn in eine OBS-Browser-Quelle ein (1920×1080 empfohlen) oder öffne ihn in einem Overlay-Browser.
- Klicke in einer Play-Audio-Clip- oder Display-Media-Overlay-Aktion auf Lokale Datei auswählen.
- Klicke auf Lokale Flow-Actions-URL für OBS kopieren und verwende die erzeugte localhost-URL statt der gehosteten Flow-Actions-URL.
- Lasse SSApp laufen. Wenn eine ausgewählte Datei verschoben wird, kehre zur Aktion zurück und klicke auf Neu verknüpfen.
Die Chrome-Erweiterung kann Dateien von der Festplatte nicht selbst bereitstellen. Verwende Upload oder eine gehostete URL, wenn kein Desktop-Begleiter verfügbar ist. Siehe die Anleitung für Mediendateien in Event Flow für die vollständige Einrichtung.
Nach dem Laden kann dieses Overlay:
- GIPHY oder direkte Medien-URLs, Text und Konfetti anzeigen, ausgelöst durch deine Flows.
- Sounds (TTS, Audioclips) lokal abspielen, damit Zuschauer sie hören.
- Sprich mit OBS über die WebSocket-Einstellungen unter Flow Actions im Popup (Szenenwechsel, Quellen umschalten, GDI+/FreeType-Textupdates, Wiederholungspuffer usw.).
- Browser-Quell-API: nur verfügbar, wenn
actions.htmlinnerhalb einer OBS-Browser-Quelle mit Erweiterte Zugriffsstufe läuft. Szenenwechsel funktioniert hier; Aufnahme-, Streaming- und Wiederholungspufferaktionen können darauf ausweichen. - OBS WebSocket: für einheitliche Steuerung empfohlen. Social Stream Ninja Flow Actions verwenden die OBS-WebSocket-v5-API von OBS 28+ und erwarten den modernen Befehlssatz auf Port
4455. - Passwort: optional. Hänge
&obspw=...nur dann an die Flow-Actions-URL an, wenn dein OBS-Server Authentifizierung verlangt. - Overlay-Diagnose: hänge
&obsdebug=1an die URL dieser Seite an:actions.htmlwenn du bei der Fehlersuche ein kleines Live-OBS-Verbindungsabzeichen auf dem Overlay möchtest. - Textquelle setzen: aktualisiert OBS-Eingaben Text (GDI+) und Text (FreeType 2) direkt und unterstützt Event-Flow-Vorlagenvariablen wie
{counterValue}und{counterTarget}. - Alte 4.x-Installationen: wenn du noch obs-websocket 4.x / Port
4444verwendest, funktionieren Quellen-/Filter-/Stumm-/Textaktionen erst nach einem Upgrade von OBS / obs-websocket.
Siehe die spezielle OBS-Steuerungsanleitung für alle Auslöser, Aktionen, Einrichtungsschritte und getesteten Rezepte.
- Öffnen obs-websocket-test.html.
- Prüfe, ob
GetVersion,GetCurrentProgramScene, undGetSceneListerfolgreich sind. - Führe dort die passende Aktionsprüfung durch, bevor du die vollständige Event-Flow-Automatisierung testest.
1. Was läuft durch einen Knoten?
Die Event-Flow-Laufzeit reicht zwei Dinge durch jede Verbindung:
- Nutzdaten – das Ereignis- oder Nachrichtendatenobjekt.
- Gate-Signal – ein true/false Bit, das dem nächsten Knoten sagt, ob er laufen soll.
false Anschluss eines Condition-Knotens). So lässt sich einfach Ausweichlogik erstellen, ohne ganze Flows zu duplizieren.
Erwartete Eingaben
- Ereignisquellen (Twitch Message, Timer, Manual Trigger usw.) ignorieren vorgelagerte Eingaben — sie erzeugen eigene Nutzdaten und geben immer
truesofern der Knoten selbst keinen Fehler hat. - Transformations- und Logikknoten lesen die Nutzdaten, ändern gegebenenfalls Felder oder Zustände und setzen das Gate-Signal gegebenenfalls auf
false. - Aktionsknoten werden nur bei folgendem Gate-Signal ausgelöst:
true. Sie können weiterhin aktualisierte Nutzdaten ausgeben, wenn du weitere Aktionen verketten möchtest.
Ausgabemuster
Ein Ausgang
Die meisten Knoten haben einen Ausgang. Alles, was hineingeht (Nutzdaten + Gate), kommt unverändert heraus, sofern der Knoten es nicht bearbeitet.
True/False-Ausgänge
Condition-, Compare-, Regex- und Logic-Knoten haben zwei Ausgangsanschlüsse. Wahr läuft durch den grünen Anschluss weiter; false wird am grauen/roten Anschluss verfügbar.
Durchreichen oder überschreiben
Einige Knoten (Set Variable, Math, Text Replace) verändern die Nutzdaten, geben aber weiterhin den Zustand true/false ihres Eingangs weiter. Andere (NOT, AND, OR) berechnen den booleschen Wert selbst neu.
2. Kurzreferenz der Logikknoten
Diese Blöcke beantworten die häufigsten Fragen zur Bedeutung von true/false.
NOT
- Eingänge: 1 boolescher Wert (true/false), abgeleitet vom vorherigen Knoten.
- Ausgänge: der umgekehrte boolesche Wert und die unveränderten Nutzdaten.
- Standardverhalten: Wenn nichts am NOT-Eingang angeschlossen ist, ergibt er
false, also ist die Ausgabetrue.
AND
- Eingänge: zwei oder mehr boolesche Signale (A, B, ...). Zusätzliche Anschlüsse können leer bleiben.
- Ausgänge:
truenur bei folgendem Wert aller verbundenen Eingänge:true. - Verwende AND, wenn mehrere Bedingungen gleichzeitig erfüllt sein müssen („ist Abonnent“ und „Chatnachricht enthält !raffle“).
OR
- Liefert
truewenn ein beliebiger verbundener Eingang true ist. - Ideal für plattformübergreifende Auslöser: Führe Twitch- und YouTube-Nachrichtenknoten in ein OR und vereinheitliche dann die nachgelagerte Aktion.
Nein. Viele Knoten bieten bereits kombinierte Filter (etwa „Filter User Level“ + „Contains Text“). Verwende AND nur, wenn die integrierten Optionen deine Kombination nicht abdecken oder du einen wiederverwendbaren Logik-Verknüpfungspunkt für mehrere Zweige möchtest.
true aus. Verbinde ihn sinnvoll oder deaktiviere den Knoten, damit er nicht versehentlich einen Flow freigibt.
3. Beispiele kleiner Flows
A. Automatisch antworten, sofern die Nachricht kein Befehl ist
Hier lautet die Regex-Ausgabe true bei einer Nachricht, die ein Befehl ist. Wir leiten den Anschluss false zu unserer Antwort, damit normale Chatter eine Bestätigung erhalten, während Befehle einfach durchlaufen.
B. Mehrere Prüfungen mit AND verlangen
Der AND-Knoten stellt sicher, dass nur Mitglieder mit dem richtigen Schlüsselwort nach Discord weitergeleitet werden. Beide Zweige senden ihr boolesches Ergebnis an AND; die Nutzdaten vom ersten Zweig werden weitergereicht.
C. NOT-Knoten zum Blockieren wiederholter Benachrichtigungen
State Check liefert den Wert true wenn die Benachrichtigung stummgeschaltet ist. Durch Umkehren dieses Ergebnisses sorgt NOT dafür, dass die Feier nur bei folgendem Flag-Wert abgespielt wird: false.
D. Zufällig einen von zwei Sounds abspielen
Das AND-Gatter ist nicht optional. Ein alleinstehendes NOT würde true ausgeben, wenn RANDOM inaktiv ist; Sound B würde daher bei jeder Chatnachricht spielen, die nicht zu deinem Auslöser passt. Wenn der Auslöser als zweiter Eingang in AND geht, wird Sound B auf passende Nachrichten begrenzt. Dasselbe Muster funktioniert für jedes Entweder-oder-Paar von Aktionen, nicht nur Audio.
4. Echos, Schleifen und Relay-Rückkopplungen verhindern
Chat zwischen Oberflächen weiterzuleiten ist leistungsfähig, kann aber endlose Echos erzeugen, wenn du die eigene Ausgabe erfasst. Beachte diese Schutzmaßnahmen:
Sowohl eingehende Auslöser als auch ausgehende Relay-Chat-Ziele unterscheiden zwischen
youtube und youtubeshorts. Verwende zwei Relay-Aktionen, wenn eine Nachricht beide Varianten erreichen soll. Siehe YouTube Shorts und Event Flow.
Ein Rückläufer ist eine ausgehende Nachricht, die aus einem Zielchat erneut erfasst wird. Aktuelle Relay-Chat-Aktionen überspringen erkannte Rückläufer; ein separates Kontrollkästchen „No Reflections“ gibt es nicht. Verwende zum Ausblenden oder Begrenzen ihrer Anzeige in Dock und Overlays eine Aktion Rückspiegelungsfilter (Reflection Filter) mit Alle blockieren, Erste zulassen, oder Alle zulassen. Dies steuert die Anzeige bei erneutem Empfang, nicht das Senden. Folge der Anleitung zur Twitch- und YouTube-Weiterleitung für eine vollständige Einrichtung.
- Doppelte Relay-Systeme vermeiden. Deaktiviere globales „Relay all“, wenn du gleichwertige Event-Flow-Wege verwendest, und prüfe andere Dienste, die dieselben Chats verbinden. Eigene Metadaten bleiben auf dem Weg durch einen Plattformchat nicht garantiert erhalten.
- Debounce- oder Cooldown-Knoten verwenden für Benachrichtigungen, die nur alle X Sekunden ausgelöst werden sollen.
- Schleifen bewusst unterbrechen. Wenn zwei Zweige einander speisen, füge einen Logikknoten hinzu, der eine Zustandsvariable („currentlyRelaying“) prüft, damit der Flow bei gesetztem Flag früh endet.
5. Eingänge, Ausgänge und praktische Fragen
Was kommt in einen Knoten?
- Die vollständigen Nachrichtennutzdaten.
- Das Gate-Bit (
true/false). - Optionaler Kontext (Zustandsvariablen, Timer), den der Knoten ausdrücklich anfordert.
Was verlässt einen Knoten?
- Dieselben Nutzdaten, sofern der Knoten sie nicht bearbeitet.
- Ein neu berechnetes Gate-Bit (Logikknoten) oder durchgereichtes Bit (Aktionen).
- Die meisten Seiteneffekte (etwa Chatversand) verändern die Nutzdaten nicht, aber Punkteaktionen können Statusfelder ergänzen wie
pointsTotaloderpointsSpendErrorfür nachgelagerte Logik.
Wann verzweigen?
Immer dann, wenn du unterschiedlich auf true gegenüber false reagieren möchtest. Ziehe eine Leitung vom benötigten farbigen Ausgang (grün = true, grau/rot = false) zum nächsten Knoten.
false Ausgang nichts machst, endet der Flow dort einfach. Das ist ideal für Filter („alles blockieren, was die Prüfung nicht besteht“), aber vergiss nicht, den false Pfad zu verbinden, wenn du Ausweichlogik brauchst.
Häufige Fragen und Antworten
- Muss ich für jedes Filterpaar AND verwenden? Nein. Viele Knoten enthalten mehrere Prüfungen (der einfache Message Filter unterstützt etwa Schlüsselwort + Rolle). Verwende AND nur für fortgeschrittene Kombinationen oder beim Zusammenführen von Signalen verschiedener Knoten.
- Wie gelangen true/false-Werte zum NOT-Knoten? Jeder Knoten mit grünem Ausgang liefert
truestandardmäßig. Wenn eine Bedingung fehlschlägt, liefert erfalse. Verbinde diese Leitung mit NOT, um das Ergebnis umzukehren. - Kann ein Knoten Nutzdaten ausgeben, selbst wenn er false zurückgibt? Ja. Die Nutzdaten laufen weiter durch den false-Ausgang; du entscheidest, wohin dieser Zweig führen soll.
- Wie erkenne ich TikTok-Team-Mitglieder? Wähle TikTok-Team-Mitglied im User-Role-Knoten. Er erkennt TikTok-Fanclub-/Team-Level und Abzeichen an der eingehenden Nachricht und hängt nicht von den Main-Chat-Overlay-Einstellungen ab.
- Kann jeder Speak-Text-Knoten eine andere Stimme verwenden? Ja. Gib einen vom Anbieter unterstützten Stimmennamen oder eine ID in Stimme überschreiben ein, oder lasse es leer, um die TTS-Standardstimme von Flow Actions zu verwenden.
6. Referenz der Vorlagenvariablen
Mehrere Aktionsknoten (Show Text, Set Text Source, Send Message, Relay Chat, TTS Speak, Call Webhook, Print Thermal Label) unterstützen Vorlagenvariablen , die zur Laufzeit durch Ereignisdaten ersetzt werden. Setze Variablennamen in geschweifte Klammern wie {username}.
Kernvariablen (abwärtskompatibel)
| Variable | Alias | Beschreibung | Beispiel |
|---|---|---|---|
{username} | {chatname} | Anzeigename des Nutzers | CoolViewer123 |
{message} | {chatmessage} | Chatnachrichtentext | Hallo zusammen! |
{source} | - | Plattformname (mit großem Anfangsbuchstaben) | Twitch, YouTube |
{type} | - | Plattformname (unverarbeitet) | twitch, youtube |
{donation} | {hasDonation} | Anzeigebezeichnung der Spende/des Trinkgelds | 5,00 $, 500 Bits |
Erweiterte Variablen
| Variable | Beschreibung | Beispiel |
|---|---|---|
{displayname} | Anzeigename (alternatives Feld) | CoolViewer123 |
{donoValue} | Spendenwert in USD, bereitgestellt oder geschätzt; Event Flow leitet Schwellenwerte aus normalisierten hasDonation Bezeichnungen wie Wert, $Wert, Wert + Einheit oder kompakte Einheit/Wert-Angabe ab. Für unbekannte benannte virtuelle Einheiten gilt 100 Einheiten = 0,01 USD; TikTok-Geschenke ohne Preis zählen als ein Coin pro Geschenk (je 0,01 USD). {donationAmount} ist ein älterer Alias | 5.00 |
{event} | Ereignistyp-Kennung | cheer, raid, new_follower |
{membership} | Mitgliedschaftsstatus | MEMBERSHIP, new_sponsor |
{subtitle} | Zusätzlicher Kontext | Seit 3 Monaten Mitglied |
{userid} | Plattform-ID des Nutzers | 12345678 |
{chatimg} | Nutzer-Avatar-URL | https://... |
{contentimg} | URL des angehängten Bildes | https://... |
{rewardTitle} | Belohnungsname, wenn die Quelle ein Belohnungstitelfeld auf oberster Ebene bereitstellt | Meine Nachricht hervorheben |
{meta} | Strukturierte Ereignisdaten (JSON) | {"viewers":100} |
{counterValue} | Aktueller Zählerwert nach einem Counter- oder Check-Counter-Schritt | 12 |
{counterTarget} | Zählerzielwert | 30 |
{counterRemaining} | Zählerziel minus aktueller Wert, mindestens 0 | 18 |
{USERNAME}, {Username}, und {username} funktionieren alle auf dieselbe Weise.
Check Counter liefert {counterValue}, {counterTarget}, und {counterRemaining}.
Beispielvorlagen
- Text anzeigen:
{username} just cheered {hasDonation}! - OBS-Textquelle setzen:
{username}: now {counterValue}, need {counterTarget} - Relay Chat:
[{source}] {username}: {message} - TTS:
{username} says {message} - Spendenbenachrichtigung:
{username} donated {donation} - {subtitle} - Thermoetikett:
{username}, eine neue Zeile, dann{donation}. Siehe die Thermodrucker-Anleitung für Druckereinrichtung, Etiketten fester Größe und einen vollständigen Flow. - Discord Call Webhook:
{"content":"{message}","username":"{username}","avatar_url":"{chatimg}"}
{donation} bei einer normalen Chatnachricht), wird der Platzhalter durch eine leere Zeichenfolge ersetzt, statt den wörtlichen {donation} Text anzuzeigen.
7. Checkliste bewährter Vorgehensweisen
- Benenne und färbe deine Knoten, damit du später noch weißt, welcher Zweig welcher ist.
- Mit dem integrierten Simulator testen (Send Test Event), bevor du einen Flow live schaltest.
- Logik nahe der Quelle gruppieren. Filtere möglichst früh, um nachgelagerte Verarbeitung zu vermeiden.
- Wiederholungen in Zustandsknoten speichern. Verwende Zähler, Schalter und Zeitstempel, um doppelte Benachrichtigungen zu vermeiden.
- Meta-Felder dokumentieren. Wenn du eigene
metaSchlüssel hinzufügst, dokumentiere sie, damit Overlays und entfernte Clients konsistent bleiben.
8. Weiterführende Möglichkeiten
Eigene Abläufe über Stream Deck oder API ausführen: benannte Auslöser, eine Startvorlage, Auffinden von Abläufen, Zusatzdaten, HTTP-/WebSocket-/P2P-Beispiele und Drehregler-Gesten.
Bereit für mehr Details?
- Verwende Zustandsknoten (Zähler, Schalter, Timer), um Kontext zwischen Ereignissen zu verfolgen.
- Kombiniere Variablen und Logik zum Erstellen von Warteschlangen, Verlosungen oder Wertungssystemen.
- Verbinde dich mit dem System Punkte und Belohnungen , damit Zuschauer Flows bewusst auslösen können.
- Nutzt du die SSApp-Desktop-App? Freischalten Eigene JavaScript-Knoten für beliebige Logik, die kein integrierter Knoten abdeckt.
- Prüfe die Ereignisreferenz für ausführliche Nutzdatendokumentation aller Plattformen.
Diese Anleitung ist bewusst eigenständig — kopiere sie lokal, passe sie für dein Team an und experimentiere weiter im Editor.
9. Eigenes JavaScript Nur SSApp / Desktop
Zwei Knoten im Event-Flow-Editor erlauben beliebiges JavaScript innerhalb der Flow-Verarbeitung: Eigener Code (Auslöser) und Eigenen Code ausführen (Aktion). Sie sind der Ausweg für alles, was die integrierten Knoten nicht ausdrücken können.
new Function() / eval(). Öffne den Editor über die SSApp-Desktop-App zum Aktivieren. Im Erweiterungsmodus erscheinen die Knoten ausgegraut mit der Beschriftung „Nur Desktop“.
Ctrl+S oder Cmd+S macht dasselbe. Abbrechen lässt den Knoten unverändert.
Custom Code — Auslöserknoten
Ziehe Eigener Code aus der Gruppe Erweitert im Bereich Auslöser auf die Arbeitsfläche. Er dient als Gate: Der Flow läuft nur bei folgendem Rückgabewert deines Codes weiter: true.
true oder false.function(message) { ... }Muss zurückgeben: einen booleschen Wert —
true um den Flow fortzusetzen, false um ihn zu stoppen.Verfügbar: das Objekt
message (siehe Nachrichten-API unten) sowie convertCurrency(value, targetCurrency, source) und convertToUSD(value, source).
Execute Custom Code — Aktionsknoten
Ziehe Eigenen Code ausführen aus der Gruppe Integrationen im Bereich Aktionen . Er kann die Nachricht verändern, blockieren oder Metadaten für nachgelagerte Knoten anhängen.
function(message, result) { ... }Sollte zurückgeben: ein Objekt oder Promise zur Übernahme in
result— siehe Ergebnis-API.Verfügbar:
message (die Ereignisnutzdaten), result (aktueller Flow-Ergebniszustand), printThermal(html, options), plus convertCurrency(value, targetCurrency, source) und convertToUSD(value, source).
printThermal('<strong>' + message.chatname + '</strong>'). SSApp reiht den Auftrag ohne Dialog über die native Windows-Drucker-API ein und verwendet diese gespeicherten Einstellungen. Ein Flow kann sie mit Optionen überschreiben, etwa { width: '58mm', marginLeft: '3mm', marginRight: '3mm', marginTop: '2mm', marginBottom: '2mm', feed: '3mm', marginType: 'printableArea' }. Durch Rückgabe des Promise kann Event Flow auf die Übermittlung warten und Fehler melden.
Das Objekt message
Beide Knoten erhalten die vollständigen Ereignisnutzdaten als message. Die folgenden Felder sind immer verfügbar; plattformspezifische Ereignisse können zusätzliche enthalten.
| Feld | Datentyp | Beschreibung | Beispiel |
|---|---|---|---|
message.chatmessage | Zeichenfolge | Der Chatnachrichtentext (kann HTML enthalten) | "Hello stream!" |
message.chatname | Zeichenfolge | Anzeigename des Absenders | "CoolViewer" |
message.userid | Zeichenfolge | Plattform-Nutzer-ID | "12345678" |
message.type | Zeichenfolge | Quellplattform (Kleinbuchstaben) | "twitch", "youtube", "kick" |
message.hasDonation | Zeichenfolge | Formatierte Spendenzeichenfolge, falls vorhanden | "$5.00", "500 bits" |
message.donoValue | Zahl / Zeichenfolge | Spendenwert in USD, wenn die Quelle ihn liefert; gültige Nullwerte werden berücksichtigt. Event Flow verwendet ersatzweise die currency.js Umrechnung normalisierter hasDonation Bezeichnungen für Schwellenvergleiche, einschließlich 100 unbekannter benannter Einheiten = 0,01 USD. Es wertet keine chatmessage Fließtexte für Spendenwerte aus. | 5 |
message.event | Zeichenfolge | Ereignistyp-Kennung | "new_follower", "cheer", "raid" |
message.membership | Zeichenfolge | Mitgliedschaftsstatus, falls zutreffend | "MEMBERSHIP" |
message.subtitle | Zeichenfolge | Zusätzliche Kontextzeile | "Member for 3 months" |
message.mod | boolesch | Absender ist Moderator | true |
message.subscriber | boolesch | Absender ist Abonnent | true |
message.vip | boolesch | Absender hat VIP-Status | true |
message.chatimg | Zeichenfolge | Nutzer-Avatar-URL | "https://..." |
message.meta | Objekt | Beliebige strukturierte Daten am Ereignis | { viewers: 120 } |
convertCurrency(message.hasDonation, 'EUR', message.type) zum Umrechnen der formatierten Spendenbezeichnung in EUR. Sie gibt eine Zahl oder null zurück, wenn die gewünschte Zielwährung nicht unterstützt wird. Der Konverter verwendet die ungefähren internen Kurse von Social Stream Ninja; er kontaktiert keinen externen Wechselkursdienst.
Was die Aktion zurückgibt
Gib aus deinem Aktionscode ein einfaches Objekt zurück. Alle enthaltenen Felder werden in das result Objekt übernommen; ausgelassene Felder behalten ihre aktuellen Werte.
| Rückgabefeld | Datentyp | Wirkung |
|---|---|---|
modified | boolesch | Setze true bei geänderten Feldern in message . Teilt nachgelagerten Knoten mit, dass die Nutzdaten bearbeitet wurden. |
message | Objekt | Gib die (möglicherweise veränderte) Nachricht zurück, damit nachgelagerte Knoten deine Änderungen erhalten. |
blocked | boolesch | Setze true um die Anzeige oder Weiterleitung der Nachricht zu verhindern. |
return { modified: false, message };Auch wenn du nichts geändert hast, sorgt die Rückgabe von
message dafür, dass die Nachricht zum nächsten Knoten weiterläuft.
Codebeispiele
Kopiere eines dieser Beispiele in das JavaScript-Code-Textfeld des passenden Knotentyps.
Auslöserbeispiele — liefere als Rückgabewert true um den Flow fortzusetzen
!queue, !raffle, !enter).Aktionsbeispiele — liefere als Rückgabewert { modified, message }
{meta}).Vollständiges Beispiel — Bot für VIP-Funktionswünsche
Dieser Flow wartet auf !feature <text> von Abonnenten, VIPs oder Moderatoren, formatiert sie als Funktionswunsch und leitet sie an ein zweites Ziel (z. B. Discord) weiter.
Schritt 1 — Custom-Code-Auslöser (in das Feld JavaScript Code des Auslösers einfügen):
Schritt 2 — Execute-Custom-Code-Aktion (in das Feld JavaScript Code der Aktion einfügen):
Schritt 3 — Relay-Chat-Aktion: Füge nach der Aktion einen normalen Relay-Chat-Knoten hinzu und konfiguriere ihn für dein Discord-Ziel (oder ein anderes). Hier ist kein eigener Code erforderlich — der umformatierte Wert von message.chatmessage läuft automatisch durch.
!feature dark mode support, und prüfe, ob das Relay-Chat-Ziel die umformatierte Zeichenfolge empfängt.
Sicherheitsaspekte
window Objekt und alle vom Preload-Skript bereitgestellten APIs (z. B. window.ninjafy). Behandle importierte Flow-Dateien wie ausführbaren Code — importiere nur Flows aus vertrauenswürdigen Quellen.
- Keine Netzwerk-Sandbox. Aktionscode unterstützt Aufrufe von
fetch(). Wenn du geteilte Flows von anderen übernimmst, prüfe vor der Aktivierung das JavaScript. - Fehler werden abgefangen. Ein Laufzeitfehler in deinem Code gibt
false(Auslöser) oder eine wirkungslose Aktion zurück und protokolliert in der DevTools-Konsole — der Flow stürzt nicht ab. - Auch Syntaxfehler. Ein Fehler vom Typ
SyntaxErrorbeim Kompilieren wird genauso abgefangen. Prüfe DevTools (F12), wenn ein Knoten scheinbar nichts tut.