From d8c36c8062f4ac80583d5a035507b228a61f6fc8 Mon Sep 17 00:00:00 2001 From: levlam Date: Thu, 3 Nov 2022 16:46:50 +0300 Subject: [PATCH] Improve handling of too long messages and captions. --- td/telegram/MessageContent.cpp | 13 +++++++++++-- td/telegram/MessageEntity.cpp | 2 -- td/telegram/MessagesManager.cpp | 3 ++- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/td/telegram/MessageContent.cpp b/td/telegram/MessageContent.cpp index 7ad7efa73..a9e6adbcb 100644 --- a/td/telegram/MessageContent.cpp +++ b/td/telegram/MessageContent.cpp @@ -1818,6 +1818,11 @@ static Result create_input_message_content( disable_web_page_preview = input_message_text.disable_web_page_preview; clear_draft = input_message_text.clear_draft; + if (is_bot && static_cast(utf8_length(input_message_text.text.text)) > + G()->get_option_integer("message_text_length_max")) { + return Status::Error(400, "Message is too long"); + } + WebPageId web_page_id; bool can_add_web_page_previews = dialog_id.get_type() != DialogType::Channel || @@ -2210,8 +2215,12 @@ Result get_input_message_content( } } - TRY_RESULT(caption, get_formatted_text(td, dialog_id, extract_input_caption(input_message_content), - td->auth_manager_->is_bot(), true, false, false)); + bool is_bot = td->auth_manager_->is_bot(); + TRY_RESULT(caption, get_formatted_text(td, dialog_id, extract_input_caption(input_message_content), is_bot, true, + false, false)); + if (is_bot && static_cast(utf8_length(caption.text)) > G()->get_option_integer("message_caption_length_max")) { + return Status::Error(400, "Message caption is too long"); + } return create_input_message_content(dialog_id, std::move(input_message_content), td, std::move(caption), file_id, std::move(thumbnail), std::move(sticker_file_ids), is_premium); } diff --git a/td/telegram/MessageEntity.cpp b/td/telegram/MessageEntity.cpp index dc07b7179..807a24c9e 100644 --- a/td/telegram/MessageEntity.cpp +++ b/td/telegram/MessageEntity.cpp @@ -4242,8 +4242,6 @@ Status fix_formatted_text(string &text, vector &entities, bool al // new whitespace-only entities could be added after splitting of entities remove_invalid_entities(text, entities); - // TODO MAX_MESSAGE_LENGTH and MAX_CAPTION_LENGTH - return Status::OK(); } diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index c184def5e..482609484 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -32257,7 +32257,8 @@ void MessagesManager::on_send_message_fail(int64 random_id, Status error) { case 400: if (error.message() == "MESSAGE_TOO_LONG") { error_message = "Message is too long"; - // TODO move check to send_message + } else if (error.message() == "MEDIA_CAPTION_TOO_LONG") { + error_message = "Message caption is too long"; } else if (error.message() == "INPUT_USER_DEACTIVATED") { error_code = 403; error_message = "User is deactivated";