forked from kodorvan/stcs
99 lines
4.7 KiB
Python
99 lines
4.7 KiB
Python
from aiogram import F, Router
|
||
|
||
from app.services.Bybit.functions import Futures, func_min_qty
|
||
from app.services.Bybit.functions.balance import get_balance
|
||
import app.telegram.Keyboards.inline_keyboards as inline_markup
|
||
|
||
import app.telegram.database.requests as rq
|
||
from aiogram.types import Message, CallbackQuery
|
||
|
||
# FSM - Механизм состояния
|
||
from aiogram.fsm.state import State, StatesGroup
|
||
from aiogram.fsm.context import FSMContext
|
||
|
||
router_functions_bybit_trade = Router()
|
||
|
||
class state_update_symbol(StatesGroup):
|
||
symbol = State()
|
||
|
||
@router_functions_bybit_trade.callback_query(F.data == 'clb_start_trading')
|
||
async def clb_start_bybit_trade_message(callback: CallbackQuery, state: FSMContext):
|
||
api = await rq.get_bybit_api_key(callback.from_user.id)
|
||
secret = await rq.get_bybit_secret_key(callback.from_user.id)
|
||
balance = await get_balance(callback.from_user.id, callback.message)
|
||
|
||
if balance:
|
||
symbol = await rq.get_symbol(callback.from_user.id)
|
||
|
||
text = f'''💎 Торговля на Bybit
|
||
|
||
⚖️ Ваш баланс (USDT): {balance}
|
||
📊 Текущая торговая пара: {symbol}
|
||
|
||
Как начать торговлю?
|
||
|
||
1️⃣ Проверьте и тщательно настройте все параметры в вашем профиле.
|
||
2️⃣ Нажмите ниже кнопку 'Указать торговую пару' и введите торговую пару заглавными буквами, без лишних символов (например: BTCUSDT).
|
||
'''
|
||
await callback.message.edit_text(text=text, parse_mode='html', reply_markup=inline_markup.trading_markup)
|
||
|
||
async def start_bybit_trade_message(message, state):
|
||
api = await rq.get_bybit_api_key(message.from_user.id)
|
||
secret = await rq.get_bybit_secret_key(message.from_user.id)
|
||
balance = await get_balance(message.from_user.id, message)
|
||
|
||
if balance:
|
||
symbol = await rq.get_symbol(message.from_user.id)
|
||
|
||
text = f'''💎 Торговля на Bybit
|
||
|
||
⚖️ Ваш баланс (USDT): {balance}
|
||
📊 Текущая торговая пара: {symbol}
|
||
|
||
Как начать торговлю?
|
||
|
||
1️⃣ Проверьте и тщательно настройте все параметры в вашем профиле.
|
||
2️⃣ Нажмите ниже кнопку 'Указать торговую пару' и введите торговую пару заглавными буквами, без лишних символов (например: BTCUSDT).
|
||
'''
|
||
|
||
await message.answer(text=text, parse_mode='html', reply_markup=inline_markup.trading_markup)
|
||
|
||
@router_functions_bybit_trade.callback_query(F.data == 'clb_update_trading_pair')
|
||
async def update_symbol_for_trade_message(callback: CallbackQuery, state: FSMContext):
|
||
await state.set_state(state_update_symbol.symbol)
|
||
|
||
await callback.message.answer(text='Укажите торговую пару заглавными буквами без пробелов и лишних символов (пример: BTCUSDT): ')
|
||
|
||
@router_functions_bybit_trade.message(state_update_symbol.symbol)
|
||
async def update_symbol_for_trade(message: Message, state: FSMContext):
|
||
await state.update_data(symbol = message.text)
|
||
|
||
data = await state.get_data()
|
||
|
||
await message.answer('Пара была успешно обновлена')
|
||
await rq.update_symbol(message.from_user.id, data['symbol'])
|
||
await start_bybit_trade_message(message, state)
|
||
|
||
await state.clear()
|
||
|
||
@router_functions_bybit_trade.callback_query(F.data == 'clb_open_deal')
|
||
async def make_deal_bybit (callback: CallbackQuery):
|
||
data_main_stgs = await rq.get_user_main_settings(callback.from_user.id)
|
||
|
||
trade_mode = data_main_stgs['trading_mode']
|
||
qty = data_main_stgs['starting_quantity']
|
||
margin_mode = data_main_stgs['margin_type']
|
||
qty_min = await func_min_qty.get_min_qty(callback.from_user.id, callback.message)
|
||
|
||
if qty < qty_min:
|
||
await callback.message.edit_text(f"Количество вашей ставки ({qty}) меньше минимального количества ({qty_min}) для данной торговой пары")
|
||
else:
|
||
match trade_mode:
|
||
case 'Long':
|
||
await Futures.contract_long(callback.from_user.id, callback.message, margin_mode)
|
||
case 'Short':
|
||
await Futures.contract_short(callback.from_user.id, callback.message, margin_mode)
|
||
case 'Switch':
|
||
await callback.message.edit_text('Режим Switch пока недоступен')
|
||
case 'Smart':
|
||
await callback.message.edit_text('Режим Smart пока недоступен') |