"""Decorators and utility functions for group handlers""" # Standard library imports import traceback from typing import Any, Callable # Third-party imports from aiogram import types # Local imports from logs.custom_logger import logger def error_handler(func: Callable[..., Any]) -> Callable[..., Any]: """Decorator for centralized error handling""" async def wrapper(*args: Any, **kwargs: Any) -> Any: try: return await func(*args, **kwargs) except Exception as e: logger.error(f"Error in {func.__name__}: {str(e)}") # Try to send error to logs if possible try: message = next((arg for arg in args if isinstance(arg, types.Message)), None) if message and hasattr(message, 'bot'): from helper_bot.utils.base_dependency_factory import get_global_instance bdf = get_global_instance() important_logs = bdf.settings['Telegram']['important_logs'] await message.bot.send_message( chat_id=important_logs, text=f"Произошла ошибка в {func.__name__}: {str(e)}\n\nTraceback:\n{traceback.format_exc()}" ) except Exception: # If we can't log the error, at least it was logged to logger pass raise return wrapper