From c3386a1e2f936365074c375974d9b00b2ee90072 Mon Sep 17 00:00:00 2001 From: Akulij Date: Sat, 7 Jun 2025 02:56:17 +0500 Subject: [PATCH] use MessageAnswererError in message_answerer.rs --- src/message_answerer.rs | 38 +++++++++++++++++++++++++++----------- 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/src/message_answerer.rs b/src/message_answerer.rs index 96d1e60..887d7f8 100644 --- a/src/message_answerer.rs +++ b/src/message_answerer.rs @@ -8,7 +8,7 @@ use teloxide::{ Bot, }; -use crate::db::Media; +use crate::db::{DbError, DbResult, Media}; use crate::{ db::{CallDB, DB}, notify_admin, BotResult, @@ -40,6 +40,16 @@ pub struct MessageAnswerer<'a> { db: &'a mut DB, } +#[derive(thiserror::Error, Debug)] +pub enum MessageAnswererError { + #[error("Failed request to DB: {0:?}")] + DbError(#[from] DbError), + #[error("Failed teloxide request: {0:?}")] + RequestError(#[from] teloxide::RequestError), +} + +pub type MAResult = Result; + impl<'a> MessageAnswerer<'a> { pub fn new(bot: &'a Bot, db: &'a mut DB, chat_id: i64) -> Self { Self { bot, chat_id, db } @@ -50,7 +60,7 @@ impl<'a> MessageAnswerer<'a> { literal: &str, variant: Option<&str>, is_replace: bool, - ) -> BotResult { + ) -> DbResult { let variant_text = match variant { Some(variant) => { let value = self @@ -81,7 +91,7 @@ impl<'a> MessageAnswerer<'a> { literal: &str, variant: Option<&str>, keyboard: Option, - ) -> BotResult<(i64, i32)> { + ) -> MAResult<(i64, i32)> { let text = self.get_text(literal, variant, false).await?; self.answer_inner(text, literal, variant, keyboard).await } @@ -90,8 +100,10 @@ impl<'a> MessageAnswerer<'a> { self, text: String, keyboard: Option, - ) -> BotResult<(i64, i32)> { - self.send_message(text, keyboard).await + ) -> MAResult<(i64, i32)> { + self.send_message(text, keyboard) + .await + .map_err(MessageAnswererError::from) } async fn answer_inner( @@ -100,7 +112,7 @@ impl<'a> MessageAnswerer<'a> { literal: &str, variant: Option<&str>, keyboard: Option, - ) -> BotResult<(i64, i32)> { + ) -> MAResult<(i64, i32)> { let media = self.db.get_media(literal).await?; let (chat_id, msg_id) = match media.len() { // just a text @@ -119,7 +131,7 @@ impl<'a> MessageAnswerer<'a> { message_id: i32, literal: &str, keyboard: Option, - ) -> BotResult<()> { + ) -> MAResult<()> { let variant = self .db .get_message(self.chat_id, message_id) @@ -203,7 +215,7 @@ impl<'a> MessageAnswerer<'a> { message_id: i32, literal: &str, variant: Option<&str>, - ) -> BotResult<()> { + ) -> DbResult<()> { match variant { Some(variant) => { self.db @@ -224,7 +236,7 @@ impl<'a> MessageAnswerer<'a> { &self, text: String, keyboard: Option, - ) -> BotResult<(i64, i32)> { + ) -> Result<(i64, i32), teloxide::RequestError> { let msg = self.bot.send_message(ChatId(self.chat_id), text); let msg = match keyboard { Some(kbd) => msg.reply_markup(kbd), @@ -242,7 +254,7 @@ impl<'a> MessageAnswerer<'a> { media: &Media, text: String, keyboard: Option, - ) -> BotResult<(i64, i32)> { + ) -> Result<(i64, i32), teloxide::RequestError> { match media.media_type.as_str() { "photo" => { send_media!( @@ -270,7 +282,11 @@ impl<'a> MessageAnswerer<'a> { } } - async fn send_media_group(&self, media: Vec, text: String) -> BotResult<(i64, i32)> { + async fn send_media_group( + &self, + media: Vec, + text: String, + ) -> Result<(i64, i32), teloxide::RequestError> { let media: Vec = media .into_iter() .enumerate()