aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--discord/errors.py8
-rw-r--r--discord/http.py7
-rw-r--r--discord/webhook.py8
-rw-r--r--docs/api.rst5
4 files changed, 24 insertions, 4 deletions
diff --git a/discord/errors.py b/discord/errors.py
index fec1f45d..bd78131a 100644
--- a/discord/errors.py
+++ b/discord/errors.py
@@ -122,6 +122,14 @@ class NotFound(HTTPException):
"""
pass
+class DiscordServerError(HTTPException):
+ """Exception that's thrown for when a 500 range status code occurs.
+
+ Subclass of :exc:`HTTPException`.
+
+ .. versionadded:: 1.5
+ """
+ pass
class InvalidData(ClientException):
"""Exception that's raised when the library encounters unknown
diff --git a/discord/http.py b/discord/http.py
index d91664c9..1ad11d9e 100644
--- a/discord/http.py
+++ b/discord/http.py
@@ -33,7 +33,7 @@ import weakref
import aiohttp
-from .errors import HTTPException, Forbidden, NotFound, LoginFailure, GatewayNotFound
+from .errors import HTTPException, Forbidden, NotFound, LoginFailure, DiscordServerError, GatewayNotFound
from .gateway import DiscordClientWebSocketResponse
from . import __version__, utils
@@ -252,6 +252,9 @@ class HTTPClient:
raise
# We've run out of retries, raise.
+ if r.status >= 500:
+ raise DiscordServerError(r, data)
+
raise HTTPException(r, data)
async def get_from_cdn(self, url):
@@ -659,7 +662,7 @@ class HTTPClient:
def get_template(self, code):
return self.request(Route('GET', '/guilds/templates/{code}', code=code))
-
+
def create_from_template(self, code, name, region, icon):
payload = {
'name': name,
diff --git a/discord/webhook.py b/discord/webhook.py
index 7824c55a..bd280230 100644
--- a/discord/webhook.py
+++ b/discord/webhook.py
@@ -34,7 +34,7 @@ from urllib.parse import quote as _uriquote
import aiohttp
from . import utils
-from .errors import InvalidArgument, HTTPException, Forbidden, NotFound
+from .errors import InvalidArgument, HTTPException, Forbidden, NotFound, DiscordServerError
from .enums import try_enum, WebhookType
from .user import BaseUser, User
from .asset import Asset
@@ -241,7 +241,10 @@ class AsyncWebhookAdapter(WebhookAdapter):
raise NotFound(r, response)
else:
raise HTTPException(r, response)
+
# no more retries
+ if r.status >= 500:
+ raise DiscordServerError(r, response)
raise HTTPException(r, response)
async def handle_execution_response(self, response, *, wait):
@@ -342,7 +345,10 @@ class RequestsWebhookAdapter(WebhookAdapter):
raise NotFound(r, response)
else:
raise HTTPException(r, response)
+
# no more retries
+ if r.status >= 500:
+ raise DiscordServerError(r, response)
raise HTTPException(r, response)
def handle_execution_response(self, response, *, wait):
diff --git a/docs/api.rst b/docs/api.rst
index 759aece6..c97197cd 100644
--- a/docs/api.rst
+++ b/docs/api.rst
@@ -904,7 +904,7 @@ of :class:`enum.Enum`.
is to be interpreted as a system message or a regular message.
.. container:: operations
-
+
.. describe:: x == y
Checks if two messages are equal.
@@ -2902,6 +2902,8 @@ The following exceptions are thrown by the library.
.. autoexception:: NotFound
+.. autoexception:: DiscordServerError
+
.. autoexception:: InvalidData
.. autoexception:: InvalidArgument
@@ -2931,3 +2933,4 @@ Exception Hierarchy
- :exc:`HTTPException`
- :exc:`Forbidden`
- :exc:`NotFound`
+ - :exc:`DiscordServerError`