Files
Solo_bot/middlewares/maintenance.py
T

48 lines
1.5 KiB
Python

from collections.abc import Awaitable, Callable
from typing import Any
from aiogram import BaseMiddleware
from aiogram.types import CallbackQuery, Message, Update
from config import ADMIN_ID
from database import async_session_maker
from database.models import Admin
maintenance_mode = False
class MaintenanceModeMiddleware(BaseMiddleware):
async def __call__(
self,
handler: Callable[[Update, dict[str, Any]], Awaitable[Any]],
event: Update,
data: dict[str, Any],
) -> Any:
if not maintenance_mode:
return await handler(event, data)
user_id = None
if isinstance(event, Message):
user_id = event.from_user.id
elif isinstance(event, CallbackQuery):
user_id = event.from_user.id
if not user_id:
return
if user_id in ADMIN_ID:
return await handler(event, data)
async with async_session_maker() as session:
db_admin = await session.get(Admin, user_id)
if db_admin:
return await handler(event, data)
if isinstance(event, CallbackQuery):
await event.answer("⚙️ Бот временно недоступен. Ведутся технические работы.", show_alert=True)
elif isinstance(event, Message):
await event.answer("⚙️ Бот временно недоступен. Ведутся технические работы.")
return