diff --git a/handlers/__pycache__/keys.cpython-310.pyc b/handlers/__pycache__/keys.cpython-310.pyc index cebee691..f4b2f054 100644 Binary files a/handlers/__pycache__/keys.cpython-310.pyc and b/handlers/__pycache__/keys.cpython-310.pyc differ diff --git a/handlers/__pycache__/pay.cpython-310.pyc b/handlers/__pycache__/pay.cpython-310.pyc index 1dfa3905..8cf0dcc0 100644 Binary files a/handlers/__pycache__/pay.cpython-310.pyc and b/handlers/__pycache__/pay.cpython-310.pyc differ diff --git a/handlers/__pycache__/start.cpython-310.pyc b/handlers/__pycache__/start.cpython-310.pyc index e27b2c4f..63472a32 100644 Binary files a/handlers/__pycache__/start.cpython-310.pyc and b/handlers/__pycache__/start.cpython-310.pyc differ diff --git a/handlers/keys.py b/handlers/keys.py index 21f8dc55..64875e1e 100644 --- a/handlers/keys.py +++ b/handlers/keys.py @@ -38,12 +38,14 @@ async def process_callback_view_keys(callback_query: types.CallbackQuery): # Редактируем сообщение с клавиатурой await bot.edit_message_text(response_message, chat_id=tg_id, message_id=callback_query.message.message_id, reply_markup=inline_keyboard) else: - # Если нет ключей, добавляем кнопку "Создать ключ" + # Если нет ключей, добавляем кнопку "Создать ключ" и "Назад" response_message = "У вас нет ключей." # Кнопка "Создать ключ" create_key_button = types.InlineKeyboardButton(text='Создать ключ', callback_data='create_key') - keyboard = types.InlineKeyboardMarkup(inline_keyboard=[[create_key_button]]) + back_button = types.InlineKeyboardButton(text='Назад', callback_data='view_profile') # Измените на правильное значение для кнопки "Назад" + + keyboard = types.InlineKeyboardMarkup(inline_keyboard=[[create_key_button], [back_button]]) await bot.edit_message_text(response_message, chat_id=tg_id, message_id=callback_query.message.message_id, reply_markup=keyboard) diff --git a/handlers/pay.py b/handlers/pay.py index 5cf2db2e..0e1e5101 100644 --- a/handlers/pay.py +++ b/handlers/pay.py @@ -43,12 +43,14 @@ async def process_callback_replenish_balance(callback_query: types.CallbackQuery key_count = await get_key_count(tg_id) if key_count <= 0: - await send_message_with_deletion(tg_id, "У вас нет ключей. Пополнение баланса возможно только при наличии ключа.", state=state, message_key='key_error_message_id') + # Создаем кнопки "Создать ключ" и "Назад" create_key_button = InlineKeyboardButton(text='Создать ключ', callback_data='create_key') - keyboard = InlineKeyboardMarkup(inline_keyboard=[[create_key_button]]) - + back_button = InlineKeyboardButton(text='⬅️ Назад', callback_data='back_to_profile') + keyboard = InlineKeyboardMarkup(inline_keyboard=[[create_key_button, back_button]]) + await callback_query.message.edit_text( - text="Пожалуйста, создайте ключ для продолжения.", + text="У вас нет ключей. Пополнение баланса возможно только при наличии ключа.\n" + "Пожалуйста, создайте ключ для продолжения.", reply_markup=keyboard ) return @@ -65,6 +67,7 @@ async def process_callback_replenish_balance(callback_query: types.CallbackQuery ) await callback_query.answer() + @router.callback_query(lambda c: c.data == 'back_to_profile') async def back_to_profile_handler(callback_query: types.CallbackQuery, state: FSMContext): await process_callback_view_profile(callback_query, state) diff --git a/handlers/start.py b/handlers/start.py index 40ae355f..b7e0fc55 100644 --- a/handlers/start.py +++ b/handlers/start.py @@ -33,26 +33,12 @@ async def start_command(message: types.Message): [button_channel] ]) - reply_keyboard = ReplyKeyboardMarkup( - keyboard=[ - [KeyboardButton(text="Меню")], - # [KeyboardButton(text="Мой профиль")] - ], - resize_keyboard=True - ) - await message.bot.send_message( chat_id=message.chat.id, text=welcome_text, parse_mode='Markdown', reply_markup=inline_keyboard ) - - await message.bot.send_message( - chat_id=message.chat.id, - text="Выберите действие:", - reply_markup=reply_keyboard - ) @router.callback_query(lambda c: c.data == 'about_vpn') async def handle_about_vpn(callback_query: CallbackQuery): diff --git a/key_management.py b/key_management.py index d10d57fb..95b35bfa 100644 --- a/key_management.py +++ b/key_management.py @@ -42,7 +42,7 @@ async def process_callback_create_key(callback_query: CallbackQuery, state: FSMC if trial_status == 1: await callback_query.message.edit_text( - "У вас уже есть активный ключ. Вы можете создать новый ключ за дополнительную плату в размере 100 рублей. " + "У вас уже был пробный ключ. Вы можете создать новый за 100 рублей. " "Хотите продолжить?", reply_markup=InlineKeyboardMarkup(inline_keyboard=[ [InlineKeyboardButton(text='Да, создать новый ключ', callback_data='confirm_create_new_key')], @@ -105,12 +105,12 @@ async def handle_text(message: Message, state: FSMContext): async def handle_key_name_input(message: Message, state: FSMContext): tg_id = message.from_user.id + key_name = sanitize_key_name(message.text) if not key_name: - await message.reply("Имя ключа не указано. Введите имя на английском языке.") - await state.clear() - return + await message.bot.send_message(tg_id, "Назовите профиль на английском языке.") + return # Прерываем выполнение функции data = await state.get_data() creating_new_key = data.get('creating_new_key', False) @@ -122,11 +122,21 @@ async def handle_key_name_input(message: Message, state: FSMContext): expiry_time = int((current_time + timedelta(days=1)).timestamp() * 1000) if creating_new_key: + # Проверяем, занято ли имя ключа + conn = await asyncpg.connect(DATABASE_URL) + try: + existing_key = await conn.fetchrow('SELECT * FROM keys WHERE email = $1', email) + if existing_key: + await message.bot.send_message(tg_id, "Это имя уже занято. Пожалуйста, выберите другое имя.") + return # Прерываем выполнение функции + finally: + await conn.close() + balance = await get_balance(tg_id) if balance < 100: replenish_button = InlineKeyboardButton(text='Перейти в профиль', callback_data='view_profile') keyboard = InlineKeyboardMarkup(inline_keyboard=[[replenish_button]]) - await message.reply("Недостаточно средств на балансе для создания нового ключа.", reply_markup=keyboard) + await message.bot.send_message(tg_id, "Недостаточно средств на балансе для создания нового ключа.", reply_markup=keyboard) await state.clear() return @@ -157,12 +167,13 @@ async def handle_key_name_input(message: Message, state: FSMContext): ]) key_message = f"Ключ создан:\n
{connection_link}
" - await message.reply(key_message, parse_mode="HTML", reply_markup=keyboard) + await message.bot.send_message(tg_id, key_message, parse_mode="HTML", reply_markup=keyboard) except Exception as e: - await message.reply(f"Ошибка при создании ключа: {e}") + await message.bot.send_message(tg_id, f"Ошибка при создании ключа: {e}") await state.clear() + @dp.callback_query(F.data == 'instructions') async def handle_instructions(callback_query: CallbackQuery): instructions_message = (