ゲームと報酬を作る

ギフト、支援額、チャットコマンドを配信上の効果に変えます。

TikTok ギフトに反応するゲームを作れます

Social Stream Ninja がイベントを取得してページへ送り、JavaScript がロケットの加速、庭の成長、敵の出現、共同目標の進行などを決めます。操作としきい値はゲーム側で設定します。SSN からプラットフォームのギフト価格は変更できません。

ここから始める: 3 つのテンプレートを試し、ルールで使う指標を選びます: プラットフォーム単位、ギフトの識別情報、推定 USD.

音、通知、OBS 操作、webhook には、まず Event Flow。ゲーム画面や独自の状態管理が必要なら、カスタム HTML ページを使えます。完成済みのゲームは ゲームギャラリー.

小さく編集しやすい 3 つのテンプレート

各プレビューにはサンプルボタンと「最後に受信したデータ」の表示があります。サンプルは架空のイベントで、購入ではありません。プレビューモードはライブセッションに接続しません。

  • コインロケット: TikTok の 10 コイン、Twitch の 100 Bits、または Facebook の 100 スターで 1 回加速します。余りは視聴者とプラットフォームごとに蓄積します。金額の設定は COST を HTML 内で変更してください。
  • 共同支援目標: 4 つのプラットフォームの推定 USD 支援を合わせて月面基地を作ります。次を変更します: GOAL_USD 。進行表示をダメージ、燃料、タイマーなどに置き換えることもできます。
  • ギフトとイベントの庭: 指定した TikTok ギフトで花が増え、取得された TikTok フォローで木が増え、無料の !water コマンドで水が増えます。次を設定します: GIFT_ID に取得した ID を設定するか、次を設定します: GIFT_NAME に正確な名前を設定します。「Demo flower」は架空の例です。

HTML ソースを開き、次を探します: EDIT THIS RULE または EDIT THESE RULES。 receive(data) 関数内でサンプル操作を自分のゲーム処理に置き換えます。接続・計数用の補助処理は starter.js。見た目は次のファイルで定義しています: starter.css.

テンプレートを配信につなぐ

  1. SSN を起動してチャット取得元を接続し、チャットとギフト/支援の行が dock に届くことを確認します。TikTok の設定は 接続モード.
  2. 次を付けずにテンプレートを開きます: ?demo。SSN セッション ID を指定し、パスワードが設定されていれば併せて指定してください。
  3. ブラウザーで確認したら、同じ URL を OBS のブラウザーソースに追加します。サイズは例えば 1000 × 800 です。次を追加すると &clean 検査表示、接続状態、操作ボタンを非表示にできます。
https://socialstream.ninja/games/templates/coin-rocket.html?session=YOUR_SESSION&password=YOUR_PASSWORD&clean

ベータサイトを使う場合は /beta/ を次の前に残してください: games/。パスワード未設定ならそのパラメーターを省略してください。セッションのリンクは公開しないでください。

既定の接続は SSN オーバーレイと同じ iframe ブリッジです。ホストされた WebSocket の取得チャット経路を使うには、SSN の 拡張機能からサーバー経由でドックにメッセージを送信(Send messages to Dock from Extension via server) を有効にして、次を追加します: &server2。参照先: WebSocket ガイド にローカル設定の説明があります。テンプレートは次も受け付けます: &server2&localserver および &localserverport=3000. localserver だけでは経路は有効になりません。旧方式の server は別のチャンネルを使い、dock からの配信が必要な場合があります。

自分用のコピーを作る

ベータ版のソース ZIP をダウンロード し、展開します。編集する場所は games/templates/。フォルダー構造を保ってください。テンプレートは次のファイルも読み込みます: js/local-server-url.jsを読み込み、支援目標は currency.js をリポジトリのルートから読み込みます。

展開したフォルダーをローカルのウェブサーバーで配信します。Python があれば、そのフォルダーで次を実行します:

python -m http.server 8080 --bind 127.0.0.1

次に使うもの: http://127.0.0.1:8080/games/templates/coin-rocket.html?session=YOUR_SESSION をブラウザーまたは OBS で開きます。別の場所でホストする場合も相対パスを保持してください。ビルドは不要です。

操作に必要なコイン数はどう決める?

数値を決める前に、何を測るかを選びます:

ルール参照:例
プラットフォーム固有の単位TikTok meta.coinsPerGift × meta.tiktokGiftCount があればそれを、または明示的な hasDonation のような表示ラベル 10 coins, 100 bits、または 100 Stars.10 コインごとに 1 回加速します。
特定のギフトTikTok meta.giftId または meta.giftNameとその個数。一致するギフトごとに花が一つ増えます。推定 USD 額は関係ありません。
比較可能な支援額getDonationValueUSD(data) 取得元: currency.js.推定 1 米ドルごとに燃料が 10 増え、25 米ドルで目標達成です。
無料の操作やメンバーシップの操作取得元が実際に提供する event、またはチャットコマンド。フォローで木が育ち、新規サブスクリプションでアニメーションが再生されます。

