Stage 05.2+ - advanced draft builder (FSM, UI, pagination)
This commit is contained in:
@@ -1,18 +1,104 @@
|
||||
# app/src/telegram/handlers/trade/main.py
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from aiogram import F, Router
|
||||
from aiogram.types import Message
|
||||
from aiogram.fsm.context import FSMContext
|
||||
from aiogram.types import CallbackQuery, InlineKeyboardMarkup, Message
|
||||
from aiogram.utils.keyboard import InlineKeyboardBuilder
|
||||
|
||||
from src.telegram.handlers.trade.new_order import (
|
||||
show_recent_drafts,
|
||||
start_new_order_draft,
|
||||
)
|
||||
|
||||
router = Router(name="trade_main")
|
||||
|
||||
|
||||
def _trade_home_keyboard() -> InlineKeyboardMarkup:
|
||||
builder = InlineKeyboardBuilder()
|
||||
builder.button(text="📝 Новый ордер", callback_data="trade:new_order")
|
||||
builder.button(text="📂 Черновики", callback_data="trade:drafts")
|
||||
builder.button(text="⚙️ Настройки ордера", callback_data="trade:settings")
|
||||
builder.button(text="ℹ️ Справка", callback_data="trade:help")
|
||||
builder.adjust(2, 2)
|
||||
return builder.as_markup()
|
||||
|
||||
|
||||
def _trade_back_keyboard() -> InlineKeyboardMarkup:
|
||||
builder = InlineKeyboardBuilder()
|
||||
builder.button(text="⬅️ К торговле", callback_data="trade:home")
|
||||
return builder.as_markup()
|
||||
|
||||
|
||||
def _trade_home_text() -> str:
|
||||
return (
|
||||
"<b>⚡ Торговля</b>\n\n"
|
||||
"<b>‼️ Режим черновика</b>"
|
||||
)
|
||||
|
||||
|
||||
@router.message(F.text == "⚡ Торговля")
|
||||
async def open_trade(message: Message) -> None:
|
||||
text = (
|
||||
"<b>⚡ Торговля</b>\n\n"
|
||||
"Доступные действия:\n"
|
||||
"• /new_order — создать черновик ордера\n"
|
||||
"• /drafts — показать последние черновики\n\n"
|
||||
"На этом этапе реальные ордера ещё не отправляются."
|
||||
await message.answer(
|
||||
_trade_home_text(),
|
||||
reply_markup=_trade_home_keyboard(),
|
||||
)
|
||||
await message.answer(text)
|
||||
|
||||
|
||||
@router.callback_query(F.data == "trade:home")
|
||||
async def open_trade_home_callback(callback: CallbackQuery) -> None:
|
||||
await callback.answer()
|
||||
if callback.message is not None:
|
||||
await callback.message.edit_text(
|
||||
_trade_home_text(),
|
||||
reply_markup=_trade_home_keyboard(),
|
||||
)
|
||||
|
||||
|
||||
@router.callback_query(F.data == "trade:new_order")
|
||||
async def open_new_order_from_trade(
|
||||
callback: CallbackQuery,
|
||||
state: FSMContext,
|
||||
) -> None:
|
||||
await callback.answer()
|
||||
if callback.message is not None:
|
||||
await start_new_order_draft(callback.message, state, edit_mode=True)
|
||||
|
||||
|
||||
@router.callback_query(F.data == "trade:drafts")
|
||||
async def open_drafts_from_trade(callback: CallbackQuery) -> None:
|
||||
await callback.answer()
|
||||
if callback.message is not None:
|
||||
await show_recent_drafts(callback.message, edit_mode=True, page=1)
|
||||
|
||||
|
||||
@router.callback_query(F.data == "trade:settings")
|
||||
async def open_trade_settings(callback: CallbackQuery) -> None:
|
||||
await callback.answer()
|
||||
if callback.message is not None:
|
||||
await callback.message.edit_text(
|
||||
"<b>⚡ Торговля — Настройки ордера</b>\n\n"
|
||||
"Раздел в разработке.\n\n"
|
||||
"Планируется добавить:\n"
|
||||
"• параметры ордера по умолчанию\n"
|
||||
"• пресеты количества\n"
|
||||
"• режим цены: Bid / Ask / Last",
|
||||
reply_markup=_trade_back_keyboard(),
|
||||
)
|
||||
|
||||
|
||||
@router.callback_query(F.data == "trade:help")
|
||||
async def open_trade_help(callback: CallbackQuery) -> None:
|
||||
await callback.answer()
|
||||
if callback.message is not None:
|
||||
await callback.message.edit_text(
|
||||
"<b>⚡ Торговля — Справка</b>\n\n"
|
||||
"<b>Режим черновика</b> — ордер не отправляется на биржу.\n\n"
|
||||
"Сейчас можно:\n"
|
||||
"• собрать черновик ордера\n"
|
||||
"• проверить параметры\n"
|
||||
"• сохранить черновик в базу\n\n"
|
||||
"Реальная отправка ордера появится позже.",
|
||||
reply_markup=_trade_back_keyboard(),
|
||||
)
|
||||
Reference in New Issue
Block a user