fix: in/de-crement max listener for client events (#4168)

This commit is contained in:
SpaceEEC
2020-05-07 23:39:23 +02:00
committed by GitHub
parent 766b91d306
commit 407bc77d34
6 changed files with 40 additions and 9 deletions

View File

@@ -139,6 +139,28 @@ class BaseClient extends EventEmitter {
this._immediates.delete(immediate); this._immediates.delete(immediate);
} }
/**
* Increments max listeners by one, if they are not zero.
* @private
*/
incrementMaxListeners() {
const maxListeners = this.getMaxListeners();
if (maxListeners !== 0) {
this.setMaxListeners(maxListeners + 1);
}
}
/**
* Decrements max listeners by one, if they are not zero.
* @private
*/
decrementMaxListeners() {
const maxListeners = this.getMaxListeners();
if (maxListeners !== 0) {
this.setMaxListeners(maxListeners - 1);
}
}
toJSON(...props) { toJSON(...props) {
return Util.flatten(this, { domain: false }, ...props); return Util.flatten(this, { domain: false }, ...props);
} }

View File

@@ -196,15 +196,18 @@ class GuildManager extends BaseManager {
const handleGuild = guild => { const handleGuild = guild => {
if (guild.id === data.id) { if (guild.id === data.id) {
this.client.removeListener(Events.GUILD_CREATE, handleGuild);
this.client.clearTimeout(timeout); this.client.clearTimeout(timeout);
this.client.removeListener(Events.GUILD_CREATE, handleGuild);
this.client.decrementMaxListeners();
resolve(guild); resolve(guild);
} }
}; };
this.client.incrementMaxListeners();
this.client.on(Events.GUILD_CREATE, handleGuild); this.client.on(Events.GUILD_CREATE, handleGuild);
const timeout = this.client.setTimeout(() => { const timeout = this.client.setTimeout(() => {
this.client.removeListener(Events.GUILD_CREATE, handleGuild); this.client.removeListener(Events.GUILD_CREATE, handleGuild);
this.client.decrementMaxListeners();
resolve(this.client.guilds.add(data)); resolve(this.client.guilds.add(data));
}, 10000); }, 10000);
return undefined; return undefined;

View File

@@ -267,17 +267,21 @@ class GuildMemberManager extends BaseManager {
(limit && fetchedMembers.size >= limit) || (limit && fetchedMembers.size >= limit) ||
i === chunk.count i === chunk.count
) { ) {
this.guild.client.removeListener(Events.GUILD_MEMBERS_CHUNK, handler); this.client.clearTimeout(timeout);
this.client.removeListener(Events.GUILD_MEMBERS_CHUNK, handler);
this.client.decrementMaxListeners();
let fetched = option ? fetchedMembers : this.cache; let fetched = option ? fetchedMembers : this.cache;
if (user_ids && !Array.isArray(user_ids) && fetched.size) fetched = fetched.first(); if (user_ids && !Array.isArray(user_ids) && fetched.size) fetched = fetched.first();
resolve(fetched); resolve(fetched);
} }
}; };
const timeout = this.guild.client.setTimeout(() => { const timeout = this.client.setTimeout(() => {
this.guild.client.removeListener(Events.GUILD_MEMBERS_CHUNK, handler); this.client.removeListener(Events.GUILD_MEMBERS_CHUNK, handler);
this.client.decrementMaxListeners();
reject(new Error('GUILD_MEMBERS_TIMEOUT')); reject(new Error('GUILD_MEMBERS_TIMEOUT'));
}, time); }, time);
this.guild.client.on(Events.GUILD_MEMBERS_CHUNK, handler); this.client.incrementMaxListeners();
this.client.on(Events.GUILD_MEMBERS_CHUNK, handler);
}); });
} }
} }

View File

