【问题标题】:Is there an efficient way for getting the rarest role of a member discord.js有没有一种有效的方法来获得成员 discord.js 的最稀有角色
【发布时间】:2020-12-13 03:54:21
【问题描述】:

我已经实现了一项功能,可以向人们展示他们最稀有的角色(最少人拥有的角色)。我通过遍历他们的每个角色并检查有多少人担任该角色来做到这一点。事实证明,如果你有超过 50 个角色,它会明显延迟机器人的响应,所以我想知道是否有更有效的方法来做同样的事情。我的代码在这里:

const rolesOfMember = member._roles
for(const role in rolesOfMember) {
  var membersHavingCurrentRole = message.guild.roles.cache.get(rolesOfMember[role]).members.size
  if(membersHavingCurrentRole < membersHavingRarestRole) {
    membersHavingRarestRole = membersHavingCurrentRole
    rarestRoleID = rolesOfMember[role]
  } else if(membersHavingCurrentRole == membersHavingRarestRole) {
    var rarestRole = message.guild.roles.cache.get(rarestRoleID)
    var currentRole = message.guild.roles.cache.get(rolesOfMember[role])
    if(rarestRole.comparePositionTo(currentRole) < 0) {
      membersHavingRarestRole = membersHavingCurrentRole
      rarestRoleID = rolesOfMember[role]
    }
  }
}

【问题讨论】:

    标签: node.js discord.js


    【解决方案1】:

    嗯,简化代码的一种方法是不必为成员拥有的每个角色调用message.guild.roles.cache.get() 3 次左右,特别是如果他们将拥有 50 多个角色。事实上,我们可以完全消除对member._roles 对象的需求,从而消除对for/in 循环的需求。这是一个示例(经过测试且有效):

    var rolesOfMember = message.member.roles.cache;
    var rarestRole = rolesOfMember.sort((roleA, roleB) => roleA.members.size - roleB.members.size).first();
    var rarestRoleID = rarestRole.id;
    

    在此示例中,我首先获取成员拥有的所有角色的集合。然后,我使用Collection.sort() 方法根据公会中每个角色有多少成员对角色进行排序(从最少到最多,换句话说,从最稀有到最常见)。由于此排序集合中的第一个角色将是用户拥有的最稀有角色,因此我只需在排序集合上调用Collection.first() 以检索第一个也是最稀有的Role。从那里,您可以随意使用rarestRole,我只需检索角色的 ID 并将其存储在示例中的变量中。

    您也可以随意更改排序功能,以考虑两个角色拥有相同数量的人的情况。

    相关资源:
    https://discord.js.org/#/docs/main/stable/class/Role?scrollTo=members https://discord.js.org/#/docs/collection/master/class/Collection?scrollTo=sort

    【讨论】:

    • 原来这种方法需要更长的时间来排序,不知道为什么。但是感谢您的帮助:)
    • 有趣,我原以为它会更快。当我用大约 25 个角色对其进行测试时,它似乎立即奏效了。但是哦,好吧,不幸的是我不知道如何让这个过程更有效率。 NP :)
    猜你喜欢
    • 2021-11-17
    • 1970-01-01
    • 2021-11-03
    • 2014-03-10
    • 2020-10-24
    • 2022-01-13
    • 2021-05-10
    • 2011-11-08
    • 1970-01-01
    相关资源
    最近更新 更多