From de78a8d0b4e7601a37d9a739fb2e0ad407648047 Mon Sep 17 00:00:00 2001 From: SpaceEEC Date: Thu, 19 Apr 2018 13:13:28 +0200 Subject: [PATCH] fix(RESTMethods): verify correct member in add and remove role listeners Fixes #2480 --- src/client/rest/RESTMethods.js | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/client/rest/RESTMethods.js b/src/client/rest/RESTMethods.js index 26e196364..81fc430b1 100644 --- a/src/client/rest/RESTMethods.js +++ b/src/client/rest/RESTMethods.js @@ -522,15 +522,17 @@ class RESTMethods { if (member._roles.includes(role.id)) return resolve(member); const listener = (oldMember, newMember) => { - if (!oldMember._roles.includes(role.id) && newMember._roles.includes(role.id)) { + if (newMember.id === member.id && !oldMember._roles.includes(role.id) && newMember._roles.includes(role.id)) { this.client.removeListener(Constants.Events.GUILD_MEMBER_UPDATE, listener); resolve(newMember); } }; this.client.on(Constants.Events.GUILD_MEMBER_UPDATE, listener); - const timeout = this.client.setTimeout(() => - this.client.removeListener(Constants.Events.GUILD_MEMBER_UPDATE, listener), 10e3); + const timeout = this.client.setTimeout(() => { + this.client.removeListener(Constants.Events.GUILD_MEMBER_UPDATE, listener); + reject(new Error('Adding the role timeout out.')); + }, 10e3); return this.rest.makeRequest('put', Endpoints.Member(member).Role(role.id), true, undefined, undefined, reason) .catch(err => { @@ -546,15 +548,17 @@ class RESTMethods { if (!member._roles.includes(role.id)) return resolve(member); const listener = (oldMember, newMember) => { - if (oldMember._roles.includes(role.id) && !newMember._roles.includes(role.id)) { + if (newMember.id === member.id && oldMember._roles.includes(role.id) && !newMember._roles.includes(role.id)) { this.client.removeListener(Constants.Events.GUILD_MEMBER_UPDATE, listener); resolve(newMember); } }; this.client.on(Constants.Events.GUILD_MEMBER_UPDATE, listener); - const timeout = this.client.setTimeout(() => - this.client.removeListener(Constants.Events.GUILD_MEMBER_UPDATE, listener), 10e3); + const timeout = this.client.setTimeout(() => { + this.client.removeListener(Constants.Events.GUILD_MEMBER_UPDATE, listener); + reject(new Error('Removing the role timeout out.')); + }, 10e3); return this.rest.makeRequest('delete', Endpoints.Member(member).Role(role.id), true, undefined, undefined, reason) .catch(err => {