Skip to content

Commit

Permalink
Fix #1253: Permission Overwrites Resolution (#1255)
Browse files Browse the repository at this point in the history
* Fix #1253

* apparently @ everyone role can be undefined

* Fix oops

* Fixes possible mutiple roles named '@​everyone'

* Clean up order/logic
  • Loading branch information
bdistin authored and iCrawl committed Mar 15, 2017
1 parent a82d9f1 commit 8729ee6
Showing 1 changed file with 20 additions and 5 deletions.
25 changes: 20 additions & 5 deletions src/structures/GuildChannel.js
Expand Up @@ -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;

Expand 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,
};
}
Expand Down

0 comments on commit 8729ee6

Please sign in to comment.