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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 14:15:03