feat(ClientOptions): waitGuildTimeout amount client option (#6576)

Co-authored-by: D Trombett <73136330+DTrombett@users.noreply.github.com>
Co-authored-by: Hackerboi 69 <62872992+thehackerboi69github@users.noreply.github.com>
Co-authored-by: monbrey <rsm999@uowmail.edu.au>
Co-authored-by: Vlad Frangu <kingdgrizzle@gmail.com>
Co-authored-by: Yoshida Tomio <mail@tomio.codes>
Co-authored-by: SpaceEEC <spaceeec@yahoo.com>
Co-authored-by: Noel <buechler.noel@outlook.com>
This commit is contained in:
Kyler Chin
2021-12-24 05:30:00 -08:00
committed by GitHub
parent ea9e897b92
commit 2bfc638a5c
4 changed files with 18 additions and 3 deletions

View File

@@ -572,6 +572,9 @@ class Client extends BaseClient {
if (!Array.isArray(options.partials)) { if (!Array.isArray(options.partials)) {
throw new TypeError('CLIENT_INVALID_OPTION', 'partials', 'an Array'); throw new TypeError('CLIENT_INVALID_OPTION', 'partials', 'an Array');
} }
if (typeof options.waitGuildTimeout !== 'number' || isNaN(options.waitGuildTimeout)) {
throw new TypeError('CLIENT_INVALID_OPTION', 'waitGuildTimeout', 'a number');
}
if (typeof options.restWsBridgeTimeout !== 'number' || isNaN(options.restWsBridgeTimeout)) { if (typeof options.restWsBridgeTimeout !== 'number' || isNaN(options.restWsBridgeTimeout)) {
throw new TypeError('CLIENT_INVALID_OPTION', 'restWsBridgeTimeout', 'a number'); throw new TypeError('CLIENT_INVALID_OPTION', 'restWsBridgeTimeout', 'a number');
} }

View File

@@ -475,12 +475,20 @@ class WebSocketShard extends EventEmitter {
return; return;
} }
const hasGuildsIntent = new Intents(this.manager.client.options.intents).has(Intents.FLAGS.GUILDS); const hasGuildsIntent = new Intents(this.manager.client.options.intents).has(Intents.FLAGS.GUILDS);
// Step 2. Create a 15s timeout that will mark the shard as ready if there are still unavailable guilds // Step 2. Create a timeout that will mark the shard as ready if there are still unavailable guilds
// * The timeout is 15 seconds by default
// * This can be optionally changed in the client options via the `waitGuildTimeout` option
// * a timeout time of zero will skip this timeout, which potentially could cause the Client to miss guilds.
const { waitGuildTimeout } = this.manager.client.options;
this.readyTimeout = setTimeout( this.readyTimeout = setTimeout(
() => { () => {
this.debug( this.debug(
`Shard ${hasGuildsIntent ? 'did' : 'will'} not receive any more guild packets` + `Shard ${hasGuildsIntent ? 'did' : 'will'} not receive any more guild packets` +
`${hasGuildsIntent ? ' in 15 seconds' : ''}.\n Unavailable guild count: ${this.expectedGuilds.size}`, `${hasGuildsIntent ? ` in ${waitGuildTimeout} ms` : ''}.\nUnavailable guild count: ${
this.expectedGuilds.size
}`,
); );
this.readyTimeout = null; this.readyTimeout = null;
@@ -489,7 +497,7 @@ class WebSocketShard extends EventEmitter {
this.emit(ShardEvents.ALL_READY, this.expectedGuilds); this.emit(ShardEvents.ALL_READY, this.expectedGuilds);
}, },
hasGuildsIntent ? 15_000 : 0, hasGuildsIntent ? waitGuildTimeout : 0,
).unref(); ).unref();
} }

View File

@@ -70,6 +70,8 @@
* [User Agent](https://discord.com/developers/docs/reference#user-agent) header * [User Agent](https://discord.com/developers/docs/reference#user-agent) header
* @property {PresenceData} [presence={}] Presence data to use upon login * @property {PresenceData} [presence={}] Presence data to use upon login
* @property {IntentsResolvable} intents Intents to enable for this connection * @property {IntentsResolvable} intents Intents to enable for this connection
* @property {number} [waitGuildTimeout=15_000] Time in milliseconds that Clients with the GUILDS intent should wait for
* missing guilds to be recieved before starting the bot. If not specified, the default is 15 seconds.
* @property {SweeperOptions} [sweepers={}] Options for cache sweeping * @property {SweeperOptions} [sweepers={}] Options for cache sweeping
* @property {WebsocketOptions} [ws] Options for the WebSocket * @property {WebsocketOptions} [ws] Options for the WebSocket
* @property {HTTPOptions} [http] HTTP options * @property {HTTPOptions} [http] HTTP options
@@ -128,6 +130,7 @@ class Options extends null {
*/ */
static createDefault() { static createDefault() {
return { return {
waitGuildTimeout: 15_000,
shardCount: 1, shardCount: 1,
makeCache: this.cacheWithLimits(this.defaultMakeCacheSettings), makeCache: this.cacheWithLimits(this.defaultMakeCacheSettings),
messageCacheLifetime: 0, messageCacheLifetime: 0,

1
typings/index.d.ts vendored
View File

@@ -4004,6 +4004,7 @@ export interface ClientOptions {
userAgentSuffix?: string[]; userAgentSuffix?: string[];
presence?: PresenceData; presence?: PresenceData;
intents: BitFieldResolvable<IntentsString, number>; intents: BitFieldResolvable<IntentsString, number>;
waitGuildTimeout?: number;
sweepers?: SweeperOptions; sweepers?: SweeperOptions;
ws?: WebSocketOptions; ws?: WebSocketOptions;
http?: HTTPOptions; http?: HTTPOptions;