From f4ff1282361b3f29e9c0f2e6443b2d66b591c0e6 Mon Sep 17 00:00:00 2001 From: algizn97 Date: Fri, 29 Aug 2025 11:42:55 +0500 Subject: [PATCH] Added trigger function --- .../functions/condition_settings/settings.py | 56 +++++++++------- .../functions/main_settings/settings.py | 66 ++++++++++++++++--- 2 files changed, 90 insertions(+), 32 deletions(-) diff --git a/app/telegram/functions/condition_settings/settings.py b/app/telegram/functions/condition_settings/settings.py index 6b385d1..32932eb 100644 --- a/app/telegram/functions/condition_settings/settings.py +++ b/app/telegram/functions/condition_settings/settings.py @@ -1,13 +1,10 @@ -import asyncio -import logging.config +import logging.config import app.telegram.Keyboards.inline_keyboards as inline_markup from aiogram import Router, F from aiogram.types import Message, CallbackQuery from aiogram.fsm.context import FSMContext import app.telegram.database.requests as rq -from aiogram.fsm.state import State, StatesGroup - -from app.services.Bybit.functions.Futures import trading_cycle +from app.states.States import condition_settings from logger_helper.logger_helper import LOGGING_CONFIG @@ -17,27 +14,21 @@ logger = logging.getLogger("condition_settings") condition_settings_router = Router() -class condition_settings(StatesGroup): - trigger = State() - timer = State() - volatilty = State() - volume = State() - integration = State() - use_tv_signal = State() - - -async def reg_new_user_default_condition_settings(id, message): +async def reg_new_user_default_condition_settings(id): tg_id = id - trigger = await rq.get_for_registration_trigger() + trigger = await rq.get_for_registration_trigger(tg_id) await rq.set_new_user_default_condition_settings(tg_id, trigger) -async def main_settings_message(id, message, state): - text = """ Условия запуска +async def main_settings_message(id, message): -- Триггер: Ручной запуск / Сигнал TradingView / Полностью автоматический + tg_id = id + trigger = await rq.get_for_registration_trigger(tg_id) + text = f""" Условия запуска + +- Триггер: {trigger} - Таймер: установить таймер / остановить таймер - Фильтр волатильности / объёма: включить/отключить - Интеграции и внешние сигналы: @@ -48,14 +39,33 @@ async def main_settings_message(id, message, state): await message.answer(text=text, parse_mode='html', reply_markup=inline_markup.condition_settings_markup) -async def trigger_message(message, state): - text = '''Триггер - - Описание ручного запуска, сигналов, автоматического режима ''' +async def trigger_message(id, message, state: FSMContext): + await state.set_state(condition_settings.trigger) + text = ''' +- Автоматический: торговля будет продолжаться до условии остановки. +- Ручной: торговля будет происходить только в ручном режиме. +- Выберите тип триггера:''' await message.answer(text=text, parse_mode='html', reply_markup=inline_markup.trigger_markup) +@condition_settings_router.callback_query(F.data == "clb_trigger_manual") +async def trigger_manual_callback(callback: CallbackQuery, state: FSMContext): + await state.set_state(condition_settings.trigger) + await rq.update_trigger(tg_id=callback.from_user.id, trigger="Ручной") + await callback.message.answer("Триггер установлен в ручной режим.") + await main_settings_message(callback.from_user.id, callback.message) + await callback.answer() + + +@condition_settings_router.callback_query(F.data == "clb_trigger_auto") +async def trigger_manual_callback(callback: CallbackQuery, state: FSMContext): + await state.set_state(condition_settings.trigger) + await rq.update_trigger(tg_id=callback.from_user.id, trigger="Автоматический") + await callback.message.answer("Триггер установлен в автоматический режим.") + await main_settings_message(callback.from_user.id, callback.message) + await callback.answer() + async def timer_message(id, message: Message, state: FSMContext): await state.set_state(condition_settings.timer) diff --git a/app/telegram/functions/main_settings/settings.py b/app/telegram/functions/main_settings/settings.py index 2365967..90f1050 100644 --- a/app/telegram/functions/main_settings/settings.py +++ b/app/telegram/functions/main_settings/settings.py @@ -1,4 +1,4 @@ -from aiogram import Router +from aiogram import Router, F import app.telegram.Keyboards.inline_keyboards as inline_markup import app.telegram.Keyboards.reply_keyboards as reply_markup @@ -17,7 +17,8 @@ class update_main_settings(StatesGroup): margin_type = State() martingale_factor = State() starting_quantity = State() - maximal_quantity = State() + maximal_quantity = State() + switch_mode_enabled = State() async def reg_new_user_default_main_settings(id, message): tg_id = id @@ -34,6 +35,8 @@ async def main_settings_message(id, message, state): await message.answer(f"""Основные настройки - Режим торговли: {data['trading_mode']} +- Режим свитч: {data['switch_mode_enabled']} +- Состояние свитча: {data['switch_state']} - Тип маржи: {data['margin_type']} - Размер кредитного плеча: х{data['size_leverage']} - Начальная ставка: {data['starting_quantity']} @@ -52,8 +55,6 @@ async def trading_mode_message(message, state): Шорт — метод продажи активов, взятых в кредит, чтобы получить прибыль от снижения цены. Смарт — автоматизированный режим, который подбирает оптимальную стратегию в зависимости от текущих рыночных условий. - -Свитч — динамическое переключение между торговыми режимами для максимизации эффективности. Выберите ниже для изменений: """, parse_mode='html', reply_markup=inline_markup.trading_mode_markup) @@ -79,12 +80,7 @@ async def state_trading_mode(callback: CallbackQuery, state): await main_settings_message(id, callback.message, state) await state.clear() - case 'trade_mode_switch': - await callback.message.answer(f"✅ Изменено: {data_settings['trading_mode']} → Switch") - await rq.update_trade_mode_user(id, 'Switch') - await main_settings_message(id, callback.message, state) - await state.clear() case 'trade_mode_smart': await callback.message.answer(f"✅ Изменено: {data_settings['trading_mode']} → Smart") await rq.update_trade_mode_user(id, 'Smart') @@ -94,11 +90,63 @@ async def state_trading_mode(callback: CallbackQuery, state): except Exception as e: print(f"error: {e}") + +async def switch_mode_enabled_message(message, state): + await state.set_state(update_main_settings.switch_mode_enabled) + + await message.edit_text( + """Свитч — динамическое переключение между торговыми режимами для максимизации эффективности. + + Выберите ниже для изменений:""", parse_mode='html', reply_markup=inline_markup.buttons_on_off_markup_for_switch) + + + + +@router_main_settings.callback_query(lambda c: c.data in ["clb_on_switch", "clb_off_switch"]) +async def state_switch_mode_enabled(callback: CallbackQuery, state): + await callback.answer() + tg_id = callback.from_user.id + val = "Включить" if callback.data == "clb_on_switch" else "Выключить" + if val == "Включить": + await rq.update_switch_mode_enabled(tg_id, "Включено") + await callback.message.answer(f"Включено") + await main_settings_message(tg_id, callback.message, state) + else: + await rq.update_switch_mode_enabled(tg_id, "Выключено") + await callback.message.answer(f"Выключено") + await main_settings_message(tg_id, callback.message, state) + await state.clear() + + +@router_main_settings.callback_query(lambda c: c.data in ["clb_switch_state"]) +async def state_switch_mode_enabled(callback: CallbackQuery): + await callback.answer() + await callback.message.answer("Выберите состояние свитча:", reply_markup=inline_markup.switch_state_markup) + + +@router_main_settings.callback_query(lambda c: c.data in ["clb_long_switch", "clb_short_switch"]) +async def state_switch_mode_enabled(callback: CallbackQuery, state): + await callback.answer() + tg_id = callback.from_user.id + val = "Long" if callback.data == "clb_long_switch" else "Short" + if val == "Long": + await rq.update_switch_state(tg_id, "Long") + await callback.message.answer(f"Состояние свитча: {val}") + await main_settings_message(tg_id, callback.message, state) + else: + await rq.update_switch_state(tg_id, "Short") + await callback.message.answer(f"Состояние свитча: {val}") + await main_settings_message(tg_id, callback.message, state) + await state.clear() + + + async def size_leverage_message (message, state): await state.set_state(update_main_settings.size_leverage) await message.edit_text("Введите размер кредитного плеча (от 1 до 100): ", parse_mode='html', reply_markup=inline_markup.back_btn_list_settings_markup) + @router_main_settings.message(update_main_settings.size_leverage) async def state_size_leverage(message: Message, state): await state.update_data(size_leverage = message.text)