Files
ai-char-bot/middlewares/auth.py
2026-02-02 16:15:17 +03:00

50 lines
2.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from typing import Callable, Dict, Any, Awaitable
from aiogram import BaseMiddleware
from aiogram.types import Message
from repos.user_repo import UsersRepo, UserStatus
from keyboards import get_request_kb
class AuthMiddleware(BaseMiddleware):
def __init__(self, repo: UsersRepo, admin_id: int):
self.repo = repo
self.admin_id = admin_id
async def __call__(
self,
handler: Callable[[Message, Dict[str, Any]], Awaitable[Any]],
event: Message,
data: Dict[str, Any]
) -> Any:
user = event.from_user
# Админа пускаем всегда
# if user.id == self.admin_id:
# return await handler(event, data)
# Получаем данные из БД
db_user = await self.repo.get_user(user.id)
status = db_user.get("status") if db_user else UserStatus.NONE
# 1. Если доступ уже разрешен — пропускаем к боту
if status == UserStatus.ALLOWED:
return await handler(event, data)
# 2. Если статус PENDING (ждет решения)
if status == UserStatus.PENDING:
await event.answer("⏳ Ваша заявка находится на рассмотрении администратора.")
return
# 3. Если нет в базе или ЗАПРЕЩЕН — проверяем тайминг 24 часа
can_request = await self.repo.can_request_access(user.id)
if can_request:
await event.answer(
"⛔️ У вас нет доступа к этому боту.\nВы можете отправить запрос администратору.",
reply_markup=get_request_kb()
)
else:
# Если 24 часа еще не прошло
await event.answer("⛔️ Доступ запрещен.\nПовторный запрос можно отправить через 24 часа.")
return # Прерываем обработку, хендлеры бота не сработают