version 1 STCS
This commit is contained in:
105
app/services/Bybit/functions/functions.py
Normal file
105
app/services/Bybit/functions/functions.py
Normal file
@@ -0,0 +1,105 @@
|
||||
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)
|
||||
|
||||
if api and secret:
|
||||
balance = await get_balance(callback.from_user.id, callback.message)
|
||||
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)
|
||||
else:
|
||||
callback.message.answer('Перед началом работы, в настройках подключите bybit')
|
||||
|
||||
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)
|
||||
|
||||
if api and secret:
|
||||
balance = await get_balance(message.from_user.id, message)
|
||||
symbol = await rq.get_symbol(message.from_user.id)
|
||||
|
||||
text = f'''Торговля на Bybit
|
||||
|
||||
<b>ваш баланс (USDT):</b> {balance}
|
||||
<b>Текущая торговая пара: </b> {symbol}
|
||||
|
||||
Как начать торговлю?
|
||||
1. Внимательно проверьте и настройте все параметры в вашем профиле
|
||||
2. Ниже нажмите 'Указать торговую пару' и отправьте торговую пару заглавными буквами, указав два актива без всяких лишних символов! (Пример: BTCUSDT)
|
||||
'''
|
||||
|
||||
await message.answer(text=text, parse_mode='html', reply_markup=inline_markup.trading_markup)
|
||||
else:
|
||||
await message.answer('Перед началом работы, в настройках подключите bybit')
|
||||
|
||||
@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 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':
|
||||
print('====================================LONG=========================================')
|
||||
await Futures.contract_long(callback.from_user.id, callback.message, margin_mode)
|
||||
case 'Short':
|
||||
print('====================================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 пока недоступен')
|
Reference in New Issue
Block a user