From eb6c59002f09aae3a30bfcf5b5f35a8b04f24ba0 Mon Sep 17 00:00:00 2001 From: Vladless Date: Wed, 20 Nov 2024 00:18:29 +0300 Subject: [PATCH] fix bugs --- handlers/start.py | 99 +++++++++++++++++++++++++++++++++-------------- 1 file changed, 71 insertions(+), 28 deletions(-) diff --git a/handlers/start.py b/handlers/start.py index aeab55f2..bc5c002e 100644 --- a/handlers/start.py +++ b/handlers/start.py @@ -1,11 +1,12 @@ import os +import asyncpg from aiogram import F, Router from aiogram.types import BufferedInputFile, CallbackQuery, InlineKeyboardButton, Message from aiogram.utils.keyboard import InlineKeyboardBuilder from bot import bot -from config import CHANNEL_URL, CONNECT_ANDROID, CONNECT_IOS, DOWNLOAD_ANDROID, DOWNLOAD_IOS, SUPPORT_CHAT_URL +from config import CHANNEL_URL, CONNECT_ANDROID, CONNECT_IOS, DATABASE_URL, DOWNLOAD_ANDROID, DOWNLOAD_IOS, SUPPORT_CHAT_URL from database import add_connection, add_referral, check_connection_exists, get_trial from handlers.keys.trial_key import create_trial_key from handlers.texts import INSTRUCTIONS_TRIAL, WELCOME_TEXT, get_about_vpn @@ -56,23 +57,66 @@ async def send_welcome_message(chat_id: int, trial_status: int, admin: bool): async def start_command(message: Message, admin: bool = False): - logger.info(f"Received start command with text: {message.text}") - if "referral_" in message.text: - referrer_tg_id = int(message.text.split("referral_")[1]) - logger.info(f"Referral ID: {referrer_tg_id}") - if not await check_connection_exists(message.from_user.id): - await add_connection(message.from_user.id) - await add_referral(message.from_user.id, referrer_tg_id) - await message.answer("Вас пригласил друг, добро пожаловать!") - else: - await message.answer("Вы уже зарегистрированы в системе!") + try: + logger.info( + f"Получена команда /start. Текст сообщения: {message.text}, user_id: {message.from_user.id}" + ) - trial_status = await get_trial(message.from_user.id) - await send_welcome_message(message.chat.id, trial_status, admin) + if "referral_" in message.text: + logger.info("Обнаружен реферальный код.") + try: + referrer_tg_id = int(message.text.split("referral_")[1]) + logger.info(f"ID пригласившего пользователя: {referrer_tg_id}") + except ValueError: + logger.error("Ошибка парсинга реферального ID.") + await message.answer("Некорректный реферальный код.") + return + + connection_exists = await check_connection_exists(message.from_user.id) + logger.info( + f"Результат проверки подключения для user_id {message.from_user.id}: {connection_exists}" + ) + + if not connection_exists: + logger.info( + f"Добавляем подключение для пользователя: {message.from_user.id}" + ) + await add_connection(message.from_user.id) + + logger.info( + f"Добавляем реферал для пользователя {message.from_user.id}, приглашённым {referrer_tg_id}" + ) + await add_referral(message.from_user.id, referrer_tg_id) + + await message.answer("Вас пригласил друг, добро пожаловать!") + else: + logger.warning( + f"Пользователь {message.from_user.id} уже зарегистрирован." + ) + await message.answer("Вы уже зарегистрированы в системе!") + + logger.info( + f"Проверяем статус пробного периода для user_id {message.from_user.id}" + ) + trial_status = await get_trial(message.from_user.id) + logger.info( + f"Статус пробного периода для user_id {message.from_user.id}: {trial_status}" + ) + + logger.info( + f"Отправка приветственного сообщения для user_id {message.from_user.id}" + ) + await send_welcome_message(message.chat.id, trial_status, admin) + + except Exception as e: + logger.exception( + f"Ошибка в обработке команды /start для user_id {message.from_user.id}: {e}" + ) + await message.answer("Произошла ошибка. Пожалуйста, попробуйте позже.") @router.callback_query(F.data == "connect_vpn") -async def handle_connect_vpn(callback_query: CallbackQuery, session): +async def handle_connect_vpn(callback_query: CallbackQuery): await callback_query.message.delete() user_id = callback_query.from_user.id @@ -82,16 +126,24 @@ async def handle_connect_vpn(callback_query: CallbackQuery, session): await callback_query.message.answer(trial_key_info["error"]) else: try: - result = await session.execute( + + conn = await asyncpg.connect(DATABASE_URL) + + result = await conn.execute( """ UPDATE connections SET trial = 1 WHERE tg_id = $1 - """, + """, user_id, ) logger.info(f"Rows updated: {result}") + await conn.close() + except Exception as e: logger.error(f"Ошибка при обновлении trial: {e}") + await callback_query.message.answer( + "Произошла ошибка при обновлении статуса." + ) key_message = ( f"🔑 Ваш персональный ключ доступа:\n" @@ -103,22 +155,13 @@ async def handle_connect_vpn(callback_query: CallbackQuery, session): builder.row( InlineKeyboardButton(text="👤 Личный кабинет", callback_data="view_profile") ) - builder.row( - InlineKeyboardButton( - text="🍏 Скачать для iOS", - url=DOWNLOAD_IOS, - ), - InlineKeyboardButton( - text="🤖 Скачать для Android", - url=DOWNLOAD_ANDROID, - ), + InlineKeyboardButton(text="🍏 Скачать для iOS", url=DOWNLOAD_IOS), + InlineKeyboardButton(text="🤖 Скачать для Android", url=DOWNLOAD_ANDROID), ) - builder.row( InlineKeyboardButton( - text="🍏 Подключить на iOS", - url=f'{CONNECT_IOS}{trial_key_info["key"]}', + text="🍏 Подключить на iOS", url=f'{CONNECT_IOS}{trial_key_info["key"]}' ), InlineKeyboardButton( text="🤖 Подключить на Android",