blob: 9dfbf29878544fcfbe2394ceecf210eec5d49a03 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
import zlib
import discord
from discord.ext import commands
class SocketFix(commands.Cog):
def __init__(self, bot):
self.bot = bot
self._zlib = zlib.decompressobj()
self._buffer = bytearray()
@commands.Cog.listener()
async def on_socket_raw_receive(self, msg):
if type(msg) is bytes:
self._buffer.extend(msg)
if len(msg) < 4 or msg[-4:] != b'\x00\x00\xff\xff':
return
try:
msg = self._zlib.decompress(self._buffer)
except Exception:
self._buffer = bytearray() # Reset buffer on fail just in case...
return
msg = msg.decode('utf-8')
self._buffer = bytearray()
msg = discord.utils._from_json(msg)
self.bot.dispatch('on_socket_response', msg)
async def setup(bot):
await bot.add_cog(SocketFix(bot))
|