1
0
forked from kodorvan/stcs

Added new handlers for tasks

This commit is contained in:
algizn97
2025-08-27 14:28:23 +05:00
parent 02fa03c824
commit bf44b481e9
2 changed files with 76 additions and 4 deletions

View File

@@ -1,4 +1,5 @@
import logging.config
import asyncio
import logging.config
from aiogram import F, Router
from app.tasks.tasks import handle_stop_close_trade, handle_start_close_trade, handle_stop_trading, handle_start_trading
@@ -246,12 +247,12 @@ async def start_trading_process(callback: CallbackQuery) -> None:
timer_minute = timer_data or 0
if timer_minute > 0:
await handle_start_trading(tg_id, message)
await handle_start_trading(tg_id, message, side=side, margin_mode=margin_mode, use_timer=True)
await message.answer(f"Торговля начнётся через {timer_minute} мин. Для отмены нажмите кнопку ниже.",
reply_markup=inline_markup.cancel_start_markup)
await rq.update_user_timer(tg_id, minutes=0)
else:
await open_position(tg_id, message, side=side, margin_mode=margin_mode)
await handle_start_trading(tg_id, message, side=side, margin_mode=margin_mode, use_timer=False)
await callback.answer()
@@ -443,6 +444,67 @@ async def reset_martingale(callback: CallbackQuery) -> None:
await callback.answer("Сброс шагов выполнен.")
@router_functions_bybit_trade.callback_query(F.data == "clb_stop_trading")
async def confirm_stop_trading(callback: CallbackQuery):
"""
Предлагает пользователю выбрать вариант подтверждение остановки торговли.
"""
await callback.message.answer(
"Выберите вариант остановки торговли:", reply_markup=inline_markup.stop_choice_markup
)
await callback.answer()
@router_functions_bybit_trade.callback_query(F.data == "stop_immediately")
async def stop_immediately(callback: CallbackQuery):
"""
Останавливает торговлю немедленно.
"""
tg_id = callback.from_user.id
await handle_stop_trading(tg_id, use_timer=False)
await callback.message.answer("Торговля остановлена.", reply_markup=inline_markup.back_to_main)
await callback.answer()
@router_functions_bybit_trade.callback_query(F.data == "stop_with_timer")
async def stop_with_timer_start(callback: CallbackQuery, state: FSMContext):
"""
Запускает диалог с пользователем для задания задержки перед остановкой торговли.
"""
await state.set_state(CloseTradeTimerState.waiting_for_delay)
await callback.message.answer("Введите задержку в минутах перед остановкой торговли:", reply_markup=inline_markup.cancel)
await callback.answer()
@router_functions_bybit_trade.message(CloseTradeTimerState.waiting_for_delay)
async def process_stop_delay(message: Message, state: FSMContext):
"""
Обрабатывает ввод задержки и запускает задачу остановки торговли с задержкой.
"""
try:
delay_minutes = int(message.text.strip())
if delay_minutes <= 0:
await message.answer("Введите положительное число минут.")
return
except ValueError:
await message.answer("Некорректный формат. Введите число в минутах.")
return
tg_id = message.from_user.id
delay_seconds = delay_minutes * 60
# Остановка задачи с таймером через заданную задержку
# Можно реализовать через запуск отдельной асинхронной задачи, которая через delay_seconds отменит торговый цикл
async def delayed_stop():
await asyncio.sleep(delay_seconds)
await handle_stop_trading(tg_id, use_timer=True)
await message.answer("Торговля по таймеру остановлена.")
asyncio.create_task(delayed_stop())
await message.answer(f"Торговля будет остановлена через {delay_minutes} минут.", reply_markup=inline_markup.back_to_main)
await state.clear()
@router_functions_bybit_trade.callback_query(F.data == "clb_cancel")
async def cancel(callback: CallbackQuery, state: FSMContext) -> None:
"""