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

如何检测机器人是否在语音频道并修复退出命令返回异常问题

解决方案

实现逻辑

  • 检测机器人是否在当前服务器的语音频道,直接读取message.guild.me.voice.channel即可,该值为null时代表机器人未加入任何语音频道
  • 在原有判断逻辑中新增机器人在线状态判断,符合需求场景时直接返回指定错误提示即可

完整修改后代码

execute(message) {     
    const { channel } = message.member.voice;
    const botVoiceChannel = message.guild.me.voice.channel;

    const serverQueue = message.client.queue.get(message.guild.id);
    // 用户未加入语音频道的原有判断
    if (!channel) return message.reply(i18n.__("leave.errorNotChannel")).catch(console.error);
    // 新增:机器人未加入任何语音频道时返回对应错误
    if (!botVoiceChannel) return message.reply(i18n.__("leave.errorNotChannel")).catch(console.error);
    // 用户和机器人不在同一频道的原有判断
    if (serverQueue && channel !== botVoiceChannel)
      return message
        .reply(i18n.__mf("leave.errorNotInSameChannel", { user: message.client.user }))
        .catch(console.error);
    
    botVoiceChannel.leave();
    message
    .channel
    .send(i18n.__("leave.result"))
    .catch(console.error);
}

修改说明

  1. 提前取出机器人当前所在的语音频道赋值给botVoiceChannel变量,避免重复读取
  2. 新增机器人未加入语音频道的判断,符合要求的场景时直接返回leave.errorNotChannel提示
  3. 把原来调用channel.leave()的逻辑改成调用botVoiceChannel.leave(),属于冗余优化,避免特殊场景下的误操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 00:36:05