mirror of
https://github.com/MrSedan/neuro-reply-bot-reworked.git
synced 2026-01-14 21:49:42 +03:00
39 lines
1.2 KiB
Python
39 lines
1.2 KiB
Python
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: NeuroApiRouter
|
|
|
|
def __init__(self, bot: Bot) -> None:
|
|
assert isinstance(bot, Bot)
|
|
self.bot = bot
|
|
self.router = NeuroApiRouter(bot=bot)
|
|
|
|
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) |