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

Discord.js v13 无需声明const connection实现退出语音频道及bug修复咨询

修复方案

首先梳理你现有代码的核心问题:

  • 缺少else分支:无论是否进入if判断,最后一行的不在频道提示都会被触发,这是你触发命令后异常收到提示的直接原因
  • API调用逻辑错误:你当前使用的joinVoiceChannel是加入语音频道的接口,完全没有实现断开连接的功能
  • 你不需要自行声明变量存储连接实例,@discordjs/voice库提供了getVoiceConnection全局方法,可以直接获取当前服务器的活跃语音连接,从根源避免你自己管理连接实例导致的判断bug

首先你需要在代码顶部引入对应工具方法:

const { getVoiceConnection } = require('@discordjs/voice');

修复后的完整逻辑如下:

if(message.member.voice.channel) {
  // 直接获取当前服务器的机器人语音连接,无需提前存储实例
  const connection = getVoiceConnection(message.guild.id);
  if(connection) {
    connection.destroy();
    message.channel.send("已断开连接!");
  } else {
    message.channel.send("我不在语音频道中");
  }
} else {
  message.channel.send("你需要先加入语音频道才能使用该命令");
}

如果你完全不想声明connection变量,可以用可选链操作符简化写法,没有活跃连接时也不会抛出异常:

if(message.member.voice.channel) {
  getVoiceConnection(message.guild.id)?.destroy();
  message.channel.send("已执行断开操作");
} else {
  message.channel.send("你需要先加入语音频道才能使用该命令");
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 18:45:06