javascript - 公会成员过滤不准确
问题描述
所以我一直在尝试制作一个计数器,它显然可以计算没有机器人、有机器人、只有机器人的服务器成员,并且由于某种原因,它并不准确。当我进入通用频道并运行显示计数器的命令时,我得到这些作为输出数字:
代码:
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
显然代码存在问题,但我无法确定它是什么。
解决方案
尝试获取成员而不是从.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
。
推荐阅读
- python - 为什么openpyxl不断将“正常”公式更改为数组公式
- google-analytics - 每个 page_url 的 Google 分析视图,而不是每个标题的视图
- vb.net - 有任何字体不会改变文本 len
- mysql - 关键字“order”附近的 SQL 语法不正确
- azure-data-explorer - Azure Kusto 中的增量数据加载
- visual-studio-code - Visual Studio 中突出显示的文本突然出现
- python - 单击图片时将jinja2中的列表条目链接并重定向到路由
- javascript - 仅当一个对象在 useSelector 中发生更改时如何导致重新渲染
- amazon-web-services - AWS Lambda 读取 Athena 数据库文件并写入 S3 无济于事
- numpy - 使用 Numpy 获取二维数组列表并将非零值作为单个数组中的值