From 78598d59d7f006058a3e31ef7d6b21606b804c42 Mon Sep 17 00:00:00 2001
From: Rapptz <rapptz@gmail.com>
Date: Wed, 25 Aug 2021 01:26:37 -0400
Subject: [PATCH] Change on_socket_raw_receive to dispatch right before JSON
 conversion

---
 discord/gateway.py |  4 ++--
 docs/api.rst       | 10 ++++------
 2 files changed, 6 insertions(+), 8 deletions(-)

diff --git a/discord/gateway.py b/discord/gateway.py
index 871376952..aa0c6ba06 100644
--- a/discord/gateway.py
+++ b/discord/gateway.py
@@ -420,8 +420,6 @@ class DiscordWebSocket:
         _log.info('Shard ID %s has sent the RESUME payload.', self.shard_id)
 
     async def received_message(self, msg, /):
-        self.log_receive(msg)
-
         if type(msg) is bytes:
             self._buffer.extend(msg)
 
@@ -430,6 +428,8 @@ class DiscordWebSocket:
             msg = self._zlib.decompress(self._buffer)
             msg = msg.decode('utf-8')
             self._buffer = bytearray()
+
+        self.log_receive(msg)
         msg = utils._from_json(msg)
 
         _log.debug('For Shard ID %s: WebSocket Event: %s', self.shard_id, msg)
diff --git a/docs/api.rst b/docs/api.rst
index 021c87f48..1ad95decd 100644
--- a/docs/api.rst
+++ b/docs/api.rst
@@ -312,9 +312,9 @@ to handle it, which defaults to print a traceback and ignoring the exception.
 
 .. function:: on_socket_raw_receive(msg)
 
-    Called whenever a message is received from the WebSocket, before
-    it's processed. This event is always dispatched when a message is
-    received and the passed data is not processed in any way.
+    Called whenever a message is completely received from the WebSocket, before
+    it's processed and parsed. This event is always dispatched when a
+    complete message is received and the passed data is not parsed in any way.
 
     This is only really useful for grabbing the WebSocket stream and
     debugging purposes.
@@ -327,9 +327,7 @@ to handle it, which defaults to print a traceback and ignoring the exception.
         WebSocket. The voice WebSocket will not trigger this event.
 
     :param msg: The message passed in from the WebSocket library.
-                Could be :class:`bytes` for a binary message or :class:`str`
-                for a regular message.
-    :type msg: Union[:class:`bytes`, :class:`str`]
+    :type msg: :class:`str`
 
 .. function:: on_socket_raw_send(payload)