tterrag1098

Untitled

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