mirror of
https://github.com/BEDOLAGA-DEV/remnawave-bedolaga-telegram-bot.git
synced 2026-02-23 21:01:17 +00:00
54 lines
2.2 KiB
Python
54 lines
2.2 KiB
Python
import logging
|
|
from typing import Callable, Dict, Any, Awaitable
|
|
from datetime import datetime
|
|
from aiogram import BaseMiddleware
|
|
from aiogram.types import TelegramObject, Update, Message, CallbackQuery
|
|
|
|
from app.database.database import get_db
|
|
from app.database.crud.user import get_user_by_telegram_id
|
|
from app.database.models import SubscriptionStatus
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class SubscriptionStatusMiddleware(BaseMiddleware):
|
|
|
|
async def __call__(
|
|
self,
|
|
handler: Callable[[TelegramObject, Dict[str, Any]], Awaitable[Any]],
|
|
event: TelegramObject,
|
|
data: Dict[str, Any]
|
|
) -> Any:
|
|
|
|
telegram_id = None
|
|
if isinstance(event, (Message, CallbackQuery)):
|
|
telegram_id = event.from_user.id
|
|
elif isinstance(event, Update):
|
|
if event.message:
|
|
telegram_id = event.message.from_user.id
|
|
elif event.callback_query:
|
|
telegram_id = event.callback_query.from_user.id
|
|
|
|
if telegram_id:
|
|
try:
|
|
async for db in get_db():
|
|
user = await get_user_by_telegram_id(db, telegram_id)
|
|
if user and user.subscription:
|
|
current_time = datetime.utcnow()
|
|
subscription = user.subscription
|
|
|
|
if (subscription.status == SubscriptionStatus.ACTIVE.value and
|
|
subscription.end_date <= current_time):
|
|
|
|
subscription.status = SubscriptionStatus.EXPIRED.value
|
|
subscription.updated_at = current_time
|
|
await db.commit()
|
|
|
|
logger.info(f"⏰ Middleware: Статус подписки пользователя {user.id} изменен на 'expired' (время истекло)")
|
|
break
|
|
|
|
except Exception as e:
|
|
logger.error(f"Ошибка проверки статуса подписки для пользователя {telegram_id}: {e}")
|
|
|
|
return await handler(event, data)
|