Add GuildMember.highestRole/kickable/bannable

This commit is contained in:
Schuyler Cebulskie
2016-09-19 01:31:53 -04:00
parent d8542b3365
commit b8e3094b14

View File

@@ -114,6 +114,14 @@ class GuildMember {
return list;
}
/**
* The role of the member with the highest position.
* @type {Role}
*/
get highestRole() {
return this.roles.reduce((prev, role) => !prev || role.position > prev.position ? role : prev);
}
/**
* Whether this member is muted in any way
* @type {boolean}
@@ -167,6 +175,30 @@ class GuildMember {
return new EvaluatedPermissions(this, permissions);
}
/**
* Whether the member is kickable by the client user.
* @type {boolean}
*/
get kickable() {
if (this.id === this.guild.ownerID) return false;
if (this.id === this.client.user.id) return false;
const clientMember = this.member(this.client.member);
if (!clientMember.hasPermission(Constants.PermissionFlags.KICK_MEMBERS)) return false;
return clientMember.highestRole.position > this.highestRole.positon;
}
/**
* Whether the member is bannable by the client user.
* @type {boolean}
*/
get bannable() {
if (this.id === this.guild.ownerID) return false;
if (this.id === this.client.user.id) return false;
const clientMember = this.member(this.client.member);
if (!clientMember.hasPermission(Constants.PermissionFlags.BAN_MEMBERS)) return false;
return clientMember.highestRole.position > this.highestRole.positon;
}
/**
* Returns `channel.permissionsFor(guildMember)`. Returns evaluated permissions for a member in a guild channel.
* @param {ChannelResolvable} channel Guild channel to use as context