From 7c48336a62bfee1656b35aa63327192ecd4fe40f Mon Sep 17 00:00:00 2001 From: algizn97 Date: Tue, 26 Aug 2025 19:35:01 +0500 Subject: [PATCH] Update --- .../risk_management_settings/settings.py | 78 +++++++++---------- 1 file changed, 36 insertions(+), 42 deletions(-) diff --git a/app/telegram/functions/risk_management_settings/settings.py b/app/telegram/functions/risk_management_settings/settings.py index 3a7e7ee..53d699d 100644 --- a/app/telegram/functions/risk_management_settings/settings.py +++ b/app/telegram/functions/risk_management_settings/settings.py @@ -1,27 +1,21 @@ 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 +from app.states.States import update_risk_management_settings 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): tg_id = 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) text = f"""Риск менеджмент, @@ -29,20 +23,22 @@ async def main_settings_message(id, message, state): - Процент изменения цены для фиксации прибыли: {data.get('price_profit', 0)}% - Процент изменения цены для фиксации убытков: {data.get('price_loss', 0)}% - Максимальный риск на сделку (в % от баланса): {data.get('max_risk_deal', 0)}% - - Комиссия биржи для расчета процента фиксации прибыли: {data.get('commission_fee', 0)}% + - Комиссия биржи для расчета прибыли: {data.get('commission_fee', "Да")} """ 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 = 'Введите число изменения цены для фиксации прибыли: ' + 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) + 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) @@ -51,24 +47,27 @@ async def state_price_profit(message: Message, state): 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 main_settings_message(message.from_user.id, message) await state.clear() 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): await state.set_state(update_risk_management_settings.price_loss) - text = 'Введите число изменения цены для фиксации убытков: ' + 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) + 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) @@ -99,23 +98,25 @@ async def state_price_loss(message: Message, state): else: 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() else: await message.answer( 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): await state.set_state(update_risk_management_settings.max_risk_deal) - text = 'Введите число (процент от баланса) для изменения максимального риска на сделку: ' + 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) + 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) @@ -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 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() 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): 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: - val = float(data['commission_fee']) - if val < 0 or val > 100: - raise ValueError() - except Exception: - await message.answer("⛔️ Ошибка: введите корректный процент комиссии от 0 до 100") - return await commission_fee_message(message, state) - - 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() \ No newline at end of file +@router_risk_management_settings.callback_query(lambda c: c.data in ["clb_yes", "clb_no"]) +async def process_commission_fee_callback(callback: CallbackQuery, state): + val = "Да" if callback.data == "clb_yes" else "Нет" + await rq.update_commission_fee(callback.from_user.id, val) + await callback.message.answer(f"✅ Изменено: {val}") + await callback.answer() + await main_settings_message(callback.from_user.id, callback.message) + await state.clear()