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

使用Discord.js开发Discord机器人如何获取当前语音频道全部成员

报错原因

你遇到的两个报错都是Discord.js v12及以上版本的API变动导致的:v12开始所有管理器挂载的集合数据都移到了.cache属性下,原来直接调用find、get的旧写法已经失效。

  • 按ID找频道的正确写法:你原来的message.guild.channels.find(c => c.id === 频道ID) 改成 message.guild.channels.cache.get(频道ID),按ID查找用get效率比find更高
  • 按名称找频道的正确写法:你原来的client.channels.get("name", "频道名称")是v11的废弃写法,v12之后按属性查找统一用find,写法为client.channels.cache.find(c => c.name === '频道名称')

语音频道成员获取实现

前置准备

首先要在Discord开发者门户的机器人设置页,开启GuildVoiceStates、Guilds、GuildMembers三个特权网关意图,否则无法正常获取语音频道成员数据。

完整代码示例

// 从当前服务器获取指定ID的语音频道
const targetVoiceChannel = message.guild.channels.cache.get('替换为你的语音频道ID');

// 校验频道有效性:确认存在且是语音频道
if (!targetVoiceChannel || targetVoiceChannel.type !== 2) {
  return message.reply('未找到对应语音频道');
}

// 获取频道内的所有成员,返回Collection集合
const voiceMembers = targetVoiceChannel.members;

// 示例:遍历打印所有成员信息
voiceMembers.each(member => {
  console.log(`成员用户名:${member.user.tag},成员ID:${member.id}`);
});

// 示例:提取所有成员ID的数组
const memberIdList = Array.from(voiceMembers.keys());

注意事项

  • 如果目标语音频道是私有频道,需要确保机器人拥有该频道的「查看频道」「连接」权限,否则会获取不到成员列表
  • 如果你用的是Discord.js v14,语音频道的type可以替换为枚举值ChannelType.GuildVoice,需要提前从discord.js包引入该枚举

内容的提问来源于stack exchange,提问作者Artem Chiruhin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 01:57:03