fix(WebSocketManager): available sessions check (#9823)

Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
This commit is contained in:
DD
2023-09-10 15:42:38 +03:00
committed by GitHub
parent 6404c013e7
commit e68ab167c2

View File

@@ -293,18 +293,20 @@ export class WebSocketManager extends AsyncEventEmitter<ManagerShardEventsMap> {
public async connect() { public async connect() {
const shardCount = await this.getShardCount(); const shardCount = await this.getShardCount();
// Spawn shards and adjust internal state
await this.updateShardCount(shardCount);
const shardIds = await this.getShardIds();
const data = await this.fetchGatewayInformation(); const data = await this.fetchGatewayInformation();
if (data.session_start_limit.remaining < shardCount) {
if (data.session_start_limit.remaining < shardIds.length) {
throw new Error( throw new Error(
`Not enough sessions remaining to spawn ${shardCount} shards; only ${ `Not enough sessions remaining to spawn ${shardIds.length} shards; only ${
data.session_start_limit.remaining data.session_start_limit.remaining
} remaining; resets at ${new Date(Date.now() + data.session_start_limit.reset_after).toISOString()}`, } remaining; resets at ${new Date(Date.now() + data.session_start_limit.reset_after).toISOString()}`,
); );
} }
// First, make sure all our shards are spawned
await this.updateShardCount(shardCount);
await this.strategy.connect(); await this.strategy.connect();
} }