From 61562da3e48b78bcace69300340837b4d5f44446 Mon Sep 17 00:00:00 2001 From: dv Date: Thu, 26 Mar 2026 16:27:17 +0300 Subject: [PATCH] =?UTF-8?q?=D0=BF=D0=B5=D1=80=D0=B5=D0=B4=20=D0=BB=D0=B8?= =?UTF-8?q?=D0=BC=D0=B8=D1=82=D0=BE=D0=BC,=20=D0=B4=D0=BE=D0=B1=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=BE=D0=B4=D1=81?= =?UTF-8?q?=D0=BA=D0=B0=D0=B7=D0=BE=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bot/handlers/start.py | 70 ++++++++++++++++++++++++++++++++++++++++++ data/support.db-shm | Bin 32768 -> 32768 bytes data/support.db-wal | Bin 5800992 -> 5800992 bytes 3 files changed, 70 insertions(+) diff --git a/bot/handlers/start.py b/bot/handlers/start.py index 1b001dd..e6d4dab 100644 --- a/bot/handlers/start.py +++ b/bot/handlers/start.py @@ -96,6 +96,7 @@ async def on_bot_started(event: BotStarted, context: BaseContext) -> None: @router.message_created(Command("start")) async def on_start_command(event: MessageCreated, context: BaseContext) -> None: + """commands_info: Главное меню""" chat_id, user_id = event.get_ids() if user_id is None or chat_id is None: return @@ -237,3 +238,72 @@ async def on_contact_shared( text=menu_text, attachments=[main_menu_kb()], ) + + +# ── /menu ───────────────────────────────────────────────────────────────────── + +@router.message_created(Command("menu")) +async def on_menu_command(event: MessageCreated, context: BaseContext) -> None: + """commands_info: Показать меню""" + chat_id, user_id = event.get_ids() + if user_id is None or chat_id is None: + return + + bot_user = await get_bot_user_by_max_id(user_id) + if not bot_user or not bot_user["is_authorized"]: + return + + from bot.handlers.create_ticket import cleanup_ticket_flow + await cleanup_ticket_flow(event.bot, context) + await context.set_state(None) + + from bot.handlers.menu import build_main_menu_text + await bot_send( + event.bot, + chat_id=chat_id, + user_id=user_id, + text=await build_main_menu_text(bot_user), + attachments=[main_menu_kb()], + ) + + +# ── /cancel ─────────────────────────────────────────────────────────────────── + +@router.message_created(Command("cancel")) +async def on_cancel_command(event: MessageCreated, context: BaseContext) -> None: + """commands_info: Отменить текущее действие""" + chat_id, user_id = event.get_ids() + if user_id is None or chat_id is None: + return + + bot_user = await get_bot_user_by_max_id(user_id) + if not bot_user or not bot_user["is_authorized"]: + return + + from bot.handlers.create_ticket import cleanup_ticket_flow + from bot.states import CommentStates, TicketStates + + state = await context.get_state() + active_states = [ + TicketStates.waiting_description, + TicketStates.collecting_attachments, + TicketStates.confirming, + CommentStates.waiting_text, + ] + + if state in active_states: + await cleanup_ticket_flow(event.bot, context) + cancel_text = "❌ Действие отменено.\n\n" + else: + cancel_text = "" + + await context.set_state(None) + + from bot.handlers.menu import build_main_menu_text + await bot_send( + event.bot, + chat_id=chat_id, + user_id=user_id, + text=cancel_text + await build_main_menu_text(bot_user), + attachments=[main_menu_kb()], + ) diff --git a/data/support.db-shm b/data/support.db-shm index 36a1946e834f96b69c6512376c4f29b7af7ac4b8..bc52efb1fb87a6ce7a325b5cabb7767462223d18 100644 GIT binary patch delta 187 zcmZo@U}|V!s+V}A%K!q*K+MR%AfN&ymN79f91WS*`7CbkkKNW63J)0tB^yK@V$QlE zY)h(ou;D;L325$rBmfm>VvyU|SkE%~1B(CH6Bj$1Jfk9`GUH}O)-Al7 T4~72{VN+mKVpIVM*a-swTL(F3 delta 174 zcmZo@U}|V!s+V}A%K!pgK+MR%ARq@MmN79fc>GD{t+I9>sdBSus*Y$Y``k9`JWRP`{qMAyLdMr3jZYnWZ4M= G#n}Lpg*R;g diff --git a/data/support.db-wal b/data/support.db-wal index dd101ba816560fc01e3ce250d3e7ca13c5c482eb..7fafbd0c7ff86545aa2184cb9e160fbc7583378b 100644 GIT binary patch delta 814 zcmcK0O-K}R9L90SRcFWDaUIKE)OB|)U)n9rvDwx2Ez9yHE8X0Rgplp+(8-&iM6UlR zPZB|M2*bdWw*_Mk5?0Wy!+I1uga@Ha2#ktgrSF2^cIXuS;d6W7dH%oIM{C)$xGyA; zEo>r3sPTYi?`UE9C@opZhQ_siA7(pZdu7H*Q!hM znD5u5YIAH}Q%jb{7Fq*sqrEEeTqTuN@KlXBmmPPMRAOL5$%)^Ndra4t!n%Az*JDO7 z7&4m7CBL)9On%ok?M7JFiIiJJVv_ahhZeN`S-svr_v}IZ+lQTM?{0NzPqh2xMAxTO zx;jr8&!|?c$Jfg4N{QiZ*>*4PH79PVwV4C73P-!6A*@qx{PV(<7dICJ9bY$g7W#G< zx~HBGzWX_IeLcNUwijhC9JiZqrv2{3@JBg)B;VhUB(t*dKm6k1$s6-X2QG+A!BY>kghFa9&IO?IJ0ViM}h!7glgfN=Xf>yMl t9VgL&Q#g%IoWWUip&LEu#X0ohJTBlO`Z0hAE@2Q+T*eh^a_H(z&2MQ%C>Q_$ delta 7919 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