Как проверить, играет ли пользователь роль в Discord

Я изо всех сил пытаюсь найти способ проверить, есть ли у пользователя роль. Я знаю, как найти определенную роль:

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, чтобы проверить, есть ли у этого пользователя эту роль.

Кто-нибудь может мне помочь?


person Stefan Doroftei    schedule 18.11.2019    source источник


Ответы (2)


Объект 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 документации участника: Участник. Некоторые события также предлагают getMember() альтернативу, если событие могло произойти в контексте гильдии.

person Minn    schedule 19.11.2019
comment
Спасибо, много дней поисков, вы мне очень помогли, все работает, еще раз спасибо! - person Stefan Doroftei; 19.11.2019

Поскольку в документе такой функции еще нет, вы можете сделать это:

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) ????

person david-so    schedule 03.11.2020