diff --git a/src/handlers/callbacks/delete_message.rs b/src/handlers/callbacks/delete_message.rs index 8945586..20195dd 100644 --- a/src/handlers/callbacks/delete_message.rs +++ b/src/handlers/callbacks/delete_message.rs @@ -1,17 +1,26 @@ -use teloxide::{adaptors::Throttle, prelude::*}; +use crate::handlers::markups::deletion_markup; +use teloxide::{adaptors::Throttle, dispatching::DpHandlerDescription, prelude::*}; /// Deletes the message from the callback -pub async fn run(bot: Throttle, q: CallbackQuery) -> crate::Result<()> { - match q.message { - Some(msg) => { - bot.delete_message(msg.chat.id, msg.id).await?; - Ok(()) +async fn run(bot: Throttle, q: CallbackQuery) -> crate::Result<()> { + if let Some(msg) = q.message { + if let Err(err) = bot.delete_message(msg.chat.id, msg.id).await { + let _ = bot + .send_message(msg.chat.id, "Error deleting the message") + .reply_markup(deletion_markup()) + .await; + return Err(err.into()); } - None => Ok(()), } + Ok(()) } /// Filters the delete_message callbacks -pub fn filter(q: CallbackQuery) -> bool { +fn filter(q: CallbackQuery) -> bool { matches!(q.data.as_deref(), Some("delete_message")) } + +/// Gets a handler for deleting the message +pub fn get_handler() -> Handler<'static, DependencyMap, crate::Result<()>, DpHandlerDescription> { + dptree::filter(filter).endpoint(run) +} diff --git a/src/handlers/mod.rs b/src/handlers/mod.rs index 95aa62b..87977c3 100644 --- a/src/handlers/mod.rs +++ b/src/handlers/mod.rs @@ -115,9 +115,8 @@ pub fn get_dispatcher( .branch(command_handler) .branch(endpoint(commands::default)); - let callback_handler = Update::filter_callback_query() - .filter(callbacks::delete_message::filter) - .endpoint(callbacks::delete_message::run); + let callback_handler = + Update::filter_callback_query().chain(callbacks::delete_message::get_handler()); let handler = dptree::entry() .branch(message_handler)