You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Twitch聊天机器人无法执行Timeout/Ban操作的技术求助

问题排查与解决方案

1. 确认机器人账号权限

Twitch的timeout/ban操作要求机器人账号必须是目标频道的主播或管理员(Moderator):

  • 登录机器人账号进入目标频道,确认账号拥有管理员权限(可通过频道设置的用户管理查看);
  • 若使用非主播账号作为机器人,需要主播手动给该账号授予管理员权限。

2. 修复未处理的Promise错误

client.timeout和client.say都是异步Promise方法,原代码未处理异步逻辑,导致未捕获的Promise拒绝错误。需添加await等待执行,并通过try/catch捕获异常:

修改后的消息监听代码:

client.on('message', async (channel, tags, message, self) => {
    if (self) return;

    console.log(`${tags['display-name']}: ${message}`);
    console.log(tags.username);

    const forbiddenWords = ['test1', 'test2', 'test3'];
    // 匹配包含违规词的消息,忽略大小写
    const hasForbiddenWord = forbiddenWords.some(word => 
        message.toLowerCase().includes(word.toLowerCase())
    );

    if (hasForbiddenWord) {
        const timeoutReason = `Explicit language: ${message}`;
        try {
            await client.timeout(channel, tags.username, 10, timeoutReason);
            await client.say(channel, `You got timed out for using explicit language! @${tags.username}`);
            console.log(`${tags.username} has been timed out for: "${message}"!`);
        } catch (err) {
            console.error('操作执行失败:', err);
        }
    }
});

3. 优化违规词匹配逻辑

原代码仅匹配完全等于违规词的消息(比如用户只发test1才触发),实际场景应匹配包含违规词的内容。上述代码用some+includes实现了包含匹配,并添加大小写忽略,更符合需求。

4. 修正/timeout命令格式(若用client.say发送命令)

如果选择通过client.say发送Twitch原生命令,注意:

  • 不需要加@,直接使用用户名:/timeout ${tags.username} 10
  • 确保频道参数是带#的格式(比如#mychannel)

示例代码:

// 替代client.timeout的命令发送方式
await client.say(channel, `/timeout ${tags.username} 10 ${timeoutReason}`);

额外检查点

  • 确认OAuth令牌权限:生成的令牌需包含moderation:read和moderation:manage权限,若权限不足需重新生成;
  • 确认机器人连接频道正确:client.join('#频道名')中的频道名需与目标频道一致,且为小写格式。

内容的提问来源于stack exchange,提问作者Anuin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 23:31:14