金額の扱いを決めます: 完全一致 (coins === 10)、 イベントごとの最低額 (coins >= 10)、または 累積残高。ロケットは残高を積み立てます。25 コインなら 2 回加速し、5 コインが残ります。「ちょうど 10」のルールでは 25 コインを無視します。イベントごとに複数の段階から一つを選ぶなら、高いしきい値から判定し、下位の操作まで同時に実行されないようにします。

TikTok では視聴者がコインを購入し、表示されたコイン価格でギフトを贈ります。自分の LIVE で利用できるギフトを選び、ルールの公開前に取得データを確認してください。ギフト名、個数、コイン、ダイヤモンドは別の指標です。USD の推定額を割って「正確なコイン数」に戻したり、ダイヤモンドをコイン扱いしたりしないでください。 TikTok によるコインとギフトの説明.

取得データがギフト名/個数やダイヤモンド表示だけの場合、コインの明示的なメタデータがなければコインのテンプレートはそのイベントを飛ばします。ギフト自体を指定するルールか推定 USD のテンプレートを使ってください。コインの情報は SSN のギフト対応表由来の場合もあるため、正確な価格が重要なら現在の LIVE ギフト一覧と照合します。カタログや取得方式は異なり、全 TikTok メッセージに必ず付く共通のコインフィールドはありません。

各プラットフォームが送るデータ

type は取得元を示します。 event は存在する場合に操作を示します。利用可否は取得モード、設定、プラットフォームの提供内容次第です。例は SSN の現行コードを説明するもので、すべてのアカウントで全イベントが届く保証ではありません。

プラットフォーム支援とイベントのデータ区別するもの
TikToktype: "tiktok", event: "gift"。投げ銭の取得では次が含まれる場合があります: hasDonation および donoValue。メタデータには ID、名前、個数、ギフトごとのコイン数やダイヤモンド数、連続ギフトの識別子などが含まれます。コインはギフトの購入用、ダイヤモンドはクリエイターへの報酬です。SSApp の WebSocket 取得は連続ギフトを確定してから転送しますが、ブラウザー取得は累積更新を送る場合があります。TikTok の投げ銭取得を無効にすると、金額のないギフトイベントになることがあります。
TwitchCheer では Bits を使います。例: hasDonation: "100 bits"。API での取得では次を使うことがあります: event: "cheer" および donoValue: 1。画面上のチャット取得ではイベント識別子がない場合があります。サブスクリプション、ギフトサブスク、レイド、チャンネルポイントは別々の操作です。通常のメッセージのサブスクバッジは新規サブスクではありません。直接の Cheer と Twitch 拡張機能内の Bits は別の連携です。
Facebook表示された Live Chat のスター行は、例えば次を提供します: hasDonation: "100 Stars" および donoValue: 1で、次のフィールドはありません: event という識別子。コメント API はチャット本文からスターを推測しません。DOM 取得には画面に表示されたスターの行が必要です。通常のコメントやリアクションは有料の金額を示しません。
YouTubesuperchat および supersticker は元の通貨の金額を次に含みます: hasDonation。ギフトでは次を使います: jeweldonation 付随する値: N Jewels、または 1 YouTube Gift (金額が非表示の場合)。視聴者はジュエルでギフトを贈り、クリエイターはルビーを獲得します。メンバーシップとギフトメンバーシップはジュエルとは別イベントです。Super Thanks は別の商品で、ライブチャットの投げ銭イベントを保証しません。

各プラットフォームの参考資料: TikTok ダイヤモンド; Twitch Bits とサブスクリプション; Meta のスターの概要; YouTube Super Chat と Super Stickers; YouTube のジュエル、ギフト、ルビー。用語は 2026 年 9 月 29 日に確認しました。利用条件や提供状況は各プラットフォームの最新ページを確認してください。

他の取得元も投げ銭、ギフト、メンバーシップ、購入を報告することがあります。次を確認してください: イベントリファレンス を確認してから、テンプレートの isSupport フィルターへ追加します。商品購入やギフトサブスクが自動的に投げ銭になるわけではありません。例えば YouTube はギフト購入と受取通知を区別しており、両方を数えると同じギフトに二重で報酬を与えます。

donoValue と currency.js を正しく使う

hasDonation は元の表示ラベルです。例: €5.00 または 100 bits. donoValue は取得元が任意で指定する数値の USD 額です。表示文から推定する前に、ゼロを含む有効な指定値を優先してください。元の表示文はそのまま表示用に残します。

<script src="../../currency.js"></script>
<script>
// From games/templates/: use the existing helper, including its zero handling.
var usd = getDonationValueUSD(data);
// Use usd for your rule; display data.hasDonation for the original amount/unit.
</script>

