Refactoring: handlers now implemented as classes. Module structure

This commit is contained in:
2024-02-11 12:40:11 +03:00
parent c2d7fd41d7
commit f3cdeeff3c
15 changed files with 330 additions and 316 deletions

View File

@@ -1,16 +1,39 @@
from typing import Any
from typing import Any, Dict, List, Optional, Tuple
from aiogram import Bot, Router
from aiogram.filters import Filter
from .message_handlers.handler import MessageHandlerABC
class NeuroApiRouter(Router):
bot: Bot
def __init__(self, *, name: str | None = None, bot: Bot) -> None:
super().__init__(name=name)
self.bot = bot
def add_message_handler(self, callback: MessageHandlerABC, *args: Any):
handler = callback(self.bot, *args)
self.message.register(handler.handler, handler.filter)
class Handler:
bot: Bot
router: Router
router: NeuroApiRouter
def __init__(self, bot: Bot) -> None:
assert isinstance(bot, Bot)
self.bot = bot
self.router = Router()
self.router = NeuroApiRouter(bot=bot)
def __call__(self) -> Router:
return self.router
def __call__(self) -> NeuroApiRouter:
return self.router
def add_handlers(self, handlers: List[MessageHandlerABC] | List[Tuple[MessageHandlerABC] | Optional[Tuple[Any, ...]]]):
for handler in handlers:
if isinstance(handler, tuple):
args = handler[1:] if len(handler)>1 else []
self.router.add_message_handler(handler[0], *args)
else:
self.router.add_message_handler(handler)