refactor: add ConfigError and Lolz error handling
Build and Push (dev) / build (push) Successful in 10m53s
Build and Push (dev) / build (push) Successful in 10m53s
This commit is contained in:
+35
-18
@@ -4,9 +4,10 @@ from aiogram import Bot
|
||||
from aiogram.enums import ParseMode
|
||||
from aiogram.client.default import DefaultBotProperties
|
||||
from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup
|
||||
from aiogram.exceptions import TelegramAPIError, TelegramBadRequest, TelegramNetworkError
|
||||
|
||||
from config import Config
|
||||
from typing import Dict, Any, List
|
||||
from typing import Dict, Any, List, Optional
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -28,11 +29,11 @@ class NotificationBot:
|
||||
"Бот для уведомлений инициализирован (admin_id=%s)", config.admin_id
|
||||
)
|
||||
|
||||
except:
|
||||
logger.exception("Не удалось инициализировать Бот для уведомлений")
|
||||
except (TelegramAPIError, ValueError, TypeError) as e:
|
||||
logger.error(f"Не удалось инициализировать Бот для уведомлений: {e}")
|
||||
raise
|
||||
|
||||
async def _notify(self, message: str, reply_to: int = None, link: str = None):
|
||||
async def _notify(self, message: str, reply_to: int = None, link: str = None) -> Optional[int]:
|
||||
try:
|
||||
logger.debug("Отправка уведомления (reply_to=%s, link=%s)", reply_to, link)
|
||||
keyboard = None
|
||||
@@ -58,10 +59,20 @@ class NotificationBot:
|
||||
)
|
||||
return sent_message.message_id
|
||||
|
||||
except TelegramBadRequest as e:
|
||||
logger.error("Bad request sending notification: %s", e)
|
||||
return None
|
||||
except TelegramNetworkError as e:
|
||||
logger.error("Network error sending notification: %s", e)
|
||||
return None
|
||||
except TelegramAPIError as e:
|
||||
logger.error("Telegram API error sending notification: %s", e)
|
||||
return None
|
||||
except Exception as e:
|
||||
logger.error("Ошибка отправки уведомления: %s", e)
|
||||
logger.error("Unexpected error sending notification: %s", e)
|
||||
return None
|
||||
|
||||
async def new_post(self, post: Dict[str, Any], links: List[str]):
|
||||
async def new_post(self, post: Dict[str, Any], links: List[str]) -> Optional[int]:
|
||||
try:
|
||||
thread = post.get("thread")
|
||||
|
||||
@@ -99,11 +110,14 @@ class NotificationBot:
|
||||
)
|
||||
return post_message_id
|
||||
|
||||
except:
|
||||
logger.exception("Ошибка в new_post")
|
||||
raise
|
||||
except (KeyError, AttributeError, TypeError) as e:
|
||||
logger.error(f"Неверная структура поста в new_post: {e}")
|
||||
return None
|
||||
except Exception as e:
|
||||
logger.error(f"Неожиданная ошибка в new_post: {e}")
|
||||
return None
|
||||
|
||||
async def success(self, link: str, post_message_id: int):
|
||||
async def success(self, link: str, post_message_id: int) -> Optional[int]:
|
||||
try:
|
||||
logger.info(
|
||||
"Звезда успешно отправлена: link=%s, stars=%s",
|
||||
@@ -124,13 +138,13 @@ class NotificationBot:
|
||||
)
|
||||
return success_message_id
|
||||
|
||||
except:
|
||||
logger.exception("Ошибка в success")
|
||||
raise
|
||||
except Exception as e:
|
||||
logger.error(f"Неожиданная ошибка в success: {e}")
|
||||
return None
|
||||
|
||||
async def failure(self, post: Dict[str, Any], reason: str, post_message_id: int):
|
||||
async def failure(self, post: Dict[str, Any], reason: str, post_message_id: int) -> Optional[int]:
|
||||
try:
|
||||
permalink = post.get("links").get("permalink")
|
||||
permalink = post.get("links", {}).get("permalink")
|
||||
logger.warning(
|
||||
"Не удалось отправить звезду: reason=%r, link=%s", reason, permalink
|
||||
)
|
||||
@@ -147,6 +161,9 @@ class NotificationBot:
|
||||
)
|
||||
return failure_message_id
|
||||
|
||||
except:
|
||||
logger.exception("Ошибка в failure")
|
||||
raise
|
||||
except (KeyError, AttributeError, TypeError) as e:
|
||||
logger.error(f"Неверная структура поста в failure: {e}")
|
||||
return None
|
||||
except Exception as e:
|
||||
logger.error(f"Неожиданная ошибка в failure: {e}")
|
||||
return None
|
||||
|
||||
Reference in New Issue
Block a user