forked from kodorvan/stcs
Added new handlers for tasks
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
import logging.config
|
import asyncio
|
||||||
|
import logging.config
|
||||||
from aiogram import F, Router
|
from aiogram import F, Router
|
||||||
|
|
||||||
from app.tasks.tasks import handle_stop_close_trade, handle_start_close_trade, handle_stop_trading, handle_start_trading
|
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
|
timer_minute = timer_data or 0
|
||||||
|
|
||||||
if timer_minute > 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} мин. Для отмены нажмите кнопку ниже.",
|
await message.answer(f"Торговля начнётся через {timer_minute} мин. Для отмены нажмите кнопку ниже.",
|
||||||
reply_markup=inline_markup.cancel_start_markup)
|
reply_markup=inline_markup.cancel_start_markup)
|
||||||
await rq.update_user_timer(tg_id, minutes=0)
|
await rq.update_user_timer(tg_id, minutes=0)
|
||||||
else:
|
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()
|
await callback.answer()
|
||||||
|
|
||||||
@@ -443,6 +444,67 @@ async def reset_martingale(callback: CallbackQuery) -> None:
|
|||||||
await callback.answer("Сброс шагов выполнен.")
|
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")
|
@router_functions_bybit_trade.callback_query(F.data == "clb_cancel")
|
||||||
async def cancel(callback: CallbackQuery, state: FSMContext) -> None:
|
async def cancel(callback: CallbackQuery, state: FSMContext) -> None:
|
||||||
"""
|
"""
|
||||||
|
@@ -32,7 +32,8 @@ trading_markup = InlineKeyboardMarkup(inline_keyboard=[
|
|||||||
[InlineKeyboardButton(text="Настройки", callback_data='clb_settings_message')],
|
[InlineKeyboardButton(text="Настройки", callback_data='clb_settings_message')],
|
||||||
[InlineKeyboardButton(text="Мои сделки", callback_data='clb_my_deals')],
|
[InlineKeyboardButton(text="Мои сделки", callback_data='clb_my_deals')],
|
||||||
[InlineKeyboardButton(text="Указать торговую пару", callback_data='clb_update_trading_pair')],
|
[InlineKeyboardButton(text="Указать торговую пару", callback_data='clb_update_trading_pair')],
|
||||||
[InlineKeyboardButton(text="Выбрать тип входа", callback_data='clb_update_entry_type')],
|
[InlineKeyboardButton(text="Начать торговлю", callback_data='clb_update_entry_type')],
|
||||||
|
[InlineKeyboardButton(text="Остановить торговлю", callback_data='clb_stop_trading')],
|
||||||
])
|
])
|
||||||
|
|
||||||
start_trading_markup = InlineKeyboardMarkup(inline_keyboard=[
|
start_trading_markup = InlineKeyboardMarkup(inline_keyboard=[
|
||||||
@@ -184,3 +185,12 @@ timer_markup = InlineKeyboardMarkup(inline_keyboard=[
|
|||||||
cancel_start_markup = InlineKeyboardMarkup(inline_keyboard=[
|
cancel_start_markup = InlineKeyboardMarkup(inline_keyboard=[
|
||||||
[InlineKeyboardButton(text="Отменить таймер", callback_data="clb_stop_timer")]
|
[InlineKeyboardButton(text="Отменить таймер", callback_data="clb_stop_timer")]
|
||||||
])
|
])
|
||||||
|
|
||||||
|
stop_choice_markup = InlineKeyboardMarkup(
|
||||||
|
inline_keyboard=[
|
||||||
|
[
|
||||||
|
InlineKeyboardButton(text="Остановить сразу", callback_data="stop_immediately"),
|
||||||
|
InlineKeyboardButton(text="Остановить по таймеру", callback_data="stop_with_timer"),
|
||||||
|
]
|
||||||
|
]
|
||||||
|
)
|
Reference in New Issue
Block a user