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
相关产品推荐
相关产品推荐

