From cef411e0c31363e7a1fdf11ff957570200bf3155 Mon Sep 17 00:00:00 2001 From: Vlad Date: Sat, 28 Sep 2024 03:44:08 +0300 Subject: [PATCH] =?UTF-8?q?=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B8=20=D0=B8?= =?UTF-8?q?=20=D0=B4=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA=D0=B8=20?= =?UTF-8?q?=D0=B8=D0=BD=D1=82=D0=B5=D1=80=D1=84=D0=B5=D0=B9=D1=81=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- handlers/instructions.py | 20 +++++++++++++++ key_management.py | 54 +++------------------------------------- 2 files changed, 23 insertions(+), 51 deletions(-) create mode 100644 handlers/instructions.py diff --git a/handlers/instructions.py b/handlers/instructions.py new file mode 100644 index 00000000..fd584c4f --- /dev/null +++ b/handlers/instructions.py @@ -0,0 +1,20 @@ +from aiogram import types +from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup + +async def send_instructions(callback_query: types.CallbackQuery): + instructions_message = ( + "*📋 Инструкции по использованию вашего ключа:*\n\n" + "1. Скачайте приложение для вашего устройства:\n" + " - Для Android: [V2Ray](https://play.google.com/store/apps/details?id=com.v2ray.ang&hl=ru&pli=1)\n" + " - Для iPhone: [Streisand](https://apps.apple.com/ru/app/streisand/id6450534064)\n\n" + "2. Скопируйте предоставленный ключ, который вы получили ранее.\n" + "3. Откройте приложение и нажмите на плюсик сверху справа.\n" + "4. Выберите 'Вставить из буфера обмена' для добавления ключа.\n\n" + "💬 Если у вас возникнут вопросы, не стесняйтесь обращаться в поддержку." + ) + + back_button = InlineKeyboardButton(text='🔙 Назад', callback_data='back_to_main') + keyboard = InlineKeyboardMarkup(inline_keyboard=[[back_button]]) + + await callback_query.message.edit_text(instructions_message, parse_mode='Markdown', reply_markup=keyboard) + await callback_query.answer() diff --git a/key_management.py b/key_management.py index ef667ddb..4555e1d3 100644 --- a/key_management.py +++ b/key_management.py @@ -19,7 +19,7 @@ from database import (add_connection, get_balance, has_active_key, store_key, update_balance) from handlers.profile import process_callback_view_profile from handlers.start import start_command -from handlers.notifications import send_notification +from handlers.instructions import send_instructions router = Router() @@ -220,57 +220,9 @@ async def handle_key_name_input(message: Message, state: FSMContext): @dp.callback_query(F.data == 'instructions') async def handle_instructions(callback_query: CallbackQuery): - instructions_message = ( - "*📋 Инструкции по использованию вашего ключа:*\n\n" - "1. Скачайте приложение для вашего устройства:\n" - " - Для Android: [V2Ray](https://play.google.com/store/apps/details?id=com.v2ray.ang&hl=ru&pli=1)\n" - " - Для iPhone: [Streisand](https://apps.apple.com/ru/app/streisand/id6450534064)\n\n" - "2. Скопируйте предоставленный ключ, который вы получили ранее.\n" - "3. Откройте приложение и нажмите на плюсик сверху справа.\n" - "4. Выберите 'Вставить из буфера обмена' для добавления ключа.\n\n" - "💬 Если у вас возникнут вопросы, не стесняйтесь обращаться в поддержку." - ) - - back_button = InlineKeyboardButton(text='🔙 Назад', callback_data='back_to_main') - keyboard = InlineKeyboardMarkup(inline_keyboard=[[back_button]]) - - await callback_query.message.edit_text(instructions_message, parse_mode='Markdown', reply_markup=keyboard) - await callback_query.answer() + await send_instructions(callback_query) @dp.callback_query(F.data == 'back_to_main') async def handle_back_to_main(callback_query: CallbackQuery, state: FSMContext): await process_callback_view_profile(callback_query, state) - await callback_query.answer() - -async def renew_expired_keys(): - while True: - current_time = datetime.utcnow() - conn = await asyncpg.connect(DATABASE_URL) - try: - active_keys = await conn.fetch('SELECT tg_id FROM connections WHERE trial > 0') - - finally: - await conn.close() - - for record in active_keys: - tg_id = record['tg_id'] - balance = await get_balance(tg_id) - if balance >= 100: - new_expiry_time = int((current_time + timedelta(days=30)).timestamp() * 1000) - - conn = await asyncpg.connect(DATABASE_URL) - try: - await conn.execute('UPDATE keys SET expiry_time = $1 WHERE tg_id = $2', new_expiry_time, tg_id) - await update_balance(tg_id, -100) - finally: - await conn.close() - - print(f"Ключ для пользователя {tg_id} продлен на месяц и списано 100 рублей.") - else: - print(f"Недостаточно средств на балансе для пользователя {tg_id}. Предложение пополнить баланс.") - replenish_keyboard = InlineKeyboardMarkup(inline_keyboard=[ - [InlineKeyboardButton(text='Пополнить баланс', callback_data='replenish_balance')] - ]) - await bot.send_message(tg_id, "Ваш баланс недостаточен для продления ключа. Пожалуйста, пополните баланс.", reply_markup=replenish_keyboard) - - await asyncio.sleep(3600) \ No newline at end of file + await callback_query.answer() \ No newline at end of file