Discord.js如何从join.js导出connection变量供disconnect.js导入使用
结论
不建议你这么做,原因如下:
- 首先
connection是join指令run方法内的局部变量,只有当用户触发join指令、方法执行时才会被创建,Node.js 模块导出是静态的,你无法直接将这个动态生成的局部变量导出给其他模块使用。 - 就算你把
connection提升到join.js的顶层作用域存储再导出,也会存在多服务器兼容问题:如果你的机器人同时在多个服务器的语音频道中,顶层变量只会存储最后一次创建的连接,其他服务器执行disconnect指令时会拿到错误的连接对象,直接引发逻辑错误。 - 你当前使用的
getVoiceConnection是@discordjs/voice官方提供的标准方法,它本身已经内置了按服务器ID管理连接的逻辑,稳定性和兼容性都远高于你自己手动导出共享变量,完全没必要额外改造。
如果你确实想自行管理连接(非必要)
可以将连接存储在客户端对象上全局共享,示例逻辑如下:
// join.js 中存储 client.voiceConnections ??= new Map() client.voiceConnections.set(channel.guild.id, connection) // disconnect.js 中取用 const connection = client.voiceConnections.get(channel.guild.id) connection?.destroy()
不过这种方案本质上和官方getVoiceConnection的实现逻辑一致,没有额外优势,更推荐直接使用官方方法。
内容的提问来源于stack exchange,提问作者Suspense
相关产品推荐
相关产品推荐

