Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @Override
- public final Mono<PermissionSet> getPermissions(Member member) {
- Map<Snowflake, PermissionOverwrite> effectiveOverwrites = getEffectiveOverwrites(getPermissionOverwrites(), member.getId(), member.getGuildId(), member.getRoleIds());
- return member.getPermissions()
- .filter(permissions -> !permissions.contains(Permission.ADMINISTRATOR))
- .map(permissions -> applyOverwrites(permissions, effectiveOverwrites, Collections.singleton(member.getGuildId())))
- .map(permissions -> applyOverwrites(permissions, effectiveOverwrites, member.getRoleIds()))
- .map(permissions -> applyOverwrites(permissions, effectiveOverwrites, Collections.singleton(member.getId())))
- .switchIfEmpty(Mono.just(PermissionSet.all()));
- }
- public static Map<Snowflake, PermissionOverwrite> getEffectiveOverwrites(Set<PermissionOverwrite> overwrites, Snowflake member, Snowflake guild, Set<Snowflake> roles) {
- return overwrites.stream()
- .filter(overwrite -> overwrite.getRoleId().map(r -> r.equals(guild) || roles.contains(r)).orElse(true))
- .filter(overwrite -> overwrite.getUserId().map(member::equals).orElse(true))
- .collect(Collectors.toMap(
- overwrite -> (Snowflake) overwrite.getRoleId().orElseGet(overwrite.getUserId()::get),
- Function.identity(),
- (id1, id2) -> id1, // impossible?
- LinkedHashMap::new));
- }
- public static PermissionSet applyOverwrites(PermissionSet current, Map<Snowflake, PermissionOverwrite> overwrites, Iterable<Snowflake> ids) {
- int allow = 0;
- int deny = 0;
- for (Snowflake id : ids) {
- PermissionOverwrite overwrite = overwrites.get(id);
- if (overwrite != null) {
- allow |= overwrite.getAllowed().getRawValue();
- deny |= overwrite.getDenied().getRawValue();
- }
- }
- return PermissionSet.of((current.getRawValue() & ~deny) | allow);
- }
Advertisement
Add Comment
Please, Sign In to add comment