summary refs log tree commit diff
path: root/src/util
diff options
context:
space:
mode:
Diffstat (limited to 'src/util')
-rw-r--r--src/util/Permissions.ts15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/util/Permissions.ts b/src/util/Permissions.ts
index 64ffed35..445e901f 100644
--- a/src/util/Permissions.ts
+++ b/src/util/Permissions.ts
@@ -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;
 }