From 638e51a18ce31366f2c1d2da53588fce35e835f6 Mon Sep 17 00:00:00 2001 From: Gus Caplan Date: Fri, 2 Dec 2016 22:46:55 -0600 Subject: [PATCH] support new guild member role endpoints for cleaner role updates (#901) * support new roles endpoints * use promise chaining * properties man * Update RESTMethods.js * Update RESTMethods.js * Update RESTMethods.js * Update RESTMethods.js --- src/client/rest/RESTMethods.js | 17 +++++++++++++++++ src/structures/GuildMember.js | 6 ++++-- src/util/Constants.js | 1 + 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/client/rest/RESTMethods.js b/src/client/rest/RESTMethods.js index 160a07106..0839d316c 100644 --- a/src/client/rest/RESTMethods.js +++ b/src/client/rest/RESTMethods.js @@ -328,6 +328,23 @@ class RESTMethods { ); } + addMemberRole(member, role) { + return this.rest.makeRequest('put', Constants.Endpoints.guildMemberRole(member.guild.id, member.id, role.id)) + .then(() => { + if (!member._roles.includes(role.id)) member._roles.push(role.id); + return member; + }); + } + + removeMemberRole(member, role) { + return this.rest.makeRequest('delete', Constants.Endpoints.guildMemberRole(member.guild.id, member.id, role.id)) + .then(() => { + const index = member._roles.indexOf(role.id); + if (index >= 0) member._roles.splice(index, 1); + return member; + }); + } + sendTyping(channelID) { return this.rest.makeRequest('post', `${Constants.Endpoints.channel(channelID)}/typing`, true); } diff --git a/src/structures/GuildMember.js b/src/structures/GuildMember.js index d1e4867c8..5a221c6f1 100644 --- a/src/structures/GuildMember.js +++ b/src/structures/GuildMember.js @@ -314,7 +314,8 @@ class GuildMember { * @returns {Promise} */ addRole(role) { - return this.addRoles([role]); + if (!(role instanceof Role)) role = this.guild.roles.get(role); + return this.client.rest.methods.addMemberRole(this, role); } /** @@ -339,7 +340,8 @@ class GuildMember { * @returns {Promise} */ removeRole(role) { - return this.removeRoles([role]); + if (!(role instanceof Role)) role = this.guild.roles.get(role); + return this.client.rest.methods.removeMemberRole(this, role); } /** diff --git a/src/util/Constants.js b/src/util/Constants.js index 98cec7918..9fe2f9d98 100644 --- a/src/util/Constants.js +++ b/src/util/Constants.js @@ -106,6 +106,7 @@ const Endpoints = exports.Endpoints = { guildIntegrations: (guildID) => `${Endpoints.guild(guildID)}/integrations`, guildMembers: (guildID) => `${Endpoints.guild(guildID)}/members`, guildMember: (guildID, memberID) => `${Endpoints.guildMembers(guildID)}/${memberID}`, + guildMemberRole: (guildID, memberID, roleID) => `${Endpoints.guildMember(guildID, memberID)}/roles/${roleID}}`, stupidInconsistentGuildEndpoint: (guildID) => `${Endpoints.guildMember(guildID, '@me')}/nick`, guildChannels: (guildID) => `${Endpoints.guild(guildID)}/channels`, guildEmojis: (guildID) => `${Endpoints.guild(guildID)}/emojis`,