tterrag1098

Untitled

Jun 21st, 2018
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.11 KB | None | 0 0
  1. @Override
  2. public final Mono<PermissionSet> getPermissions(Member member) {
  3. Map<Snowflake, PermissionOverwrite> effectiveOverwrites = getEffectiveOverwrites(getPermissionOverwrites(), member.getId(), member.getGuildId(), member.getRoleIds());
  4.  
  5. return member.getPermissions()
  6. .filter(permissions -> !permissions.contains(Permission.ADMINISTRATOR))
  7. .map(permissions -> applyOverwrites(permissions, effectiveOverwrites, Collections.singleton(member.getGuildId())))
  8. .map(permissions -> applyOverwrites(permissions, effectiveOverwrites, member.getRoleIds()))
  9. .map(permissions -> applyOverwrites(permissions, effectiveOverwrites, Collections.singleton(member.getId())))
  10. .switchIfEmpty(Mono.just(PermissionSet.all()));
  11. }
  12.  
  13. public static Map<Snowflake, PermissionOverwrite> getEffectiveOverwrites(Set<PermissionOverwrite> overwrites, Snowflake member, Snowflake guild, Set<Snowflake> roles) {
  14. return overwrites.stream()
  15. .filter(overwrite -> overwrite.getRoleId().map(r -> r.equals(guild) || roles.contains(r)).orElse(true))
  16. .filter(overwrite -> overwrite.getUserId().map(member::equals).orElse(true))
  17. .collect(Collectors.toMap(
  18. overwrite -> (Snowflake) overwrite.getRoleId().orElseGet(overwrite.getUserId()::get),
  19. Function.identity(),
  20. (id1, id2) -> id1, // impossible?
  21. LinkedHashMap::new));
  22. }
  23.  
  24. public static PermissionSet applyOverwrites(PermissionSet current, Map<Snowflake, PermissionOverwrite> overwrites, Iterable<Snowflake> ids) {
  25. int allow = 0;
  26. int deny = 0;
  27. for (Snowflake id : ids) {
  28. PermissionOverwrite overwrite = overwrites.get(id);
  29. if (overwrite != null) {
  30. allow |= overwrite.getAllowed().getRawValue();
  31. deny |= overwrite.getDenied().getRawValue();
  32. }
  33. }
  34. return PermissionSet.of((current.getRawValue() & ~deny) | allow);
  35. }
Advertisement
Add Comment
Please, Sign In to add comment