Refactor random module

This commit is contained in:
2023-05-18 01:37:28 +02:00
parent 4b67ef882a
commit 3e5cdbf1f7

View File

@@ -107,17 +107,14 @@ async fn random_handler(message: Message, bot: CacheMe<Throttle<Bot>>) -> crate:
], ],
}; };
let res = bot bot
.send_message(message.chat.id, MESSAGE_TEXT) .send_message(message.chat.id, MESSAGE_TEXT)
.reply_to_message_id(message.id) .reply_to_message_id(message.id)
.reply_markup(keyboard) .reply_markup(keyboard)
.send() .send()
.await; .await?;
match res { Ok(())
Ok(_) => Ok(()),
Err(err) => Err(Box::new(err)),
}
} }
async fn get_random_item_handler_internal<T>( async fn get_random_item_handler_internal<T>(
@@ -128,11 +125,19 @@ async fn get_random_item_handler_internal<T>(
where where
T: Format, T: Format,
{ {
match item { let item = match item {
Ok(item) => { Ok(v) => v,
Err(err) => {
bot
.send_message(cq.from.id, "Ошибка! Попробуйте позже :(")
.send()
.await?;
return Err(err);
},
};
let item_message = item.format(); let item_message = item.format();
let send_item_handler = tokio::spawn(
bot.send_message(cq.from.id, item_message) bot.send_message(cq.from.id, item_message)
.reply_markup(InlineKeyboardMarkup { .reply_markup(InlineKeyboardMarkup {
inline_keyboard: vec![vec![InlineKeyboardButton { inline_keyboard: vec![vec![InlineKeyboardButton {
@@ -142,35 +147,20 @@ where
text: String::from("Повторить?"), text: String::from("Повторить?"),
}]], }]],
}) })
.send(), .send()
); .await?;
cq.message.map(|message| async move { match cq.message {
Some(message) => {
bot.edit_message_reply_markup(message.chat.id, message.id) bot.edit_message_reply_markup(message.chat.id, message.id)
.reply_markup(InlineKeyboardMarkup { .reply_markup(InlineKeyboardMarkup {
inline_keyboard: vec![], inline_keyboard: vec![],
}) })
.send() .send()
.await .await?;
}); Ok(())
},
match send_item_handler.await { None => Ok(()),
Ok(_) => Ok(()),
Err(err) => Err(Box::new(err)),
}
}
Err(err) => {
match bot
.send_message(cq.from.id, "Ошибка! Попробуйте позже :(")
.send()
.await
{
Ok(_) => (),
Err(int_error) => return Err(Box::new(int_error)),
}
Err(err)
}
} }
} }
@@ -191,13 +181,19 @@ where
} }
async fn get_genre_metas_handler(cq: CallbackQuery, bot: CacheMe<Throttle<Bot>>) -> BotHandlerInternal { async fn get_genre_metas_handler(cq: CallbackQuery, bot: CacheMe<Throttle<Bot>>) -> BotHandlerInternal {
let genre_metas = match book_library::get_genre_metas().await { let genre_metas = book_library::get_genre_metas().await?;
Ok(v) => v,
Err(err) => return Err(err), let message = match cq.message {
Some(v) => v,
None => {
bot
.send_message(cq.from.id, "Ошибка! Начните заново :(")
.send()
.await?;
return Ok(());
},
}; };
match cq.message {
Some(message) => {
let keyboard = InlineKeyboardMarkup { let keyboard = InlineKeyboardMarkup {
inline_keyboard: genre_metas inline_keyboard: genre_metas
.clone() .clone()
@@ -217,27 +213,13 @@ async fn get_genre_metas_handler(cq: CallbackQuery, bot: CacheMe<Throttle<Bot>>)
.collect(), .collect(),
}; };
match bot bot
.edit_message_reply_markup(message.chat.id, message.id) .edit_message_reply_markup(message.chat.id, message.id)
.reply_markup(keyboard) .reply_markup(keyboard)
.send() .send()
.await .await?;
{
Ok(_) => Ok(()), Ok(())
Err(err) => Err(Box::new(err)),
}
}
None => {
match bot
.send_message(cq.from.id, "Ошибка! Начните заново :(")
.send()
.await
{
Ok(_) => Ok(()),
Err(err) => Err(Box::new(err)),
}
}
}
} }
async fn get_genres_by_meta_handler( async fn get_genres_by_meta_handler(
@@ -245,32 +227,22 @@ async fn get_genres_by_meta_handler(
bot: CacheMe<Throttle<Bot>>, bot: CacheMe<Throttle<Bot>>,
genre_index: u32, genre_index: u32,
) -> BotHandlerInternal { ) -> BotHandlerInternal {
let genre_metas = match book_library::get_genre_metas().await { let genre_metas = book_library::get_genre_metas().await?;
Ok(v) => v,
Err(err) => return Err(err),
};
let meta = match genre_metas.get(genre_index as usize) { let meta = match genre_metas.get(genre_index as usize) {
Some(v) => v, Some(v) => v,
None => { None => {
return match bot bot
.send_message(cq.from.id, "Ошибка! Попробуйте позже :(") .send_message(cq.from.id, "Ошибка! Попробуйте позже :(")
.send() .send()
.await .await?;
{
Ok(_) => Ok(()), return Ok(());
Err(err) => Err(Box::new(err)),
}
} }
}; };
let genres = match book_library::get_genres(meta.to_string()).await { let mut buttons: Vec<Vec<InlineKeyboardButton>> = book_library::get_genres(meta.to_string()).await?
Ok(v) => v.items, .items
Err(err) => return Err(err),
};
let mut buttons: Vec<Vec<InlineKeyboardButton>> = genres
.clone()
.into_iter() .into_iter()
.map(|genre| { .map(|genre| {
vec![InlineKeyboardButton { vec![InlineKeyboardButton {
@@ -295,29 +267,25 @@ async fn get_genres_by_meta_handler(
inline_keyboard: buttons, inline_keyboard: buttons,
}; };
match cq.message { let message = match cq.message {
Some(message) => { Some(message) => message,
match bot None => {
bot
.send_message(cq.from.id, "Ошибка! Начните заново :(")
.send()
.await?;
return Ok(());
}
};
bot
.edit_message_reply_markup(message.chat.id, message.id) .edit_message_reply_markup(message.chat.id, message.id)
.reply_markup(keyboard) .reply_markup(keyboard)
.send() .send()
.await .await?;
{
Ok(_) => Ok(()), Ok(())
Err(err) => Err(Box::new(err)),
}
}
None => {
match bot
.send_message(cq.from.id, "Ошибка! Начните заново :(")
.send()
.await
{
Ok(_) => Ok(()),
Err(err) => Err(Box::new(err)),
}
}
}
} }
async fn get_random_book_by_genre( async fn get_random_book_by_genre(