Vfinity2.0 α
开发者

自定义 TikTok 桥接

连接 Vfinity 到你自行运行的 TikTok LIVE 连接器,而非使用内置桥接

连接时 Vfinity 通常会自动启动自带的 TikTok 辅助工具。如果你已经运行了连接器(例如 TikFinity 或你自己编写的工具),Vfinity 可以改为从其 WebSocket 读取 TikTok LIVE 事件。

内置桥接(Vfinity)

随 Vfinity 启动并与其进行私密通信,无需打开端口。它能在直播断开时重新加入、等待你的直播开始,并报告每位观众的角色身份。

自定义 WebSocket(TikFinity 或其他)

连接到你持续运行的 WebSocket 服务器。Vfinity 读取其发送的所有事件,由你的连接器决定如何以及何时加入直播间。

无论采用哪种方式,你的事件、提醒、投掷、目标和排行榜均能以相同的方式运作。Twitch、Kick 和 YouTube 不受此选择的影响。

切换到你的连接器

断开 TikTok 连接

当 TikTok 处于连接状态时,连接类型会被锁定。请先在 设置连接 的 TikTok LIVE 卡片上点击断开连接。

选择自定义 WebSocket

在同一张卡片上,打开 TikTok高级连接 并将连接类型设置为自定义 WebSocket(TikFinity 或其他)。

输入其地址

填写与你的连接器匹配的 WebSocket 主机 与 WebSocket 端口。Vfinity 的初始默认值为 localhost 和 21213。

连接

启动你的连接器,然后点击连接到直播间。Vfinity 将连接到 ws://host:port,并在 Socket 打开时立即视作已进入直播间。

“设置 › 连接”中的 TikTok LIVE 卡片包含用户名设置,而连接类型位于“TikTok高级连接”下方。

内置辅助工具不会打开任何专属端口,因此 Vfinity 中没有任何组件会与你的连接器争夺端口。

Vfinity 发送给连接器的内容

如果填写了 TikTok 用户名 字段,Vfinity 会在 Socket 打开时立即请求你的连接器加入该直播间:

{ "command": "connect", "username": "yourname" }

当你的连接器已经知晓要读取哪场直播时,请将用户名留空。

点击刷新礼物列表会发送 {"command":"getGifts"}。请回复一条 giftList 消息,其 data 为礼物列表,每个礼物包含 id、name、diamondCount 和 imageUrl。

你的连接器发送的内容

每条消息发送一个 JSON 对象,指明事件名称及其数据:

{
  "event": "gift",
  "data": {
    "uniqueId": "mika_22",
    "nickname": "Mika",
    "profilePictureUrl": "https://example.com/mika.jpg",
    "giftId": 5655,
    "giftName": "Rose",
    "diamondCount": 1,
    "repeatCount": 5,
    "giftType": 1,
    "repeatEnd": true
  }
}

type 可替代 event 使用。不包含 data 的消息将被直接作为数据本身读取。数字也可以采用数字字符串格式传入,就像 TikTok 发送大计数值的方式一样。

eventVfinity 读取的字段
gift观众信息、giftId、giftName、diamondCount、repeatCount、giftType、repeatEnd、giftPictureUrl
chat观众信息、comment
like观众信息、likeCount、totalLikeCount
follow, share观众信息
subscribe观众信息、subMonth、gifted
question观众信息、questionText
envelope观众信息、coins、people
roomUserviewerCount
roomStatsfollowerCount、viewerCount、totalLikeCount、title

此外,它还能识别以 Vfinity 内置桥接相同格式发送的 member、social、emote、superFan、battle 和 goalUpdate。无法识别的事件名称将被忽略。

观众信息

每个观众事件都以相同的字段开头:uniqueId(即 @账号)、nickname,以及可选的 userId 和 profilePictureUrl。没有 uniqueId 的观众将显示为 "unknown"。

若要使角色规则生效,请添加一个 roles 对象,其中 isModerator、isSubscriber、isSuperFan、isFollower 和 isOwner 为布尔值,followRole、gifterLevel 或 teamMemberLevel 为数字。不知道的值请直接忽略:缺失的角色将被视为未知,绝不会默认为 false,且需要该角色的规则将无法通过。

连击礼物

当观众持续点击送礼时,TikTok 会多次发送连击礼物(giftType 为 1)。请在连击过程中发送附带 repeatEnd: false 的更新消息,最后发送一条 repeatEnd: true 的消息。Vfinity 仅对最后一条消息做出反应,因此 5 个 Rose 的连击只会被计算为一次 5 个 Rose。若不包含 giftType 或 repeatEnd,则每条送礼消息都会单独计算。

来自你的连接器的礼物与普通礼物走相同的处理路径:匹配事件、模型做出反应、并弹出提醒。

使用轻量服务器进行测试

这个 Node.js 服务器可作为连接器的测试桩。它会打印 Vfinity 发送的内容,并回复一条聊天消息和一个 Rose 连击。

// npm install ws
const { WebSocketServer } = require('ws');

const server = new WebSocketServer({ port: 21213 });

server.on('connection', (socket) => {
  socket.on('message', (raw) => console.log('Vfinity says', raw.toString()));

  const viewer = { uniqueId: 'testviewer', nickname: 'Test Viewer' };
  socket.send(JSON.stringify({ event: 'chat', data: { ...viewer, comment: 'hello' } }));
  socket.send(JSON.stringify({
    event: 'gift',
    data: { ...viewer, giftId: 5655, giftName: 'Rose', diamondCount: 1,
            repeatCount: 5, giftType: 1, repeatEnd: true },
  }));
});

运行该脚本,将 Vfinity 连接到 localhost 和 21213,这两个事件便会出现在控制面板的事件流中。

哪些功能依赖内置桥接

自动重新加入直播与等待直播开始是内置桥接的专属功能。使用自定义连接器时,卡片会在对应位置显示提示说明,且本地 API 的 tiktok.connect 会忽略这两个参数。重新连接 TikTok 完全由你的连接器负责。

若连接失败或超时,请检查你的连接器是否正在运行并监听所填写的 host 和 port。Vfinity 对于 10 秒内未成功打开的连接将放弃尝试。

相关内容