diff --git a/src/client/websocket/packets/handlers/GuildMembersChunk.js b/src/client/websocket/packets/handlers/GuildMembersChunk.js index 835bcb573..685de80c1 100644 --- a/src/client/websocket/packets/handlers/GuildMembersChunk.js +++ b/src/client/websocket/packets/handlers/GuildMembersChunk.js @@ -1,7 +1,6 @@ const AbstractHandler = require('./AbstractHandler'); const Constants = require('../../../../util/Constants'); -// Uncomment in v12 -// const Collection = require('../../../../util/Collection'); +const Collection = require('../../../../util/Collection'); class GuildMembersChunkHandler extends AbstractHandler { handle(packet) { @@ -9,13 +8,9 @@ class GuildMembersChunkHandler extends AbstractHandler { const data = packet.d; const guild = client.guilds.get(data.guild_id); if (!guild) return; + const members = new Collection(); - // Uncomment in v12 - // const members = new Collection(); - // - // for (const member of data.members) members.set(member.id, guild._addMember(member, false)); - - const members = data.members.map(member => guild._addMember(member, false)); + for (const member of data.members) members.set(member.id, guild._addMember(member, false)); client.emit(Constants.Events.GUILD_MEMBERS_CHUNK, members, guild); diff --git a/src/structures/Guild.js b/src/structures/Guild.js index bb9003b15..66b0ddf05 100644 --- a/src/structures/Guild.js +++ b/src/structures/Guild.js @@ -500,14 +500,12 @@ class Guild { * this should not be necessary. * @param {string} [query=''] Limit fetch to members with similar usernames * @param {number} [limit=0] Maximum number of members to request - * @returns {Promise} + * @returns {Promise>} */ fetchMembers(query = '', limit = 0) { return new Promise((resolve, reject) => { if (this.memberCount === this.members.size) { - // Uncomment in v12 - // resolve(this.members) - resolve(this); + resolve(new Collection()); return; } this.client.ws.send({ @@ -518,17 +516,20 @@ class Guild { limit, }, }); + const fetchedMembers = new Collection(); const handler = (members, guild) => { if (guild.id !== this.id) return; - if (this.memberCount === this.members.size || members.length < 1000) { + for (const member of members.values()) fetchedMembers.set(member.user.id, member); + if (this.memberCount === this.members.size || ((query || limit) && members.size < 1000)) { this.client.removeListener(Constants.Events.GUILD_MEMBERS_CHUNK, handler); - // Uncomment in v12 - // resolve(this.members) - resolve(this); + resolve(fetchedMembers); } }; this.client.on(Constants.Events.GUILD_MEMBERS_CHUNK, handler); - this.client.setTimeout(() => reject(new Error('Members didn\'t arrive in time.')), 120 * 1000); + this.client.setTimeout(() => { + this.client.removeListener(Constants.Events.GUILD_MEMBERS_CHUNK, handler); + reject(new Error('Members didn\'t arrive in time.')); + }, 120 * 1000); }); }