Перенос части логики на бекенд rest api и изменение логики работы бота так же из за бекенда
This commit is contained in:
@@ -1,12 +1,17 @@
|
||||
from aiogram import types, Dispatcher
|
||||
from aiogram.filters import Command
|
||||
from databases.postgresql import DatabaseManager
|
||||
from databases.model import User, Subscription, Transaction, Administrators
|
||||
from databases.db_config import get_postgres_session
|
||||
import aiohttp
|
||||
from instences.config import BASE_URL_FASTAPI
|
||||
from keyboard.keyboards import subhist_keyboard,confirm_popup_keyboard,tarif_confirm_keyboard, popup_keyboard, main_keyboard,faq_keyboard, account_keyboard, buy_keyboard,balance_keyboard,guide_keyboard,tarif_Lark_keyboard,tarif_Lark_pro_keyboard,tranhist_keyboard
|
||||
|
||||
# Инициализируем менеджер базы данных
|
||||
db_manager = DatabaseManager(get_postgres_session)
|
||||
async def call_api(method, endpoint, data=None):
|
||||
async with aiohttp.ClientSession() as session:
|
||||
url = f"{BASE_URL_FASTAPI}{endpoint}"
|
||||
async with session.request(method, url, json=data) as response:
|
||||
if response.status in {200, 201}:
|
||||
return await response.json()
|
||||
return "ERROR"
|
||||
|
||||
async def popup_command(message: types.Message):
|
||||
"""
|
||||
@@ -48,46 +53,27 @@ async def start_callback_handler(callback: types.CallbackQuery):
|
||||
)
|
||||
|
||||
async def profile_callback_handler(callback: types.CallbackQuery):
|
||||
"""
|
||||
Обработчик callback_query с data="profile".
|
||||
"""
|
||||
user = await db_manager.create_user(telegram_id=callback.from_user.id)
|
||||
if user == "ERROR":
|
||||
await callback.message.answer(
|
||||
"Произошла ошибка, попробуйте позже или свяжитесь с администрацией."
|
||||
)
|
||||
user_data = await call_api("POST", "/user/create", {"telegram_id": callback.from_user.id})
|
||||
if not user_data:
|
||||
await callback.message.answer("Произошла ошибка, попробуйте позже.")
|
||||
await callback.answer()
|
||||
return
|
||||
|
||||
if user:
|
||||
text = f"""Ваш профиль:\nID: {user.username}\nБаланс: {user.balance}"""
|
||||
await callback.message.edit_text(
|
||||
text,
|
||||
reply_markup=account_keyboard()
|
||||
)
|
||||
else:
|
||||
await callback.message.edit_text("Вы еще не зарегистрированы.")
|
||||
text = f"Ваш профиль:\nID: {user_data['username']}\nБаланс: {user_data['balance']} ₽"
|
||||
await callback.message.edit_text(text, reply_markup=account_keyboard())
|
||||
await callback.answer()
|
||||
|
||||
async def balance_callback_handler(callback: types.CallbackQuery):
|
||||
"""
|
||||
Обработчик callback_query с data="balance".
|
||||
"""
|
||||
user = await db_manager.create_user(telegram_id=callback.from_user.id)
|
||||
if user == "ERROR":
|
||||
await callback.message.answer(
|
||||
"Произошла ошибка, попробуйте позже или свяжитесь с администрацией."
|
||||
)
|
||||
user_data = await call_api("GET", f"/user/{callback.from_user.id}")
|
||||
if not user_data:
|
||||
await callback.message.answer("Вы еще не зарегистрированы.")
|
||||
await callback.answer()
|
||||
return
|
||||
|
||||
if user:
|
||||
await callback.message.edit_text(
|
||||
f"Ваш баланс: {user.balance} ₽. Выберите сумму для пополнения 🐥",
|
||||
reply_markup=balance_keyboard()
|
||||
)
|
||||
else:
|
||||
await callback.message.edit_text("Вы еще не зарегистрированы.")
|
||||
await callback.message.edit_text(
|
||||
f"Ваш баланс: {user_data['balance']} ₽. Выберите сумму для пополнения 🐥",
|
||||
reply_markup=balance_keyboard()
|
||||
)
|
||||
await callback.answer()
|
||||
|
||||
|
||||
@@ -95,7 +81,7 @@ async def popup_callback_handler(callback: types.CallbackQuery):
|
||||
"""
|
||||
Обработчик callback_query с data="popup".
|
||||
"""
|
||||
user = await db_manager.create_user(telegram_id=callback.from_user.id)
|
||||
user = await call_api("POST", "/user/create", {"telegram_id": callback.from_user.id})
|
||||
if user == "ERROR":
|
||||
await callback.message.answer(
|
||||
"Произошла ошибка, попробуйте позже или свяжитесь с администрацией."
|
||||
@@ -113,68 +99,41 @@ async def popup_callback_handler(callback: types.CallbackQuery):
|
||||
await callback.answer()
|
||||
|
||||
async def tranhist_callback_handler(callback: types.CallbackQuery):
|
||||
"""
|
||||
Обработчик callback_query с data="tranhist".
|
||||
"""
|
||||
user = await db_manager.create_user(callback.from_user.id)
|
||||
trans = await db_manager.last_transaction(user.id)
|
||||
if trans == "ERROR":
|
||||
await callback.message.answer(
|
||||
"Произошла ошибка, попробуйте позже или свяжитесь с администрацией."
|
||||
)
|
||||
user_data = await call_api("GET", f"/user/{callback.from_user.id}")
|
||||
if not user_data:
|
||||
await callback.message.edit_text("Вы еще не зарегистрированы.")
|
||||
await callback.answer()
|
||||
return
|
||||
if not trans:
|
||||
await callback.message.edit_text(
|
||||
"У вас нет транзакций. Пожалуйста, пополните баланс.",
|
||||
reply_markup=tranhist_keyboard()
|
||||
)
|
||||
|
||||
transactions = await call_api("GET", f"/user/{user_data['id']}/transactions")
|
||||
if not transactions:
|
||||
await callback.message.edit_text("У вас нет транзакций.", reply_markup=tranhist_keyboard())
|
||||
await callback.answer()
|
||||
return
|
||||
|
||||
result = "Ваши транзакции:\n"
|
||||
for count, tran in enumerate(trans, start=1):
|
||||
result += f"{count}. Сумма: {tran.amount}, Дата: {tran.created_at}\n"
|
||||
await callback.message.edit_text(
|
||||
result,
|
||||
reply_markup=tranhist_keyboard()
|
||||
)
|
||||
for count, tran in enumerate(transactions, start=1):
|
||||
result += f"{count}. Сумма: {tran['amount']}, Дата: {tran['created_at']}\n"
|
||||
await callback.message.edit_text(result, reply_markup=tranhist_keyboard())
|
||||
await callback.answer()
|
||||
|
||||
async def subhist_callback_handler(callback: types.CallbackQuery):
|
||||
"""
|
||||
Обработчик callback_query с data="subhist".
|
||||
"""
|
||||
user = await db_manager.create_user(callback.from_user.id)
|
||||
subs = await db_manager.last_subscription(user.id)
|
||||
if subs == "ERROR":
|
||||
await callback.message.answer(
|
||||
"Произошла ошибка, попробуйте позже или свяжитесь с администрацией."
|
||||
)
|
||||
await callback.answer()
|
||||
return
|
||||
if subs is None:
|
||||
await callback.message.edit_text(
|
||||
f"Ты хули тут забыл, ты ж не покупаешь нихуя",
|
||||
reply_markup=account_keyboard()
|
||||
)
|
||||
await callback.answer()
|
||||
return
|
||||
result = ""
|
||||
count = 0
|
||||
for sub in subs:
|
||||
if count > 0:
|
||||
result += f"Последняя подписка истекает: {sub.expiry_date}\n"
|
||||
count += 1
|
||||
result += f"{count}. Истекла {sub.expiry_date}"
|
||||
count += 1
|
||||
|
||||
if subs:
|
||||
await callback.message.edit_text(
|
||||
result,
|
||||
reply_markup=account_keyboard()
|
||||
)
|
||||
else:
|
||||
user_data = await call_api("GET", f"/user/{callback.from_user.id}")
|
||||
if not user_data:
|
||||
await callback.message.edit_text("Вы еще не зарегистрированы.")
|
||||
await callback.answer()
|
||||
return
|
||||
|
||||
subscriptions = await call_api("GET", f"/subscription/{user_data['id']}/last")
|
||||
if not subscriptions:
|
||||
await callback.message.edit_text("У вас нет активных подписок.", reply_markup=account_keyboard())
|
||||
await callback.answer()
|
||||
return
|
||||
|
||||
result = "Ваши подписки:\n"
|
||||
for count, sub in enumerate(subscriptions, start=1):
|
||||
result += f"{count}. Тариф: {sub['plan']}, Истекает: {sub['expiry_date']}\n"
|
||||
await callback.message.edit_text(result, reply_markup=account_keyboard())
|
||||
await callback.answer()
|
||||
|
||||
async def buy_subscription_callback_handler(callback: types.CallbackQuery):
|
||||
@@ -260,7 +219,7 @@ async def popup_confirm_callback_handler(callback: types.CallbackQuery):
|
||||
"""
|
||||
data = callback.data.split(":")
|
||||
popup_info = data[1]
|
||||
result = await db_manager.update_balance(callback.from_user.id,popup_info)
|
||||
result = await call_api("POST", f"/user/{callback.from_user.id}/balance", {"telegram_id": callback.from_user.id, "amount": popup_info})
|
||||
if result == "ERROR":
|
||||
await callback.message.answer(
|
||||
"Произошла ошибка, попробуйте позже или свяжитесь с администрацией."
|
||||
@@ -271,40 +230,16 @@ async def popup_confirm_callback_handler(callback: types.CallbackQuery):
|
||||
await callback.message.edit_text(text=text, reply_markup=confirm_popup_keyboard())
|
||||
|
||||
async def confirm_callback_handler(callback: types.CallbackQuery):
|
||||
"""
|
||||
Обработчик подтверждения покупки тарифа.
|
||||
"""
|
||||
tariff_info = callback.data.split(":")[1].split("_")
|
||||
tariff_name = tariff_info[0]
|
||||
tariff_class = tariff_info[1]
|
||||
tariff_amount = int(tariff_info[2])
|
||||
data = callback.data.split(":")[1]
|
||||
tariff_info = data.split("_")
|
||||
plan_id = f"{tariff_info[0]}_{tariff_info[1]}_{tariff_info[2]}"
|
||||
result = await call_api("POST", "/subscription/buy", {"telegram_id": callback.from_user.id, "plan_id": plan_id})
|
||||
|
||||
sub = await db_manager.buy_sub(callback.from_user.id, f"{tariff_name}_{tariff_class}_{tariff_amount}")
|
||||
if sub == "ERROR":
|
||||
await callback.message.answer(
|
||||
"Произошла ошибка, попробуйте позже или свяжитесь с администрацией."
|
||||
)
|
||||
await callback.answer()
|
||||
return
|
||||
elif sub == "INSUFFICIENT_FUNDS":
|
||||
await callback.message.answer(
|
||||
"Произошла ошибка, не достаточно средств на балансе."
|
||||
)
|
||||
await callback.answer()
|
||||
return
|
||||
add_to_server = await db_manager.add_to_server(callback.from_user.id)
|
||||
if add_to_server == "ERROR":
|
||||
await callback.message.answer(
|
||||
"Произошла ошибка, попробуйте позже или свяжитесь с администрацией."
|
||||
)
|
||||
await callback.answer()
|
||||
return
|
||||
|
||||
# Текст подтверждения на основе тарифа
|
||||
months_text = f"{tariff_amount} месяцев" if tariff_amount > 1 else f"{tariff_amount} месяц"
|
||||
text = f"Вы успешно оформили тариф {tariff_name} на {months_text}. Спасибо за покупку!"
|
||||
|
||||
await callback.message.edit_text(text=text)
|
||||
if result and result.get("message"):
|
||||
await callback.message.edit_text(f"Подписка успешно оформлена!")
|
||||
else:
|
||||
await callback.message.edit_text("Произошла ошибка при оформлении подписки.")
|
||||
await callback.answer()
|
||||
|
||||
def register_handlers(dp: Dispatcher):
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user