自定义 TikTok 桥接
连接 Vfinity 到你自行运行的 TikTok LIVE 连接器,而非使用内置桥接
连接时 Vfinity 通常会自动启动自带的 TikTok 辅助工具。如果你已经运行了连接器(例如 TikFinity 或你自己编写的工具),Vfinity 可以改为从其 WebSocket 读取 TikTok LIVE 事件。
随 Vfinity 启动并与其进行私密通信,无需打开端口。它能在直播断开时重新加入、等待你的直播开始,并报告每位观众的角色身份。
连接到你持续运行的 WebSocket 服务器。Vfinity 读取其发送的所有事件,由你的连接器决定如何以及何时加入直播间。
无论采用哪种方式,你的事件、提醒、投掷、目标和排行榜均能以相同的方式运作。Twitch、Kick 和 YouTube 不受此选择的影响。
切换到你的连接器
断开 TikTok 连接
当 TikTok 处于连接状态时,连接类型会被锁定。请先在 设置连接 的 TikTok LIVE 卡片上点击断开连接。
选择自定义 WebSocket
在同一张卡片上,打开 TikTok高级连接 并将连接类型设置为自定义 WebSocket(TikFinity 或其他)。
输入其地址
填写与你的连接器匹配的 WebSocket 主机 与 WebSocket 端口。Vfinity 的初始默认值为 localhost 和 21213。
连接
启动你的连接器,然后点击连接到直播间。Vfinity 将连接到 ws://host:port,并在 Socket 打开时立即视作已进入直播间。
内置辅助工具不会打开任何专属端口,因此 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 发送大计数值的方式一样。
event | Vfinity 读取的字段 |
|---|---|
gift | 观众信息、giftId、giftName、diamondCount、repeatCount、giftType、repeatEnd、giftPictureUrl |
chat | 观众信息、comment |
like | 观众信息、likeCount、totalLikeCount |
follow, share | 观众信息 |
subscribe | 观众信息、subMonth、gifted |
question | 观众信息、questionText |
envelope | 观众信息、coins、people |
roomUser | viewerCount |
roomStats | followerCount、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 秒内未成功打开的连接将放弃尝试。
