0. Szybkie wprowadzenie
Czym jest ten edytor?
Edytor Event Flow jest warstwą zaawansowanej automatyzacji Social Stream Ninja. Uzupełnia proste przełączniki okna popup i pozwala tworzyć własną logikę routingu. Użyj go, gdy chcesz:
- Przekazuj czat między usługami z użyciem filtrów (np. kopiuj Twitch do Discorda, ale blokuj komendy).
- Twórz komendy zależne od lojalności, gry ze słowami kluczowymi lub warunki udziału w losowaniu przy użyciu logiki AND/OR/NOT.
- Uruchamiaj własne nakładki, dźwięki, sceny OBS lub webhooki na podstawie danych uzupełnianych w przepływie.
- Łącz wiele platform w jednej automatyzacji (Kick + Twitch + YouTube obsługiwane przez jeden przepływ).
Okno popup zapewnia szybkie ustawienia, a Event Flow — narzędzia do tworzenia własnych przepływów.
Uruchomienie i podstawy
- Otwórz edytor Event Flow z menu głównego panelu (w aplikacji desktopowej lub rozszerzeniu).
- Każdy projekt jest zapisywany lokalnie do czasu eksportu. Użyj
Exportaby utworzyć kopię zapasową lub udostępnić. - Pracuj na obszarach roboczych nazywanych przepływami. Każdy przepływ może jednocześnie subskrybować wiele platform.
Węzły w skrócie
- Wejścia (porty po lewej) oczekują kontekstu wiadomości.
- Wyjścia (porty po prawej) emitują ten sam kontekst wraz ze zmianami.
- Węzły logiczne mogą wysyłać sygnały zarówno przez kanał
truejak i przez opcjonalny kanałfalse.
Struktura danych zdarzenia
Każda wiadomość przenosi obiekt JSON. Obowiązkowe klucze są zgodne z docs/event-reference.html (platform, type, chatname, chatmessage itd.). Własne dane dodawaj w meta.
Każdy przepływ zaczyna się od wyzwalacza
Węzły akcji (zielone) nigdy nie uruchamiają się samodzielnie — wykonują się tylko wtedy, gdy poprzedzający je węzeł wyzwalacza (niebieski) zwróci true. Przepływ złożony wyłącznie z połączonych akcji wygląda poprawnie, ale pozostaje bezczynny, ponieważ nic nie uruchamia łańcucha. Nazwy węzłów opisują, co węzeł robi, a nie moment wykonania: Wyróżnij wiadomość (Feature Message) wyróżnia wiadomość, gdy przepływ dotrze do tego węzła — nie uruchamia się, gdy wyróżnisz wiadomość gdzie indziej.
Nakładka Flow Actions (wyjście akcji)
Wybierz Wpłata: świętowanie + głos aby użyć gotowej animacji i syntetycznego klipu z podziękowaniem, lub zaawansowanego szablonu Wpłata: animacja + dźwięk + filtr OBS . Nowe szablony alertów są początkowo wyłączone, aby można je było najpierw skonfigurować i przetestować. W szablonie OBS wybierz źródło i ten sam domyślnie wyłączony filtr w obu akcjach filtrów.
Odtwórz klip dźwiękowy i Multi-Alerts korzystają teraz ze wspólnej biblioteki 17 dźwięków: oklasków, werbla, świstu, kasy fiskalnej i innych efektów, czterech opisanych syntetycznych fraz po angielsku oraz prostych dźwięków. Nasłuchuj / Zatrzymaj odtwarza podgląd lokalnie i pokazuje stan odtwarzania. Nadal możesz przesłać nagranie lub wybrać plik lokalny aplikacji. W przypadku zmiennych nazw i wiadomości użyj istniejącej akcji Odczytaj tekst (Speak Text) .
Event Flow odtwarza przez źródło przeglądarkowe Flow Actions ; Multi-Alerts odtwarza przez własne źródło przeglądarkowe. Dla tego samego zdarzenia włącz dźwięk tylko w jednym z nich, aby uniknąć podwójnego odtwarzania. Przejdź klawiszem Tab do węzła przepływu i naciśnij Enter lub spację, aby edytować jego właściwości.
Węzły takie jak Odtwórz klip dźwiękowy, Wyświetl nakładkę multimedialną oraz sterowanie OBS potrzebują powierzchni renderowania. Zapewnia ją strona nakładki Flow Actions dostępna pod adresem actions.html. Pozostaw ją uruchomioną w programie do transmisji (OBS, doki przeglądarkowe Streamer.bot itd.), aby akcje Event Flow miały gdzie się wyświetlać.
- Otwórz główne okno popup Social Stream Ninja (okno ładowane z popup.html lub ikony rozszerzenia).
- Przewiń do karty „Flow Actions”. Użyj przycisku [kopiuj łącze] lub kliknij adres URL na karcie.
- Łącze wygląda tak:
https://socialstream.ninja/actions.html?session=YOURSESSION. Wklej go jako źródło przeglądarkowe OBS (zalecane 1920×1080) lub otwórz w dowolnej przeglądarce nakładek.
- W akcji Play Audio Clip lub Display Media Overlay kliknij Wybierz plik lokalny.
- Kliknij Kopiuj lokalny URL Flow Actions dla OBS i użyj wygenerowanego adresu localhost zamiast hostowanego adresu Flow Actions.
- Pozostaw SSApp uruchomione. Jeśli wybrany plik zostanie przeniesiony, wróć do akcji i kliknij Połącz ponownie.
Samo rozszerzenie Chrome nie może udostępniać plików z dysku. Jeśli aplikacja desktopowa nie jest dostępna, użyj Upload lub hostowanego adresu URL. Zobacz Przewodnik po plikach multimedialnych dla Event Flow zawierający pełną konfigurację.
Po załadowaniu ta nakładka może:
- Wyświetlać GIPHY lub multimedia z bezpośrednich adresów URL, tekst i konfetti uruchamiane przez przepływy.
- Odtwarzać dźwięki (TTS, klipy audio) lokalnie, aby widzowie je słyszeli.
- Komunikować się z OBS przez ustawienia WebSocket w sekcji Flow Actions okna popup (przełączanie scen, przełączanie źródeł, aktualizacje tekstu GDI+/FreeType, bufor powtórek itd.).
- API źródła przeglądarkowego: dostępne tylko wtedy, gdy
actions.htmldziała wewnątrz źródła przeglądarkowego OBS z włączoną opcją Zaawansowany poziom dostępu. Przełączanie scen działa w tym trybie, a akcje nagrywania, transmisji i bufora powtórek mogą używać go awaryjnie. - OBS WebSocket: zalecany dla spójnego sterowania. Flow Actions w Social Stream Ninja używa API OBS WebSocket v5 z OBS 28+ i oczekuje współczesnego zestawu żądań na porcie
4455. - Hasło: opcjonalne. Dodaj
&obspw=...do adresu URL Flow Actions tylko wtedy, gdy serwer OBS wymaga uwierzytelniania. - Diagnostyka nakładki: dodaj
&obsdebug=1do adresu URL stronyactions.htmljeśli podczas rozwiązywania problemów chcesz widzieć na nakładce mały wskaźnik bieżącego połączenia z OBS. - Ustaw źródło tekstowe: bezpośrednio aktualizuje wejścia OBS Text (GDI+) i Text (FreeType 2) oraz obsługuje zmienne szablonów Event Flow, takie jak
{counterValue}i{counterTarget}. - Starsze instalacje 4.x: jeśli nadal używasz obs-websocket 4.x / portu
4444— akcje źródeł, filtrów, wyciszania i tekstu nie będą działać, dopóki nie zaktualizujesz OBS / obs-websocket.
Zobacz osobny Przewodnik po sterowaniu OBS opisujący wszystkie wyzwalacze, akcje, kroki konfiguracji i sprawdzone przykłady.
- Otwórz obs-websocket-test.html.
- Sprawdź, czy
GetVersion,GetCurrentProgramSceneiGetSceneListzakończą się powodzeniem. - Uruchom tam test odpowiedniej akcji, zanim sprawdzisz całą automatyzację Event Flow.
1. Co przechodzi przez węzeł?
Środowisko wykonawcze Event Flow przesyła przez każdy przewód dwie rzeczy:
- Dane zdarzenia – obiekt danych zdarzenia lub wiadomości.
- Sygnał warunku – true/false bit informujący następny węzeł, czy ma się wykonać.
false port w węźle Condition). Ułatwia to tworzenie logiki alternatywnej bez powielania całych przepływów.
Oczekiwane dane wejściowe
- Źródła zdarzeń (Twitch Message, Timers, Manual Trigger itd.) ignorują dane wejściowe z wcześniejszych węzłów — generują własne dane zdarzenia i zawsze emitują
truechyba że sam węzeł zgłosi błąd. - Węzły przekształceń i logiki odczytują dane zdarzenia i mogą zmieniać pola, ustawiać stan lub przełączać sygnał warunku na
false. - Węzły akcji uruchamiają się tylko wtedy, gdy sygnał warunku pozostaje
true. Nadal mogą zwracać zaktualizowane dane, jeśli chcesz łączyć kolejne akcje.
Sposoby zwracania danych
Jedno wyjście
Większość węzłów ma jedno wyjście. Dane wejściowe (dane zdarzenia + sygnał warunku) wychodzą bez zmian, chyba że węzeł je modyfikuje.
Wyjścia True/False
Węzły Condition, Compare, Regex i Logic udostępniają dwa porty wyjściowe. True przechodzi przez zielony port; false staje się dostępne na szarym/czerwonym porcie.
Przekazywanie a nadpisywanie
Niektóre węzły (Set Variable, Math, Text Replace) zmieniają dane zdarzenia, ale nadal przekazują true/false stan z wejścia. Inne (NOT, AND, OR) samodzielnie obliczają wartość logiczną.
2. Ściągawka z węzłów logicznych
Te bloki odpowiadają na najczęstsze pytania o znaczenie true/false.
NOT
- Wejścia: 1 wartość logiczna (true/false) pochodząca z poprzedniego węzła.
- Wyjścia: odwrócona wartość logiczna i niezmienione dane zdarzenia.
- Domyślne zachowanie: Jeśli do wejścia NOT nic nie jest podłączone, zwraca on
false, więc wynikiem jesttrue.
AND
- Wejścia: co najmniej dwa sygnały logiczne (A, B, ...). Dodatkowe porty możesz pozostawić puste.
- Wyjścia:
truetylko wtedy, gdy wszystkie podłączone wejścia mają wartośćtrue. - Używaj AND, gdy kilka warunków musi być spełnionych jednocześnie ("jest subskrybentem" i "wiadomość czatu zawiera !raffle").
OR
- Emituje
truejeśli dowolne podłączone wejście ma wartość true. - Przydatne dla wyzwalaczy obejmujących wiele platform: połącz węzły wiadomości Twitch i YouTube z jednym OR, a następnie użyj wspólnej akcji.
Nie. Wiele węzłów zawiera już połączone filtry (np. "Filter User Level" + "Contains Text"). Używaj AND tylko wtedy, gdy wbudowane opcje nie obejmują potrzebnej kombinacji lub gdy chcesz utworzyć wspólny punkt logiczny używany przez inne gałęzie.
true. Podłącz go do sensownego źródła lub wyłącz węzeł, aby przypadkiem nie odblokował przepływu.
3. Przykładowe małe przepływy
A. Automatyczna odpowiedź, chyba że wiadomość jest komendą
Tutaj węzeł Regex emituje true gdy wiadomość jest komendą. Kierujemy false wyjście do naszej odpowiedzi, więc zwykłe wiadomości czatu otrzymują potwierdzenie, a komendy po prostu przechodzą dalej.
B. Wymagaj spełnienia kilku warunków za pomocą AND
Węzeł AND sprawia, że do Discorda przekazywane są tylko wiadomości członków używających właściwego słowa kluczowego. Obie gałęzie wysyłają swój wynik logiczny do AND; dane zdarzenia z pierwszej gałęzi są przekazywane dalej.
C. Węzeł NOT blokujący powtarzające się alerty
State Check zwraca wartość true , gdy alert jest wyciszony. Odwracając ten wynik, węzeł NOT sprawia, że efekt świętowania odtwarzamy tylko wtedy, gdy flaga ma wartość false.
D. Losowe odtworzenie jednego z dwóch dźwięków
Bramka AND jest konieczna. Sam węzeł NOT zwróciłby true zawsze, gdy bramka RANDOM jest bezczynna, więc dźwięk B odtwarzałby się przy każdej wiadomości czatu, która nie pasuje do twojego wyzwalacza. Podanie wyzwalacza do AND jako drugiego wejścia ogranicza dźwięk B wyłącznie do pasujących wiadomości. Ten sam wzorzec działa dla dowolnej pary alternatywnych akcji, nie tylko dźwięków.
4. Zapobieganie echom, pętlom i ponownemu przekazywaniu wiadomości
Przekazywanie czatu między interfejsami daje duże możliwości, ale może tworzyć nieskończone echo, jeśli nasłuchujesz własnych wiadomości wyjściowych. Stosuj te zabezpieczenia:
Zarówno wyzwalacze przychodzące, jak i cele wychodzących akcji Relay Chat rozróżniają
youtube i youtubeshorts. Użyj dwóch akcji przekazywania, jeśli wiadomość ma trafić do obu wariantów. Zobacz YouTube Shorts i Event Flow.
Odbicie to wysłana wiadomość ponownie przechwycona z docelowego czatu. Obecne akcje Relay Chat pomijają rozpoznane odbicia; nie ma osobnego pola No Reflections. Aby ukryć lub ograniczyć ich wyświetlanie w doku i nakładkach, użyj Filtr odbić (Reflection Filter) z parametrem Blokuj wszystkie (Block All), Zezwalaj na pierwsze (Allow First) lub Zezwalaj na wszystkie (Allow All). Określa to sposób wyświetlania po ponownym przechwyceniu, a nie wysyłanie. Postępuj zgodnie z przewodnikiem krok po kroku po przekazywaniu Twitch i YouTube aby uzyskać pełną konfigurację.
- Unikaj powielania systemów przekazywania. Wyłącz globalne Relay all, jeśli używasz równoważnych tras Event Flow, i sprawdź, czy inne usługi nie łączą tych samych czatów. Nie ma gwarancji, że własne metadane przetrwają przesłanie przez czat platformy.
- Używaj węzłów Debounce lub Cooldown dla alertów, które mają uruchamiać się najwyżej raz na X sekund.
- Celowo przerywaj cykle. Jeśli dwie gałęzie przekazują dane do siebie nawzajem, dodaj węzeł logiczny sprawdzający zmienną stanu ("currentlyRelaying"), aby przepływ kończył się wcześniej, gdy flaga jest ustawiona.
5. Wejścia, wyjścia i pytania praktyczne
Co trafia do węzła?
- Pełne dane wiadomości.
- Bit warunku (
true/false). - Opcjonalny kontekst (zmienne stanu, zegary), o który węzeł wyraźnie prosi.
Co wychodzi z węzła?
- Te same dane zdarzenia, chyba że węzeł je zmieni.
- Ponownie obliczony bit warunku (węzły logiczne) lub przekazany dalej bit (akcje).
- Większość działań zewnętrznych (np. wysyłanie czatu) nie zmienia danych zdarzenia, ale akcje punktów mogą dodawać pola stanu, takie jak
pointsTotallubpointsSpendErrordo logiki w kolejnych krokach.
Kiedy tworzyć rozgałęzienia?
Gdy chcesz reagować inaczej na true a false. Przeciągnij przewód z wybranego kolorowego wyjścia (zielone = true, szare/czerwone = false) do następnego węzła.
false wyjściem, przepływ po prostu się tam kończy. To dobre rozwiązanie dla filtrów ("blokuj wszystko, co nie przechodzi sprawdzenia"), ale pamiętaj o podłączeniu false ścieżki, jeśli potrzebujesz obsługi alternatywnej.
Częste pytania i odpowiedzi
- Czy muszę używać AND przy każdej parze filtrów? Nie. Wiele węzłów obejmuje kilka sprawdzeń (np. podstawowy Message Filter obsługuje słowo kluczowe + rolę). Używaj AND tylko przy bardziej złożonych kombinacjach lub łączeniu sygnałów z różnych węzłów.
- Jak wartości true/false docierają do węzła NOT? Każdy węzeł z zielonym wyjściem emituje
truedomyślnie. Gdy warunek nie jest spełniony, emitujefalse. Podłącz ten przewód do NOT, aby odwrócić wynik. - Czy węzeł może emitować dane, nawet jeśli zwraca false? Tak. Dane zdarzenia nadal przechodzą przez wyjście false; to ty decydujesz, dokąd ta gałąź ma prowadzić.
- Jak rozpoznawać członków zespołu TikTok? Wybierz Członek zespołu TikTok w węźle User Role. Rozpoznaje poziomy i odznaki Fan Club/zespołu TikTok w przychodzącej wiadomości i nie zależy od ustawień Main Chat Overlay.
- Czy każdy węzeł Speak Text może używać innego głosu? Tak. Wpisz nazwę lub identyfikator głosu obsługiwanego przez dostawcę w polu Nadpisanie głosu lub pozostaw pole puste, aby użyć domyślnego głosu TTS z Flow Actions.
6. Opis zmiennych szablonów
Kilka węzłów akcji (Show Text, Set Text Source, Send Message, Relay Chat, TTS Speak, Call Webhook, Print Thermal Label) obsługuje zmienne szablonów , które w czasie wykonania są zastępowane danymi zdarzenia. Nazwy zmiennych umieszczaj w nawiasach klamrowych, np. {username}.
Zmienne podstawowe (zgodne ze starszymi wersjami)
| Zmienna | Alias | Opis | Przykład |
|---|---|---|---|
{username} | {chatname} | Nazwa wyświetlana użytkownika | CoolViewer123 |
{message} | {chatmessage} | Tekst wiadomości czatu | Cześć wszystkim! |
{source} | - | Nazwa platformy (z wielkiej litery) | Twitch, YouTube |
{type} | - | Nazwa platformy (wartość surowa) | twitch, youtube |
{donation} | {hasDonation} | Etykieta wyświetlanej wpłaty/napiwku | $5.00, 500 bits |
Zmienne rozszerzone
| Zmienna | Opis | Przykład |
|---|---|---|
{displayname} | Nazwa wyświetlana (alternatywne pole) | CoolViewer123 |
{donoValue} | Równowartość wpłaty w USD, podana lub oszacowana; Event Flow wyprowadza wartości progowe ze znormalizowanego hasDonation w postaci wartości, $wartość, wartość + jednostka lub skrócony zapis jednostki/wartości. Nieznane nazwane jednostki wirtualne są przeliczane jako 100 jednostek = $0.01 USD; prezenty TikTok bez ceny są liczone jako jedna moneta na prezent ($0.01 za sztukę). {donationAmount} to starszy alias | 5.00 |
{event} | Identyfikator typu zdarzenia | cheer, raid, new_follower |
{membership} | Stan członkostwa | MEMBERSHIP, new_sponsor |
{subtitle} | Dodatkowy kontekst | Członek od 3 miesięcy |
{userid} | Identyfikator użytkownika na platformie | 12345678 |
{chatimg} | Adres URL awatara użytkownika | https://... |
{contentimg} | Adres URL dołączonego obrazu | https://... |
{rewardTitle} | Nazwa nagrody, gdy źródło udostępnia pole tytułu nagrody na najwyższym poziomie | Wyróżnij moją wiadomość |
{meta} | Ustrukturyzowane dane zdarzenia (JSON) | {"viewers":100} |
{counterValue} | Bieżąca wartość licznika po kroku Counter lub Check Counter | 12 |
{counterTarget} | Wartość docelowa licznika | 30 |
{counterRemaining} | Wartość docelowa licznika minus wartość bieżąca, z dolnym ograniczeniem do 0 | 18 |
{USERNAME}, {Username} i {username} działają tak samo.
Check Counter udostępnia {counterValue}, {counterTarget} i {counterRemaining}.
Przykładowe szablony
- Wyświetl tekst:
{username} just cheered {hasDonation}! - Ustaw źródło tekstowe OBS:
{username}: now {counterValue}, need {counterTarget} - Relay Chat:
[{source}] {username}: {message} - TTS:
{username} says {message} - Alert wpłaty:
{username} donated {donation} - {subtitle} - Etykieta termiczna:
{username}, nowy wiersz, a następnie{donation}. Zobacz Przewodnik po drukarce termicznej zawierający konfigurację drukarki, etykiety o stałym rozmiarze i kompletny przepływ. - Discord Call Webhook:
{"content":"{message}","username":"{username}","avatar_url":"{chatimg}"}
{donation} w zwykłej wiadomości czatu), symbol zastępczy jest zastępowany pustym tekstem zamiast wyświetlać dosłownie {donation} jako tekst.
7. Lista dobrych praktyk
- Nadaj nazwy i kolory węzłom, aby w przyszłości było jasne, do czego służy każda gałąź.
- Testuj przy użyciu wbudowanego symulatora (Send Test Event) przed uruchomieniem przepływu na żywo.
- Grupuj logikę blisko źródła. Filtruj jak najwcześniej, aby ograniczyć przetwarzanie w kolejnych krokach.
- Zapamiętuj powtórzenia w węzłach stanu. Używaj liczników, przełączników i znaczników czasu, aby unikać podwójnych alertów.
- Dokumentuj pola meta. Gdy dodajesz własne klucze
meta— opisz je, aby nakładki i zdalni klienci korzystali z nich spójnie.
8. Dalsze możliwości
Uruchamiaj własne przepływy ze Stream Deck lub API: nazwane wyzwalacze, szablon początkowy, wykrywanie przepływów, dodatkowe dane, przykłady HTTP/WebSocket/P2P i gesty pokrętła.
Chcesz dowiedzieć się więcej?
- Użyj Węzły stanu (liczniki, przełączniki, zegary), aby zachować kontekst między zdarzeniami.
- Połącz Zmienne i logika do budowania kolejek, losowań lub systemów punktacji.
- Podłącz się do systemu Punkty i nagrody , aby widzowie mogli celowo uruchamiać przepływy.
- Korzystasz z aplikacji desktopowej SSApp? Odblokuj Węzły własnego JavaScript do dowolnej logiki, której nie obejmują wbudowane węzły.
- Sprawdź Dokumentacja wydarzeń aby zapoznać się ze szczegółową dokumentacją danych zdarzeń wszystkich platform.
Ten przewodnik jest celowo samodzielny — skopiuj go lokalnie, dostosuj do swojego zespołu i eksperymentuj dalej w edytorze.
9. Własny JavaScript Tylko SSApp / aplikacja desktopowa
Dwa węzły edytora Event Flow pozwalają pisać dowolny JavaScript wykonywany w łańcuchu przetwarzania przepływu: Własny kod (Custom Code) (wyzwalacz) i Wykonaj własny kod (Execute Custom Code) (akcja). Pozwalają zrobić to, czego nie da się wyrazić za pomocą wbudowanych węzłów.
new Function() / eval(). Otwórz edytor przez Aplikacja desktopowa SSApp aby je włączyć. W trybie rozszerzenia węzły są wyszarzone i mają etykietę "Tylko aplikacja desktopowa".
Ctrl+S lub Cmd+S robi to samo. Cancel pozostawia węzeł bez zmian.
Custom Code — węzeł wyzwalacza
Przeciągnij Własny kod (Custom Code) z grupy Zaawansowane w panelu Wyzwalacze na obszar roboczy. Działa jako warunek: przepływ jest kontynuowany tylko wtedy, gdy kod zwraca true.
true lub false.function(message) { ... }Musi zwracać: wartość logiczną —
true aby pozwolić przepływowi kontynuować, false aby go zatrzymać.Dostępne: obiekt
message (zobacz API message poniżej), a także convertCurrency(value, targetCurrency, source) i convertToUSD(value, source).
Execute Custom Code — węzeł akcji
Przeciągnij Wykonaj własny kod (Execute Custom Code) z grupy Integracje w panelu Akcje . Może zmieniać wiadomość, blokować ją lub dodawać metadane odczytywane przez kolejne węzły.
function(message, result) { ... }Powinien zwracać: obiekt lub Promise scalany z
result— zobacz API result.Dostępne:
message (dane zdarzenia), result (bieżący stan wyniku przepływu), printThermal(html, options), a także convertCurrency(value, targetCurrency, source) i convertToUSD(value, source).
printThermal('<strong>' + message.chatname + '</strong>'). SSApp bez dodatkowych komunikatów kolejkuje zadanie przez natywny interfejs drukowania Windows, używając zapisanych ustawień. Przepływ może je nadpisać opcjami takimi jak { width: '58mm', marginLeft: '3mm', marginRight: '3mm', marginTop: '2mm', marginBottom: '2mm', feed: '3mm', marginType: 'printableArea' }. Zwrócenie Promise pozwala Event Flow zaczekać na przesłanie i zgłosić błędy.
Obiekt message
Oba węzły otrzymują pełne dane zdarzenia jako message. Poniższe pola są zawsze dostępne; zdarzenia konkretnych platform mogą zawierać dodatkowe pola.
| Pole | Typ danych | Opis | Przykład |
|---|---|---|---|
message.chatmessage | ciąg tekstowy | Tekst wiadomości czatu (może zawierać HTML) | "Hello stream!" |
message.chatname | ciąg tekstowy | Nazwa wyświetlana nadawcy | "CoolViewer" |
message.userid | ciąg tekstowy | Identyfikator użytkownika na platformie | "12345678" |
message.type | ciąg tekstowy | Platforma źródłowa (małymi literami) | "twitch", "youtube", "kick" |
message.hasDonation | ciąg tekstowy | Sformatowany tekst wpłaty, jeśli jest dostępny | "$5.00", "500 bits" |
message.donoValue | liczba / tekst | Równowartość wpłaty w USD, jeśli źródło ją udostępnia; prawidłowe wartości zerowe są respektowane. Event Flow w razie potrzeby używa currency.js do przeliczania znormalizowanych etykiet hasDonation do porównań progowych, przyjmując między innymi 100 nieznanych nazwanych jednostek = $0.01 USD. Nie odczytuje kwot wpłat z tekstu pola chatmessage . | 5 |
message.event | ciąg tekstowy | Identyfikator typu zdarzenia | "new_follower", "cheer", "raid" |
message.membership | ciąg tekstowy | Stan członkostwa, jeśli dotyczy | "MEMBERSHIP" |
message.subtitle | ciąg tekstowy | Drugi wiersz kontekstu | "Member for 3 months" |
message.mod | wartość logiczna | Nadawca jest moderatorem | true |
message.subscriber | wartość logiczna | Nadawca jest subskrybentem | true |
message.vip | wartość logiczna | Nadawca ma status VIP | true |
message.chatimg | ciąg tekstowy | Adres URL awatara użytkownika | "https://..." |
message.meta | obiekt | Dowolne dane strukturalne dołączone do zdarzenia | { viewers: 120 } |
convertCurrency(message.hasDonation, 'EUR', message.type) aby przeliczyć sformatowaną etykietę wpłaty na EUR. Zwraca liczbę lub null , gdy żądana waluta docelowa nie jest obsługiwana. Przelicznik używa przybliżonych wewnętrznych kursów Social Stream Ninja; nie kontaktuje się z zewnętrzną usługą kursów walut.
Co zwraca akcja
Zwróć zwykły obiekt z kodu akcji. Wszystkie uwzględnione pola zostaną scalone z result ; pominięte pola zachowują bieżące wartości.
| Zwracane pole | Typ danych | Efekt |
|---|---|---|
modified | wartość logiczna | Ustaw true jeśli zmienisz message . Informuje kolejne węzły, że dane zdarzenia zostały zmienione. |
message | obiekt | Zwróć wiadomość (ewentualnie zmienioną), aby kolejne węzły otrzymały twoje zmiany. |
blocked | wartość logiczna | Ustaw true aby uniemożliwić wyświetlenie lub przekazanie wiadomości. |
return { modified: false, message };Nawet jeśli niczego nie zmienisz, zwrócenie
message zapewnia przekazanie jej do następnego węzła.
Przykładowe fragmenty kodu
Wklej dowolny z tych przykładów do pola JavaScript Code w węźle odpowiedniego typu.
Fragmenty kodu wyzwalaczy — zwracaj true aby kontynuować przepływ
!queue, !raffle, !enter).Fragmenty kodu akcji — zwracaj { modified, message }
{meta}).Pełny przykład — bot próśb o funkcje dla VIP-ów
Ten przepływ nasłuchuje !feature <text> od subskrybentów, VIP-ów lub moderatorów, formatuje ją jako prośbę o funkcję i przekazuje do drugiego miejsca docelowego (np. Discorda).
Krok 1 — wyzwalacz Custom Code (wklej w polu JavaScript Code wyzwalacza):
Krok 2 — akcja Execute Custom Code (wklej w polu JavaScript Code akcji):
Krok 3 — akcja Relay Chat: dodaj za akcją standardowy węzeł Relay Chat i skonfiguruj docelowy Discord (lub inne miejsce). Własny kod nie jest tu potrzebny — przeformatowane message.chatmessage jest automatycznie przekazywane dalej.
!feature dark mode support i sprawdź, czy miejsce docelowe Relay Chat otrzymuje przeformatowany tekst.
Kwestie bezpieczeństwa
window oraz wszystkich API udostępnianych przez skrypt preload (np. window.ninjafy). Traktuj importowane pliki przepływów jak kod wykonywalny — importuj je wyłącznie z zaufanych źródeł.
- Brak izolacji dostępu do sieci. Kod akcji może wywoływać
fetch(). Jeśli przyjmujesz przepływy od innych osób, sprawdź kod JS przed ich aktywowaniem. - Błędy są przechwytywane. Błąd wykonania w twoim kodzie zwraca
false(wyzwalacz) lub pominięcie działania (akcja) oraz zapis do konsoli DevTools — przepływ nie ulega awarii. - Dotyczy to także błędów składni. Błąd typu
SyntaxErrorpodczas kompilacji jest przechwytywany w ten sam sposób. Sprawdź DevTools (F12), jeśli węzeł pozornie nic nie robi.