diff --git a/cogs/stats.py b/cogs/stats.py index ebb2210..0ff5052 100644 --- a/cogs/stats.py +++ b/cogs/stats.py @@ -30,7 +30,7 @@ class Stats: # We need to page through, so lets create a loop and break when we find out we're done while True: # Simply get data based on the URL - data = await utils.request(url, headers=headers) + data = await utils.request(url, headers=headers, force_content_type_json=True) # First check if the data failed to retrieve, if so just return if data is None: return @@ -40,11 +40,12 @@ class Stats: # We only carry about the user's if include['type'] != 'user': continue - # This check checks the user's connected campaign (should only exist for *our* user) and checks if it matches + # This check checks the user's connected campaign (should only exist for *our* user) and checks if it + # matches if include.get('relationshipos', {}).get('campaign', {}).get('data', {}).get('id', {}) == str(utils.patreon_id): continue - # Otherwuse the only way this user was included, was if they are a patron, so include them + # Otherwise the only way this user was included, was if they are a patron, so include them name = include['attributes']['full_name'] if name: names.append(name) diff --git a/cogs/utils/utilities.py b/cogs/utils/utilities.py index fd81fa0..9c301d2 100644 --- a/cogs/utils/utilities.py +++ b/cogs/utils/utilities.py @@ -60,7 +60,7 @@ async def download_image(url): return image -async def request(url, *, headers=None, payload=None, method='GET', attr='json'): +async def request(url, *, headers=None, payload=None, method='GET', attr='json', force_content_type_json=False): # Make sure our User Agent is what's set, and ensure it's sent even if no headers are passed if headers is None: headers = {} @@ -83,7 +83,13 @@ async def request(url, *, headers=None, payload=None, method='GET', attr='json') return_value = getattr(response, attr) # Next check if this can be called if callable(return_value): - return_value = return_value() + # This is use for json; it checks the mimetype instead of checking if the actual data + # This causes some places with different mimetypes to fail, even if it's valid json + # This check allows us to force the content_type to use whatever content type is given + if force_content_type_json: + return_value = return_value(content_type=response.headers['content-type']) + else: + return_value = return_value() # If this is awaitable, await it if inspect.isawaitable(return_value): return_value = await return_value