From 29ff5faecdce4812dee293e8eb3893c899457130 Mon Sep 17 00:00:00 2001 From: Skillz4Killz <23035000+Skillz4Killz@users.noreply.github.com> Date: Sun, 8 May 2022 09:58:57 -0400 Subject: [PATCH] fix: edge case ack crashes big bots (#2190) --- gateway/handleOnMessage.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/gateway/handleOnMessage.ts b/gateway/handleOnMessage.ts index bcaca849b..68f13785a 100644 --- a/gateway/handleOnMessage.ts +++ b/gateway/handleOnMessage.ts @@ -26,6 +26,11 @@ export async function handleOnMessage(gateway: GatewayManager, message: any, sha if (typeof message !== "string") return; const shard = gateway.shards.get(shardId); + + if (shard) { + // Edge case for big bots when too many events that 45 seconds are not enough for receving the heartbeat ack. As long as we are receving events no point in closing a connection. + shard.heartbeat.acknowledged = true; + } const messageData = JSON.parse(message) as DiscordGatewayPayload; gateway.debug("GW RAW", { shardId, payload: messageData }); @@ -52,8 +57,7 @@ export async function handleOnMessage(gateway: GatewayManager, message: any, sha if (shard) shard.safeRequestsPerShard = gateway.safeRequestsPerShard(gateway, shard); break; case GatewayOpcodes.HeartbeatACK: - if (gateway.shards.has(shardId)) { - const shard = gateway.shards.get(shardId)!; + if (shard) { shard.heartbeat.acknowledged = true; shard.heartbeat.lastReceivedAt = Date.now(); }