58 lines
2.1 KiB
Python
58 lines
2.1 KiB
Python
from aiogram import Router, types, F
|
||
from aiogram.filters import Command
|
||
from bot.keyboards.subscription import subscription_keyboard, cabinet_keyboard
|
||
import uuid
|
||
from datetime import datetime, timedelta
|
||
from bot.database.subscription_db import init_db, set_subscription, get_subscription, extend_subscription
|
||
|
||
init_db()
|
||
|
||
router = Router()
|
||
|
||
@router.message(Command("cabinet"))
|
||
async def cabinet(message: types.Message):
|
||
user_id = message.from_user.id
|
||
sub = get_subscription(user_id)
|
||
if sub:
|
||
await message.answer(
|
||
f"🗂 Личный кабинет\n"
|
||
f"Статус: Активна\n"
|
||
f"UUID: {sub['uuid']}\n"
|
||
f"Действует до: {sub['until'].strftime('%d.%m.%Y')}\n",
|
||
reply_markup=cabinet_keyboard
|
||
)
|
||
else:
|
||
await message.answer("У вас нет активной подписки.")
|
||
|
||
@router.callback_query(F.data.startswith("sub_"))
|
||
async def on_subscribe(callback: types.CallbackQuery):
|
||
user_id = callback.from_user.id
|
||
period_map = {
|
||
"sub_1m": 1,
|
||
"sub_3m": 3,
|
||
"sub_6m": 6,
|
||
"sub_12m": 12,
|
||
}
|
||
period = period_map.get(callback.data)
|
||
if not period:
|
||
await callback.answer("Ошибка выбора тарифа", show_alert=True)
|
||
return
|
||
# Генерируем uuid и дату окончания
|
||
import uuid as uuidlib
|
||
sub_id = str(uuidlib.uuid4())
|
||
until = datetime.now() + timedelta(days=30*period)
|
||
set_subscription(user_id, sub_id, until)
|
||
await callback.message.answer(
|
||
f"Вы выбрали подписку на {period} мес.\n\nПерейдите к оплате (будет реализовано позже)")
|
||
await callback.answer()
|
||
|
||
@router.callback_query(F.data == "extend_sub")
|
||
async def on_extend(callback: types.CallbackQuery):
|
||
user_id = callback.from_user.id
|
||
sub = get_subscription(user_id)
|
||
if not sub:
|
||
await callback.answer("Нет активной подписки", show_alert=True)
|
||
return
|
||
await callback.message.answer("Выберите период продления:", reply_markup=subscription_keyboard)
|
||
await callback.answer()
|