GuildMembersChunk packet handler hotfix (#1125)

* GuildMembersChunk packet handler hotfix

* Add limit, resolve properly if a query is used

* Document new GuildMemberChunk param
This commit is contained in:
Programmix
2017-01-24 13:55:36 -08:00
committed by Amish Shah
parent 4b2053133d
commit c1a5bee61f
2 changed files with 6 additions and 4 deletions

View File

@@ -17,7 +17,7 @@ class GuildMembersChunkHandler extends AbstractHandler {
const members = data.members.map(member => guild._addMember(member, false)); const members = data.members.map(member => guild._addMember(member, false));
client.emit(Constants.Events.GUILD_MEMBERS_CHUNK, members); client.emit(Constants.Events.GUILD_MEMBERS_CHUNK, members, guild);
client.ws.lastHeartbeatAck = true; client.ws.lastHeartbeatAck = true;
} }
@@ -27,6 +27,7 @@ class GuildMembersChunkHandler extends AbstractHandler {
* Emitted whenever a chunk of guild members is received (all members come from the same guild) * Emitted whenever a chunk of guild members is received (all members come from the same guild)
* @event Client#guildMembersChunk * @event Client#guildMembersChunk
* @param {Collection<GuildMember>} members The members in the chunk * @param {Collection<GuildMember>} members The members in the chunk
* @param {Guild} guild The guild related to the member chunk
*/ */
module.exports = GuildMembersChunkHandler; module.exports = GuildMembersChunkHandler;

View File

@@ -347,9 +347,10 @@ class Guild {
* Fetches all the members in the guild, even if they are offline. If the guild has less than 250 members, * Fetches all the members in the guild, even if they are offline. If the guild has less than 250 members,
* this should not be necessary. * this should not be necessary.
* @param {string} [query=''] Limit fetch to members with similar usernames * @param {string} [query=''] Limit fetch to members with similar usernames
* @param {number} [limit=0] Maximum number of members to request
* @returns {Promise<Guild>} * @returns {Promise<Guild>}
*/ */
fetchMembers(query = '') { fetchMembers(query = '', limit = 0) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
if (this.memberCount === this.members.size) { if (this.memberCount === this.members.size) {
// uncomment in v12 // uncomment in v12
@@ -362,12 +363,12 @@ class Guild {
d: { d: {
guild_id: this.id, guild_id: this.id,
query, query,
limit: 0, limit,
}, },
}); });
const handler = (members, guild) => { const handler = (members, guild) => {
if (guild.id !== this.id) return; if (guild.id !== this.id) return;
if (this.memberCount === this.members.size) { if (this.memberCount === this.members.size || members.length < 1000) {
this.client.removeListener(Constants.Events.GUILD_MEMBERS_CHUNK, handler); this.client.removeListener(Constants.Events.GUILD_MEMBERS_CHUNK, handler);
// uncomment in v12 // uncomment in v12
// resolve(this.members) // resolve(this.members)