use MessageAnswererError in message_answerer.rs
This commit is contained in:
parent
3c0ae02139
commit
c3386a1e2f
@ -8,7 +8,7 @@ use teloxide::{
|
|||||||
Bot,
|
Bot,
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::db::Media;
|
use crate::db::{DbError, DbResult, Media};
|
||||||
use crate::{
|
use crate::{
|
||||||
db::{CallDB, DB},
|
db::{CallDB, DB},
|
||||||
notify_admin, BotResult,
|
notify_admin, BotResult,
|
||||||
@ -40,6 +40,16 @@ pub struct MessageAnswerer<'a> {
|
|||||||
db: &'a mut DB,
|
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<T> = Result<T, MessageAnswererError>;
|
||||||
|
|
||||||
impl<'a> MessageAnswerer<'a> {
|
impl<'a> MessageAnswerer<'a> {
|
||||||
pub fn new(bot: &'a Bot, db: &'a mut DB, chat_id: i64) -> Self {
|
pub fn new(bot: &'a Bot, db: &'a mut DB, chat_id: i64) -> Self {
|
||||||
Self { bot, chat_id, db }
|
Self { bot, chat_id, db }
|
||||||
@ -50,7 +60,7 @@ impl<'a> MessageAnswerer<'a> {
|
|||||||
literal: &str,
|
literal: &str,
|
||||||
variant: Option<&str>,
|
variant: Option<&str>,
|
||||||
is_replace: bool,
|
is_replace: bool,
|
||||||
) -> BotResult<String> {
|
) -> DbResult<String> {
|
||||||
let variant_text = match variant {
|
let variant_text = match variant {
|
||||||
Some(variant) => {
|
Some(variant) => {
|
||||||
let value = self
|
let value = self
|
||||||
@ -81,7 +91,7 @@ impl<'a> MessageAnswerer<'a> {
|
|||||||
literal: &str,
|
literal: &str,
|
||||||
variant: Option<&str>,
|
variant: Option<&str>,
|
||||||
keyboard: Option<InlineKeyboardMarkup>,
|
keyboard: Option<InlineKeyboardMarkup>,
|
||||||
) -> BotResult<(i64, i32)> {
|
) -> MAResult<(i64, i32)> {
|
||||||
let text = self.get_text(literal, variant, false).await?;
|
let text = self.get_text(literal, variant, false).await?;
|
||||||
self.answer_inner(text, literal, variant, keyboard).await
|
self.answer_inner(text, literal, variant, keyboard).await
|
||||||
}
|
}
|
||||||
@ -90,8 +100,10 @@ impl<'a> MessageAnswerer<'a> {
|
|||||||
self,
|
self,
|
||||||
text: String,
|
text: String,
|
||||||
keyboard: Option<InlineKeyboardMarkup>,
|
keyboard: Option<InlineKeyboardMarkup>,
|
||||||
) -> BotResult<(i64, i32)> {
|
) -> MAResult<(i64, i32)> {
|
||||||
self.send_message(text, keyboard).await
|
self.send_message(text, keyboard)
|
||||||
|
.await
|
||||||
|
.map_err(MessageAnswererError::from)
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn answer_inner(
|
async fn answer_inner(
|
||||||
@ -100,7 +112,7 @@ impl<'a> MessageAnswerer<'a> {
|
|||||||
literal: &str,
|
literal: &str,
|
||||||
variant: Option<&str>,
|
variant: Option<&str>,
|
||||||
keyboard: Option<InlineKeyboardMarkup>,
|
keyboard: Option<InlineKeyboardMarkup>,
|
||||||
) -> BotResult<(i64, i32)> {
|
) -> MAResult<(i64, i32)> {
|
||||||
let media = self.db.get_media(literal).await?;
|
let media = self.db.get_media(literal).await?;
|
||||||
let (chat_id, msg_id) = match media.len() {
|
let (chat_id, msg_id) = match media.len() {
|
||||||
// just a text
|
// just a text
|
||||||
@ -119,7 +131,7 @@ impl<'a> MessageAnswerer<'a> {
|
|||||||
message_id: i32,
|
message_id: i32,
|
||||||
literal: &str,
|
literal: &str,
|
||||||
keyboard: Option<InlineKeyboardMarkup>,
|
keyboard: Option<InlineKeyboardMarkup>,
|
||||||
) -> BotResult<()> {
|
) -> MAResult<()> {
|
||||||
let variant = self
|
let variant = self
|
||||||
.db
|
.db
|
||||||
.get_message(self.chat_id, message_id)
|
.get_message(self.chat_id, message_id)
|
||||||
@ -203,7 +215,7 @@ impl<'a> MessageAnswerer<'a> {
|
|||||||
message_id: i32,
|
message_id: i32,
|
||||||
literal: &str,
|
literal: &str,
|
||||||
variant: Option<&str>,
|
variant: Option<&str>,
|
||||||
) -> BotResult<()> {
|
) -> DbResult<()> {
|
||||||
match variant {
|
match variant {
|
||||||
Some(variant) => {
|
Some(variant) => {
|
||||||
self.db
|
self.db
|
||||||
@ -224,7 +236,7 @@ impl<'a> MessageAnswerer<'a> {
|
|||||||
&self,
|
&self,
|
||||||
text: String,
|
text: String,
|
||||||
keyboard: Option<InlineKeyboardMarkup>,
|
keyboard: Option<InlineKeyboardMarkup>,
|
||||||
) -> BotResult<(i64, i32)> {
|
) -> Result<(i64, i32), teloxide::RequestError> {
|
||||||
let msg = self.bot.send_message(ChatId(self.chat_id), text);
|
let msg = self.bot.send_message(ChatId(self.chat_id), text);
|
||||||
let msg = match keyboard {
|
let msg = match keyboard {
|
||||||
Some(kbd) => msg.reply_markup(kbd),
|
Some(kbd) => msg.reply_markup(kbd),
|
||||||
@ -242,7 +254,7 @@ impl<'a> MessageAnswerer<'a> {
|
|||||||
media: &Media,
|
media: &Media,
|
||||||
text: String,
|
text: String,
|
||||||
keyboard: Option<InlineKeyboardMarkup>,
|
keyboard: Option<InlineKeyboardMarkup>,
|
||||||
) -> BotResult<(i64, i32)> {
|
) -> Result<(i64, i32), teloxide::RequestError> {
|
||||||
match media.media_type.as_str() {
|
match media.media_type.as_str() {
|
||||||
"photo" => {
|
"photo" => {
|
||||||
send_media!(
|
send_media!(
|
||||||
@ -270,7 +282,11 @@ impl<'a> MessageAnswerer<'a> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn send_media_group(&self, media: Vec<Media>, text: String) -> BotResult<(i64, i32)> {
|
async fn send_media_group(
|
||||||
|
&self,
|
||||||
|
media: Vec<Media>,
|
||||||
|
text: String,
|
||||||
|
) -> Result<(i64, i32), teloxide::RequestError> {
|
||||||
let media: Vec<InputMedia> = media
|
let media: Vec<InputMedia> = media
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.enumerate()
|
.enumerate()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user