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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 17:05:20