diff --git a/discord/http.py b/discord/http.py index 6a045f2f8..1e64a191f 100644 --- a/discord/http.py +++ b/discord/http.py @@ -224,7 +224,7 @@ class HTTPClient: fmt = 'We are being rate limited. Retrying in %.2f seconds. Handled under the bucket "%s"' # sleep a bit - retry_after = data['retry_after'] / 1000.0 + retry_after: float = data['retry_after'] # type: ignore log.warning(fmt, retry_after, bucket) # check if it's a global rate limit @@ -263,6 +263,7 @@ class HTTPClient: except OSError as e: # Connection reset by peer if tries < 4 and e.errno in (54, 10054): + await asyncio.sleep(1 + tries * 2) continue raise diff --git a/discord/webhook/async_.py b/discord/webhook/async_.py index 6a68aede5..296cccde1 100644 --- a/discord/webhook/async_.py +++ b/discord/webhook/async_.py @@ -165,7 +165,7 @@ class AsyncWebhookAdapter: remaining = response.headers.get('X-Ratelimit-Remaining') if remaining == '0' and response.status != 429: - delta = utils._parse_ratelimit_header(response.headers) + delta = utils._parse_ratelimit_header(response) log.debug( 'Webhook ID %s has been pre-emptively rate limited, waiting %.2f seconds', webhook_id, delta ) @@ -178,9 +178,10 @@ class AsyncWebhookAdapter: if not response.headers.get('Via'): raise HTTPException(response, data) - retry_after = data['retry_after'] / 1000.0 # type: ignore + retry_after: float = data['retry_after'] # type: ignore log.warning('Webhook ID %s is rate limited. Retrying in %.2f seconds', webhook_id, retry_after) await asyncio.sleep(retry_after) + continue if response.status >= 500: await asyncio.sleep(1 + attempt * 2) @@ -195,6 +196,7 @@ class AsyncWebhookAdapter: except OSError as e: if attempt < 4 and e.errno in (54, 10054): + await asyncio.sleep(1 + attempt * 2) continue raise diff --git a/discord/webhook/sync.py b/discord/webhook/sync.py index b5d0bbce7..c2f4d15b4 100644 --- a/discord/webhook/sync.py +++ b/discord/webhook/sync.py @@ -156,7 +156,7 @@ class WebhookAdapter: remaining = response.headers.get('X-Ratelimit-Remaining') if remaining == '0' and response.status_code != 429: - delta = utils._parse_ratelimit_header(response.headers) + delta = utils._parse_ratelimit_header(response) log.debug( 'Webhook ID %s has been pre-emptively rate limited, waiting %.2f seconds', webhook_id, delta ) @@ -169,9 +169,10 @@ class WebhookAdapter: if not response.headers.get('Via'): raise HTTPException(response, data) - retry_after = data['retry_after'] / 1000.0 # type: ignore + retry_after: float = data['retry_after'] # type: ignore log.warning('Webhook ID %s is rate limited. Retrying in %.2f seconds', webhook_id, retry_after) time.sleep(retry_after) + continue if response.status_code >= 500: time.sleep(1 + attempt * 2) @@ -186,6 +187,7 @@ class WebhookAdapter: except OSError as e: if attempt < 4 and e.errno in (54, 10054): + time.sleep(1 + attempt * 2) continue raise