无法访问<VoiceChannel>.members与.full属性 如何获取语音频道成员数量
语音频道成员数获取异常解决方案
核心原因
仅开启GUILD_MEMBERS意图无法拉取语音频道成员数据,你漏声明了GUILD_VOICE_STATES(语音状态)意图,该权限是获取语音频道内成员实时状态的必要条件。
修复步骤
- 首先在开发者门户的机器人设置页,开启Server Voice States权限
- 在代码中初始化客户端时,添加
GUILD_VOICE_STATES意图,以discord.js v14为例:
const { Client, IntentsBitField } = require('discord.js'); const client = new Client({ intents: [ IntentsBitField.Flags.Guilds, IntentsBitField.Flags.GuildMembers, // 已开启的成员意图 IntentsBitField.Flags.GuildVoiceStates, // 新增的语音状态意图 ] });
- 重启机器人后即可通过
VoiceChannel.members.size正常获取语音频道内成员数量
备选统计方案
如果仍有缓存相关问题导致数值异常,可以用遍历服务器成员语音状态的方式统计:
// guild为当前语音频道所属的服务器实例,voiceChannelId为目标语音频道ID const voiceMemberCount = guild.members.cache.filter(member => member.voice.channelId === voiceChannelId).size;
额外排查点
- 确认机器人在目标语音频道所属的服务器拥有
查看频道、连接权限 - 如果服务器成员数量较多,可先调用
await guild.members.fetch()拉取全量成员数据后再进行统计,避免缓存不全导致数值不准
内容的提问来源于stack exchange,提问作者Viriato
相关产品推荐
相关产品推荐

