【问题标题】:How to get all users with a role in Discord.js in a array如何在数组中获取所有具有 Discord.js 角色的用户
【发布时间】:2021-12-22 23:09:22
【问题描述】:

我正在尝试让所有成员都担任某个角色。例如,在我的不和谐服务器中有一个 gurdian 角色,ID 为 872029521484873779。我想要一个数组中所有在我的服务器中具有 gurdian 角色的用户名称的列表。我的代码如下

let nameList= msg.guild.roles.cache.get('role_id').members.map(m=>m.user.tag);

但是,结果它只返回 nameList 中的一个用户,而有 9 个用户分配了角色。我在这里做错了什么,这导致我只有 1 个用户,而不是数组列表中的其余 9 个用户。我是 discord.js 的新手

【问题讨论】:

    标签: javascript discord discord.js


    【解决方案1】:

    您的错误可能是与身份证号码的简单混淆。您代码中的数字与您问题中的数字不同

    【讨论】:

    • 是的,我也认为可能是这种情况,因为我在自己的服务器上测试了他们的代码,并且它与我的角色 ID 配合得很好
    • 不,我不是为了测试而做的,但让我感到疑惑的不是这个问题。我现在会在问题中纠正它。谢谢
    【解决方案2】:

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

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

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

    为什么 fetch 与缓存不同?

    Fetch 直接从 discord 中获取信息,而缓存则检查用户是否存储在本地。当您获取成员时,它们也会自动存储在缓存中。

    【讨论】:

    • 您能否详细说明一下 msg.guild.members.fetch 将如何帮助您在 msg.guild 的下一个代码行中获取用户 ID?我在这里很新,不明白它是如何工作的?你能展示一下它的确切实现吗?
    • 从公会中获取成员会将他们存储在缓存中。因此,当您执行 role.members 时,您将获得具有此角色的成员。如果您不获取成员,那么信息将不准确。 Discord.js 将用户存储在缓存中。每当有人在机器人在线时发送消息、更新他们的个人资料或任何关于他们自己的信息时,都会发生这种情况。因此,如果您重新启动机器人,缓存中将没有任何人。 Fetch 直接从 discord 中获取信息,而缓存则检查用户是否存储在本地。当您获取成员时,它们也会自动存储在缓存中。
    • 非常感谢您帮助我。我将其标记为正确答案。谢谢
    猜你喜欢
    • 2021-10-06
    • 2021-11-17
    • 2014-04-24
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 2018-07-31
    • 1970-01-01
    • 2021-05-05
    相关资源
    最近更新 更多