93 lines
4.1 KiB
Python
93 lines
4.1 KiB
Python
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 = '''<b>Подключение Bybit аккаунта</b>
|
||
|
||
<b>1. Зарегистрируйтесь или войдите в свой аккаунт на Bybit (https://www.bybit.com/).</b>
|
||
<b>2. В личном кабинете выберите раздел API. </b>
|
||
<b>3. Создание нового API ключа</b>
|
||
- Нажмите кнопку Create New Key (Создать новый ключ).
|
||
- Выберите системно-сгенерированный ключ.
|
||
- Укажите название API ключа (любое).
|
||
- Выберите права доступа для торговли (Trade).
|
||
- Можно ограничить доступ по IP для безопасности.
|
||
<b>4. Подтверждение создания</b>
|
||
- Подтвердите создание ключа.
|
||
- Отправьте чат-роботу.
|
||
|
||
<b>Важно: сохраните отдельно API Key и Secret Key в надежном месте. Secret ключ отображается только один раз. </b>
|
||
'''
|
||
|
||
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)
|