diff --git a/litecord/gateway/schemas.py b/litecord/gateway/schemas.py index 1e006a0..78e46c4 100644 --- a/litecord/gateway/schemas.py +++ b/litecord/gateway/schemas.py @@ -121,7 +121,7 @@ RESUME_SCHEMA = { "schema": { "token": {"type": "string", "required": True}, "session_id": {"type": "string", "required": True}, - "seq": {"type": "number", "required": True}, + "seq": {"type": "number", "required": True, "nullable": True}, }, } }, diff --git a/litecord/gateway/websocket.py b/litecord/gateway/websocket.py index 45e4e63..f3981f9 100644 --- a/litecord/gateway/websocket.py +++ b/litecord/gateway/websocket.py @@ -958,6 +958,12 @@ class GatewayWebsocket: async def handle_6(self, payload: Dict[str, Any]): """Handle OP 6 Resume.""" payload = validate(payload, RESUME_SCHEMA) + + # HACK: this is a hack for discord.js that attempts to resume + # with a null sequence. + if data["seq"] is None: + return await self.invalidate_session(False) + data = payload["d"] token, sess_id, seq = data["token"], data["session_id"], data["seq"]