Fix permission overwrites for @everyone

This commit is contained in:
Schuyler Cebulskie
2016-09-07 23:42:14 -04:00
parent 465ff074e1
commit 978cf9d87f

View File

@@ -56,52 +56,46 @@ class GuildChannel extends Channel {
*/ */
permissionsFor(member) { permissionsFor(member) {
member = this.client.resolver.resolveGuildMember(this.guild, member); member = this.client.resolver.resolveGuildMember(this.guild, member);
if (member) { if (!member) return null;
if (this.guild.owner.id === member.id) return new EvaluatedPermissions(member, Constants.ALL_PERMISSIONS); if (this.guild.owner.id === member.id) return new EvaluatedPermissions(member, Constants.ALL_PERMISSIONS);
const roles = member.roles; let permissions = 0;
let permissions = 0;
const overwrites = this.overwritesFor(member, true);
for (const role of roles.values()) permissions |= role.permissions; const roles = member.roles;
for (const overwrite of overwrites.role.concat(overwrites.member)) { for (const role of roles.values()) permissions |= role.permissions;
permissions &= ~overwrite.denyData;
permissions |= overwrite.allowData;
}
const admin = Boolean(permissions & (Constants.PermissionFlags.ADMINISTRATOR)); const overwrites = this.overwritesFor(member, true, roles);
if (admin) permissions = Constants.ALL_PERMISSIONS; for (const overwrite of overwrites.role.concat(overwrites.member)) {
permissions &= ~overwrite.denyData;
return new EvaluatedPermissions(member, permissions); permissions |= overwrite.allowData;
} }
return null; const admin = Boolean(permissions & (Constants.PermissionFlags.ADMINISTRATOR));
if (admin) permissions = Constants.ALL_PERMISSIONS;
return new EvaluatedPermissions(member, permissions);
} }
overwritesFor(member, verified) { overwritesFor(member, verified = false, roles = null) {
// for speed
if (!verified) member = this.client.resolver.resolveGuildMember(this.guild, member); if (!verified) member = this.client.resolver.resolveGuildMember(this.guild, member);
if (member) { if (!member) return [];
const memberRoles = member._roles;
const roleOverwrites = []; roles = roles || member.roles;
const memberOverwrites = []; const roleOverwrites = [];
const memberOverwrites = [];
for (const overwrite of this.permissionOverwrites.values()) { for (const overwrite of this.permissionOverwrites.values()) {
if (overwrite.id === member.id) { if (overwrite.id === member.id) {
memberOverwrites.push(overwrite); memberOverwrites.push(overwrite);
} else if (memberRoles.indexOf(overwrite.id) > -1) { } else if (roles.has(overwrite.id)) {
roleOverwrites.push(overwrite); roleOverwrites.push(overwrite);
}
} }
return {
role: roleOverwrites,
member: memberOverwrites,
};
} }
return []; return {
role: roleOverwrites,
member: memberOverwrites,
};
} }
/** /**