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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 18:30:04