From d2e2d5db347f05141064b06e33ec16bb7d1d333f Mon Sep 17 00:00:00 2001 From: MattIPv4 Date: Fri, 11 Jun 2021 21:58:18 +0100 Subject: [PATCH 1/3] fix(GuildChannel): improve empty overwrite handling for permissionsLocked --- src/structures/GuildChannel.js | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/src/structures/GuildChannel.js b/src/structures/GuildChannel.js index 1d28714ae25d..c9eda5d64a88 100644 --- a/src/structures/GuildChannel.js +++ b/src/structures/GuildChannel.js @@ -95,13 +95,27 @@ 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 + // eslint-disable-next-line eqeqeq + if (channelVal === undefined && parentVal.deny.bitfield == 0 && parentVal.allow.bitfield == 0) return true; + // eslint-disable-next-line eqeqeq + if (parentVal === undefined && channelVal.deny.bitfield == 0 && channelVal.allow.bitfield == 0) 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 ); }); } From e0e3ac10a147f7e1ae48844d0aacee93e11bbada Mon Sep 17 00:00:00 2001 From: MattIPv4 Date: Fri, 11 Jun 2021 22:26:02 +0100 Subject: [PATCH 2/3] fix(GuildChannel): use BitField.defaultBit in permissionsLocked --- src/structures/GuildChannel.js | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/structures/GuildChannel.js b/src/structures/GuildChannel.js index c9eda5d64a88..49e5ffa4940b 100644 --- a/src/structures/GuildChannel.js +++ b/src/structures/GuildChannel.js @@ -5,6 +5,7 @@ const Invite = require('./Invite'); const PermissionOverwrites = require('./PermissionOverwrites'); const Role = require('./Role'); const { Error, TypeError } = require('../errors'); +const BitField = require('../util/BitField'); const Collection = require('../util/Collection'); const { ChannelTypes } = require('../util/Constants'); const { OverwriteTypes } = require('../util/Constants'); @@ -105,10 +106,16 @@ class GuildChannel extends Channel { const parentVal = this.parent.permissionOverwrites.get(key); // Handle empty overwrite - // eslint-disable-next-line eqeqeq - if (channelVal === undefined && parentVal.deny.bitfield == 0 && parentVal.allow.bitfield == 0) return true; - // eslint-disable-next-line eqeqeq - if (parentVal === undefined && channelVal.deny.bitfield == 0 && channelVal.allow.bitfield == 0) return true; + if ( + (channelVal === undefined && + parentVal.deny.bitfield === BitField.defaultBit && + parentVal.allow.bitfield === BitField.defaultBit) || + (parentVal === undefined && + channelVal.deny.bitfield === BitField.defaultBit && + channelVal.allow.bitfield === BitField.defaultBit) + ) { + return true; + } // Compare overwrites return ( From ec4b1889c063f58ec58f8da0cc5f1908dd04eaad Mon Sep 17 00:00:00 2001 From: MattIPv4 Date: Fri, 11 Jun 2021 22:34:46 +0100 Subject: [PATCH 3/3] fix(GuildChannel): use Permissions.defaultBit in permissionsLocked --- src/structures/GuildChannel.js | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/structures/GuildChannel.js b/src/structures/GuildChannel.js index 49e5ffa4940b..1273831b75e9 100644 --- a/src/structures/GuildChannel.js +++ b/src/structures/GuildChannel.js @@ -5,7 +5,6 @@ const Invite = require('./Invite'); const PermissionOverwrites = require('./PermissionOverwrites'); const Role = require('./Role'); const { Error, TypeError } = require('../errors'); -const BitField = require('../util/BitField'); const Collection = require('../util/Collection'); const { ChannelTypes } = require('../util/Constants'); const { OverwriteTypes } = require('../util/Constants'); @@ -108,11 +107,11 @@ class GuildChannel extends Channel { // Handle empty overwrite if ( (channelVal === undefined && - parentVal.deny.bitfield === BitField.defaultBit && - parentVal.allow.bitfield === BitField.defaultBit) || + parentVal.deny.bitfield === Permissions.defaultBit && + parentVal.allow.bitfield === Permissions.defaultBit) || (parentVal === undefined && - channelVal.deny.bitfield === BitField.defaultBit && - channelVal.allow.bitfield === BitField.defaultBit) + channelVal.deny.bitfield === Permissions.defaultBit && + channelVal.allow.bitfield === Permissions.defaultBit) ) { return true; }