0. 全体像をつかむ
このエディターとは?
Event Flowエディターは、Social Stream Ninjaで高度な自動処理を作るための機能です。ポップアップの簡単なスイッチに加えて、独自の振り分けロジックを記述できます。次のような場合に使用します:
- フィルターを使ってサービス間でチャットを中継します(例:コマンドを除外してTwitchからDiscordへ転送)。
- AND/OR/NOTロジックで、ロイヤルティに基づくコマンド、キーワードゲーム、抽選参加条件を作れます。
- フロー内で追加した情報に基づき、カスタムオーバーレイ、音声、OBSシーン、Webhookを起動します。
- 1つの自動処理で複数のプラットフォームを組み合わせられます(Kick、Twitch、YouTubeを1つのフローに通すなど)。
ポップアップは手軽なプリセット、Event Flowは独自のワークフローを作る道具として使えます。
起動と基本操作
- メインダッシュボードのメニューからEvent Flowエディターを開きます(デスクトップアプリまたは拡張機能)。
- 各プロジェクトはエクスポートするまでローカルに保存されます。次を使用してください:
Exportでバックアップまたは共有します。 - 次の名前のキャンバス内で作業します: フロー。各フローは同時に複数のプラットフォームを購読できます。
ノード一覧
- 入力 (左のポート)はメッセージの文脈を受け取ります。
- 出力 (右のポート)は、編集を反映した同じ文脈を出力します。
- ロジックノードは、次の両方を出力する場合があります:
trueチャンネルと、必要に応じて出力するfalseチャンネル。
ペイロードの構造
すべてのメッセージはJSONオブジェクトを持ちます。必須キーは次に従います: docs/event-reference.html (platform、type、chatname、chatmessageなど)。独自データは次に付けてください: meta.
すべてのフローはトリガーから始まります
アクションノード(緑)は単独では動きません。上流のトリガーノード(青)が次の値を出したときだけ実行されます: true。アクションだけをつないだフローは、有効に見えても、開始するものがないため常に待機したままです。ノード名は、そのノードが 何をするかを表し、いつ発生するかを表すものではありません: メッセージを取り上げる は、フローがそのノードに達したときにメッセージを取り上げます。ほかの場所でメッセージを取り上げても発火しません。
Flow Actionsオーバーレイ(アクション出力)
選ぶ項目: 寄付:お祝い演出+音声 を使うと、用意済みのアニメーションと合成音声のお礼クリップを利用できます。または高度な次のテンプレートを使用します: 寄付:アニメーション+サウンド+OBSフィルター テンプレート。新しいアラートテンプレートは、先に設定とテストができるよう無効な状態で追加されます。OBSテンプレートでは、両方のフィルターアクションで同じソースと、通常はオフの同じフィルターを選択します。
音声クリップを再生(Play Audio Clip) とMulti-Alertsは、拍手、ドラムロール、風切り音、レジなどの効果音、ラベル付きの英語合成音声フレーズ4種類、シンプルな音を含む17種類のサウンドライブラリを共有しています。 試聴/停止(Listen / Stop) では再生状態を確認しながらローカルでプレビューできます。録音のアップロードやアプリ内のローカルファイルの選択もできます。名前やメッセージが変化する場合は、既存の次の機能を使用します: テキストを読み上げる アクション。
Event Flowは次を通じて再生します: Flow Actions ブラウザーソースを通じて再生します。Multi-Alertsは専用のブラウザーソースを通じて再生します。同じイベントが二重に再生されないよう、音声はどちらか一方だけで有効にしてください。Tabキーでフローノードに移動し、EnterまたはSpaceキーを押すとプロパティを編集できます。
次のようなノード: 音声クリップを再生(Play Audio Clip), メディアオーバーレイを表示(Display Media Overlay)やOBS操作には、描画用の画面が必要です。その画面は、次で提供するFlow Actionsオーバーレイページです: actions.html。配信ソフト(OBS/Streamer.botのブラウザドックなど)で動かしたままにし、Event Flowのアクションの表示先を用意してください。
- Social Stream Ninjaのメインポップアップを開きます(次から読み込まれるウィンドウ: popup.html または拡張機能のアイコン)。
- 「Flow Actions」カードまでスクロールします。次を使用します: [リンクをコピー] ボタンを使うか、カード内のURLをクリックします。
- リンクの形式:
https://socialstream.ninja/actions.html?session=YOURSESSION。OBSブラウザソース(推奨1920×1080)に貼り付けるか、オーバーレイ用のブラウザで開きます。
- 「Play Audio Clip」または「Display Media Overlay」アクションで次をクリックします: ローカルファイルを選択(Choose Local File).
- クリックする項目: OBS用のローカルFlow Actions URLをコピー(Copy Local Flow Actions URL for OBS) 生成されたlocalhostのURLを、ホストされたFlow ActionsのURLの代わりに使用します。
- SSAppを起動したままにしてください。選択したファイルを移動した場合は、アクションに戻って次をクリックします: 再リンク(Relink).
Chrome拡張機能だけではディスク上のファイルを配信できません。デスクトップアプリを併用できない場合は、アップロードまたはホストされたURLを使用します。次を参照してください: Event Flow用メディアファイルガイド で設定の全手順を確認できます。
読み込まれたオーバーレイは、次のことができます:
- フローをきっかけにGIPHYや直接指定したメディアURL、テキスト、紙吹雪を表示します。
- 視聴者に聞こえるよう、音声(読み上げ、音声クリップ)をローカルで再生します。
- ポップアップの「Flow Actions」セクションにあるWebSocket設定を使ってOBSを操作します(シーン切り替え、ソースの有効/無効、GDI+/FreeTypeのテキスト更新、リプレイバッファーなど)。
- ブラウザソースAPI: 次の場合にのみ使用できます:
actions.htmlがOBSのブラウザーソース内で実行され、次が設定されている場合: 高度なアクセスレベル。ここではシーン切り替えが動作し、録画 / 配信 / リプレイバッファの操作も代替経路として使えます。 - OBS WebSocket: を、安定した操作のために推奨します。Social Stream NinjaのFlow ActionsはOBS 28以降のOBS WebSocket v5 APIを使用し、次のポートで新しいリクエスト形式を想定しています:
4455. - パスワード: は任意です。次を追加するのは必要な場合だけです:
&obspw=...をFlow ActionsのURLに追加するのは、OBSサーバーで認証を必須に設定している場合だけです。 - オーバーレイの診断: 末尾に追加
&obsdebug=1を次のページのURLに追加します:actions.html。トラブルシューティング中にオーバーレイ上に小さなOBS接続状態バッジを表示したい場合に使います。 - テキストソースを設定(Set Text Source): はOBSのText (GDI+)およびText (FreeType 2)入力を直接更新し、次のようなEvent Flowのテンプレート変数に対応しています:
{counterValue}および{counterTarget}. - 旧4.xの環境: まだobs-websocket 4.x/次のポートを使用している場合:
4444の場合、OBS / obs-websocketを更新するまで、ソース / フィルター / ミュート / テキスト操作は動作しません。
専用のガイドを参照してください: OBSコントロールガイド に、すべてのトリガー、アクション、設定手順、検証済みのレシピが記載されています。
- 開く項目: obs-websocket-test.html.
- 確認する項目:
GetVersion,GetCurrentProgramScene、およびGetSceneListが成功することを確認します。 - Event Flow全体の自動処理をテストする前に、そこで該当するアクションの確認を実行します。
1. ノードを流れるもの
Event Flowの実行処理は、すべての接続線を通じて2つのものを渡します:
- ペイロード – イベントまたはメッセージのデータオブジェクト。
- ゲート信号 – 次の値: true/false という、次のノードを実行するかどうかを示すビット。
false というConditionノードの端子)。これにより、フロー全体を複製せずに代替処理を簡単に作れます。
入力の要件
- イベントソース (Twitch Message、Timers、Manual Triggerなど)は上流の入力を無視し、独自のペイロードを作って常に次を出力します:
trueノード自体でエラーが発生した場合を除きます。 - 変換ノードとロジックノード はペイロードを読み取り、フィールドの書き換え、状態の設定、ゲート信号の変更を行えます。変更先:
false. - アクションノード はゲートが次の状態のときにのみ発火します:
true。アクションをつなぎ続けたい場合は、更新済みのペイロードを出力することもできます。
出力パターン
単一の出力
ほとんどのノードには出力が1つあります。入力されたもの(ペイロード+ゲート)は、ノードで編集しない限りそのまま出力されます。
True/False出力
Condition、Compare、Regex、Logicノードには2つの出力ポートがあります。 True は緑色のポートを通って進みます。 false は灰色/赤色のポートで利用できます。
そのまま渡す場合と上書きする場合
一部のノード(Set Variable、Math、Text Replace)はペイロードを変更しますが、次はそのまま転送します: true/false 状態を入力からそのまま渡します。ほかのノード(NOT、AND、OR)はブール値を自身で再計算します。
2. ロジックノード早見表
この説明では、「true/falseは何を意味するのか」というよくある疑問に答えます。
NOT
- 入力:前のノードから得た1つのブール値(true/false)。
- 出力:反転したブール値と、変更していないペイロード。
- 標準の動作: NOTの入力に何も接続されていない場合、評価結果は次になります:
falseとなるため、出力はtrue.
AND
- 入力:2つ以上のブール信号(A、B、...)。余分なポートは空のままで構いません。
- 出力:
trueとなるのは、接続されたすべての入力が次に等しい場合だけです:true. - 複数の条件を同時に満たす必要がある場合にANDを使用します(「サブスクライバーである」 および 「チャットメッセージに!raffleを含む」など)。
OR
- 送信する値:
true条件: いずれかの 接続された入力がtrueである場合です。 - 複数プラットフォームのトリガーに便利です。TwitchとYouTubeのメッセージノードを1つのORに接続し、その先のアクションをまとめます。
いいえ。多くのノードには複数条件をまとめたフィルターがあります(例:「Filter User Level」+「Contains Text」)。組み込みの設定で条件の組み合わせを表せない場合や、ほかの分岐と共有するロジックの接続点を作りたい場合にのみANDを使用してください。
true。意味のある入力へ接続するかノードを無効にし、意図せずフローを通さないようにしてください。
3. 小さなフローの例
A. コマンド以外のメッセージに自動返信
この例では、メッセージがコマンドの場合にRegexノードが true を出力します。 false 端子を返信につなぎます。通常のチャットには返答し、コマンドはそのまま通過させます。
B. ANDで複数の確認を必須にする
ANDノードは、正しいキーワードを使ったメンバーだけをDiscordに中継するために使います。両方の分岐がブール値の結果をANDノードに送ります。後続へ進むのは、 最初の分岐 のペイロードです。
C. NOTノードで重複アラートを防ぐ
State Check は、アラートがミュートされている場合に true を出力します。その結果を反転させることで、NOTノードはフラグが次の場合にのみお祝い演出を再生します: false.
D. 2つの音からランダムに再生
ANDゲートは必須です。 入力のないNOTは、次を出力します: true をRANDOMゲートが動作していないときにも返すため、サウンドBは次のようなすべてのチャットメッセージで再生されてしまいます: トリガーに一致しないメッセージ。 トリガーをANDの2つ目の入力に接続すると、条件に一致するメッセージでのみサウンドBが再生されます。このパターンは音声だけでなく、どちらか一方を実行するアクションの組み合わせにも使えます。
4. 反射、ループ、中継のフィードバックを防ぐ
複数の画面間でチャットを中継する機能は便利ですが、自分の出力を受信すると無限に反復する場合があります。次の対策を行ってください:
受信トリガーと送信するRelay Chatの宛先は、どちらも次の2つを区別します:
youtube および youtubeshorts。両方の種類へ送る場合は、中継アクションを2つ使ってください。参照: YouTube ShortsとEvent Flow.
反射とは、送信したメッセージが送信先チャットから再び取得されることです。現在のRelay Chatは、認識した反射をスキップします。別個のNo Reflectionsチェックボックスはありません。ドックやオーバーレイでの表示を隠したり制限したりするには、次を使います: 反射フィルター(Reflection Filter) 次を使うアクション: すべてブロック(Block All), 最初の1件を許可(Allow First)、または すべて許可(Allow All)。これは再取得時の表示を制御するもので、送信を制御するものではありません。次を参照してください: TwitchとYouTubeの中継手順 で設定の全手順を確認できます。
- 中継システムの重複を避けます。 同等のEvent Flow経路を使う場合は全体のRelay allを無効にし、同じチャットをつなぐ他のサービスも確認してください。独自メタデータがプラットフォームのチャットを経由しても残る保証はありません。
- DebounceまたはCooldownノードを使用する と、X秒に1回だけ発火するアラートを作れます。
- 循環は意図的に断ち切ります。 2つの分岐が互いに送り合う場合は、状態変数(「currentlyRelaying」)を確認するロジックノードを追加し、そのフラグが立っているときにフローを早期終了させます。
5. 入力、出力、実用上の質問
ノードには何が入力されますか?
- メッセージの完全なペイロード。
- ゲートのビット(
true/false). - ノードが明示的に要求する追加のコンテキスト(状態変数、タイマー)。
ノードから出るものは?
- ノードで編集しない限り、同じペイロード。
- 再計算したゲート判定値(ロジックノード)またはそのまま渡す判定値(アクション)。
- チャット送信など、ほとんどの副作用はペイロードを変更しませんが、ポイントアクションは次のような状態フィールドを追加できます:
pointsTotalまたはpointsSpendErrorを後続のロジックで使えます。
分岐はいつ使いますか?
次に応じて異なる反応をさせたい場合です: true と false。必要な色の出力(緑 = true、灰色/赤 = false)から次のノードへ線をドラッグします。
false 出力に何も接続しなければ、フローはそこで終了します。これはフィルター(「判定を通らないものはすべてブロック」)には適していますが、必要に応じて次の経路も接続してください: false の経路を、代替処理が必要な場合に接続します。
よくある質問と回答
- 2つのフィルターを組み合わせるたびにANDが必要ですか? いいえ。多くのノードに複数の判定が含まれています(例えば基本のMessage Filterはキーワード+役割に対応しています)。ANDは高度な条件の組み合わせや、異なるノードからの信号をまとめる場合にのみ使用してください。
- true/falseの値はどのようにNOTノードに届きますか? 緑の出力を持つノードは、次を出力します:
trueが既定です。条件を満たさない場合は、次を出力します:false。その線をNOTにつなぐと結果を反転できます。 - falseを返してもペイロードを出力できますか? はい。ペイロードはfalse出力にも流れます。その分岐をどこへ接続するかは自分で決められます。
- TikTokのチームメンバーを判定するには? 選ぶ項目: TikTokチームメンバー をUser Roleノードで選択します。受信メッセージのTikTokファンクラブ/チームのレベルやバッジを認識し、Main Chat Overlayの設定には依存しません。
- Speak Textノードごとに別の音声を使えますか? はい。プロバイダーが対応する音声名またはIDを、次に入力します: 音声の上書き(Voice Override)を指定するか、空欄にしてFlow Actionsの標準TTSを使います。
6. テンプレート変数のリファレンス
いくつかのアクションノード(Show Text、Set Text Source、Send Message、Relay Chat、TTS Speak、Call Webhook、Print Thermal Label)は、次に対応しています: テンプレート変数 は実行時にイベントデータに置き換えられます。変数名は次のように波括弧で囲みます: {username}.
基本変数(後方互換)
| 変数 | 別名 | 説明 | 例 |
|---|---|---|---|
{username} | {chatname} | ユーザーの表示名 | CoolViewer123 |
{message} | {chatmessage} | チャットメッセージの本文 | 皆さん、こんにちは! |
{source} | - | プラットフォーム名(先頭を大文字にした表記) | Twitch、YouTube |
{type} | - | プラットフォーム名(元の値) | twitch, youtube |
{donation} | {hasDonation} | 寄付/投げ銭の表示ラベル | $5.00、500 bits |
拡張変数
| 変数 | 説明 | 例 |
|---|---|---|
{displayname} | 表示名(別フィールド) | CoolViewer123 |
{donoValue} | 提供または推定された米ドル換算の寄付額。Event Flowは、正規化された次の情報からしきい値の判定額を算出します: hasDonation の表示例:値、 $値、値+単位、または短縮された単位/値の形式。名前付きの未知の仮想単位は100単位=0.01米ドル、価格不明のTikTokギフトは1ギフトにつき1コイン(0.01米ドル)として扱います。 {donationAmount} は旧形式の別名です | 5.00 |
{event} | イベントの種類を示す識別子 | cheer, raid, new_follower |
{membership} | メンバーシップ状態 | MEMBERSHIP, new_sponsor |
{subtitle} | 追加の文脈 | メンバー歴3か月 |
{userid} | プラットフォーム上のユーザーID | 12345678 |
{chatimg} | ユーザーのアバターURL | https://... |
{contentimg} | 添付画像URL | https://... |
{rewardTitle} | ソースがトップレベルの報酬タイトルフィールドを提供する場合の報酬名 | 自分のメッセージを強調表示 |
{meta} | 構造化されたイベントデータ(JSON) | {"viewers":100} |
{counterValue} | CounterまたはCheck Counter処理後の現在のカウンター値 | 12 |
{counterTarget} | カウンターの目標値 | 30 |
{counterRemaining} | カウンターの目標から現在値を引いた値。下限は0 | 18 |
{USERNAME}, {Username}、および {username} はいずれも同じように使えます。
Check Counter が公開する {counterValue}, {counterTarget}、および {counterRemaining}.
テンプレート例
- テキストを表示(Show Text):
{username} just cheered {hasDonation}! - OBSテキストソースを設定:
{username}: now {counterValue}, need {counterTarget} - Relay Chat:
[{source}] {username}: {message} - TTS:
{username} says {message} - 寄付アラート:
{username} donated {donation} - {subtitle} - 感熱ラベル:
{username}、改行、次の値を入力します:{donation}。参照先: 感熱プリンターガイド で、プリンター設定、固定サイズのラベル、完成したフローを確認できます。 - DiscordのCall Webhook:
{"content":"{message}","username":"{username}","avatar_url":"{chatimg}"}
{donation} が通常のチャットメッセージにない場合など)、プレースホルダーは、そのままの文字列を表示する代わりに空の文字列に置き換えられます。文字列: {donation} というテキスト。
7. 実用上の確認事項
- 名前と色 ノードに名前と色を付けると、後で各分岐を見分けられます。
- 内蔵シミュレーターでテストする (Send Test Event)で確認してから、本番でフローを有効にしてください。
- ソースの近くにロジックをまとめます。 後続の不要な処理を避けるため、できるだけ早い段階でフィルターを適用します。
- 繰り返し使う情報は状態ノードに保存します。 カウンター、切り替え状態、タイムスタンプを使ってアラートの重複を防ぎます。
- metaフィールドを記録します。 カスタムの値を追加した場合:
metaキーを追加した場合は、オーバーレイやリモートクライアントとの整合性を保つために記録してください。
8. さらに詳しく
Stream DeckまたはAPIからカスタムワークフローを実行する:名前付きトリガー、開始用テンプレート、ワークフローの検出、追加データ、HTTP/WebSocket/P2Pの例、ダイヤル操作。
さらに詳しく知りたいですか?
- 使う項目: 状態ノード (カウンター、スイッチ、タイマー)で、イベント間の文脈を保持します。
- 組み合わせるもの: 変数とロジック で、順番待ちシステム、抽選、スコア計算を作れます。
- 次に接続します: ポイントと報酬 の仕組みを使うと、視聴者が意図的にフローを起動できます。
- 使用中のアプリは SSAppデスクトップアプリですか? ロック解除 カスタムJavaScriptノード で、組み込みノードにはない任意のロジックを記述できます。
- 次を確認してください: イベントリファレンス に、すべてのプラットフォームのペイロードが詳しく記載されています。
このガイドは単独でも使えるように作成されています。ローカルにコピーしてチーム用に調整し、エディターでさまざまな方法を試してください。
9. カスタムJavaScript SSApp/デスクトップ版のみ
Event Flowエディターでは、2種類のノードで任意のJavaScriptを記述し、フローの処理中に実行できます: カスタムコード(Custom Code) (トリガー)と カスタムコードを実行(Execute Custom Code) (アクション)。組み込みノードで表現できない処理を実現するための手段です。
new Function() / eval()。次からエディタを開きます: SSAppデスクトップアプリ で有効にします。拡張機能モードではノードがグレー表示になり、次のラベルが付きます: 「デスクトップ専用」.
Ctrl+S または Cmd+S も同じ処理を行います。キャンセルした場合、ノードは変更されません。
Custom Code — トリガーノード
ドラッグする項目: カスタムコード(Custom Code) の送信元: 高度な機能 グループ。場所: トリガー パネルからキャンバスに配置します。ゲートとして働き、コードが次を返した場合にのみフローを続行します: true.
true または false.function(message) { ... }必須の戻り値: ブール値 —
true でフローを続行し、 false で停止します。利用可能: オブジェクト:
message (参照: メッセージAPI を参照)、さらに convertCurrency(value, targetCurrency, source) および convertToUSD(value, source).
Execute Custom Code — アクションノード
ドラッグする項目: カスタムコードを実行(Execute Custom Code) の送信元: 連携(Integrations) グループ。場所: アクション パネル内。メッセージの変更、ブロック、後続ノードが読み取れるメタデータの追加ができます。
function(message, result) { ... }推奨される戻り値: 次にマージされるオブジェクトまたはPromise:
result— 参照: 結果API.利用可能:
message (イベントのペイロード)、 result (現在のフロー結果の状態)、 printThermal(html, options)に加え、 convertCurrency(value, targetCurrency, source) および convertToUSD(value, source).
printThermal('<strong>' + message.chatname + '</strong>')。SSAppはWindowsのネイティブ印刷APIを通じて、保存済み設定で確認なしにジョブをキューへ送ります。フローでは次のようなオプションで上書きできます: { width: '58mm', marginLeft: '3mm', marginRight: '3mm', marginTop: '2mm', marginBottom: '2mm', feed: '3mm', marginType: 'printableArea' }。Promiseを返すことで、Event Flowが送信を待ち、エラーを報告できます。
オブジェクト: message
両ノードは完全なイベントペイロードを次として受け取ります: message。以下のフィールドは常に利用でき、プラットフォーム固有イベントでは追加フィールドがある場合があります。
| フィールド | データ型 | 説明 | 例 |
|---|---|---|---|
message.chatmessage | 文字列 | チャットメッセージのテキスト(HTMLを含む場合があります) | "Hello stream!" |
message.chatname | 文字列 | 送信者の表示名 | "CoolViewer" |
message.userid | 文字列 | プラットフォームのユーザーID | "12345678" |
message.type | 文字列 | 送信元プラットフォーム(小文字) | "twitch", "youtube", "kick" |
message.hasDonation | 文字列 | 存在する場合は、書式設定された寄付の文字列 | "$5.00", "500 bits" |
message.donoValue | 数値/文字列 | ソースが提供する場合の米ドル換算の寄付額。有効なゼロ値も尊重されます。Event Flowは代替として次を使用します: currency.js による、正規化された値の換算: hasDonation の表示からしきい値を比較します。名前付きの未知の単位は100単位=0.01米ドルとして扱います。次は解析しません: chatmessage の文章から寄付額を読み取ることはしません。 | 5 |
message.event | 文字列 | イベントの種類を示す識別子 | "new_follower", "cheer", "raid" |
message.membership | 文字列 | 該当する場合のメンバーシップ状態 | "MEMBERSHIP" |
message.subtitle | 文字列 | 補足のコンテキスト行 | "Member for 3 months" |
message.mod | 真偽値 | 送信者がモデレーターである | true |
message.subscriber | 真偽値 | 送信者がサブスクライバーである | true |
message.vip | 真偽値 | 送信者がVIPである | true |
message.chatimg | 文字列 | ユーザーのアバターURL | "https://..." |
message.meta | オブジェクト | イベントに付属する任意の構造化データ | { viewers: 120 } |
convertCurrency(message.hasDonation, 'EUR', message.type) で、書式設定された寄付表示をユーロに換算します。戻り値は数値、または次の値です: null (指定した換算先通貨に対応していない場合)。換算にはSocial Stream Ninja内部の概算レートを使い、外部の為替サービスには接続しません。
アクションが返すもの
アクションコードからプレーンなオブジェクトを返します。含めたフィールドは、フローの次の部分にマージされます: result オブジェクト。省略したフィールドは現在の値を維持します。
| 戻り値のフィールド | データ型 | 効果 |
|---|---|---|
modified | 真偽値 | 設定する項目: true 次を変更した場合: message フィールド。ペイロードが編集されたことを後続ノードに伝えます。 |
message | オブジェクト | 変更したメッセージを返すことで、後続ノードに変更を渡せます。 |
blocked | 真偽値 | 設定する項目: true でメッセージの表示や中継を防ぎます。 |
return { modified: false, message };何も変更していなくても、次を返すと
message が次のノードへ渡されます。
スニペット例
対応するノードのJavaScript Code欄へ、いずれかの例をコピーしてください。
トリガーのスニペット — 戻り値: true でフローを続行します
!queue, !raffle, !enter).アクションのコード例 — 返す値: { modified, message }
{meta}).完全な例 — VIP向け機能追加リクエストボット
このフローは次を待ち受けます: !feature <text> をサブスクライバー、VIP、モデレーターから受信し、機能追加リクエストの形式に整えて別の送信先(Discordなど)に中継します。
手順1 — Custom Codeトリガー (トリガーのJavaScript Code欄に貼り付けます):
手順2 — Execute Custom Codeアクション (アクションのJavaScript Code欄に貼り付けます):
手順3 — Relay Chatアクション:アクションの後に標準のRelay Chatノードを置き、Discordなどの送信先を指定してください。ここでは独自コードは不要です。整形済みの message.chatmessage は自動的に通過します。
!feature dark mode supportを送り、Relay Chatの送信先が整形済み文字列を受け取ることを確認します。
セキュリティ上の考慮事項
window オブジェクトと、preloadスクリプトが公開するすべてのAPI(例: window.ninjafy)。取り込むフローファイルは実行可能コードとして扱い、信頼する提供元のフローだけを取り込んでください。
- ネットワークのサンドボックスはありません。 アクションコードから次を呼び出せます:
fetch()。他の人が共有したフローを使う場合は、有効にする前にJavaScriptを確認してください。 - エラーは捕捉されます。 コードの実行時エラーでは、次を返します:
false(トリガー)または何もしない動作(アクション)となり、DevToolsコンソールへ記録されます。フローはクラッシュしません。 - 構文エラーも捕捉されます。 コンパイル時の
SyntaxErrorも同様に捕捉されます。ノードが何もしていないように見える場合は、DevTools(F12)を確認してください。