可以,你的游戏能够响应 TikTok 礼物
Social Stream Ninja 采集事件并发送到你的页面,再由你的 JavaScript 决定效果:推进火箭、种植花园、生成敌人或推进共同目标。操作和阈值由你在游戏中设定。SSN 不能更改平台礼物价格。
从这里开始: 试用三个模板,然后选择规则使用的计量方式: 平台单位、礼物身份或估算 USD.
要触发声音、提示、OBS 操作或 webhook,请先使用 Event Flow。需要游戏界面或自己的游戏状态时,可以使用自定义 HTML 页面。现成游戏请查看 游戏库.
三个小型可编辑模板
每个预览都有示例按钮和“最近收到的数据”检查器。示例是虚构事件,不会购买礼物。预览模式不会加入直播会话。
- 金币火箭: 每 10 枚 TikTok 金币、100 个 Twitch Bits 或 100 颗 Facebook Stars 可推进一次。余量按观众和平台分别累计。修改
COST以设置金额。 - 共同支持目标: 合并四个平台估算的 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.
将模板连接到直播
- 启动 SSN 并连接聊天来源,确认聊天和礼物/支持记录到达 dock。TikTok 设置请参阅 连接模式.
- 打开模板时不要加
?demo,使用你的 SSN 会话 ID。如果设置了会话密码,也需要提供。 - 先在浏览器检查页面,再将同一网址加入 OBS 浏览器源,例如设置为 1000 × 800。添加
&clean以隐藏检查器、连接状态和主播按钮。
https://socialstream.ninja/games/templates/coin-rocket.html?session=YOUR_SESSION&password=YOUR_PASSWORD&clean
使用 beta 网站时,请保留 /beta/ 在以下路径之前: games/。没有密码时请省略密码参数。请勿公开会话链接。
默认连接使用与 SSN 叠加层相同的 iframe 桥接。若要使用托管 WebSocket 的已采集聊天通道,请在 SSN 启用 通过服务器将扩展中的消息发送到停靠面板 设置并附加 &server2。请参阅 WebSocket 指南 了解本地设置;这些模板也接受 &server2&localserver 和 &localserverport=3000. localserver 本身不会启用通道。旧的 server 使用不同通道,并可能需要 dock 向该通道发布数据。
制作自己的副本
下载 beta 源代码 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 枚金币推进一次。 |
| 指定礼物 | TikTok meta.giftId 或 meta.giftName及其数量。 | 每份匹配礼物增加一朵花,与估算的 USD 价值无关。 |
| 可比较的支持价值 | getDonationValueUSD(data) 来自 currency.js. | 每估算 1 美元增加 10 点燃料;25 美元完成目标。 |
| 免费操作或会员操作 | 来源实际提供的 event或聊天命令。 | 关注长出一棵树;新订阅播放动画。 |
确定金额采用 精确匹配 (coins === 10)、 每个事件的最低值 (coins >= 10),或 累计余额。火箭使用累计余额:25 枚金币产生两次推进,并剩余 5 枚。仅匹配“恰好 10”的规则会忽略 25 枚金币。如果每个事件只能从多个档位中触发一个操作,请先检查最高阈值,避免同时触发所有较低档位。
在 TikTok 上,观众购买金币并用来赠送礼物;礼物会显示金币价格。选择自己 LIVE 中可用的礼物,发布规则前检查采集数据。礼物名称、礼物数量、金币和钻石是不同计量方式。不要将 USD 估值反算成“精确金币数”,也不要把钻石数当成金币数。 TikTok 关于金币和礼物的说明.
若采集只提供礼物名称/数量或钻石标签,金币模板会跳过该事件,除非含有明确的金币元数据。可改用礼物身份规则或估算 USD 模板。金币元数据也可能来自 SSN 礼物映射;需要准确价格时,请与当前 LIVE 礼物列表核对。礼物目录和采集方式各异,没有保证每条 TikTok 消息都包含的通用金币字段。
各平台发送什么
type 标识来源; event 在存在时标识操作。是否可用取决于采集模式、设置和平台开放的数据。示例描述的是 SSN 当前代码路径,不保证每个账号都提供所有事件。
| 平台 | 支持与事件数据 | 注意区分 |
|---|---|---|
| TikTok | type: "tiktok", event: "gift"。打赏采集可能提供 hasDonation 和 donoValue。礼物元数据可能包括 ID、名称、数量、每份礼物的金币数或钻石数,以及连送标识。 | 金币用于购买礼物;钻石是创作者奖励。SSApp 的 WebSocket 采集先结算连送再转发;浏览器采集可能发送累计更新。关闭 TikTok 打赏采集后,礼物事件可能不含金额字段。 |
| Twitch | Cheers 使用 Bits,例如 hasDonation: "100 bits"。API 采集可能使用 event: "cheer" 和 donoValue: 1;页面聊天采集可能没有事件标记。 | 订阅、赠送订阅、突袭和频道积分是不同操作。普通消息上的订阅者徽章不表示新订阅。直接 Cheers 与 Twitch 扩展中使用的 Bits 属于不同集成。 |
可见的 Live Chat Stars 记录会提供例如 hasDonation: "100 Stars" 和 donoValue: 1,不含 event 标记。 | 评论 API 不会从聊天文字推断 Stars。DOM 采集需要可见的 Stars 记录;普通评论和互动不能证明付款金额。 | |
| YouTube | superchat 和 supersticker 将原始货币金额放在 hasDonation。礼物使用 jeweldonation 带有 N Jewels,或 1 YouTube Gift (金额隐藏时)。 | 观众花费 Jewels 购买礼物,创作者获得 Rubies。会员和赠送会员是独立事件,不是 Jewels。Super Thanks 是另一个产品,并不保证产生直播聊天打赏事件。 |
平台参考资料: TikTok 钻石; Twitch Bits 与订阅; Meta 的 Stars 概述; YouTube Super Chat 与 Super Stickers; YouTube Jewels、Gifts 与 Rubies。术语核对日期为 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 金币为 0.01 美元、一颗 TikTok 钻石为 0.005 美元、一个 Twitch Bit 或 Facebook Star 为 0.01 美元、一颗 YouTube Jewel 为 0.005 美元。无价格的 TikTok 礼物默认每份按一枚金币估算;没有 Jewel 数量的 YouTube Gift 使用独立的 0.01 美元占位估值。法币换算也使用内部近似汇率,并非实时汇率服务。
这些只是 SSN 用于比较的数值,并不统一代表观众花费、创作者净收入或可提现余额。不同采集方式可能产生不同估值。尤其是未知 TikTok 礼物回退为一枚金币,并不能证明它实际只需一枚金币。
不要使用 donoValue || convertToUSD(...):这会丢弃有意设置的零值。请勿从以下字段提取数字来判断付款: chatmessage 来检测付款,也不要强制要求 event === "donation":Facebook Stars 和部分 Cheers 没有事件标记。支持目标模板先筛选支持类型,再调用共用换算函数。
来源: currency.js 以及 数据格式参考。礼物元数据是可选的;示例不会虚构采集中缺少的字段。
同一连送只计一次
TikTok 可能为同一次连送依次报告累计数量 1、2、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 ,因为浏览器采集可能从不提供该字段。如果设计要求在连送结束后只触发一次,需要基于实际连接提供的字段另写完成规则。
这些教学模板最多在内存中保存 2,000 个标识。重置或刷新会清除记忆和游戏进度。没有稳定 ID 的消息无法可靠去重;同一频道的第二条采集通道也可能使用不同 ID。请先使用单一采集通道。火箭按平台和用户 ID 区分余额,缺少 ID 时改用显示名称,因此同名用户可能共用余额。需要长期保存的游戏应先加入状态存储和重播处理,再依赖付费奖励在重启后保留。
无需自定义游戏的奖励
在 Event Flow,使用 比较属性 带有 donoValue, 大于或等于以及 USD 阈值,然后连接声音、动画或 OBS 控制等操作。比较时优先采用来源提供的有效值,必要时使用现有的货币换算。
要匹配指定 TikTok 礼物,请比较 meta.giftId 或 meta.giftName,并将流程限定为 TikTok 礼物事件。对以下字段的数值比较: hasDonation 也会转换为 USD,并非直接比较金币。金币专用规则应采用原生元数据或自定义代码。
按每条消息判断阈值,与累计余额或连送计数不同。不要假定 Event Flow 阈值会自动实现模板的累计和去重逻辑。请使用 状态节点 处理需要状态的流程,或将这些逻辑保留在游戏中。
连接付费操作前先测试
- 使用示例按钮测试。1 → 2 → 3 连送应只增加三份礼物的价值;显式零值示例不应增加 USD;未知价格不应增加精确金币数。
- 连接真实来源并检查实际采集的数据。确认礼物名称/ID、金额/单位、数量,以及规则需要的事件。示例只能验证规则,不能证明平台直播采集成功。
- 在 OBS 场景中验证重复事件、重连和刷新。如果需要保留内存中的当前进度,请避免关闭或刷新该浏览器源。
无人值守或 AFK 游戏需要 SSN、来源采集和游戏页面持续运行。电脑休眠、登录过期或断线会中断操作;这些模板不会补发遗漏事件,也不处理退款。自动响应不代表允许通过无人值守直播获利;请核对平台对该直播形式的现行 LIVE 和变现规则。
如果收不到数据,先检查 SSN dock,再检查会话/密码和传输设置。如果聊天能到达但礼物不匹配,请检查数据和打赏/事件过滤器。关注和订阅事件的可用性因来源而异;请参阅 事件参考。更多连接说明请参阅 自定义叠加层.