1
0
forked from kodorvan/stcs
This commit is contained in:
algizn97
2025-08-26 19:35:01 +05:00
parent fd279f0562
commit 7c48336a62

View File

@@ -1,27 +1,21 @@
from aiogram import Router from aiogram import Router
import app.telegram.Keyboards.inline_keyboards as inline_markup 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 import app.telegram.database.requests as rq
from aiogram.types import Message, CallbackQuery from aiogram.types import Message, CallbackQuery
# FSM - Механизм состояния from app.states.States import update_risk_management_settings
from aiogram.fsm.state import State, StatesGroup
router_risk_management_settings = Router() router_risk_management_settings = Router()
class update_risk_management_settings(StatesGroup):
price_profit = State()
price_loss = State()
max_risk_deal = State()
commission_fee = State()
async def reg_new_user_default_risk_management_settings(id, message): async def reg_new_user_default_risk_management_settings(id, message):
tg_id = id tg_id = id
await rq.set_new_user_default_risk_management_settings(tg_id) await rq.set_new_user_default_risk_management_settings(tg_id)
async def main_settings_message(id, message, state):
async def main_settings_message(id, message):
data = await rq.get_user_risk_management_settings(id) data = await rq.get_user_risk_management_settings(id)
text = f"""<b>Риск менеджмент</b>, text = f"""<b>Риск менеджмент</b>,
@@ -29,10 +23,11 @@ async def main_settings_message(id, message, state):
<b>- Процент изменения цены для фиксации прибыли:</b> {data.get('price_profit', 0)}% <b>- Процент изменения цены для фиксации прибыли:</b> {data.get('price_profit', 0)}%
<b>- Процент изменения цены для фиксации убытков:</b> {data.get('price_loss', 0)}% <b>- Процент изменения цены для фиксации убытков:</b> {data.get('price_loss', 0)}%
<b>- Максимальный риск на сделку (в % от баланса):</b> {data.get('max_risk_deal', 0)}% <b>- Максимальный риск на сделку (в % от баланса):</b> {data.get('max_risk_deal', 0)}%
<b>- Комиссия биржи для расчета процента фиксации прибыли:</b> {data.get('commission_fee', 0)}% <b>- Комиссия биржи для расчета прибыли:</b> {data.get('commission_fee', "Да")}
""" """
await message.answer(text=text, parse_mode='html', reply_markup=inline_markup.risk_management_settings_markup) await message.answer(text=text, parse_mode='html', reply_markup=inline_markup.risk_management_settings_markup)
async def price_profit_message(message, state): async def price_profit_message(message, state):
await state.set_state(update_risk_management_settings.price_profit) await state.set_state(update_risk_management_settings.price_profit)
@@ -40,9 +35,10 @@ async def price_profit_message(message, state):
await message.answer(text=text, parse_mode='html', reply_markup=None) await message.answer(text=text, parse_mode='html', reply_markup=None)
@router_risk_management_settings.message(update_risk_management_settings.price_profit) @router_risk_management_settings.message(update_risk_management_settings.price_profit)
async def state_price_profit(message: Message, state): async def state_price_profit(message: Message, state):
await state.update_data(price_profit = message.text) await state.update_data(price_profit=message.text)
data = await state.get_data() data = await state.get_data()
data_settings = await rq.get_user_risk_management_settings(message.from_user.id) data_settings = await rq.get_user_risk_management_settings(message.from_user.id)
@@ -51,13 +47,15 @@ async def state_price_profit(message: Message, state):
await message.answer(f"✅ Изменено: {data_settings['price_profit']}% → {data['price_profit']}%") await message.answer(f"✅ Изменено: {data_settings['price_profit']}% → {data['price_profit']}%")
await rq.update_price_profit(message.from_user.id, 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 main_settings_message(message.from_user.id, message)
await state.clear() await state.clear()
else: else:
await message.answer(f'⛔️ Ошибка: ваше значение ({data['price_profit']}%) или выше лимита (100) или вы вводите неверные символы') await message.answer(
f'⛔️ Ошибка: ваше значение ({data['price_profit']}%) или выше лимита (100) или вы вводите неверные символы')
await main_settings_message(message.from_user.id, message)
await main_settings_message(message.from_user.id, message, state)
async def price_loss_message(message, state): async def price_loss_message(message, state):
await state.set_state(update_risk_management_settings.price_loss) await state.set_state(update_risk_management_settings.price_loss)
@@ -66,9 +64,10 @@ async def price_loss_message(message, state):
await message.answer(text=text, parse_mode='html', reply_markup=None) await message.answer(text=text, parse_mode='html', reply_markup=None)
@router_risk_management_settings.message(update_risk_management_settings.price_loss) @router_risk_management_settings.message(update_risk_management_settings.price_loss)
async def state_price_loss(message: Message, state): async def state_price_loss(message: Message, state):
await state.update_data(price_loss = message.text) await state.update_data(price_loss=message.text)
data = await state.get_data() data = await state.get_data()
data_settings = await rq.get_user_risk_management_settings(message.from_user.id) data_settings = await rq.get_user_risk_management_settings(message.from_user.id)
@@ -99,12 +98,13 @@ async def state_price_loss(message: Message, state):
else: else:
await message.answer(f"✅ Стоп-лосс изменён: {old_price_loss}% → {new_price_loss}%") await message.answer(f"✅ Стоп-лосс изменён: {old_price_loss}% → {new_price_loss}%")
await main_settings_message(message.from_user.id, message, state) await main_settings_message(message.from_user.id, message)
await state.clear() await state.clear()
else: else:
await message.answer( await message.answer(
f'⛔️ Ошибка: ваше значение ({data["price_loss"]}%) выше лимита (100) или содержит неверные символы') f'⛔️ Ошибка: ваше значение ({data["price_loss"]}%) выше лимита (100) или содержит неверные символы')
await main_settings_message(message.from_user.id, message, state) await main_settings_message(message.from_user.id, message)
async def max_risk_deal_message(message, state): async def max_risk_deal_message(message, state):
await state.set_state(update_risk_management_settings.max_risk_deal) await state.set_state(update_risk_management_settings.max_risk_deal)
@@ -113,9 +113,10 @@ async def max_risk_deal_message(message, state):
await message.answer(text=text, parse_mode='html', reply_markup=None) await message.answer(text=text, parse_mode='html', reply_markup=None)
@router_risk_management_settings.message(update_risk_management_settings.max_risk_deal) @router_risk_management_settings.message(update_risk_management_settings.max_risk_deal)
async def state_max_risk_deal(message: Message, state): async def state_max_risk_deal(message: Message, state):
await state.update_data(max_risk_deal = message.text) await state.update_data(max_risk_deal=message.text)
data = await state.get_data() data = await state.get_data()
data_settings = await rq.get_user_risk_management_settings(message.from_user.id) data_settings = await rq.get_user_risk_management_settings(message.from_user.id)
@@ -124,34 +125,27 @@ async def state_max_risk_deal(message: Message, state):
await message.answer(f"✅ Изменено: {data_settings['max_risk_deal']}% → {data['max_risk_deal']}%") 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 rq.update_max_risk_deal(message.from_user.id, data['max_risk_deal'])
await main_settings_message(message.from_user.id, message, state) await main_settings_message(message.from_user.id, message)
await state.clear() await state.clear()
else: else:
await message.answer(f'⛔️ Ошибка: ваше значение ({data['max_risk_deal']}%) или выше лимита (100) или вы вводите неверные символы') await message.answer(
f'⛔️ Ошибка: ваше значение ({data['max_risk_deal']}%) или выше лимита (100) или вы вводите неверные символы')
await main_settings_message(message.from_user.id, message, state) await main_settings_message(message.from_user.id, message)
async def commission_fee_message(message, state): async def commission_fee_message(message, state):
await state.set_state(update_risk_management_settings.commission_fee) await state.set_state(update_risk_management_settings.commission_fee)
await message.answer(text="Введите процент комиссии биржи (например, 0.1):", parse_mode='html', reply_markup=None) await message.answer(text="Хотите учитывать комиссию биржи:", parse_mode='html',
reply_markup=inline_markup.buttons_yes_no_markup)
@router_risk_management_settings.message(update_risk_management_settings.commission_fee)
async def state_commission_fee(message: Message, state):
await state.update_data(commission_fee=message.text)
data = await state.get_data()
data_settings = await rq.get_user_risk_management_settings(message.from_user.id)
try: @router_risk_management_settings.callback_query(lambda c: c.data in ["clb_yes", "clb_no"])
val = float(data['commission_fee']) async def process_commission_fee_callback(callback: CallbackQuery, state):
if val < 0 or val > 100: val = "Да" if callback.data == "clb_yes" else "Нет"
raise ValueError() await rq.update_commission_fee(callback.from_user.id, val)
except Exception: await callback.message.answer(f"✅ Изменено: {val}")
await message.answer("⛔️ Ошибка: введите корректный процент комиссии от 0 до 100") await callback.answer()
return await commission_fee_message(message, state) await main_settings_message(callback.from_user.id, callback.message)
await rq.update_commission_fee(message.from_user.id, val)
await message.answer(f"✅ Изменено: {data_settings['commission_fee']}% → {data['commission_fee']}%")
await main_settings_message(message.from_user.id, message, state)
await state.clear() await state.clear()