From fc381ae6c227e19a16d360a6ddb42d681ef02598 Mon Sep 17 00:00:00 2001 From: algizn97 Date: Fri, 22 Aug 2025 13:54:13 +0500 Subject: [PATCH] Added timer --- .../functions/condition_settings/settings.py | 80 ++++++++++++++++--- 1 file changed, 69 insertions(+), 11 deletions(-) diff --git a/app/telegram/functions/condition_settings/settings.py b/app/telegram/functions/condition_settings/settings.py index 3d9e571..79fc57f 100644 --- a/app/telegram/functions/condition_settings/settings.py +++ b/app/telegram/functions/condition_settings/settings.py @@ -1,6 +1,21 @@ 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 + +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): tg_id = id @@ -9,11 +24,12 @@ async def reg_new_user_default_condition_settings(id, message): await rq.set_new_user_default_condition_settings(tg_id, trigger) + async def main_settings_message(id, message, state): text = """ Условия запуска - Триггер: Ручной запуск / Сигнал TradingView / Полностью автоматический -- Фильтр времени: диапазон по дням недели и времени суток +- Таймер: установить таймер / остановить таймер - Фильтр волатильности / объёма: включить/отключить - Интеграции и внешние сигналы: - Использовать сигналы TradingView: да / нет @@ -21,7 +37,8 @@ async def main_settings_message(id, message, state): - Webhook URL для сигналов (если используется TradingView): """ await message.answer(text=text, parse_mode='html', reply_markup=inline_markup.condition_settings_markup) - + + async def trigger_message(message, state): text = '''Триггер @@ -29,13 +46,52 @@ async def trigger_message(message, state): await message.answer(text=text, parse_mode='html', reply_markup=inline_markup.trigger_markup) -async def filter_time_message(message, state): - text = '''Фильтр времени - ??? - ''' +async def timer_message(id,message: Message, state: FSMContext): + await state.set_state(condition_settings.timer) + + timer_info = await rq.get_user_timer(id) + if timer_info is None: + await message.answer("Таймер не установлен.", reply_markup=inline_markup.timer_markup) + return + + await message.answer( + f"Таймер: {timer_info['timer_minutes']} мин\n" + f"Осталось: {timer_info['remaining_minutes']} мин\n", + reply_markup=inline_markup.timer_markup + ) + + +@condition_settings_router.callback_query(F.data == "clb_set_timer") +async def set_timer_callback(callback: CallbackQuery, state: FSMContext): + await state.set_state(condition_settings.timer) # состояние для ввода времени + await callback.message.answer("Введите время работы в минутах (например, 60):") + await callback.answer() + + +@condition_settings_router.message(condition_settings.timer) +async def process_timer_input(message: Message, state: FSMContext): + try: + minutes = int(message.text) + if minutes <= 0: + await message.reply("Введите число больше нуля.") + return + + # Сохраняем в базу или память время таймера для пользователя + await rq.update_user_timer(message.from_user.id, minutes) + + await message.answer(f"Таймер установлен на {minutes} минут.", reply_markup=inline_markup.back_to_main) + await state.clear() + except ValueError: + await message.reply("Пожалуйста, введите корректное число.") + + +@condition_settings_router.callback_query(F.data == "clb_stop_timer") +async def stop_timer_callback(callback: CallbackQuery): + await rq.update_user_timer(callback.from_user.id, 0) # обнуляем таймер + await callback.message.answer("Таймер остановлен.", reply_markup=inline_markup.back_to_main) + await callback.answer() - await message.answer(text=text) async def filter_volatility_message(message, state): text = '''Фильтр волатильности @@ -44,6 +100,7 @@ async def filter_volatility_message(message, state): await message.answer(text=text, parse_mode='html', reply_markup=inline_markup.buttons_on_off_markup) + async def external_cues_message(message, state): text = '''Внешние сигналы @@ -51,6 +108,7 @@ async def external_cues_message(message, state): await message.answer(text=text, parse_mode='html', reply_markup=None) + async def trading_cues_message(message, state): text = '''Использование сигналов @@ -58,16 +116,16 @@ async def trading_cues_message(message, state): await message.answer(text=text, parse_mode='html', reply_markup=inline_markup.buttons_yes_no_markup) + async def webhook_message(message, state): text = '''Скиньте ссылку на webhook (если есть trading view): ''' await message.answer(text=text, parse_mode='html') - + + async def ai_analytics_message(message, state): text = '''ИИ - Аналитика Описание... ''' await message.answer(text=text, parse_mode='html', reply_markup=inline_markup.buttons_yes_no_markup) - -