diff --git a/discord/http.py b/discord/http.py index 2192170ad..d292d3c69 100644 --- a/discord/http.py +++ b/discord/http.py @@ -102,6 +102,10 @@ async def json_or_text(response: aiohttp.ClientResponse) -> Union[Dict[str, Any] return text +def _gen_accept_encoding_header(): + return 'gzip, deflate, br' if aiohttp.http_parser.HAS_BROTLI else 'gzip, deflate' + + class Route: BASE: ClassVar[str] = 'https://discord.com/api/v9' @@ -149,6 +153,8 @@ class MaybeUnlock: # For some reason, the Discord voice websocket expects this header to be # completely lowercase while aiohttp respects spec and does it as case-insensitive aiohttp.hdrs.WEBSOCKET = 'websocket' # type: ignore +# Support brotli if installed +aiohttp.client_reqrep.ClientRequest.DEFAULT_HEADERS[aiohttp.hdrs.ACCEPT_ENCODING] = _gen_accept_encoding_header() class _FakeResponse: diff --git a/discord/utils.py b/discord/utils.py index 4fb770a46..6bb9965ec 100644 --- a/discord/utils.py +++ b/discord/utils.py @@ -1263,10 +1263,10 @@ async def _get_info(session: ClientSession) -> Tuple[str, str, int]: async def _get_build_number(session: ClientSession) -> int: # Thank you Discord-S.C.U.M """Fetches client build number""" try: - login_page_request = await session.get('https://discord.com/login', headers={'Accept-Encoding': 'gzip, deflate'}, timeout=7) + login_page_request = await session.get('https://discord.com/login', timeout=7) login_page = await login_page_request.text() build_url = 'https://discord.com/assets/' + re.compile(r'assets/+([a-z0-9]+)\.js').findall(login_page)[-2] + '.js' - build_request = await session.get(build_url, headers={'Accept-Encoding': 'gzip, deflate'}, timeout=7) + build_request = await session.get(build_url, timeout=7) build_file = await build_request.text() build_index = build_file.find('buildNumber') + 14 return int(build_file[build_index:build_index + 6])