Node.js Twitch机器人!so命令兼容带@/不带@用户名问题求助
解决Twitch机器人!so命令兼容带/不带@用户名的问题
你的问题出在!so命令内部重复拆分消息的逻辑上:当用户输入不带@的用户名时,split('@')会把整个so 用户名作为一个元素,shift()后剩下的args是空数组,导致输出丢失用户名;而用split(' ')的话,带@的用户名会保留前缀,不符合链接要求。
直接修改!so命令的处理逻辑,统一提取并清理用户名即可:
client.on('message', (channel, tags, message, user, self) => { if(self) return; const badges = tags.badges || {}; const isBroadcaster = badges.broadcaster; const isMod = badges.moderator; const isModUp = isBroadcaster || isMod; const args = message.slice(1).split(' '); const command = args.shift().toLowerCase(); // so command if(isModUp && command === 'so') { // 从参数中获取目标用户名,处理掉开头的@符号 const targetUser = args[0]?.replace(/^@/, '').trim(); // 检查用户名是否存在,避免空输出 if(targetUser) { client.say(channel, `Go check out ${targetUser}! www.twitch.tv/${targetUser}`); } else { client.say(channel, '请输入要推荐的用户名,格式:!so 用户名 或 !so @用户名'); } } });
关键修改点:
- 复用外层已经拆分好的
args和command,不需要在!so内部重新拆分消息 - 使用
replace(/^@/, '')移除用户名开头的@符号,不管用户输入带不带@都能得到干净的用户名 - 添加了参数校验,避免用户输入空的
!so命令时输出无效内容
内容的提问来源于stack exchange,提问作者crankyspanner
相关产品推荐
相关产品推荐

