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"""Риск менеджмент, - Процент изменения цены для фиксации прибыли: {data['price_profit']}% - Процент изменения цены для фиксации убытков: {data['price_loss']}% - Максимальный риск на сделку (в % от баланса): {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)