From 714853730a8fb88ff1b7dff827f527f91c4249f1 Mon Sep 17 00:00:00 2001 From: Akulij Date: Sat, 31 May 2025 13:47:14 +0500 Subject: [PATCH] create /cancel command for users --- src/handlers/admin.rs | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/handlers/admin.rs b/src/handlers/admin.rs index 29a2c34..7b74aec 100644 --- a/src/handlers/admin.rs +++ b/src/handlers/admin.rs @@ -23,6 +23,8 @@ use crate::{BotDialogue, BotError, BotResult, CallbackStore, State}; pub fn admin_handler() -> BotHandler { dptree::entry() + // keep on top to cancel any action + .branch(cancel_handler()) .branch( Update::filter_callback_query() .filter_async(async |q: CallbackQuery, mut db: DB| { @@ -197,6 +199,17 @@ async fn button_edit_callback( Ok(()) } +fn cancel_handler() -> BotHandler { + Update::filter_message() + .filter(|msg: Message| msg.text() == Some("/cancel")) + .enter_dialogue::, State>() + .endpoint(async |bot: Bot, msg: Message, dialogue: BotDialogue| { + dialogue.exit().await?; + bot.send_message(msg.chat.id, "Диалог закончен!").await?; + Ok(()) + }) +} + fn command_handler() -> BotHandler { Update::filter_message() .filter_async(async |msg: Message, mut db: DB| { @@ -300,6 +313,10 @@ async fn support_reply_handler( _ => unreachable!(), }; + let text = format!( + "Сообщение от поддержки:\n{}\nЧтобы закончить диалог, нажмите на /cancel", + text + ); let msg = bot .send_message(ChatId(mf.source_chat_id), text) .parse_mode(ParseMode::Html);