forked from kodorvan/stcs
110 lines
5.1 KiB
Python
110 lines
5.1 KiB
Python
from aiogram import Router
|
|
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
|
|
|
|
# FSM - Механизм состояния
|
|
from aiogram.fsm.state import State, StatesGroup
|
|
|
|
router_risk_management_settings = Router()
|
|
|
|
class update_risk_management_settings(StatesGroup):
|
|
price_profit = State()
|
|
price_loss = State()
|
|
max_risk_deal = State()
|
|
|
|
async def reg_new_user_default_risk_management_settings(id, message):
|
|
tg_id = id
|
|
|
|
await rq.set_new_user_default_risk_management_settings(tg_id)
|
|
|
|
async def main_settings_message(id, message, state):
|
|
data = await rq.get_user_risk_management_settings(id)
|
|
|
|
text = f"""<b>Риск менеджмент</b>,
|
|
|
|
<b>- Процент изменения цены для фиксации прибыли:</b> {data['price_profit']}%
|
|
<b>- Процент изменения цены для фиксации убытков:</b> {data['price_loss']}%
|
|
<b>- Максимальный риск на сделку (в % от баланса):</b> {data['max_risk_deal']}%
|
|
"""
|
|
await message.answer(text=text, parse_mode='html', reply_markup=inline_markup.risk_management_settings_markup)
|
|
|
|
async def price_profit_message(message, state):
|
|
await state.set_state(update_risk_management_settings.price_profit)
|
|
|
|
text = 'Введите число изменения цены для фиксации прибыли: '
|
|
|
|
await message.answer(text=text, parse_mode='html', reply_markup=None)
|
|
|
|
@router_risk_management_settings.message(update_risk_management_settings.price_profit)
|
|
async def state_price_profit(message: Message, state):
|
|
await state.update_data(price_profit = message.text)
|
|
|
|
data = await state.get_data()
|
|
data_settings = await rq.get_user_risk_management_settings(message.from_user.id)
|
|
|
|
if data['price_profit'].isdigit() and int(data['price_profit']) <= 100:
|
|
await message.answer(f"✅ Изменено: {data_settings['price_profit']}% → {data['price_profit']}%")
|
|
|
|
await rq.update_price_profit(message.from_user.id, data['price_profit'])
|
|
await main_settings_message(message.from_user.id, message, state)
|
|
|
|
await state.clear()
|
|
else:
|
|
await message.answer(f'⛔️ Ошибка: ваше значение ({data['price_profit']}%) или выше лимита (100) или вы вводите неверные символы')
|
|
|
|
await main_settings_message(message.from_user.id, message, state)
|
|
|
|
async def price_loss_message(message, state):
|
|
await state.set_state(update_risk_management_settings.price_loss)
|
|
|
|
text = 'Введите число изменения цены для фиксации убытков: '
|
|
|
|
await message.answer(text=text, parse_mode='html', reply_markup=None)
|
|
|
|
@router_risk_management_settings.message(update_risk_management_settings.price_loss)
|
|
async def state_price_loss(message: Message, state):
|
|
await state.update_data(price_loss = message.text)
|
|
|
|
data = await state.get_data()
|
|
data_settings = await rq.get_user_risk_management_settings(message.from_user.id)
|
|
|
|
if data['price_loss'].isdigit() and int(data['price_loss']) <= 100:
|
|
await message.answer(f"✅ Изменено: {data_settings['price_loss']}% → {data['price_loss']}%")
|
|
|
|
await rq.update_price_loss(message.from_user.id, data['price_loss'])
|
|
await main_settings_message(message.from_user.id, message, state)
|
|
|
|
await state.clear()
|
|
else:
|
|
await message.answer(f'⛔️ Ошибка: ваше значение ({data['price_loss']}%) или выше лимита (100) или вы вводите неверные символы')
|
|
|
|
await main_settings_message(message.from_user.id, message, state)
|
|
|
|
async def max_risk_deal_message(message, state):
|
|
await state.set_state(update_risk_management_settings.max_risk_deal)
|
|
|
|
text = 'Введите число (процент от баланса) для изменения максимального риска на сделку: '
|
|
|
|
await message.answer(text=text, parse_mode='html', reply_markup=None)
|
|
|
|
@router_risk_management_settings.message(update_risk_management_settings.max_risk_deal)
|
|
async def state_max_risk_deal(message: Message, state):
|
|
await state.update_data(max_risk_deal = message.text)
|
|
|
|
data = await state.get_data()
|
|
data_settings = await rq.get_user_risk_management_settings(message.from_user.id)
|
|
|
|
if data['max_risk_deal'].isdigit() and int(data['max_risk_deal']) <= 100:
|
|
await message.answer(f"✅ Изменено: {data_settings['max_risk_deal']}% → {data['max_risk_deal']}%")
|
|
|
|
await rq.update_max_risk_deal(message.from_user.id, data['max_risk_deal'])
|
|
await main_settings_message(message.from_user.id, message, state)
|
|
|
|
await state.clear()
|
|
else:
|
|
await message.answer(f'⛔️ Ошибка: ваше значение ({data['max_risk_deal']}%) или выше лимита (100) или вы вводите неверные символы')
|
|
|
|
await main_settings_message(message.from_user.id, message, state) |