如何检查用户是否有异议

时间:2019-11-18 23:21:45

标签: java discord discord-jda

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

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中使这两个一起工作,以检查该用户是否具有该角色。

可以请人帮我吗?

2 个答案:

答案 0 :(得分: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
}

访问成员实例的其他方式在成员文档MemberSee Also部分中进行了概述。如果事件可以在行会环境中发生,则某些事件还提供了getMember()替代方案。

答案 1 :(得分:0)

由于文档中尚无此类功能,因此您可以执行以下操作:

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;
    }
  }

然后,对于true if (hasRole)或false if (!hasRole)?