Improve handling of too long messages and captions.

This commit is contained in:
levlam 2022-11-03 16:46:50 +03:00
parent 579d1dee8d
commit d8c36c8062
3 changed files with 13 additions and 5 deletions

View File

@ -1818,6 +1818,11 @@ static Result<InputMessageContent> create_input_message_content(
disable_web_page_preview = input_message_text.disable_web_page_preview; disable_web_page_preview = input_message_text.disable_web_page_preview;
clear_draft = input_message_text.clear_draft; clear_draft = input_message_text.clear_draft;
if (is_bot && static_cast<int64>(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; WebPageId web_page_id;
bool can_add_web_page_previews = bool can_add_web_page_previews =
dialog_id.get_type() != DialogType::Channel || dialog_id.get_type() != DialogType::Channel ||
@ -2210,8 +2215,12 @@ Result<InputMessageContent> get_input_message_content(
} }
} }
TRY_RESULT(caption, get_formatted_text(td, dialog_id, extract_input_caption(input_message_content), bool is_bot = td->auth_manager_->is_bot();
td->auth_manager_->is_bot(), true, false, false)); 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<int64>(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, 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); std::move(thumbnail), std::move(sticker_file_ids), is_premium);
} }

View File

@ -4242,8 +4242,6 @@ Status fix_formatted_text(string &text, vector<MessageEntity> &entities, bool al
// new whitespace-only entities could be added after splitting of entities // new whitespace-only entities could be added after splitting of entities
remove_invalid_entities(text, entities); remove_invalid_entities(text, entities);
// TODO MAX_MESSAGE_LENGTH and MAX_CAPTION_LENGTH
return Status::OK(); return Status::OK();
} }

View File

@ -32257,7 +32257,8 @@ void MessagesManager::on_send_message_fail(int64 random_id, Status error) {
case 400: case 400:
if (error.message() == "MESSAGE_TOO_LONG") { if (error.message() == "MESSAGE_TOO_LONG") {
error_message = "Message is 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") { } else if (error.message() == "INPUT_USER_DEACTIVATED") {
error_code = 403; error_code = 403;
error_message = "User is deactivated"; error_message = "User is deactivated";