如何在Twitch+Discord Bot中实现主播直播状态检测?
解决Twitch主播直播状态检测问题
问题说明
你当前尝试使用的twitch-api-v5是Twitch旧版API,而代码中实际引入的TwitchAPI是新版twitch.js库,两者方法不兼容导致检测失败。以下是基于你现有代码的修正方案,使用新版Twitch Helix API实现直播状态检测功能。
实现步骤
- 新增主播ID获取逻辑(Twitch新版API优先使用ID查询)
- 编写直播状态检测函数,支持定时轮询
- 记录上次状态,避免重复输出相同提示
- 将检测逻辑整合到机器人启动流程中
修改后的关键代码
首先在现有代码中添加以下变量与函数:
// 新增:目标主播信息及状态记录 const targetStreamerName = 'errxino'; // 指定要检测的主播用户名 let targetStreamerId = null; let wasLive = false; // 记录上次检测的直播状态 // 新增:获取主播ID(新版API需要用ID查询直播) async function getStreamerId() { try { const user = await twitch.helix.users.getUserByName(targetStreamerName); if (user) { targetStreamerId = user.id; console.log(`已获取主播 ${targetStreamerName} 的ID:${targetStreamerId}`); } else { console.error(`未找到主播 ${targetStreamerName}`); } } catch (error) { console.error('获取主播ID失败:', error); } } // 新增:检测主播直播状态 async function checkStreamStatus() { if (!targetStreamerId) return; try { const stream = await twitch.helix.streams.getStreamByUserId(targetStreamerId); const isLive = !!stream; // 仅在状态变化时输出提示 if (isLive && !wasLive) { console.log(`主播 ${targetStreamerName} 已开播!直播标题:${stream.title}`); wasLive = true; // 可在此添加Discord通知逻辑,比如发送消息到指定频道 } else if (!isLive && wasLive) { console.log(`主播 ${targetStreamerName} 已下播`); wasLive = false; } } catch (error) { console.error('检测直播状态失败:', error); } }
然后在Discord的ready事件中启动检测流程:
client.on('ready', () => { // 原有的ready事件代码保持不变... // 新增:启动直播检测流程 getStreamerId().then(() => { // 首次启动立即检测一次 checkStreamStatus(); // 每5分钟轮询一次(可根据需求调整间隔,最小建议1分钟避免API限流) setInterval(checkStreamStatus, 5 * 60 * 1000); }); return; });
注意事项
- 权限检查:确保你的Twitch Access Token拥有
user:read:broadcast或channel:read:stream权限 - API限流:Twitch API有请求次数限制,不要设置过短的轮询间隔(官方建议每分钟不超过1次)
- 错误处理:代码中已添加基础错误捕获,可根据需要扩展日志或重试逻辑
内容的提问来源于stack exchange,提问作者Err Xino
相关产品推荐
相关产品推荐

