首页 > 解决方案 > 公会成员过滤不准确

问题描述

所以我一直在尝试制作一个计数器,它显然可以计算没有机器人、有机器人、只有机器人的服务器成员,并且由于某种原因,它并不准确。当我进入通用频道并运行显示计数器的命令时,我得到这些作为输出数字:

代码:

const memberCount = message.guild.members.cache.filter(member => !member.user.bot).size;
const totalCount = message.guild.memberCount;
const botCount = message.guild.members.cache.filter(member => member.user.bot).size;

在有 20 个成员的服务器上输出:

1st Output is: 1
2nd Output is: 19 (It excludes itself for some reason? but i can fix that with just +1)
3rd Output is: 1

显然代码存在问题,但我无法确定它是什么。

标签: javascriptdiscorddiscord.js

解决方案


尝试获取成员而不是从.cache.

const members = await message.guild.members.fetch();
const memberCount = members.filter(member => !member.user.bot).size;
const botCount = members.filter(member => member.user.bot).size;
const totalCount = members.size;

如果您使用的是 discord.js v13,请确保您GUILD_MEMBERS启用了意图。

const client = new Discord.Client({ intents: ["GUILDS", "GUILD_MESSAGES", "GUILD_MEMBERS"] });

请注意,如果您想在机器人启动时自动缓存成员,您需要启用GUILD_PRESENCES意图。否则,当GUILD_CREATE在 websocket 上发出事件让机器人缓存公会、成员和用户时。GuildMember除了机器人本身,数据不包括任何s。(这就是它向您显示数字的原因1。)

使用 discord.js 测试^13.0.1


推荐阅读