@@ -42,7 +42,7 @@ class MessageCollector extends Collector {
this._handleChannelDeletion = this._handleChannelDeletion.bind(this); this._handleChannelDeletion = this._handleChannelDeletion.bind(this);
this._handleGuildDeletion = this._handleGuildDeletion.bind(this); this._handleGuildDeletion = this._handleGuildDeletion.bind(this);
if (this.client.getMaxListeners() !== 0) this.client.setMaxListeners(this.client.getMaxListeners() + 1); this.client.incrementMaxListeners();
this.client.on(Events.MESSAGE_CREATE, this.handleCollect); this.client.on(Events.MESSAGE_CREATE, this.handleCollect);
this.client.on(Events.MESSAGE_DELETE, this.handleDispose); this.client.on(Events.MESSAGE_DELETE, this.handleDispose);
this.client.on(Events.MESSAGE_BULK_DELETE, bulkDeleteListener); this.client.on(Events.MESSAGE_BULK_DELETE, bulkDeleteListener);
@@ -55,7 +55,7 @@ class MessageCollector extends Collector {
this.client.removeListener(Events.MESSAGE_BULK_DELETE, bulkDeleteListener); this.client.removeListener(Events.MESSAGE_BULK_DELETE, bulkDeleteListener);
this.client.removeListener(Events.CHANNEL_DELETE, this._handleChannelDeletion); this.client.removeListener(Events.CHANNEL_DELETE, this._handleChannelDeletion);
this.client.removeListener(Events.GUILD_DELETE, this._handleGuildDeletion); this.client.removeListener(Events.GUILD_DELETE, this._handleGuildDeletion);
if (this.client.getMaxListeners() !== 0) this.client.setMaxListeners(this.client.getMaxListeners() - 1); this.client.decrementMaxListeners();
}); });
} }

View File

@@ -49,7 +49,7 @@ class ReactionCollector extends Collector {
this._handleGuildDeletion = this._handleGuildDeletion.bind(this); this._handleGuildDeletion = this._handleGuildDeletion.bind(this);
this._handleMessageDeletion = this._handleMessageDeletion.bind(this); this._handleMessageDeletion = this._handleMessageDeletion.bind(this);
if (this.client.getMaxListeners() !== 0) this.client.setMaxListeners(this.client.getMaxListeners() + 1); this.client.incrementMaxListeners();
this.client.on(Events.MESSAGE_REACTION_ADD, this.handleCollect); this.client.on(Events.MESSAGE_REACTION_ADD, this.handleCollect);
this.client.on(Events.MESSAGE_REACTION_REMOVE, this.handleDispose); this.client.on(Events.MESSAGE_REACTION_REMOVE, this.handleDispose);
this.client.on(Events.MESSAGE_REACTION_REMOVE_ALL, this.empty); this.client.on(Events.MESSAGE_REACTION_REMOVE_ALL, this.empty);
@@ -64,7 +64,7 @@ class ReactionCollector extends Collector {
this.client.removeListener(Events.MESSAGE_DELETE, this._handleMessageDeletion); this.client.removeListener(Events.MESSAGE_DELETE, this._handleMessageDeletion);
this.client.removeListener(Events.CHANNEL_DELETE, this._handleChannelDeletion); this.client.removeListener(Events.CHANNEL_DELETE, this._handleChannelDeletion);
this.client.removeListener(Events.GUILD_DELETE, this._handleGuildDeletion); this.client.removeListener(Events.GUILD_DELETE, this._handleGuildDeletion);
if (this.client.getMaxListeners() !== 0) this.client.setMaxListeners(this.client.getMaxListeners() - 1); this.client.decrementMaxListeners();
}); });
this.on('collect', (reaction, user) => { this.on('collect', (reaction, user) => {

2
typings/index.d.ts vendored
View File

@@ -96,6 +96,8 @@ declare module 'discord.js' {
private _immediates: Set<NodeJS.Immediate>; private _immediates: Set<NodeJS.Immediate>;
private readonly api: object; private readonly api: object;
private rest: object; private rest: object;
private decrementMaxListeners(): void;
private incrementMaxListeners(): void;
public options: ClientOptions; public options: ClientOptions;
public clearInterval(interval: NodeJS.Timer): void; public clearInterval(interval: NodeJS.Timer): void;