Discord.js v13 语音频道数据不更新问题该如何解决?
问题原因
该问题是未开启Discord机器人的语音状态网关意图导致的:discord.js v13及后续版本默认不会主动同步服务器成员的语音状态变动,仅会在机器人启动时拉取一次初始状态缓存,后续成员加入/离开/切换语音频道的动作不会更新本地缓存,因此你读取到的interaction.member.voice.channel一直是启动时的旧数据。
解决步骤
- 第一步:进入Discord开发者平台的对应机器人管理页,找到
Privileged Gateway Intents配置项,开启Server Members Intent和Voice State Intent两个权限开关。 - 第二步:修改机器人客户端初始化代码,显式声明启用所需的网关意图,示例代码如下:
const { Client, GatewayIntentBits } = require('discord.js'); const client = new Client({ intents: [ GatewayIntentBits.Guilds, // 斜杠指令运行必需的基础意图 GatewayIntentBits.GuildMembers, GatewayIntentBits.GuildVoiceStates, // 语音状态同步核心意图 // 可根据自身需求添加其他需要的意图,比如消息相关意图等 ] });
- 可选兼容方案:如果担心存在缓存同步延迟的极端情况,可以在读取语音状态前主动拉取最新的成员数据,修改后的指令处理代码如下:
client.on('interactionCreate', async interaction => { if (!interaction.isCommand()) return; // 强制拉取最新成员数据,绕过本地缓存 const latestMember = await interaction.member.fetch(); console.log(latestMember.voice.channel); interaction.reply('done'); });
修改完成后重启机器人即可正常获取实时语音频道状态。
内容的提问来源于stack exchange,提问作者blaimi
相关产品推荐
相关产品推荐

