From 465ff074e1482d270947373d37b961bded084465 Mon Sep 17 00:00:00 2001 From: Schuyler Cebulskie Date: Wed, 7 Sep 2016 23:12:32 -0400 Subject: [PATCH] Prevent Guild.fetchMember from messing with fetchMembers --- src/client/ClientDataManager.js | 5 ----- src/client/actions/GuildMemberGet.js | 3 +-- src/client/websocket/packets/handlers/GuildMembersChunk.js | 2 +- src/structures/Guild.js | 5 +++-- 4 files changed, 5 insertions(+), 10 deletions(-) diff --git a/src/client/ClientDataManager.js b/src/client/ClientDataManager.js index 2330fe9bd..44b1a22e3 100644 --- a/src/client/ClientDataManager.js +++ b/src/client/ClientDataManager.js @@ -73,11 +73,6 @@ class ClientDataManager { return null; } - newGuildMember(guild, data) { - if (guild.members.has(data.user.id)) return guild.members.get(data.user.id); - return guild._addMember(data); - } - killGuild(guild) { const already = this.client.guilds.has(guild.id); this.client.guilds.delete(guild.id); diff --git a/src/client/actions/GuildMemberGet.js b/src/client/actions/GuildMemberGet.js index 256c80c05..b00fa0f93 100644 --- a/src/client/actions/GuildMemberGet.js +++ b/src/client/actions/GuildMemberGet.js @@ -2,8 +2,7 @@ const Action = require('./Action'); class GuildMemberGetAction extends Action { handle(guild, data) { - const client = this.client; - const member = client.dataManager.newGuildMember(guild, data); + const member = guild._addMember(data, false); return { member, }; diff --git a/src/client/websocket/packets/handlers/GuildMembersChunk.js b/src/client/websocket/packets/handlers/GuildMembersChunk.js index 532d73bed..6c6257f24 100644 --- a/src/client/websocket/packets/handlers/GuildMembersChunk.js +++ b/src/client/websocket/packets/handlers/GuildMembersChunk.js @@ -11,7 +11,7 @@ class GuildMembersChunkHandler extends AbstractHandler { const members = []; if (guild) { - for (const member of data.members) members.push(guild._addMember(member, true)); + for (const member of data.members) members.push(guild._addMember(member, false)); } guild._checkChunks(); diff --git a/src/structures/Guild.js b/src/structures/Guild.js index a4305a762..271f36e5f 100644 --- a/src/structures/Guild.js +++ b/src/structures/Guild.js @@ -426,6 +426,7 @@ class Guild { * @returns {Promise} */ fetchMember(user) { + if (this._fetchWaiter) return Promise.reject(new Error('already fetching guild members')); user = this.client.resolver.resolveUser(user); if (!user) return Promise.reject(new Error('user is not cached')); if (this.members.has(user.id)) return Promise.resolve(this.members.get(user.id)); @@ -576,7 +577,7 @@ class Guild { return this.name; } - _addMember(guildUser, noEvent) { + _addMember(guildUser, emitEvent = true) { if (!(guildUser.user instanceof User)) guildUser.user = this.client.dataManager.newUser(guildUser.user); guildUser.joined_at = guildUser.joined_at || 0; @@ -600,7 +601,7 @@ class Guild { * @param {Guild} guild The guild that the user has joined * @param {GuildMember} member The member that has joined */ - if (this.client.ws.status === Constants.Status.READY && !noEvent) { + if (this.client.ws.status === Constants.Status.READY && emitEvent) { this.client.emit(Constants.Events.GUILD_MEMBER_ADD, this, member); }