mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-14 18:43:31 +01:00
Fix permission overwrites for @everyone
This commit is contained in:
@@ -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,
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user