mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-09 16:13:31 +01:00
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:
@@ -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');
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
1
typings/index.d.ts
vendored
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user