From 83d26f3335a80b843ee97f40201ff19fb0670ce6 Mon Sep 17 00:00:00 2001 From: levlam Date: Tue, 22 Feb 2022 22:42:46 +0300 Subject: [PATCH] Add parameter only_preview to sendMessageAlbum. --- td/generate/scheme/td_api.tl | 3 ++- td/telegram/MessagesManager.cpp | 35 +++++++++++++++++++++++--------- td/telegram/MessagesManager.h | 3 ++- td/telegram/Td.cpp | 2 +- td/telegram/cli.cpp | 36 ++++++++++++++++----------------- 5 files changed, 48 insertions(+), 31 deletions(-) diff --git a/td/generate/scheme/td_api.tl b/td/generate/scheme/td_api.tl index ed5df50be..3ff9b1575 100644 --- a/td/generate/scheme/td_api.tl +++ b/td/generate/scheme/td_api.tl @@ -4555,7 +4555,8 @@ sendMessage chat_id:int53 message_thread_id:int53 reply_to_message_id:int53 opti //@reply_to_message_id Identifier of a message to reply to or 0 //@options Options to be used to send the messages; pass null to use default options //@input_message_contents Contents of messages to be sent. At most 10 messages can be added to an album -sendMessageAlbum chat_id:int53 message_thread_id:int53 reply_to_message_id:int53 options:messageSendOptions input_message_contents:vector = Messages; +//@only_preview If true, messages will not be sent and instead fake messages will be returned +sendMessageAlbum chat_id:int53 message_thread_id:int53 reply_to_message_id:int53 options:messageSendOptions input_message_contents:vector only_preview:Bool = Messages; //@description Invites a bot to a chat (if it is not yet a member) and sends it the /start command. Bots can't be invited to a private chat other than the chat with the bot. Bots can't be invited to channels (although they can be added as admins) and secret chats. Returns the sent message //@bot_user_id Identifier of the bot @chat_id Identifier of the target chat @parameter A hidden parameter sent to the bot for deep linking purposes (https://core.telegram.org/bots#deep-linking) diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index c8a17310f..7754f3529 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -25777,7 +25777,7 @@ int64 MessagesManager::generate_new_media_album_id() { Result> MessagesManager::send_message_group( DialogId dialog_id, MessageId top_thread_message_id, MessageId reply_to_message_id, tl_object_ptr &&options, - vector> &&input_message_contents) { + vector> &&input_message_contents, bool only_preview) { if (input_message_contents.size() > MAX_GROUPED_MESSAGES) { return Status::Error(400, "Too many messages to send as an album"); } @@ -25828,11 +25828,23 @@ Result> MessagesManager::send_message_group bool need_update_dialog_pos = false; for (size_t i = 0; i < message_contents.size(); i++) { auto &message_content = message_contents[i]; - Message *m = get_message_to_send(d, top_thread_message_id, reply_to_message_id, message_send_options, - dup_message_content(td_, dialog_id, message_content.first.get(), - MessageContentDupType::Send, MessageCopyOptions()), - &need_update_dialog_pos, i != 0); - result.push_back(get_message_object(dialog_id, m, "send_message_group")); + unique_ptr message; + Message *m; + if (only_preview) { + message = create_message_to_send(d, top_thread_message_id, reply_to_message_id, message_send_options, + std::move(message_content.first), i != 0, nullptr, false, DialogId()); + MessageId new_message_id = message_send_options.schedule_date != 0 + ? get_next_yet_unsent_scheduled_message_id(d, message_send_options.schedule_date) + : get_next_yet_unsent_message_id(d); + set_message_id(message, new_message_id); + m = message.get(); + } else { + m = get_message_to_send(d, top_thread_message_id, reply_to_message_id, message_send_options, + dup_message_content(td_, dialog_id, message_content.first.get(), + MessageContentDupType::Send, MessageCopyOptions()), + &need_update_dialog_pos, i != 0); + } + auto ttl = message_content.second; if (ttl > 0) { m->ttl = ttl; @@ -25840,13 +25852,18 @@ Result> MessagesManager::send_message_group } m->media_album_id = media_album_id; - save_send_message_log_event(dialog_id, m); - do_send_message(dialog_id, m); + result.push_back(get_message_object(dialog_id, m, "send_message_group")); - send_update_new_message(d, m); + if (!only_preview) { + save_send_message_log_event(dialog_id, m); + do_send_message(dialog_id, m); + + send_update_new_message(d, m); + } } if (need_update_dialog_pos) { + CHECK(!only_preview); send_update_chat_last_message(d, "send_message_group"); } diff --git a/td/telegram/MessagesManager.h b/td/telegram/MessagesManager.h index 7d05e7123..441f36bd8 100644 --- a/td/telegram/MessagesManager.h +++ b/td/telegram/MessagesManager.h @@ -428,7 +428,8 @@ class MessagesManager final : public Actor { Result> send_message_group( DialogId dialog_id, MessageId top_thread_message_id, MessageId reply_to_message_id, tl_object_ptr &&options, - vector> &&input_message_contents) TD_WARN_UNUSED_RESULT; + vector> &&input_message_contents, + bool only_preview) TD_WARN_UNUSED_RESULT; Result send_bot_start_message(UserId bot_user_id, DialogId dialog_id, const string ¶meter) TD_WARN_UNUSED_RESULT; diff --git a/td/telegram/Td.cpp b/td/telegram/Td.cpp index 139995113..f911def51 100644 --- a/td/telegram/Td.cpp +++ b/td/telegram/Td.cpp @@ -5396,7 +5396,7 @@ void Td::on_request(uint64 id, td_api::sendMessage &request) { void Td::on_request(uint64 id, td_api::sendMessageAlbum &request) { auto r_messages = messages_manager_->send_message_group( DialogId(request.chat_id_), MessageId(request.message_thread_id_), MessageId(request.reply_to_message_id_), - std::move(request.options_), std::move(request.input_message_contents_)); + std::move(request.options_), std::move(request.input_message_contents_), request.only_preview_); if (r_messages.is_error()) { send_closure(actor_id(this), &Td::send_error, id, r_messages.move_as_error()); } else { diff --git a/td/telegram/cli.cpp b/td/telegram/cli.cpp index bce002ae9..c43304b46 100644 --- a/td/telegram/cli.cpp +++ b/td/telegram/cli.cpp @@ -3465,34 +3465,32 @@ class CliClient final : public Actor { send_request(td_api::make_object( chat_id, as_message_sender(sender_id), reply_to_message_id, false, td_api::make_object(as_formatted_text(message), false, true))); - } else if (op == "smap" || op == "smapr") { + } else if (op == "smap" || op == "smapr" || op == "smapp" || op == "smaprp") { ChatId chat_id; MessageId reply_to_message_id; - vector photos; get_args(args, chat_id, args); - if (op == "smapr") { + if (op == "smapr" || op == "smaprp") { get_args(args, reply_to_message_id, args); } - photos = full_split(args); + auto input_message_contents = transform(full_split(args), [](const string &photo) { + td_api::object_ptr content = td_api::make_object( + as_input_file(photo), nullptr, Auto(), 0, 0, as_caption(""), 0); + return content; + }); send_request(td_api::make_object( chat_id, as_message_thread_id(message_thread_id_), reply_to_message_id, default_message_send_options(), - transform(photos, [](const string &photo) { - td_api::object_ptr content = td_api::make_object( - as_input_file(photo), nullptr, Auto(), 0, 0, as_caption(""), 0); - return content; - }))); - } else if (op == "smad") { + std::move(input_message_contents), op == "smapp" || op == "smaprp")); + } else if (op == "smad" || op == "smadp") { ChatId chat_id; - vector documents; get_args(args, chat_id, args); - documents = full_split(args); - send_request(td_api::make_object( - chat_id, as_message_thread_id(message_thread_id_), 0, default_message_send_options(), - transform(documents, [](const string &document) { - td_api::object_ptr content = td_api::make_object( - as_input_file(document), nullptr, true, as_caption("")); - return content; - }))); + auto input_message_contents = transform(full_split(args), [](const string &document) { + td_api::object_ptr content = + td_api::make_object(as_input_file(document), nullptr, true, as_caption("")); + return content; + }); + send_request(td_api::make_object(chat_id, as_message_thread_id(message_thread_id_), 0, + default_message_send_options(), + std::move(input_message_contents), op.back() == 'p')); } else if (op == "gmft") { auto r_message_file_head = read_file_str(args, 2 << 10); if (r_message_file_head.is_error()) {