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, account_keyboard, buy_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 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=buy_keyboard() ) else: await callback.message.edit_text("Вы еще не зарегистрированы.") await callback.answer() async def popup_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"Ты думал здесь что то будет?", reply_markup=account_keyboard() ) else: await callback.message.edit_text("Вы еще не зарегистрированы.") await callback.answer() async def subhist_callback_handler(callback: types.CallbackQuery): """ Обработчик callback_query с data="profile". """ subs = await db_manager.last_subscription(telegram_id=callback.from_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 subhist_callback_handler(callback: types.CallbackQuery): """ Обработчик callback_query с data="subhist". """ user = await db_manager.get_user_by_telegram_id(telegram_id=callback.from_user.id) subs = await db_manager.last_subscription(user.id) if subs == "ERROR": await callback.message.answer( "Произошла ошибка, попробуйте позже или свяжитесь с администрацией." ) await callback.answer() return if not subs: 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 sub: await callback.message.edit_text( result, reply_markup=account_keyboard() ) else: await callback.message.edit_text("Вы еще не зарегистрированы.") await callback.answer() def register_handlers(dp: Dispatcher): """ Регистрация хэндлеров в диспетчере. """ dp.callback_query.register(popup_callback_handler, lambda c: c.data == "popup") dp.callback_query.register(subhist_callback_handler, lambda c: c.data == "subs") dp.callback_query.register(profile_callback_handler, lambda c: c.data == "profile") dp.message.register(start_command, Command("start")) dp.callback_query.register(balance_callback_handler, lambda c: c.data == "balance")