61 lines
1.9 KiB
Python
61 lines
1.9 KiB
Python
from collections.abc import Iterable
|
|
|
|
from aiogram import Dispatcher
|
|
from aiogram.dispatcher.middlewares.base import BaseMiddleware
|
|
|
|
from logger import logger
|
|
from middlewares.ban_checker import BanCheckerMiddleware
|
|
from middlewares.subscription import SubscriptionMiddleware
|
|
|
|
from .admin import AdminMiddleware
|
|
from .loggings import LoggingMiddleware
|
|
from .maintenance import MaintenanceModeMiddleware
|
|
from .session import SessionMiddleware
|
|
from .throttling import ThrottlingMiddleware
|
|
from .user import UserMiddleware
|
|
|
|
|
|
def register_middleware(
|
|
dispatcher: Dispatcher,
|
|
middlewares: Iterable[BaseMiddleware | type[BaseMiddleware]] | None = None,
|
|
exclude: Iterable[str] | None = None,
|
|
pool=None,
|
|
sessionmaker=None,
|
|
) -> None:
|
|
"""Регистрирует middleware в диспетчере."""
|
|
if middlewares is None:
|
|
available_middlewares = {
|
|
"admin": AdminMiddleware(),
|
|
"session": (
|
|
SessionMiddleware(sessionmaker) if sessionmaker else SessionMiddleware()
|
|
),
|
|
"maintenance": MaintenanceModeMiddleware(),
|
|
"logging": LoggingMiddleware(),
|
|
"throttling": ThrottlingMiddleware(),
|
|
"user": UserMiddleware(),
|
|
}
|
|
|
|
if sessionmaker:
|
|
dispatcher.update.outer_middleware(SubscriptionMiddleware())
|
|
dispatcher.update.outer_middleware(BanCheckerMiddleware(sessionmaker))
|
|
|
|
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)
|