mirror of
https://github.com/spacebarchat/server.git
synced 2024-11-07 11:22:35 +01:00
✨ added .overwriteChannel function to permissions
This commit is contained in:
parent
1889798b98
commit
d26785b098
@ -117,6 +117,16 @@ export class Permissions extends BitField {
|
||||
throw new HTTPError(`You are missing the following permissions ${permission}`, 403);
|
||||
}
|
||||
|
||||
overwriteChannel(overwrites: ChannelPermissionOverwrite[]) {
|
||||
if (!this.cache) throw new Error("permission chache not available");
|
||||
overwrites = overwrites.filter((x) => {
|
||||
if (x.type === 0 && this.cache.roles?.some((r) => r.id === x.id)) return true;
|
||||
if (x.type === 1 && x.id == this.cache.user_id) return true;
|
||||
return false;
|
||||
});
|
||||
return new Permissions(Permissions.channelPermission(overwrites, this.bitfield));
|
||||
}
|
||||
|
||||
static channelPermission(overwrites: ChannelPermissionOverwrite[], init?: bigint) {
|
||||
// TODO: do not deny any permissions if admin
|
||||
return overwrites.reduce((permission, overwrite) => {
|
||||
@ -186,7 +196,7 @@ export class Permissions extends BitField {
|
||||
return new Permissions();
|
||||
}
|
||||
|
||||
return permission;
|
||||
return new Permissions(permission);
|
||||
}
|
||||
}
|
||||
|
||||
@ -195,6 +205,7 @@ export type PermissionCache = {
|
||||
member?: MemberDocument | null;
|
||||
guild?: GuildDocument | null;
|
||||
roles?: RoleDocument[] | null;
|
||||
user_id?: string;
|
||||
};
|
||||
|
||||
export async function getPermission(
|
||||
@ -245,7 +256,7 @@ export async function getPermission(
|
||||
const obj = new Permissions(permission);
|
||||
|
||||
// pass cache to permission for possible future getPermission calls
|
||||
obj.cache = { guild, member, channel, roles };
|
||||
obj.cache = { guild, member, channel, roles, user_id };
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user