| """ |
| Drop-in replacements for the ``telegram.error`` exception hierarchy, so that |
| every ``except BadRequest`` / ``except Forbidden`` / ``except TelegramError`` |
| clause in the original codebase keeps working unchanged. |
| |
| These are pure Python exception classes - they carry no Telethon-specific |
| behaviour. All the translation from real Telethon/MTProto errors into these |
| types happens in ``src/tg_compat/_bot.py``. |
| """ |
|
|
|
|
| class TelegramError(Exception): |
| """Base class for all compat Telegram errors (mirrors telegram.error.TelegramError).""" |
|
|
| def __init__(self, message: str = ""): |
| self.message = message |
| super().__init__(message) |
|
|
| def __str__(self): |
| return self.message |
|
|
|
|
| class BadRequest(TelegramError): |
| """Mirrors telegram.error.BadRequest (Bot API 'Bad Request' responses).""" |
|
|
|
|
| class Forbidden(TelegramError): |
| """Mirrors telegram.error.Forbidden (bot was blocked / kicked / lacks rights).""" |
|
|
|
|
| class TimedOut(TelegramError): |
| """Mirrors telegram.error.TimedOut (request timed out).""" |
|
|
| def __init__(self, message: str = "Timed out"): |
| super().__init__(message) |
|
|
|
|
| class NetworkError(TelegramError): |
| """Mirrors telegram.error.NetworkError (connection-level failures).""" |
|
|
|
|
| class RetryAfter(TelegramError): |
| """Mirrors telegram.error.RetryAfter (flood control).""" |
|
|
| def __init__(self, retry_after): |
| self.retry_after = retry_after |
| super().__init__(f"Flood control exceeded. Retry in {retry_after} seconds") |
|
|
|
|
| class ChatMigrated(TelegramError): |
| """Mirrors telegram.error.ChatMigrated (basic group upgraded to supergroup).""" |
|
|
| def __init__(self, new_chat_id: int): |
| self.new_chat_id = new_chat_id |
| super().__init__(f"Group migrated to supergroup {new_chat_id}") |
|
|
|
|
| class InvalidToken(TelegramError): |
| """Mirrors telegram.error.InvalidToken.""" |
|
|