From 5fe109527dc4f32b8b4db6becde66a748fe64d57 Mon Sep 17 00:00:00 2001 From: MARCROCK22 Date: Fri, 13 Dec 2024 09:27:29 -0400 Subject: [PATCH] fix: resharder --- src/client/workerclient.ts | 5 ++--- src/websocket/discord/sharder.ts | 24 +++++------------------- src/websocket/discord/workermanager.ts | 4 ++-- 3 files changed, 9 insertions(+), 24 deletions(-) diff --git a/src/client/workerclient.ts b/src/client/workerclient.ts index cd424ba..75252f4 100644 --- a/src/client/workerclient.ts +++ b/src/client/workerclient.ts @@ -236,9 +236,8 @@ export class WorkerClient extends BaseClient { ...this.options.gateway?.properties, }, handlePayload(_, payload) { - if (payload.t === 'READY') { - shardsConnected++; - } else if (payload.t === 'GUILDS_READY' && shardsConnected === workerData.shards.length) { + if (payload.t !== 'GUILDS_READY') return; + if (++shardsConnected === workerData.shards.length) { self.postMessage({ type: 'WORKER_READY_RESHARDING', workerId: workerData.workerId, diff --git a/src/websocket/discord/sharder.ts b/src/websocket/discord/sharder.ts index 050f3a1..5735544 100644 --- a/src/websocket/discord/sharder.ts +++ b/src/websocket/discord/sharder.ts @@ -147,36 +147,22 @@ export class ShardManager extends Map { //waiting for all shards to connect let shardsConnected = 0; - const handleGuilds = new Set(); - - let handlePayload = async (sharder: ShardManager, _: number, packet: GatewayDispatchPayload) => { - if (packet.t === 'GUILD_CREATE' || packet.t === 'GUILD_DELETE') { - handleGuilds.delete(packet.d.id); - if (shardsConnected === info.shards && !handleGuilds.size) { - return cleanProcess(sharder); - } - } - - if (packet.t !== 'READY') return; - - for (const guild of packet.d.guilds) { - handleGuilds.add(guild.id); - } - - if (++shardsConnected < info.shards || handleGuilds.size) return; + let handlePayload = (sharder: ShardManager, _: number, packet: GatewayDispatchPayload) => { + if (packet.t !== 'GUILDS_READY') return; + if (++shardsConnected !== info.shards) return; cleanProcess(sharder); // dont listen more events when all shards are ready }; const cleanProcess = (sharder: ShardManager) => { - handlePayload = async () => { + handlePayload = () => { // }; this.disconnectAll(); this.clear(); - this.options.totalShards = this.options.shardEnd = info.shards; + this.options.totalShards = this.options.shardEnd = this.options.info.shards = info.shards; for (const [id, shard] of sharder) { shard.options.handlePayload = (shardId, packet) => { return this.options.handlePayload(shardId, packet); diff --git a/src/websocket/discord/workermanager.ts b/src/websocket/discord/workermanager.ts index a5532ea..b4860f1 100644 --- a/src/websocket/discord/workermanager.ts +++ b/src/websocket/discord/workermanager.ts @@ -282,7 +282,7 @@ export class WorkerManager extends Map< this.get(message.workerId)!.disconnected = true; if ([...this.values()].every(w => w.disconnected)) { this.options.totalShards = this._info!.shards; - this.options.shardEnd = this.options.totalShards = this._info!.shards; + this.options.shardEnd = this.options.totalShards = this.options.info.shards = this._info!.shards; this.options.workers = this.size; delete this._info; for (const [id] of this.entries()) { @@ -628,7 +628,7 @@ export class WorkerManager extends Map< }, this.debugger, ); - await this.prepareWorkers(spaces, true); + this.prepareWorkers(spaces, true); return this.reshardingWorkerQueue.shift()!(); }, this.options.resharding.interval); }