forked from kodorvan/stcs
144 lines
5.7 KiB
Python
144 lines
5.7 KiB
Python
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""" <b>Условия запуска</b>
|
|
|
|
<b>- Триггер:</b> {trigger}
|
|
<b>- Таймер: </b> установить таймер / остановить таймер
|
|
<b>- Фильтр волатильности / объёма: </b> включить/отключить
|
|
<b>- Интеграции и внешние сигналы: </b>
|
|
<b>- Использовать сигналы TradingView:</b> да / нет
|
|
<b>- Использовать AI-аналитику от ChatGPT:</b> да / не
|
|
<b>- Webhook URL для сигналов (если используется TradingView): </b>
|
|
"""
|
|
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 = '''
|
|
<b>- Автоматический:</b> торговля будет продолжаться до условии остановки.
|
|
<b>- Ручной:</b> торговля будет происходить только в ручном режиме.
|
|
<em>- Выберите тип триггера:</em>'''
|
|
|
|
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 = '''<b>Внешние сигналы</b>
|
|
|
|
Описание... '''
|
|
|
|
await message.answer(text=text, parse_mode='html', reply_markup=None)
|
|
|
|
|
|
async def trading_cues_message(message, state):
|
|
text = '''<b>Использование сигналов</b>
|
|
|
|
Описание... '''
|
|
|
|
await message.answer(text=text, parse_mode='html', reply_markup=inline_markup.buttons_yes_no_markup)
|
|
|
|
|
|
async def webhook_message(message, state):
|
|
text = '''Скиньте ссылку на <b>webhook</b> (если есть trading view): '''
|
|
|
|
await message.answer(text=text, parse_mode='html')
|
|
|
|
|
|
async def ai_analytics_message(message, state):
|
|
text = '''<b>ИИ - Аналитика</b>
|
|
|
|
Описание... '''
|
|
|
|
await message.answer(text=text, parse_mode='html', reply_markup=inline_markup.buttons_yes_no_markup)
|