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

discord.js v13检测用户加入语音频道及voiceStateUpdate事件无响应排查

Discord.js v13 voiceStateUpdate事件无响应排查与实现方案

核心问题排查与解决

1. 必须配置正确的Intents

v13开始Discord.js要求显式声明机器人需要获取的事件权限,语音状态变更需要GUILD_VOICE_STATES intent,同时基础的GUILDS intent也不能少。示例代码:

const { Client, Intents } = require('discord.js');
const client = new Client({
  intents: [
    Intents.FLAGS.GUILDS,
    Intents.FLAGS.GUILD_VOICE_STATES
  ]
});

2. 确认事件监听逻辑正确

v13中voiceStateUpdate事件的监听写法未发生根本性变化,参数为oldState(变更前的语音状态)和newState(变更后的语音状态)。你可以通过对比channelId来判断用户是加入还是离开频道:

// 初始化语音人数变量
let activeVoiceUsers = 0;

client.on('voiceStateUpdate', (oldState, newState) => {
  // 用户从无频道变为有频道:加入语音
  if (!oldState.channelId && newState.channelId) {
    activeVoiceUsers++;
    console.log(`当前语音频道人数:${activeVoiceUsers}`);
  }
  // 用户从有频道变为无频道:离开语音
  else if (oldState.channelId && !newState.channelId) {
    activeVoiceUsers--;
    console.log(`当前语音频道人数:${activeVoiceUsers}`);
  }
});

3. 检查机器人服务器权限

确保机器人在目标服务器中拥有「查看频道」权限,否则无法接收该服务器的语音状态变更事件。

官方文档参考

Discord.js v13官方文档中对voiceStateUpdate事件的定义、参数说明以及Intents的要求,可在其官方文档的事件章节中查阅,核心内容包括事件触发条件、状态对象的属性说明。

内容的提问来源于stack exchange,提问作者ali-kingX

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 18:57:09