Source code for curious.exc
# This file is part of curious.
#
# curious is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# curious is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with curious. If not, see <http://www.gnu.org/licenses/>.
"""
Exceptions raised from within the library.
.. currentmodule:: curious.exc
"""
import enum
import warnings
from asks.response_objects import Response
[docs]class CuriousError(Exception):
"""
The base class for all curious exceptions.
"""
# HTTP based exceptions.
[docs]class ErrorCode(enum.IntEnum):
UNKNOWN_ACCOUNT = 10001
UNKNOWN_APPLICATION = 10002
UNKNOWN_CHANNEL = 10003
UNKNOWN_GUILD = 10004
UNKNOWN_INTEGRATION = 10005
UNKNOWN_INVITE = 10006
UNKNOWN_MEMBER = 10007
UNKNOWN_MESSAGE = 10008
UNKNOWN_OVERWRITE = 1009
UNKNOWN_PROVIDER = 10010
UNKNOWN_ROLE = 10011
UNKNOWN_TOKEN = 10012
UNKNOWN_USER = 10013
UNKNOWN_EMOJI = 10014
NO_BOTS = 20001
ONLY_BOTS = 20002
MAX_GUILDS = 30001 # technically user only
MAX_FRIENDS = 30002
MAX_PINS = 30003
MAX_ROLES = 30005
MAX_REACTIONS = 30010
MAX_GUILD_CHANNELS = 30013
UNAUTHORIZED = 40001
MISSING_ACCESS = 50001
INVALID_ACCOUNT = 50002
NO_DMS = 50003
EMBED_DISABLED = 50004
CANNOT_EDIT = 50005
CANNOT_SEND_EMPTY_MESSAGE = 50006
CANNOT_SEND_TO_USER = 50007
CANNOT_SEND_TO_VC = 50008
VERIFICATION_TOO_HIGH = 50009
OAUTH2_NO_BOT = 50010
OAUTH2_LIMIT = 50011
INVALID_OAUTH_STATE = 50012
MISSING_PERMISSIONS = 50013
INVALID_AUTH_TOKEN = 50014
NOTE_TOO_LONG = 50015
INVALID_MESSAGE_COUNT = 50016
CANNOT_PIN = 50019
INVALID_VANITY_URL = 50020
TOO_OLD_TO_BULK_DELETE = 50034
INVALID_FORM_BODY = 50035
INVALID_INVITE_GUILD = 50036
REACTION_BLOCKED = 90001
UNKNOWN = 0
[docs]class HTTPException(CuriousError, ConnectionError):
"""
Raised when a HTTP request fails with a 400 <= e < 600 error code.
"""
def __init__(self, response: Response, error: dict):
self.response = response
error_code = error.get("code", 0)
try:
#: The error code for this response.
self.error_code = ErrorCode(error_code)
except ValueError:
warnings.warn("Received unknown error code {}")
#: The error code for this response.
self.error_code = ErrorCode.UNKNOWN
self.error_message = error.get("message")
self.error = error
def __str__(self) -> str:
if self.error_code == ErrorCode.UNKNOWN:
return repr(self.error)
return "{} ({}): {}".format(self.error_code, self.error_code.name, self.error_message)
__repr__ = __str__
[docs]class Unauthorized(HTTPException):
"""
Raised when your bot token is invalid.
"""
[docs]class Forbidden(HTTPException):
"""
Raised when you don't have permission for something.
"""
[docs]class NotFound(HTTPException):
"""
Raised when something could not be found.
"""
[docs]class PermissionsError(CuriousError, PermissionError):
"""
Raised when you do not have sufficient permission to perform an action.
:ivar permission_required: The string of the permission required to perform this action.
"""
def __init__(self, permission_required: str):
self.permission_required = permission_required
def __str__(self) -> str:
return "Bot requires the permission {} to perform this action"\
.format(self.permission_required)
__repr__ = __str__
[docs]class HierarchyError(CuriousError, PermissionError):
"""
Raised when you can't do something due to the hierarchy.
"""