我正在努力让所有成员都扮演一定的角色。例如,我的 Discord 服务器中有 gurdian 角色,ID 为 872029521484873779。我想要数组中所有在我的服务器中拥有 gurdian 角色的用户 Name 的列表。我的代码如下
let nameList= msg.guild.roles.cache.get('role_id').members.map(m=>m.user.tag);
然而,结果它只返回一个用户nameList
而有 9 个用户分配有角色。我在这里做错了什么,只给我带来了 1 个用户,而不是数组列表中其余 9 个用户。我是不和谐.js 的新手
发生这种情况是因为成员没有被缓存。因此,您只能看到 1 人登录,因为缓存中只有 1 人。要解决此问题,您可以通过执行以下操作来获取所有成员msg.guild.members.fetch()
,然后使用msg.guild.roles.cache.get("roleid").members.map(m => m.user.tag)
以获得真实的输出。请注意,您将需要GUILD_MEMBERS
如果您使用的是 v13,请有意向。
从公会中获取成员会将其存储在缓存中。所以当你这样做时role.members
,您将获得具有此角色的成员。
如果您不获取会员,那么信息将不准确。 Discord.js 将用户存储在缓存中。每当有人发送消息、更新他们的个人资料或有关他们自己的任何信息时,就会发生这种情况当机器人在线时。因此,如果您重新启动机器人,缓存中将不会有任何人。
为什么 fetch 与缓存不同?
Fetch直接从discord获取信息,而cache则检查用户是否存储在本地。当您获取成员时,它们也会自动存储在缓存中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)