240 lines
9.1 KiB
Python
240 lines
9.1 KiB
Python
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
|
||
from keyboard.keyboards import subhist_keyboard, popup_keyboard, main_keyboard,faq_keyboard,about_tarifs_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 popup_command(message: types.Message):
|
||
"""
|
||
Обработчик команды для отправки popup-сообщения.
|
||
"""
|
||
await message.answer("HAHAHHAHAHAHAHHAHA", reply_markup=popup_keyboard())
|
||
|
||
async def subhist_command(message: types.Message):
|
||
"""
|
||
Обработчик команды для отправки истории подписок.
|
||
"""
|
||
await message.answer("subhist", reply_markup=subhist_keyboard())
|
||
|
||
async def start_command(message: types.Message):
|
||
"""
|
||
Обработчик команды /start.
|
||
"""
|
||
await message.answer("Привет! Я ваш Telegram-бот.", reply_markup=main_keyboard())
|
||
|
||
async def start_callback_handler(callback: types.CallbackQuery):
|
||
"""
|
||
Обработчик callback_query с data="base".
|
||
"""
|
||
await callback.message.edit_text(
|
||
f"Привет! Я ваш Telegram-бот.",
|
||
reply_markup=main_keyboard()
|
||
)
|
||
|
||
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(
|
||
"Произошла ошибка, попробуйте позже или свяжитесь с администрацией."
|
||
)
|
||
await callback.answer()
|
||
return
|
||
|
||
if user:
|
||
await callback.message.edit_text(
|
||
f"Ваш профиль:\n"
|
||
f"👤 Username: {user.username}\n",
|
||
reply_markup=account_keyboard()
|
||
)
|
||
else:
|
||
await callback.message.edit_text("Вы еще не зарегистрированы.")
|
||
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(
|
||
"Произошла ошибка, попробуйте позже или свяжитесь с администрацией."
|
||
)
|
||
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.answer()
|
||
|
||
|
||
async def popup_callback_handler(callback: types.CallbackQuery):
|
||
"""
|
||
Обработчик callback_query с data="popup".
|
||
"""
|
||
user = await db_manager.create_user(telegram_id=callback.from_user.id)
|
||
if user == "ERROR":
|
||
await callback.message.answer(
|
||
"Произошла ошибка, попробуйте позже или свяжитесь с администрацией."
|
||
)
|
||
await callback.answer()
|
||
return
|
||
|
||
if user:
|
||
await callback.message.edit_text(
|
||
f"Ты думал здесь что то будет?",
|
||
reply_markup=popup_keyboard()
|
||
)
|
||
else:
|
||
await callback.message.edit_text("Вы еще не зарегистрированы.")
|
||
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(
|
||
"Произошла ошибка, попробуйте позже или свяжитесь с администрацией."
|
||
)
|
||
await callback.answer()
|
||
return
|
||
if not trans:
|
||
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()
|
||
)
|
||
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:
|
||
await callback.message.edit_text("Вы еще не зарегистрированы.")
|
||
await callback.answer()
|
||
|
||
async def buy_subscription_callback_handler(callback: types.CallbackQuery):
|
||
"""
|
||
Обработчик callback_query с data="buy_subscription".
|
||
"""
|
||
await callback.message.edit_text(
|
||
f"Покупайте, покупайте потому что мы скоро закроемся!!!",
|
||
reply_markup=buy_keyboard()
|
||
)
|
||
|
||
async def guide_callback_handler(callback:types.CallbackQuery):
|
||
"""
|
||
Обработчик callback_query с data="guide".
|
||
"""
|
||
await callback.message.edit_text(
|
||
f"Руководство по использованию продкута что мы высрали;)",
|
||
reply_markup=guide_keyboard()
|
||
)
|
||
|
||
async def subs_callback_handler(callback: types.CallbackQuery):
|
||
"""
|
||
Обработчик callback_query с data="subs".
|
||
"""
|
||
await callback.message.edit_text(
|
||
f"Подписки птенчик",
|
||
reply_markup=tarif_Lark_keyboard()
|
||
)
|
||
|
||
async def subs_pro_callback_handler(callback: types.CallbackQuery):
|
||
"""
|
||
Обработчик callback_query с data="subs_pro".
|
||
"""
|
||
await callback.message.edit_text(
|
||
f"Подписки птенчик ПРО",
|
||
reply_markup=tarif_Lark_pro_keyboard()
|
||
)
|
||
|
||
async def about_tarifs_callback_handler(callback: types.CallbackQuery):
|
||
"""
|
||
Обработчик callback_query с data="about_tarifs".
|
||
"""
|
||
await callback.message.edit_text(
|
||
f"Бла бла бла, хуйня на хуйне",
|
||
reply_markup=about_tarifs_keyboard()
|
||
)
|
||
|
||
async def faq_callback_handler(callback:types.CallbackQuery):
|
||
"""
|
||
Обработчик callback_query с data="faq".
|
||
"""
|
||
await callback.message.edit_text(
|
||
f"FAQ YOU",
|
||
reply_markup=faq_keyboard()
|
||
)
|
||
|
||
|
||
def register_handlers(dp: Dispatcher):
|
||
"""
|
||
Регистрация хэндлеров в диспетчере.
|
||
"""
|
||
dp.callback_query.register(popup_callback_handler, lambda c: c.data == "popup")
|
||
dp.callback_query.register(start_callback_handler, lambda c: c.data == "base")
|
||
dp.callback_query.register(subs_callback_handler, lambda c: c.data == "subs")
|
||
dp.callback_query.register(subs_pro_callback_handler, lambda c: c.data == "subs_pro")
|
||
dp.callback_query.register(faq_callback_handler, lambda c: c.data == "faq")
|
||
dp.callback_query.register(profile_callback_handler, lambda c: c.data == "profile")
|
||
dp.callback_query.register(tranhist_callback_handler, lambda c: c.data == "tranhist")
|
||
dp.callback_query.register(buy_subscription_callback_handler, lambda c: c.data == "buy_subscription")
|
||
dp.message.register(start_command, Command("start"))
|
||
dp.callback_query.register(balance_callback_handler, lambda c: c.data == "balance")
|
||
dp.callback_query.register(guide_callback_handler, lambda c: c.data == "guide")
|
||
dp.callback_query.register(about_tarifs_callback_handler, lambda c: c.data == "about_tarifs")
|
||
|