From 6df36232a05e396d31461200725755745526d2ed Mon Sep 17 00:00:00 2001 From: "Matt (IPv4) Cowley" Date: Fri, 11 Jun 2021 23:45:05 +0100 Subject: [PATCH] fix(GuildChannel): improve empty overwrite handling for permissionsLocked (#5821) --- src/structures/GuildChannel.js | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/src/structures/GuildChannel.js b/src/structures/GuildChannel.js index aa314a46b..d9ed9624f 100644 --- a/src/structures/GuildChannel.js +++ b/src/structures/GuildChannel.js @@ -95,13 +95,33 @@ class GuildChannel extends Channel { */ get permissionsLocked() { if (!this.parent) return null; - if (this.permissionOverwrites.size !== this.parent.permissionOverwrites.size) return false; - return this.permissionOverwrites.every((value, key) => { - const testVal = this.parent.permissionOverwrites.get(key); + + // Get all overwrites + const overwriteIds = new Set([...this.permissionOverwrites.keys(), ...this.parent.permissionOverwrites.keys()]); + + // Compare all overwrites + return [...overwriteIds].every(key => { + const channelVal = this.permissionOverwrites.get(key); + const parentVal = this.parent.permissionOverwrites.get(key); + + // Handle empty overwrite + if ( + (channelVal === undefined && + parentVal.deny.bitfield === Permissions.defaultBit && + parentVal.allow.bitfield === Permissions.defaultBit) || + (parentVal === undefined && + channelVal.deny.bitfield === Permissions.defaultBit && + channelVal.allow.bitfield === Permissions.defaultBit) + ) { + return true; + } + + // Compare overwrites return ( - testVal !== undefined && - testVal.deny.bitfield === value.deny.bitfield && - testVal.allow.bitfield === value.allow.bitfield + channelVal !== undefined && + parentVal !== undefined && + channelVal.deny.bitfield === parentVal.deny.bitfield && + channelVal.allow.bitfield === parentVal.allow.bitfield ); }); }