from aiogram import F, Router import logging.config from logger_helper.logger_helper import LOGGING_CONFIG import app.telegram.Keyboards.inline_keyboards as inline_markup import app.telegram.Keyboards.reply_keyboards as reply_markup import app.telegram.database.requests as rq from aiogram.types import Message, CallbackQuery from app.states.States import state_reg_bybit_api from aiogram.fsm.context import FSMContext logging.config.dictConfig(LOGGING_CONFIG) logger = logging.getLogger("add_bybit_api") router_register_bybit_api = Router() @router_register_bybit_api.callback_query(F.data == 'clb_new_user_connect_bybit_api_message') async def info_for_bybit_api_message(callback: CallbackQuery) -> None: """ Отвечает пользователю подробной инструкцией по подключению аккаунта Bybit. Показывает как создать API ключ и передать его чат-боту. """ text = '''Подключение Bybit аккаунта 1. Зарегистрируйтесь или войдите в свой аккаунт на Bybit (https://www.bybit.com/). 2. В личном кабинете выберите раздел API. 3. Создание нового API ключа - Нажмите кнопку Create New Key (Создать новый ключ). - Выберите системно-сгенерированный ключ. - Укажите название API ключа (любое). - Выберите права доступа для торговли (Trade). - Можно ограничить доступ по IP для безопасности. 4. Подтверждение создания - Подтвердите создание ключа. - Отправьте чат-роботу. Важно: сохраните отдельно API Key и Secret Key в надежном месте. Secret ключ отображается только один раз. ''' await callback.message.answer(text=text, parse_mode='html', reply_markup=inline_markup.connect_bybit_api_markup) await callback.answer() @router_register_bybit_api.callback_query(F.data == 'clb_new_user_connect_bybit_api') async def add_api_key_message(callback: CallbackQuery, state: FSMContext) -> None: """ Инициирует процесс добавления API ключа. Переводит пользователя в состояние ожидания ввода API Key. """ await state.set_state(state_reg_bybit_api.api_key) text = 'Отправьте KEY_API ниже: ' await callback.message.answer(text=text) @router_register_bybit_api.message(state_reg_bybit_api.api_key) async def add_api_key_and_message_for_secret_key(message: Message, state: FSMContext) -> None: """ Сохраняет API Key во временное состояние FSM, затем запрашивает у пользователя ввод Secret Key. """ await state.update_data(api_key=message.text) text = 'Отправьте SECRET_KEY ниже' await message.answer(text=text) await state.set_state(state_reg_bybit_api.secret_key) @router_register_bybit_api.message(state_reg_bybit_api.secret_key) async def add_secret_key(message: Message, state: FSMContext) -> None: """ Сохраняет Secret Key и финализирует регистрацию, обновляет базу данных, устанавливает символ пользователя и очищает состояние. """ await state.update_data(secret_key=message.text) data = await state.get_data() await rq.update_api_key(message.from_user.id, data['api_key']) await rq.update_secret_key(message.from_user.id, data['secret_key']) await rq.set_new_user_symbol(message.from_user.id) await state.clear() await message.answer('Данные добавлены, нажмите на профиль и начните торговлю!', reply_markup=reply_markup.base_buttons_markup)