如何将Discord.js中具有角色的所有用户放入数组

2022-02-23 00:00:00 discord javascript discord.js

我正在尝试获得所有具有特定角色的成员。例如,在我的ID为872029521484873779的不一致服务器中有Gurdian的角色。我想要一个数组中所有在我的服务器中将Gurdian作为角色的用户名的列表。我的代码如下

let nameList= msg.guild.roles.cache.get('role_id').members.map(m=>m.user.tag);
但是,在结果中,它只返回nameList中的一个用户,而有9个用户具有分配给他们的角色。我在这里做错了什么,只给我带来了1个用户,而不是数组中9个用户组成的睡觉。我不熟悉Discord.js


解决方案

发生这种情况是因为未缓存成员。因此,您只能看到一个人的日志记录,因为缓存中只有一个人。要解决此问题,您可以通过执行msg.guild.members.fetch()来获取所有成员,然后使用msg.guild.roles.cache.get("roleid").members.map(m => m.user.tag)获取实际输出。请注意,如果您使用的是V13,则需要GUILD_MEMBERS意图。

从公会获取成员会将其存储在缓存中。因此,当您执行role.members操作时,您将获得具有此角色的成员。

如果您不提取成员,则信息将不准确。Discord.js将用户存储在缓存中。当机器人在线时,只要有人发送消息、更新他们的个人资料或任何有关自己的信息,就会发生这种情况。因此,如果重新启动机器人,缓存中将没有人。

为什么提取不同于缓存?

FETCH直接从Discorde获取信息,而Cache正在检查用户是否存储在本地。获取成员时,它们也会自动存储在缓存中。

相关文章