mirror of
https://github.com/flibusta-apps/book_bot.git
synced 2025-12-06 07:25:36 +01:00
Add helper to skip redundant message edits
This commit is contained in:
@@ -18,7 +18,9 @@ use tokio_util::compat::FuturesAsyncReadCompatExt;
|
||||
|
||||
use crate::bots::{
|
||||
approved_bot::{
|
||||
modules::utils::pagination::generic_get_pagination_keyboard,
|
||||
modules::utils::{
|
||||
message_text::is_message_text_equals, pagination::generic_get_pagination_keyboard,
|
||||
},
|
||||
services::book_library::{get_author_annotation, get_book_annotation},
|
||||
tools::filter_callback_query,
|
||||
},
|
||||
@@ -145,17 +147,24 @@ where
|
||||
} else {
|
||||
chunked_text.len()
|
||||
};
|
||||
let current_text = chunked_text.get(page_index - 1).unwrap();
|
||||
let new_text = chunked_text.get(page_index - 1).unwrap();
|
||||
|
||||
let keyboard =
|
||||
generic_get_pagination_keyboard(page, chunked_text.len().try_into()?, callback_data, false);
|
||||
|
||||
bot.edit_message_text(message.chat().id, message.id(), current_text)
|
||||
if is_message_text_equals(Some(message.clone()), new_text) {
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
match bot
|
||||
.edit_message_text(message.chat().id, message.id(), new_text)
|
||||
.reply_markup(keyboard)
|
||||
.send()
|
||||
.await?;
|
||||
|
||||
Ok(())
|
||||
.await
|
||||
{
|
||||
Ok(_) => Ok(()),
|
||||
Err(err) => Err(err.into()),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_annotations_handler() -> crate::bots::BotHandler {
|
||||
|
||||
@@ -15,6 +15,7 @@ use teloxide::{
|
||||
use tracing::log;
|
||||
|
||||
use crate::bots::approved_bot::{
|
||||
modules::utils::message_text::is_message_text_equals,
|
||||
services::{
|
||||
book_library::{
|
||||
formatters::{Format, FormatTitle},
|
||||
@@ -176,12 +177,19 @@ where
|
||||
|
||||
let keyboard = generic_get_pagination_keyboard(page, items_page.pages, callback_data, true);
|
||||
|
||||
bot.edit_message_text(chat_id, message_id, formatted_page)
|
||||
if is_message_text_equals(cq.message, &formatted_page) {
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
match bot
|
||||
.edit_message_text(chat_id, message_id, formatted_page)
|
||||
.reply_markup(keyboard)
|
||||
.send()
|
||||
.await?;
|
||||
|
||||
Ok(())
|
||||
.await
|
||||
{
|
||||
Ok(_) => Ok(()),
|
||||
Err(err) => Err(err.into()),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_book_handler() -> crate::bots::BotHandler {
|
||||
|
||||
@@ -14,6 +14,7 @@ use teloxide::{
|
||||
|
||||
use crate::bots::{
|
||||
approved_bot::{
|
||||
modules::utils::message_text::is_message_text_equals,
|
||||
services::{
|
||||
book_library::{
|
||||
formatters::{Format, FormatTitle},
|
||||
@@ -45,7 +46,7 @@ where
|
||||
let chat_id = cq.chat_id();
|
||||
let user_id = cq.from.id;
|
||||
let message_id = cq.message.as_ref().map(|message| message.id());
|
||||
let query = get_query(cq);
|
||||
let query = get_query(cq.clone());
|
||||
|
||||
let (chat_id, query, message_id) = match (chat_id, query, message_id) {
|
||||
(Some(chat_id), Some(query), Some(message_id)) => (chat_id, query, message_id),
|
||||
@@ -106,15 +107,20 @@ where
|
||||
}
|
||||
|
||||
let formatted_page = items_page.format(page, 4096);
|
||||
if is_message_text_equals(cq.message, &formatted_page) {
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
let keyboard = generic_get_pagination_keyboard(page, items_page.pages, search_data, true);
|
||||
|
||||
bot.edit_message_text(chat_id, message_id, formatted_page)
|
||||
match bot
|
||||
.edit_message_text(chat_id, message_id, formatted_page)
|
||||
.reply_markup(keyboard)
|
||||
.send()
|
||||
.await?;
|
||||
|
||||
Ok(())
|
||||
.await
|
||||
{
|
||||
Ok(_) => Ok(()),
|
||||
Err(err) => Err(err.into()),
|
||||
}
|
||||
}
|
||||
|
||||
pub async fn message_handler(message: Message, bot: CacheMe<Throttle<Bot>>) -> BotHandlerInternal {
|
||||
|
||||
@@ -4,7 +4,10 @@ pub mod commands;
|
||||
use chrono::{prelude::*, Duration};
|
||||
|
||||
use crate::bots::{
|
||||
approved_bot::{services::book_library::get_uploaded_books, tools::filter_callback_query},
|
||||
approved_bot::{
|
||||
modules::utils::message_text::is_message_text_equals,
|
||||
services::book_library::get_uploaded_books, tools::filter_callback_query,
|
||||
},
|
||||
BotHandlerInternal,
|
||||
};
|
||||
|
||||
@@ -78,7 +81,7 @@ async fn update_log_pagination_handler(
|
||||
bot: CacheMe<Throttle<Bot>>,
|
||||
update_callback_data: UpdateLogCallbackData,
|
||||
) -> BotHandlerInternal {
|
||||
let message = match cq.message {
|
||||
let message = match cq.message.clone() {
|
||||
Some(v) => v,
|
||||
None => {
|
||||
bot.send_message(cq.from.id, "Ошибка! Попробуйте заново(")
|
||||
@@ -138,14 +141,20 @@ async fn update_log_pagination_handler(
|
||||
let formatted_page = items_page.format(page, 4096);
|
||||
|
||||
let message_text = format!("{header}{formatted_page}");
|
||||
if is_message_text_equals(cq.message, &message_text) {
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
let keyboard = generic_get_pagination_keyboard(page, total_pages, update_callback_data, true);
|
||||
bot.edit_message_text(message.chat().id, message.id(), message_text)
|
||||
match bot
|
||||
.edit_message_text(message.chat().id, message.id(), message_text)
|
||||
.reply_markup(keyboard)
|
||||
.send()
|
||||
.await?;
|
||||
|
||||
Ok(())
|
||||
.await
|
||||
{
|
||||
Ok(_) => Ok(()),
|
||||
Err(err) => Err(err.into()),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_update_log_handler() -> crate::bots::BotHandler {
|
||||
|
||||
18
src/bots/approved_bot/modules/utils/message_text.rs
Normal file
18
src/bots/approved_bot/modules/utils/message_text.rs
Normal file
@@ -0,0 +1,18 @@
|
||||
use teloxide::types::*;
|
||||
|
||||
pub fn is_message_text_equals(message: Option<MaybeInaccessibleMessage>, text: &str) -> bool {
|
||||
let message = match message {
|
||||
Some(v) => v,
|
||||
None => return false,
|
||||
};
|
||||
|
||||
let message = match message {
|
||||
MaybeInaccessibleMessage::Inaccessible(_) => return false,
|
||||
MaybeInaccessibleMessage::Regular(v) => v,
|
||||
};
|
||||
|
||||
match message.text() {
|
||||
Some(msg_text) => text == msg_text,
|
||||
None => false,
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
pub mod errors;
|
||||
pub mod filter_command;
|
||||
pub mod message_text;
|
||||
pub mod pagination;
|
||||
pub mod split_text;
|
||||
|
||||
Reference in New Issue
Block a user