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 app.states.States import condition_settings from logger_helper.logger_helper import LOGGING_CONFIG logging.config.dictConfig(LOGGING_CONFIG) logger = logging.getLogger("condition_settings") condition_settings_router = Router() async def reg_new_user_default_condition_settings(id): tg_id = id 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): tg_id = id trigger = await rq.get_for_registration_trigger(tg_id) text = f""" Условия запуска - Триггер: {trigger} - Таймер: установить таймер / остановить таймер - Фильтр волатильности / объёма: включить/отключить - Интеграции и внешние сигналы: - Использовать сигналы TradingView: да / нет - Использовать AI-аналитику от ChatGPT: да / не - Webhook URL для сигналов (если используется TradingView): """ await message.answer(text=text, parse_mode='html', reply_markup=inline_markup.condition_settings_markup) 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) 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", 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} минут.\nНажмите кнопку 'Начать торговлю' для запуска.", reply_markup=inline_markup.start_trading_markup) await state.clear() except ValueError: await message.reply("Пожалуйста, введите корректное число.") async def filter_volatility_message(message, state): text = '''Фильтр волатильности Описание... ''' await message.answer(text=text, parse_mode='html', reply_markup=inline_markup.buttons_on_off_markup) async def external_cues_message(message, state): text = '''Внешние сигналы Описание... ''' await message.answer(text=text, parse_mode='html', reply_markup=None) async def trading_cues_message(message, state): text = '''Использование сигналов Описание... ''' 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)