From ee2172c1d589846aac793cd5ef459b6eebdaf25d Mon Sep 17 00:00:00 2001 From: abalabahaha Date: Fri, 29 Jan 2016 17:02:40 -0800 Subject: [PATCH] memberHasRole, membersWithRole --- lib/Client/Client.js | 46 +++++++++++------------------------- lib/Client/InternalClient.js | 16 +++++++++++-- lib/Structures/Server.js | 14 +++++++++++ lib/Structures/User.js | 4 ++++ src/Client/Client.js | 32 ++++++++----------------- src/Client/InternalClient.js | 14 +++++++++-- src/Structures/Server.js | 11 +++++++++ src/Structures/User.js | 4 ++++ 8 files changed, 83 insertions(+), 58 deletions(-) diff --git a/lib/Client/Client.js b/lib/Client/Client.js index 0853838bc..c5919ff70 100644 --- a/lib/Client/Client.js +++ b/lib/Client/Client.js @@ -397,6 +397,20 @@ var Client = (function (_EventEmitter) { return this.addMemberToRole(member, role, callback); }; + // def addUserToRole + + Client.prototype.memberHasRole = function memberHasRole(member, role) { + return this.internal.memberHasRole(member, role); + }; + + // def addUserToRole + + Client.prototype.userHasRole = function userHasRole(member, role) { + var callback = arguments.length <= 2 || arguments[2] === undefined ? function () /*err, {}*/{} : arguments[2]; + + return this.memberHasRole(member, role, callback); + }; + // def removeMemberFromRole Client.prototype.removeMemberFromRole = function removeMemberFromRole(member, role) { @@ -413,38 +427,6 @@ var Client = (function (_EventEmitter) { return this.removeMemberFromRole(member, role, callback); }; - // def addMemberToRole - - Client.prototype.addMemberToRoles = function addMemberToRoles(member, roles) { - var callback = arguments.length <= 2 || arguments[2] === undefined ? function () /*err, {}*/{} : arguments[2]; - - return this.internal.addMemberToRoles(member, roles).then(dataCallback(callback), errorCallback(callback)); - }; - - // def addUserToRole - - Client.prototype.addUserToRoles = function addUserToRoles(member, roles) { - var callback = arguments.length <= 2 || arguments[2] === undefined ? function () /*err, {}*/{} : arguments[2]; - - return this.addMemberToRoles(member, roles, callback); - }; - - // def removeMemberFromRole - - Client.prototype.removeMemberFromRoles = function removeMemberFromRoles(member, roles) { - var callback = arguments.length <= 2 || arguments[2] === undefined ? function () /*err, {}*/{} : arguments[2]; - - return this.internal.removeMemberFromRoles(member, roles).then(dataCallback(callback), errorCallback(callback)); - }; - - // def removeUserFromRole - - Client.prototype.removeUserFromRoles = function removeUserFromRoles(member, roles) { - var callback = arguments.length <= 2 || arguments[2] === undefined ? function () /*err, {}*/{} : arguments[2]; - - return this.removeMemberFromRoles(member, roles, callback); - }; - // def createInvite Client.prototype.createInvite = function createInvite(chanServ, options) { diff --git a/lib/Client/InternalClient.js b/lib/Client/InternalClient.js index 3127a8ce5..7117002a0 100644 --- a/lib/Client/InternalClient.js +++ b/lib/Client/InternalClient.js @@ -801,7 +801,7 @@ var InternalClient = (function () { member = this.resolver.resolveUser(member); if (!member) { - return Promise.reject(new Error("member not in server")); + return Promise.reject(new Error("user not found")); } if (!Array.isArray(roles) || roles.length === 0) { @@ -833,13 +833,25 @@ var InternalClient = (function () { }); }; + InternalClient.prototype.memberHasRole = function memberHasRole(member, role) { + member = this.resolver.resolveUser(member); + + if (!member) { + throw new Error("user not found"); + } + + return !!role.server.rolesOf(member).find(function (r) { + return r.id == role.id; + }); + }; + //def removeMemberFromRole InternalClient.prototype.removeMemberFromRole = function removeMemberFromRole(member, roles) { member = this.resolver.resolveUser(member); if (!member) { - return Promise.reject(new Error("member not in server")); + return Promise.reject(new Error("user not found")); } if (!Array.isArray(roles) || roles.length === 0) { diff --git a/lib/Structures/Server.js b/lib/Structures/Server.js index 57c2313d0..f35dba368 100644 --- a/lib/Structures/Server.js +++ b/lib/Structures/Server.js @@ -187,6 +187,10 @@ var Server = (function (_Equality) { } }; + Server.prototype.rolesOfMember = function rolesOfMember(member) { + return this.rolesOfUser(member); + }; + Server.prototype.rolesOf = function rolesOf(user) { return this.rolesOfUser(user); }; @@ -322,6 +326,16 @@ var Server = (function (_Equality) { return this.client.createChannel.apply(this.client, _UtilArgumentRegulariser.reg(this, arguments)); }; + Server.prototype.membersWithRole = function membersWithRole(role) { + return this.members.filter(function (m) { + return m.hasRole(role); + }); + }; + + Server.prototype.usersWithRole = function usersWithRole(role) { + return this.membersWithRole(role); + }; + _createClass(Server, [{ key: "iconURL", get: function get() { diff --git a/lib/Structures/User.js b/lib/Structures/User.js index 12938b90f..f6629c2b8 100644 --- a/lib/Structures/User.js +++ b/lib/Structures/User.js @@ -95,6 +95,10 @@ var User = (function (_Equality) { return this.client.getChannelLogs.apply(this.client, _UtilArgumentRegulariser.reg(this, arguments)); }; + User.prototype.hasRole = function hasRole(role) { + return this.client.memberHasRole.apply(this.client, [this, role]); + }; + _createClass(User, [{ key: "avatarURL", get: function get() { diff --git a/src/Client/Client.js b/src/Client/Client.js index 0192883f8..321c552d6 100644 --- a/src/Client/Client.js +++ b/src/Client/Client.js @@ -338,6 +338,16 @@ export default class Client extends EventEmitter { return this.addMemberToRole(member, role, callback); } + // def addUserToRole + memberHasRole(member, role) { + return this.internal.memberHasRole(member, role); + } + + // def addUserToRole + userHasRole(member, role, callback = (/*err, {}*/) => { }) { + return this.memberHasRole(member, role, callback); + } + // def removeMemberFromRole removeMemberFromRole(member, role, callback = (/*err, {}*/) => { }) { return this.internal.removeMemberFromRole(member, role) @@ -349,28 +359,6 @@ export default class Client extends EventEmitter { return this.removeMemberFromRole(member, role, callback); } - // def addMemberToRole - addMemberToRoles(member, roles, callback = (/*err, {}*/) => { }) { - return this.internal.addMemberToRoles(member, roles) - .then(dataCallback(callback), errorCallback(callback)); - } - - // def addUserToRole - addUserToRoles(member, roles, callback = (/*err, {}*/) => { }) { - return this.addMemberToRoles(member, roles, callback); - } - - // def removeMemberFromRole - removeMemberFromRoles(member, roles, callback = (/*err, {}*/) => { }) { - return this.internal.removeMemberFromRoles(member, roles) - .then(dataCallback(callback), errorCallback(callback)); - } - - // def removeUserFromRole - removeUserFromRoles(member, roles, callback = (/*err, {}*/) => { }) { - return this.removeMemberFromRoles(member, roles, callback); - } - // def createInvite createInvite(chanServ, options, callback = (/*err, invite*/) => { }) { if (typeof options === "function") { diff --git a/src/Client/InternalClient.js b/src/Client/InternalClient.js index 3a677dfb8..6dcac7ed0 100644 --- a/src/Client/InternalClient.js +++ b/src/Client/InternalClient.js @@ -657,7 +657,7 @@ export default class InternalClient { member = this.resolver.resolveUser(member); if (!member) { - return Promise.reject(new Error("member not in server")); + return Promise.reject(new Error("user not found")); } if (!Array.isArray(roles) || roles.length === 0) { @@ -690,12 +690,22 @@ export default class InternalClient { ); } + memberHasRole(member, role) { + member = this.resolver.resolveUser(member); + + if (!member) { + throw new Error("user not found"); + } + + return !!role.server.rolesOf(member).find(r => r.id == role.id); + } + //def removeMemberFromRole removeMemberFromRole(member, roles) { member = this.resolver.resolveUser(member); if (!member) { - return Promise.reject(new Error("member not in server")); + return Promise.reject(new Error("user not found")); } if (!Array.isArray(roles) || roles.length === 0) { diff --git a/src/Structures/Server.js b/src/Structures/Server.js index 10c2f409c..4484ad7b3 100644 --- a/src/Structures/Server.js +++ b/src/Structures/Server.js @@ -121,6 +121,10 @@ export default class Server extends Equality { } } + rolesOfMember(member) { + return this.rolesOfUser(member); + } + rolesOf(user) { return this.rolesOfUser(user); } @@ -258,4 +262,11 @@ export default class Server extends Equality { return this.client.createChannel.apply(this.client, reg(this, arguments)); } + membersWithRole(role) { + return this.members.filter(m => m.hasRole(role)); + } + + usersWithRole(role) { + return this.membersWithRole(role); + } } diff --git a/src/Structures/User.js b/src/Structures/User.js index 3074e8289..d027f8e25 100644 --- a/src/Structures/User.js +++ b/src/Structures/User.js @@ -106,4 +106,8 @@ export default class User extends Equality{ getLogs() { return this.client.getChannelLogs.apply(this.client, reg(this, arguments)); } + + hasRole(role) { + return this.client.memberHasRole.apply(this.client, [this, role]); + } }