diff --git a/src/structures/GuildChannel.js b/src/structures/GuildChannel.js index 5ae1a08daa5f..c9d1e3f4136b 100644 --- a/src/structures/GuildChannel.js +++ b/src/structures/GuildChannel.js @@ -63,13 +63,24 @@ class GuildChannel extends Channel { for (const role of roles.values()) permissions |= role.permissions; const overwrites = this.overwritesFor(member, true, roles); + + if (overwrites.everyone) { + permissions &= ~overwrites.everyone.deny; + permissions |= overwrites.everyone.allow; + } + let allow = 0; - for (const overwrite of overwrites.role.concat(overwrites.member)) { + for (const overwrite of overwrites.roles) { permissions &= ~overwrite.deny; allow |= overwrite.allow; } permissions |= allow; + if (overwrites.member) { + permissions &= ~overwrites.member.deny; + permissions |= overwrites.member.allow; + } + const admin = Boolean(permissions & Permissions.FLAGS.ADMINISTRATOR); if (admin) permissions = Permissions.ALL; @@ -82,18 +93,22 @@ class GuildChannel extends Channel { roles = roles || member.roles; const roleOverwrites = []; - const memberOverwrites = []; + let memberOverwrites; + let everyoneOverwrites; for (const overwrite of this.permissionOverwrites.values()) { - if (overwrite.id === member.id) { - memberOverwrites.push(overwrite); + if (overwrite.id === this.guild.id) { + everyoneOverwrites = overwrite; } else if (roles.has(overwrite.id)) { roleOverwrites.push(overwrite); + } else if (overwrite.id === member.id) { + memberOverwrites = overwrite; } } return { - role: roleOverwrites, + everyone: everyoneOverwrites, + roles: roleOverwrites, member: memberOverwrites, }; }