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

Discord.js音乐机器人队列结束后独自在频道时无法自动退出问题

问题原因

你的代码存在3个核心问题,导致退出逻辑永远无法触发:

  • 提前执行return截断后续代码:第一个if (queue.channel.members.size != 1)没有加花括号包裹分支逻辑,只有紧跟的message.client.queue.delete语句属于该判断分支,下一行的return无论判断结果是否成立都会执行,直接终止函数运行,后续的退出频道代码完全不会被调用
  • 成员判断逻辑不严谨:直接用总成员数判断,没有过滤其他机器人账号,无法准确识别频道内是否存在真人听众
  • 冗余重复判断:已经进入if (!song)分支,后续再次判断if (!song)没有任何意义
修复后代码
const queue = message.client.queue.get(message.guild.id);

if (!song) {
  const endembed = new MessageEmbed().setColor("#F0EAD6")
    .setAuthor(`Music Queue ended.`);
  
  // 过滤频道内的非机器人真人用户,统计数量
  const realListenerCount = queue.channel.members.filter(member => !member.user.bot).size;

  if (realListenerCount === 0) {
    // 无真人听众,退出频道并清理队列
    queue.channel.leave();
  }
  // 无论是否退出,都清理当前队列
  message.client.queue.delete(message.guild.id);
  
  // 统一发送队列结束提示
  return queue.textChannel.send(endembed).catch(console.error);
}
逻辑说明
  • 优先统计频道内的真实听众数量,排除其他机器人的干扰,判断更准确
  • 只有当没有真人听众时才执行退出频道操作,有真人时保持机器人在频道内等待新的播放请求
  • 合并了重复的队列清理、消息发送逻辑,减少冗余代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 02:54:04