【问题标题】:How to check is an user has a role on discord如何检查用户是否在不和谐中扮演角色
【发布时间】:2020-03-14 09:39:36
【问题描述】:

我正在努力寻找一种方法来检查用户是否具有角色。 我知道如何找到某个角色:

public Role findRole(Guild guild, String name) {
    List<Role> roles = guild.getRolesByName(name, true);

    if (roles.size() <= 0) {
        throw new RuntimeException("Role with name " + name + " on Guild " + guild.getName() + " not found!");
    } else {
        return roles.get(0);
    }
}

我有一个角色:Role neededEole=findRole(event.getGuild(),"Admin");

我知道如何搜索用户:String user=event.getAuthor().getId(); 或:User user=event.getAuthor();

但我不知道如何让这两者在 JDA 中协同工作以检查该用户是否具有该角色。

有人可以帮帮我吗?

【问题讨论】:

    标签: java discord discord-jda


    【解决方案1】:

    Member 对象将用户置于公会上下文中。您可以通过Guild#getMember(user) 获取会员。这使您可以选择检索此用户的公会信息:

    Member member = guild.getMember(user);
    Member member = guild.getMemberById(userId);
    List<Member> member = guild.getMembersByName(name, true);
    List<Member> member = guild.getMembersByRoles(role);
    
    public Role findRole(Member member, String name) {
        List<Role> roles = member.getRoles();
        return roles.stream()
                    .filter(role -> role.getName().equals(name)) // filter by role name
                    .findFirst() // take first result
                    .orElse(null); // else return null
    }
    

    成员文档的See Also 部分概述了访问成员实例的其他方法:Member。如果事件可能发生在公会环境中,某些事件还提供getMember() 替代方案。

    【讨论】:

    • 非常感谢您,这几天的搜索,您帮了我很多,它有效,再次感谢您!
    【解决方案2】:

    由于文档中还没有这样的功能,你可以这样做:

    boolean hasRole;
      for(int i=0; i<builder.getGuildById(guild).getMemberById(userId).getRoles().size(); i++){
        if("RoleName".equals(builder.getGuildById(guild).getMemberById(userId).getRoles().get(i).getName())){
          hasRole = true;
        }
      }
    

    那么,为真if (hasRole) 或假if (!hasRole) ?

    【讨论】:

      猜你喜欢
      • 2020-01-25
      • 2020-10-06
      • 1970-01-01
      • 2020-10-03
      • 1970-01-01
      • 2021-06-11
      • 2019-05-19
      • 2019-06-25
      相关资源
      最近更新 更多