如何检测机器人是否在语音频道并修复退出命令返回异常问题
解决方案
实现逻辑
- 检测机器人是否在当前服务器的语音频道,直接读取
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); }
修改说明
- 提前取出机器人当前所在的语音频道赋值给
botVoiceChannel变量,避免重复读取 - 新增机器人未加入语音频道的判断,符合要求的场景时直接返回
leave.errorNotChannel提示 - 把原来调用
channel.leave()的逻辑改成调用botVoiceChannel.leave(),属于冗余优化,避免特殊场景下的误操作
内容的提问来源于stack exchange,提问作者DaCyclon
相关产品推荐
相关产品推荐

