/** * Gets the overall set of permissions for a member in this channel, taking into account channel overwrites. * @param {GuildMember} member The member to obtain the overall permissions for * @returns {Readonly<Permissions>} * @private */ memberPermissions(member) { if (member.id === this.guild.ownerID) return new Permissions(Permissions.ALL).freeze(); const roles = member.roles.cache; const permissions = new Permissions(roles.map(role => role.permissions)); if (permissions.has(Permissions.FLAGS.ADMINISTRATOR)) return new Permissions(Permissions.ALL).freeze(); const overwrites = this.overwritesFor(member, true, roles); return permissions .remove(overwrites.everyone ? overwrites.everyone.deny : 0) .add(overwrites.everyone ? overwrites.everyone.allow : 0) .remove(overwrites.roles.length > 0 ? overwrites.roles.map(role => role.deny) : 0) .add(overwrites.roles.length > 0 ? overwrites.roles.map(role => role.allow) : 0) .remove(overwrites.member ? overwrites.member.deny : 0) .add(overwrites.member ? overwrites.member.allow : 0) .freeze(); }