diff --git a/packages/discord.js/src/client/websocket/WebSocketShard.js b/packages/discord.js/src/client/websocket/WebSocketShard.js index 0c6ad864235e..b2d7bc1d5954 100644 --- a/packages/discord.js/src/client/websocket/WebSocketShard.js +++ b/packages/discord.js/src/client/websocket/WebSocketShard.js @@ -64,6 +64,13 @@ class WebSocketShard extends EventEmitter { */ this.sessionId = null; + /** + * The resume url for this shard + * @type {?string} + * @private + */ + this.resumeURL = null; + /** * The previous heartbeat ping of the shard * @type {number} @@ -193,12 +200,14 @@ class WebSocketShard extends EventEmitter { * or reject if we couldn't connect */ connect() { - const { gateway, client } = this.manager; + const { client } = this.manager; if (this.connection?.readyState === WebSocket.OPEN && this.status === Status.Ready) { return Promise.resolve(); } + const gateway = this.resumeURL ?? this.manager.gateway; + return new Promise((resolve, reject) => { const cleanup = () => { this.removeListener(WebSocketShardEvents.Close, onClose); @@ -416,9 +425,10 @@ class WebSocketShard extends EventEmitter { this.emit(WebSocketShardEvents.Ready); this.sessionId = packet.d.session_id; + this.resumeURL = packet.d.resume_gateway_url; this.expectedGuilds = new Set(packet.d.guilds.map(d => d.id)); this.status = Status.WaitingForGuilds; - this.debug(`[READY] Session ${this.sessionId}.`); + this.debug(`[READY] Session ${this.sessionId} | Resume url ${this.resumeURL}.`); this.lastHeartbeatAcked = true; this.sendHeartbeat('ReadyHeartbeat'); break; @@ -847,10 +857,11 @@ class WebSocketShard extends EventEmitter { // Step 4: Cache the old sequence (use to attempt a resume) if (this.sequence !== -1) this.closeSequence = this.sequence; - // Step 5: Reset the sequence and session id if requested + // Step 5: Reset the sequence, resume url and session id if requested if (reset) { this.sequence = -1; this.sessionId = null; + this.resumeURL = null; } // Step 6: reset the rate limit data diff --git a/packages/discord.js/typings/index.d.ts b/packages/discord.js/typings/index.d.ts index 1447430e39a8..4f19cf405fed 100644 --- a/packages/discord.js/typings/index.d.ts +++ b/packages/discord.js/typings/index.d.ts @@ -2995,6 +2995,7 @@ export class WebSocketShard extends EventEmitter { private sequence: number; private closeSequence: number; private sessionId: string | null; + private resumeURL: string | null; private lastPingTimestamp: number; private lastHeartbeatAcked: boolean; private readonly ratelimit: {