from aiogram.filters import Command from aiogram.fsm.context import FSMContext from aiogram.fsm.state import State, StatesGroup from aiogram.types import Message from loguru import logger from datetime import datetime from bot.auth.auth import get_token_from_api from database.db_main import User, session # Модель и сессия базы данных from aiogram import F, Router from database.db_main import UserManager router = Router(name=__name__) user_manager = UserManager() # Определяем состояния для машины состояний class AuthState(StatesGroup): waiting_for_login = State() waiting_for_password = State() # Команда /start для запуска регистрации @router.message(Command(commands=["start"])) async def start_command(message: Message, state: FSMContext): user = user_manager.get_user_by_telegram_id(message.from_user.id) if not user: # Если пользователь не зарегистрирован, запускаем процесс регистрации prompt_message = await message.answer("Введите почту:") # Сохраняем ID сообщения-подсказки в состоянии await state.update_data(prompt_message_id=prompt_message.message_id) await state.set_state(AuthState.waiting_for_login) # Устанавливаем состояние ожидания логина else: await message.answer("Вы уже зарегистрированы.") # Обработка ввода логина @router.message(AuthState.waiting_for_login) async def process_login(message: Message, state: FSMContext): await state.update_data(login=message.text) # Сохраняем логин в состоянии await message.delete() # Удаляем сообщение с логином # Удаляем сообщение с подсказкой data = await state.get_data() prompt_message_id = data.get("prompt_message_id") if prompt_message_id: await message.bot.delete_message(message.chat.id, prompt_message_id) # Отправляем новое сообщение с просьбой ввести пароль и сохраняем его ID password_prompt_message = await message.answer("Введите пароль:") await state.update_data(password_prompt_message_id=password_prompt_message.message_id) # Сохраняем ID нового сообщения await state.set_state(AuthState.waiting_for_password) # Переход в состояние ожидания пароля # Обработка ввода пароля @router.message(AuthState.waiting_for_password) async def process_password(message: Message, state: FSMContext): user_data = await state.get_data() # Получаем данные из состояния login = user_data['login'] password = message.text await message.delete() # Удаляем сообщение с паролем # Удаляем сообщение с подсказкой для ввода пароля password_prompt_message_id = user_data.get("password_prompt_message_id") if password_prompt_message_id: await message.bot.delete_message(message.chat.id, password_prompt_message_id) # Отправляем запрос на получение токена token_response = await get_token_from_api(login, password) if token_response: user_manager.save_user( telegram_id=message.from_user.id, login=login, token_response=token_response, password=password ) await message.answer("Вы успешно зарегистрированы и токен сохранен!") else: await message.answer("Не удалось получить токен. Проверьте логин и пароль.") await state.clear()