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

如何用Discord.js随机提及服务器成员?调用random()报错求助

解决Discord.js中随机获取服务器成员的问题

你遇到的报错是因为Discord.js v13及更高版本已经移除了GuildMemberManager.random()方法,旧版本的这个方法在新版本里不再支持,所以需要换一种方式实现随机成员选择。

以下是具体的解决方案,适合Discord.js v13+版本:

1. 确保启用必要的网关意图

首先,在初始化Discord客户端时,必须启用GuildMembers意图,否则无法获取服务器成员列表:

const { Client, GatewayIntentBits } = require('discord.js');
const client = new Client({
  intents: [
    GatewayIntentBits.Guilds, // 必备的服务器基础意图
    GatewayIntentBits.GuildMembers // 必须添加这个才能获取成员数据
  ]
});

2. 实现随机成员选择的代码

在你的命令逻辑里,通过以下步骤获取随机成员:

// 1. 获取服务器所有成员(fetch确保拿到全量数据,缓存可能不全)
const members = await interaction.guild.members.fetch();

// 2. 可选:过滤掉机器人成员
const humanMembers = members.filter(member => !member.user.bot);

// 3. 将成员集合转为数组
const memberArray = Array.from(humanMembers.values());

// 4. 处理无成员的情况
if (memberArray.length === 0) {
  return interaction.reply('服务器里没有可选择的成员!');
}

// 5. 随机选取一个成员
const randomIndex = Math.floor(Math.random() * memberArray.length);
const randomMember = memberArray[randomIndex];

// 6. 提及并回复
interaction.reply(`随机选中的成员:${randomMember}`);

关键说明

  • 使用members.fetch()而非直接调用缓存:缓存默认只包含在线成员或近期互动的成员,fetch()会拉取服务器所有成员数据(需要机器人有对应的权限)。
  • 过滤机器人是可选操作:如果你的需求允许选中机器人,可以去掉filter那一步。
  • 随机逻辑:通过Math.random()生成0到数组长度之间的随机整数索引,以此选取数组中的随机成员。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 06:25:23