如何为Node.js Twitch Bot实现!Timeout @(user)超时命令?
实现Twitch Bot管理员超时命令功能
你的现有代码存在几个问题:仅匹配了无参数的!timeout命令、错误使用了发送者ID而非目标用户、超时时间不符合需求,同时未覆盖主播作为管理员的场景。以下是修正后的完整实现:
client.on("message", (channel, user, message, self) => { if (self) return; // 匹配带目标用户的!timeout命令,支持@用户名或纯用户名格式 const timeoutMatch = message.match(/^!timeout\s+@?(\w+)$/); if (timeoutMatch) { // 验证发送者是管理员(频道 moderator 或主播) const isAdmin = user.mod || (user.badges?.broadcaster === '1'); if (!isAdmin) { client.say(channel, "只有管理员才能使用该命令"); return; } const targetUser = timeoutMatch[1]; // 发送Twitch超时命令,设置600秒超时 client.say(channel, `/timeout ${targetUser} 600`); client.say(channel, `已将@${targetUser}设置为600秒超时`); } });
关键细节说明:
- 命令解析:通过正则表达式
/^!timeout\s+@?(\w+)$/精准匹配带目标用户的命令,自动提取去掉@符号的纯用户名。 - 权限验证:同时判断发送者是频道 moderator(
user.mod)或主播(通过user.badges中的broadcaster标识),覆盖所有合法管理员身份。 - 超时执行:Twitch的
/timeout命令无需带@符号,直接传入用户名即可,超时时间严格设置为需求的600秒。 - 交互反馈:执行完成后发送聊天消息确认操作,让管理员和观众清晰知晓结果。
如果后续需要支持自定义超时时间,可以扩展正则捕获时间参数,比如/^!timeout\s+@?(\w+)\s+(\d+)$/,将第二个分组作为超时时间传入命令。
内容的提问来源于stack exchange,提问作者christian
相关产品推荐
相关产品推荐

