nonebot.adapters.matrix.exception 源代码
import json
from typing import Any
from typing_extensions import override
from nonebot.drivers import Response
from nonebot.exception import (
ActionFailed as BaseActionFailed,
AdapterException,
ApiNotAvailable as BaseApiNotAvailable,
NetworkError as BaseNetworkError,
NoLogException as BaseNoLogException,
)
[文档]
class MatrixAdapterException(AdapterException):
def __init__(self) -> None:
super().__init__("Matrix")
[文档]
class NoLogException(BaseNoLogException, MatrixAdapterException):
pass
[文档]
class ActionFailed(BaseActionFailed, MatrixAdapterException):
def __init__(self, response: Response) -> None:
self.status_code = response.status_code
self.errcode: str | None = None
self.message: str | None = None
self.retry_after_ms: int | None = None
self.soft_logout: bool = False
self.body: dict[str, Any] | None = None
if response.content:
try:
body = json.loads(response.content)
except json.JSONDecodeError:
content = response.content
error = (
content.decode(errors="replace")
if isinstance(content, bytes)
else str(content)
)
body = {"error": error}
if isinstance(body, dict):
self._prepare_body(body)
@override
def __repr__(self) -> str:
return (
f"<{self.__class__.__name__}: {self.status_code}, "
f"errcode={self.errcode}, message={self.message}, "
f"retry_after_ms={self.retry_after_ms}>"
)
@override
def __str__(self) -> str:
return self.__repr__()
def _prepare_body(self, body: dict[str, Any]) -> None:
self.body = body
self.errcode = body.get("errcode")
self.message = body.get("error")
self.retry_after_ms = body.get("retry_after_ms")
self.soft_logout: bool = body.get("soft_logout", False)
[文档]
class InteractiveAuthRequired(ActionFailed):
"""A resumable UIA or OAuth authorization challenge, not token expiry."""
[文档]
class UnauthorizedException(ActionFailed):
pass
[文档]
class RateLimitException(ActionFailed):
pass
[文档]
class NetworkError(BaseNetworkError, MatrixAdapterException):
def __init__(self, msg: str | None = None) -> None:
super().__init__()
self.msg = msg
@override
def __repr__(self) -> str:
return f"<NetworkError message={self.msg}>"
@override
def __str__(self) -> str:
return self.__repr__()
[文档]
class ApiNotAvailable(BaseApiNotAvailable, MatrixAdapterException):
pass