07.4.3.17 — Unified Active Screen Lifecycle

This commit is contained in:
2026-05-09 16:25:03 +03:00
parent e97dcd372b
commit 3181ac680c
17 changed files with 1032 additions and 424 deletions

View File

@@ -13,6 +13,7 @@ from src.telegram.handlers.auto.ui import (
is_auto_configured,
)
from src.telegram.handlers.system import open_auto_settings
from src.telegram.live.active_screen import ActiveScreenManager
from src.trading.auto.runner import AutoTradeRunner
from src.trading.auto.service import AutoTradeService
@@ -41,6 +42,11 @@ async def render_auto_screen(
render_text=build_auto_text,
render_markup=auto_keyboard,
)
ActiveScreenManager.register(
screen="auto",
message=target_message,
)
return
sent_message = await target_message.answer(text, reply_markup=auto_keyboard())
@@ -53,17 +59,40 @@ async def render_auto_screen(
render_markup=auto_keyboard,
)
ActiveScreenManager.register(
screen="auto",
message=sent_message,
)
async def _prepare_auto_from_message(message: Message) -> None:
await ActiveScreenManager.prepare_new_screen(
screen="auto",
bot=message.bot,
chat_id=message.chat.id,
)
async def _prepare_auto_from_callback(callback: CallbackQuery) -> bool:
if callback.message is None:
await callback.answer("Сообщение не найдено", show_alert=True)
return False
await ActiveScreenManager.prepare_new_screen(
screen="auto",
bot=callback.message.bot,
chat_id=callback.message.chat.id,
keep_message_id=callback.message.message_id,
)
return True
@router.message(F.text.in_({"🤖 Автоторговля", "🤖 Авто"}))
async def open_auto(message: Message, state: FSMContext) -> None:
await state.clear()
AutoTradeRunner.set_current_screen("auto")
await AutoTradeRunner.delete_registered_screen(
bot=message.bot,
chat_id=message.chat.id,
)
await _prepare_auto_from_message(message)
await render_auto_screen(message, edit_mode=False)
@@ -72,11 +101,9 @@ async def open_auto(message: Message, state: FSMContext) -> None:
async def open_auto_from_callback(callback: CallbackQuery, state: FSMContext) -> None:
await state.clear()
if callback.message is None:
await callback.answer("Сообщение не найдено", show_alert=True)
if not await _prepare_auto_from_callback(callback):
return
AutoTradeRunner.set_current_screen("auto")
await render_auto_screen(callback.message, edit_mode=True)
await callback.answer()
@@ -99,10 +126,10 @@ async def auto_start(callback: CallbackQuery) -> None:
_, message = service.start()
AutoTradeRunner.set_current_screen("auto")
AutoTradeRunner.start()
if callback.message is not None:
await _prepare_auto_from_callback(callback)
await render_auto_screen(callback.message, edit_mode=True)
await callback.answer(message)
@@ -126,10 +153,10 @@ async def auto_observe(callback: CallbackQuery) -> None:
_, message = service.observe()
AutoTradeRunner.set_current_screen("auto")
AutoTradeRunner.start()
if callback.message is not None:
await _prepare_auto_from_callback(callback)
await render_auto_screen(callback.message, edit_mode=True)
await callback.answer(message)
@@ -143,6 +170,7 @@ async def auto_stop(callback: CallbackQuery) -> None:
AutoTradeRunner.stop()
if callback.message is not None:
await _prepare_auto_from_callback(callback)
await render_auto_screen(callback.message, edit_mode=True)
await callback.answer(message)