現在の換算仕様: SSN の現在の推定値は TikTok の 1 コインが 0.01 米ドル、1 ダイヤモンドが 0.005 米ドル、Twitch の 1 Bit または Facebook の 1 スターが 0.01 米ドル、YouTube の 1 ジュエルが 0.005 米ドルです。価格不明の TikTok ギフトは 1 個につき 1 コインで計算し、ジュエル数のない YouTube ギフトは独自の暫定値 0.01 米ドルを使います。法定通貨も内部の概算レートで換算し、リアルタイム為替サービスは使いません。

これらは SSN 内の比較値です。視聴者の支出、クリエイターの純収益、出金可能残高を共通に表すものではありません。取得方式によって推定値も変わり得ます。特に未知の TikTok ギフトを 1 コインとする代替値は、その実際の価格が 1 コインだと証明するものではありません。

使用しないでください: donoValue || convertToUSD(...)。意図的なゼロを無視してしまいます。支払いを検出するために次の文字列から数字を取り出さないでください: chatmessage で支払いを判定したり、次を必須にしたりしないでください: event === "donation"。Facebook スターと一部の Cheer にはイベント識別子がありません。支援目標のテンプレートは支援の種類を選別してから共通の換算関数を呼びます。

ソース: currency.js および ペイロードのリファレンス。ギフトのメタデータは任意です。サンプルは取得データにないフィールドを作りません。

連続ギフトを重複して数えない

TikTok が同じ連続ギフトの累積数を 1、2、3 と報告する場合、それは 6 個ではなく 3 個です。加算する操作では受信済みの最大数または最大額を記憶し、増分だけを反映します。同じ合計の完了通知では追加しません。

// All three events refer to the same streak:
// incoming total: 1, 2, 3, 3
// added to game:  1, 1, 1, 0
var newCoins = RewardStarter.increment(data, RewardStarter.coins(data), 'coins');

補助関数は TikTok のネイティブなグループ/送信者/ギフト ID があれば優先し、その後に meta.tiktokGiftStreakId またはメッセージ ID を使います。通常のメッセージ ID も再送の抑止に使います。次のフィールドは repeatEnd を待たない設計です。ブラウザー取得では提供されない場合があるためです。連続ギフト終了後の 1 回だけの操作が必要なら、実際に届くフィールドで別の完了判定を実装します。

学習用テンプレートは最大 2,000 個の識別子をメモリに保持します。リセットや再読み込みで記憶と進行状況は消えます。安定した ID がなければ確実な重複除外はできず、同じチャンネルを二重取得すると異なる ID が付く場合もあります。まず取得経路を一つにしてください。ロケットはプラットフォームとユーザー ID で残高を分け、ID がなければ表示名を使うため、同名の人は残高を共有する場合があります。再起動後も有料報酬を保持したい場合は、状態の保存と再送の処理を追加してください。

独自ゲームなしで報酬を作る

次の場所で: Event Flowでは、次を使用します: プロパティを比較 付随する値: donoValue, 以上と USD のしきい値を設定して、音声、アニメーション、OBS 操作などにつなぎます。比較では送信元の有効な指定値を優先し、必要に応じて既存の通貨換算を使います。

特定の TikTok ギフトでは次を比較します: meta.giftId または meta.giftNameを比較し、フローを TikTok ギフトイベントに限定します。次の数値比較は hasDonation も USD として比較され、コイン数の直接比較ではありません。コイン専用ルールではネイティブメタデータや独自コードを使います。

受信メッセージごとのしきい値と、累積残高や連続ギフトのカウンターは別のものです。Event Flow のしきい値がテンプレートの加算や重複除外を自動で行うとは限りません。次を使ってください: 状態ノード で状態を持つフローを作るか、ゲーム側でその処理を行います。

有料の操作につなぐ前に試す

  1. サンプルボタンを使ってください。1 → 2 → 3 の連続ギフトでは 3 個分だけ加算し、明示的なゼロの例では USD を増やさず、価格不明の例では正確なコイン数を増やさないことを確認します。
  2. 実際の取得元を接続し、受信データを確認します。ギフト名/ID、金額/単位、個数、ルールで想定するイベントを確かめてください。サンプルで確認できるのはルールであり、実際のライブ取得ではありません。
  3. OBS のシーンで、イベントの繰り返し、再接続、再読み込みを確認してください。メモリ内の進行を残したい間は、ブラウザーソースを停止・更新しないようにします。

無人または AFK のゲームでは、SSN、取得元、ゲームページを動かし続ける必要があります。PC のスリープ、ログインの期限切れ、切断で操作が止まります。テンプレートは取り逃したイベントの補完や返金処理を行いません。自動反応は無人配信の収益化を許可するものではありません。その形式に適用される最新の LIVE・収益化ルールを確認してください。

何も届かなければ、SSN の dock、セッション/パスワード、通信設定の順に確認します。チャットは届くのにギフトが一致しなければ、データと投げ銭/イベントフィルターを確認します。フォローやサブスクリプションの取得可否は送信元によります。詳しくは イベントリファレンス。詳しい接続方法は カスタムオーバーレイ.