50 lines
1.6 KiB
Python
50 lines
1.6 KiB
Python
from collections.abc import Iterable
|
|
|
|
from aiogram import Dispatcher
|
|
from aiogram.dispatcher.middlewares.base import BaseMiddleware
|
|
|
|
from .admin import AdminMiddleware
|
|
from .loggings import LoggingMiddleware
|
|
from .maintenance import MaintenanceModeMiddleware
|
|
from .session import SessionMiddleware
|
|
from .throttling import ThrottlingMiddleware
|
|
from .user import UserMiddleware
|
|
from middlewares.ban_checker import BanCheckerMiddleware
|
|
|
|
|
|
def register_middleware(
|
|
dispatcher: Dispatcher,
|
|
middlewares: Iterable[BaseMiddleware | type[BaseMiddleware]] | None = None,
|
|
exclude: Iterable[str] | None = None,
|
|
pool=None
|
|
) -> None:
|
|
"""Регистрирует middleware в диспетчере."""
|
|
if middlewares is None:
|
|
available_middlewares = {
|
|
"admin": AdminMiddleware(),
|
|
"session": SessionMiddleware(),
|
|
"maintenance": MaintenanceModeMiddleware(),
|
|
"logging": LoggingMiddleware(),
|
|
"throttling": ThrottlingMiddleware(),
|
|
"user": UserMiddleware(),
|
|
}
|
|
|
|
if pool:
|
|
available_middlewares["ban_checker"] = BanCheckerMiddleware(pool)
|
|
|
|
exclude_set = set(exclude or [])
|
|
middlewares = [middleware for name, middleware in available_middlewares.items() if name not in exclude_set]
|
|
|
|
handlers = [
|
|
dispatcher.message,
|
|
dispatcher.callback_query,
|
|
dispatcher.inline_query,
|
|
]
|
|
|
|
for middleware in middlewares:
|
|
if isinstance(middleware, type):
|
|
middleware = middleware()
|
|
|
|
for handler in handlers:
|
|
handler.outer_middleware(middleware)
|