Обновил логику бота / фиксы

This commit is contained in:
unknown
2025-11-23 16:50:19 +03:00
parent 5b29fb25c0
commit c1021ae8f1
3 changed files with 399 additions and 110 deletions

View File

@@ -9,6 +9,7 @@ from keyboard.keyboards import main_keyboard
router = Router()
logger = logging.getLogger(__name__)
async def call_api(method, endpoint, data=None):
"""
Выполняет HTTP-запрос к FastAPI.
@@ -23,7 +24,8 @@ async def call_api(method, endpoint, data=None):
try:
async with aiohttp.ClientSession() as session:
async with session.request(method, url, json=data) as response:
logger.info(f"Получен ответ от {url}: статус {response.status}")
logger.info(
f"Получен ответ от {url}: статус {response.status}")
if response.status in {200, 201}:
result = await response.json()
@@ -32,61 +34,79 @@ async def call_api(method, endpoint, data=None):
if response.status == 404:
logger.debug(f"Код {response.status}, возвращаю ничего")
return None
logger.error(f"Ошибка в запросе: статус {response.status}, причина {response.reason}")
logger.error(
f"Ошибка в запросе: статус {response.status}, причина {response.reason}")
return "ERROR"
except Exception as e:
logger.exception(f"Исключение при выполнении запроса к {url}: {e}")
return "ERROR"
def _welcome_text(username: str | None) -> str:
uname = username or "птенец"
return (
f"🪽 Добро пожаловать в Lark VPN, {uname}!\n\n"
"Здесь ты получаешь стабильный доступ к TikTok, YouTube, Discord, Instagram "
"и другим сервисам без ограничений.\n\n"
"1⃣ Пополни баланс\n"
"2⃣ Выбери подходящий тариф\n"
"3⃣ Подключай конфиг на своих устройствах и забудь про блокировки.\n\n"
"Следи за акциями и розыгрышами в канале:\n"
"https://t.me/+0z5xqn3F1m02OTJi\n\n"
"Lark держит связь. 🐣🦅"
)
@router.message(Command("start"))
async def start_command(message: Message):
"""
Обработчик команды /start.
Визуал и текст — обновлены, логика работы с API не тронута.
"""
logger.info(f"Получена команда /start от пользователя: {message.from_user.id} ({message.from_user.username})")
logger.info(
f"Получена команда /start от пользователя: "
f"{message.from_user.id} ({message.from_user.username})"
)
try:
user_data = await call_api("GET", f"/user/{message.from_user.id}")
if not user_data:
logger.debug("Пользователь не найден в базе, создаем новую запись.")
logger.debug(
"Пользователь не найден в базе, создаем новую запись.")
await call_api("POST", "/user/create", {"telegram_id": message.from_user.id})
logger.debug("Отправка приветственного сообщения пользователю.")
await message.answer(
f"""Приветствуем в рядах птенец {message.from_user.username}🐣
\nСкорее пополни баланс, приобрети подписку и получай доступ к TikTok, YouTube, Discord, Instagram на всех устройствах без ограничений ❕❕❕
\nОзнакомься с руководством по пользованию и выбери подходящий тариф 🦅
\nСледи за акциями, спец-предложениями, а также розыгрышами по ссылке ниже
\n👇👇👇
\nhttps://t.me/+0z5xqn3F1m02OTJi
\nС любовью ваши пернатые разработчики 🤍🤍🤍""",
reply_markup=main_keyboard()
_welcome_text(message.from_user.username),
reply_markup=main_keyboard(),
)
logger.info("Приветственное сообщение отправлено.")
except Exception as e:
logger.exception(f"Ошибка при обработке команды /start для пользователя {message.from_user.id}: {e}")
logger.exception(
f"Ошибка при обработке команды /start для пользователя "
f"{message.from_user.id}: {e}"
)
await message.answer("Произошла ошибка. Попробуйте позже.")
@router.callback_query(lambda callback: callback.data == "base")
async def start_callback_handler(callback: CallbackQuery):
"""
Обработчик callback_query с data="base".
Возвращает пользователя в главное меню.
"""
try:
user_data = await call_api("GET", f"/user/{callback.from_user.id}")
if not user_data:
await call_api("POST", "/user/create", {"telegram_id": callback.from_user.id})
await call_api(
"POST",
"/user/create",
{"telegram_id": callback.from_user.id},
)
await callback.message.edit_text(
f"""Приветствуем в рядах птенец {callback.from_user.username}🐣
\nСкорее пополни баланс, приобрети подписку и получай доступ к TikTok, YouTube, Discord, Instagram на всех устройствах без ограничений ❕❕❕
\nОзнакомься с руководством по пользованию и выбери подходящий тариф 🦅
\nСледи за акциями, спец-предложениями, а также розыгрышами по ссылке ниже
\n👇👇👇
\nhttps://t.me/+0z5xqn3F1m02OTJi
\nС любовью ваши пернатые разработчики 🤍🤍🤍""",
reply_markup=main_keyboard()
_welcome_text(callback.from_user.username),
reply_markup=main_keyboard(),
)
except Exception as e:
logger.exception(f"Ошибка при обработке callback с data='base': {e}")