mirror of
https://github.com/flibusta-apps/book_bot.git
synced 2025-12-06 15:35:35 +01:00
Refactor random module
This commit is contained in:
@@ -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(
|
||||||
|
|||||||
Reference in New Issue
Block a user