Disallow MessageInputReplyTo copying.
This commit is contained in:
parent
6517d6b9db
commit
d43fd3beb3
@ -198,7 +198,7 @@ class RequestWebViewQuery final : public Td::ResultHandler {
|
||||
|
||||
auto ptr = result_ptr.move_as_ok();
|
||||
td_->attach_menu_manager_->open_web_view(ptr->query_id_, dialog_id_, bot_user_id_, top_thread_message_id_,
|
||||
input_reply_to_, as_dialog_id_);
|
||||
std::move(input_reply_to_), as_dialog_id_);
|
||||
promise_.set_value(td_api::make_object<td_api::webAppInfo>(ptr->query_id_, ptr->url_));
|
||||
}
|
||||
|
||||
@ -217,7 +217,7 @@ class ProlongWebViewQuery final : public Td::ResultHandler {
|
||||
|
||||
public:
|
||||
void send(DialogId dialog_id, UserId bot_user_id, int64 query_id, MessageId top_thread_message_id,
|
||||
MessageInputReplyTo input_reply_to, bool silent, DialogId as_dialog_id) {
|
||||
const MessageInputReplyTo &input_reply_to, bool silent, DialogId as_dialog_id) {
|
||||
dialog_id_ = dialog_id;
|
||||
|
||||
auto input_peer = td_->messages_manager_->get_input_peer(dialog_id, AccessRights::Write);
|
||||
@ -876,11 +876,11 @@ void AttachMenuManager::request_web_view(DialogId dialog_id, UserId bot_user_id,
|
||||
|
||||
td_->create_handler<RequestWebViewQuery>(std::move(promise))
|
||||
->send(dialog_id, bot_user_id, std::move(input_user), std::move(url), std::move(theme), std::move(platform),
|
||||
top_thread_message_id, input_reply_to, silent, as_dialog_id);
|
||||
top_thread_message_id, std::move(input_reply_to), silent, as_dialog_id);
|
||||
}
|
||||
|
||||
void AttachMenuManager::open_web_view(int64 query_id, DialogId dialog_id, UserId bot_user_id,
|
||||
MessageId top_thread_message_id, MessageInputReplyTo input_reply_to,
|
||||
MessageId top_thread_message_id, MessageInputReplyTo &&input_reply_to,
|
||||
DialogId as_dialog_id) {
|
||||
if (query_id == 0) {
|
||||
LOG(ERROR) << "Receive Web App query identifier == 0";
|
||||
|
@ -48,7 +48,7 @@ class AttachMenuManager final : public Actor {
|
||||
Promise<td_api::object_ptr<td_api::webAppInfo>> &&promise);
|
||||
|
||||
void open_web_view(int64 query_id, DialogId dialog_id, UserId bot_user_id, MessageId top_thread_message_id,
|
||||
MessageInputReplyTo input_reply_to, DialogId as_dialog_id);
|
||||
MessageInputReplyTo &&input_reply_to, DialogId as_dialog_id);
|
||||
|
||||
void close_web_view(int64 query_id, Promise<Unit> &&promise);
|
||||
|
||||
|
@ -16,27 +16,8 @@
|
||||
#include "td/utils/logging.h"
|
||||
|
||||
namespace td {
|
||||
/*
|
||||
MessageInputReplyTo::MessageInputReplyTo(const td_api::object_ptr<td_api::InputMessageReplyTo> &reply_to_ptr) {
|
||||
if (reply_to_ptr == nullptr) {
|
||||
return;
|
||||
}
|
||||
switch (reply_to_ptr->get_id()) {
|
||||
case td_api::inputMessageReplyToMessage::ID: {
|
||||
auto reply_to = static_cast<const td_api::inputMessageReplyToMessage *>(reply_to_ptr.get());
|
||||
message_id_ = MessageId(reply_to->message_id_);
|
||||
break;
|
||||
}
|
||||
case td_api::inputMessageReplyToStory::ID: {
|
||||
auto reply_to = static_cast<const td_api::inputMessageReplyToStory *>(reply_to_ptr.get());
|
||||
story_full_id_ = {DialogId(reply_to->story_sender_chat_id_), StoryId(reply_to->story_id_)};
|
||||
break;
|
||||
}
|
||||
default:
|
||||
UNREACHABLE();
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
MessageInputReplyTo::~MessageInputReplyTo() = default;
|
||||
|
||||
MessageInputReplyTo::MessageInputReplyTo(Td *td,
|
||||
telegram_api::object_ptr<telegram_api::InputReplyTo> &&input_reply_to) {
|
||||
|
@ -33,6 +33,11 @@ class MessageInputReplyTo {
|
||||
|
||||
public:
|
||||
MessageInputReplyTo() = default;
|
||||
MessageInputReplyTo(const MessageInputReplyTo &) = delete;
|
||||
MessageInputReplyTo &operator=(const MessageInputReplyTo &) = delete;
|
||||
MessageInputReplyTo(MessageInputReplyTo &&) = default;
|
||||
MessageInputReplyTo &operator=(MessageInputReplyTo &&) = default;
|
||||
~MessageInputReplyTo();
|
||||
|
||||
explicit MessageInputReplyTo(MessageId message_id) : message_id_(message_id) {
|
||||
}
|
||||
|
@ -24259,7 +24259,7 @@ int64 MessagesManager::generate_new_random_id(const Dialog *d) {
|
||||
}
|
||||
|
||||
unique_ptr<MessagesManager::Message> MessagesManager::create_message_to_send(
|
||||
Dialog *d, MessageId top_thread_message_id, MessageInputReplyTo input_reply_to, const MessageSendOptions &options,
|
||||
Dialog *d, MessageId top_thread_message_id, MessageInputReplyTo &&input_reply_to, const MessageSendOptions &options,
|
||||
unique_ptr<MessageContent> &&content, bool invert_media, bool suppress_reply_info,
|
||||
unique_ptr<MessageForwardInfo> forward_info, bool is_copy, DialogId send_as_dialog_id) const {
|
||||
CHECK(d != nullptr);
|
||||
@ -24401,14 +24401,14 @@ unique_ptr<MessagesManager::Message> MessagesManager::create_message_to_send(
|
||||
}
|
||||
|
||||
MessagesManager::Message *MessagesManager::get_message_to_send(
|
||||
Dialog *d, MessageId top_thread_message_id, MessageInputReplyTo input_reply_to, const MessageSendOptions &options,
|
||||
Dialog *d, MessageId top_thread_message_id, MessageInputReplyTo &&input_reply_to, const MessageSendOptions &options,
|
||||
unique_ptr<MessageContent> &&content, bool invert_media, bool *need_update_dialog_pos, bool suppress_reply_info,
|
||||
unique_ptr<MessageForwardInfo> forward_info, bool is_copy, DialogId send_as_dialog_id) {
|
||||
d->was_opened = true;
|
||||
|
||||
auto message =
|
||||
create_message_to_send(d, top_thread_message_id, input_reply_to, options, std::move(content), invert_media,
|
||||
suppress_reply_info, std::move(forward_info), is_copy, send_as_dialog_id);
|
||||
create_message_to_send(d, top_thread_message_id, std::move(input_reply_to), options, std::move(content),
|
||||
invert_media, suppress_reply_info, std::move(forward_info), is_copy, send_as_dialog_id);
|
||||
|
||||
MessageId message_id = options.schedule_date != 0 ? get_next_yet_unsent_scheduled_message_id(d, options.schedule_date)
|
||||
: get_next_yet_unsent_message_id(d);
|
||||
@ -24927,8 +24927,8 @@ Result<td_api::object_ptr<td_api::message>> MessagesManager::send_message(
|
||||
unique_ptr<Message> message;
|
||||
Message *m;
|
||||
if (message_send_options.only_preview) {
|
||||
message = create_message_to_send(d, top_thread_message_id, input_reply_to, message_send_options, std::move(content),
|
||||
message_content.invert_media, false, nullptr,
|
||||
message = create_message_to_send(d, top_thread_message_id, std::move(input_reply_to), message_send_options,
|
||||
std::move(content), message_content.invert_media, false, nullptr,
|
||||
message_content.via_bot_user_id.is_valid(), DialogId());
|
||||
MessageId new_message_id = message_send_options.schedule_date != 0
|
||||
? get_next_yet_unsent_scheduled_message_id(d, message_send_options.schedule_date)
|
||||
@ -24936,8 +24936,8 @@ Result<td_api::object_ptr<td_api::message>> MessagesManager::send_message(
|
||||
message->message_id = new_message_id;
|
||||
m = message.get();
|
||||
} else {
|
||||
m = get_message_to_send(d, top_thread_message_id, input_reply_to, message_send_options, std::move(content),
|
||||
message_content.invert_media, &need_update_dialog_pos, false, nullptr,
|
||||
m = get_message_to_send(d, top_thread_message_id, std::move(input_reply_to), message_send_options,
|
||||
std::move(content), message_content.invert_media, &need_update_dialog_pos, false, nullptr,
|
||||
message_content.via_bot_user_id.is_valid());
|
||||
}
|
||||
m->reply_markup = std::move(message_reply_markup);
|
||||
@ -25204,7 +25204,7 @@ Result<td_api::object_ptr<td_api::messages>> MessagesManager::send_message_group
|
||||
unique_ptr<Message> message;
|
||||
Message *m;
|
||||
if (message_send_options.only_preview) {
|
||||
message = create_message_to_send(d, top_thread_message_id, input_reply_to, message_send_options,
|
||||
message = create_message_to_send(d, top_thread_message_id, std::move(input_reply_to), message_send_options,
|
||||
std::move(message_content.content), message_content.invert_media, i != 0,
|
||||
nullptr, false, DialogId());
|
||||
MessageId new_message_id = message_send_options.schedule_date != 0
|
||||
@ -25213,7 +25213,7 @@ Result<td_api::object_ptr<td_api::messages>> MessagesManager::send_message_group
|
||||
message->message_id = new_message_id;
|
||||
m = message.get();
|
||||
} else {
|
||||
m = get_message_to_send(d, top_thread_message_id, input_reply_to, message_send_options,
|
||||
m = get_message_to_send(d, top_thread_message_id, std::move(input_reply_to), message_send_options,
|
||||
dup_message_content(td_, dialog_id, message_content.content.get(),
|
||||
MessageContentDupType::Send, MessageCopyOptions()),
|
||||
message_content.invert_media, &need_update_dialog_pos, i != 0);
|
||||
@ -26098,7 +26098,7 @@ Result<td_api::object_ptr<td_api::message>> MessagesManager::send_inline_query_r
|
||||
Message *m;
|
||||
if (message_send_options.only_preview) {
|
||||
message =
|
||||
create_message_to_send(d, top_thread_message_id, input_reply_to, message_send_options,
|
||||
create_message_to_send(d, top_thread_message_id, std::move(input_reply_to), message_send_options,
|
||||
std::move(message_content), content->invert_media, false, nullptr, true, DialogId());
|
||||
MessageId new_message_id = message_send_options.schedule_date != 0
|
||||
? get_next_yet_unsent_scheduled_message_id(d, message_send_options.schedule_date)
|
||||
@ -26106,8 +26106,9 @@ Result<td_api::object_ptr<td_api::message>> MessagesManager::send_inline_query_r
|
||||
message->message_id = new_message_id;
|
||||
m = message.get();
|
||||
} else {
|
||||
m = get_message_to_send(d, top_thread_message_id, input_reply_to, message_send_options, std::move(message_content),
|
||||
content->invert_media, &need_update_dialog_pos, false, nullptr, true);
|
||||
m = get_message_to_send(d, top_thread_message_id, std::move(input_reply_to), message_send_options,
|
||||
std::move(message_content), content->invert_media, &need_update_dialog_pos, false, nullptr,
|
||||
true);
|
||||
}
|
||||
|
||||
m->hide_via_bot = hide_via_bot;
|
||||
@ -28002,7 +28003,7 @@ Result<MessagesManager::ForwardedMessages> MessagesManager::get_forwarded_messag
|
||||
if (is_local_copy) {
|
||||
auto original_reply_to_message_id = forwarded_message->replied_message_info.get_same_chat_reply_to_message_id();
|
||||
copied_messages.push_back(
|
||||
{std::move(content), input_reply_to, forwarded_message->message_id, original_reply_to_message_id,
|
||||
{std::move(content), std::move(input_reply_to), forwarded_message->message_id, original_reply_to_message_id,
|
||||
std::move(reply_markup), forwarded_message->media_album_id,
|
||||
get_message_disable_web_page_preview(forwarded_message), forwarded_message->invert_media, i});
|
||||
} else {
|
||||
@ -28148,7 +28149,7 @@ Result<td_api::object_ptr<td_api::messages>> MessagesManager::forward_messages(
|
||||
forwarded_message_id_to_new_message_id.emplace(copied_message.original_message_id, MessageId());
|
||||
}
|
||||
for (auto &copied_message : copied_messages) {
|
||||
auto input_reply_to = copied_message.input_reply_to;
|
||||
auto input_reply_to = std::move(copied_message.input_reply_to);
|
||||
if (!input_reply_to.is_valid() && copied_message.original_reply_to_message_id.is_valid() && is_secret) {
|
||||
auto it = forwarded_message_id_to_new_message_id.find(copied_message.original_reply_to_message_id);
|
||||
if (it != forwarded_message_id_to_new_message_id.end()) {
|
||||
@ -28159,9 +28160,9 @@ Result<td_api::object_ptr<td_api::messages>> MessagesManager::forward_messages(
|
||||
unique_ptr<Message> message;
|
||||
Message *m;
|
||||
if (message_send_options.only_preview) {
|
||||
message = create_message_to_send(to_dialog, top_thread_message_id, input_reply_to, message_send_options,
|
||||
std::move(copied_message.content), copied_message.invert_media, false, nullptr,
|
||||
is_copy, DialogId());
|
||||
message = create_message_to_send(to_dialog, top_thread_message_id, std::move(input_reply_to),
|
||||
message_send_options, std::move(copied_message.content),
|
||||
copied_message.invert_media, false, nullptr, is_copy, DialogId());
|
||||
MessageId new_message_id =
|
||||
message_send_options.schedule_date != 0
|
||||
? get_next_yet_unsent_scheduled_message_id(to_dialog, message_send_options.schedule_date)
|
||||
@ -28175,7 +28176,7 @@ Result<td_api::object_ptr<td_api::messages>> MessagesManager::forward_messages(
|
||||
extract_authentication_codes(from_dialog_id, forwarded_message, authentication_codes);
|
||||
}
|
||||
|
||||
m = get_message_to_send(to_dialog, top_thread_message_id, input_reply_to, message_send_options,
|
||||
m = get_message_to_send(to_dialog, top_thread_message_id, std::move(input_reply_to), message_send_options,
|
||||
std::move(copied_message.content), copied_message.invert_media, &need_update_dialog_pos,
|
||||
false, nullptr, is_copy);
|
||||
}
|
||||
@ -28300,7 +28301,7 @@ Result<vector<MessageId>> MessagesManager::resend_messages(DialogId dialog_id, v
|
||||
message->update_stickersets_order, message->noforwards, false,
|
||||
get_message_schedule_date(message.get()), message->sending_id);
|
||||
Message *m =
|
||||
get_message_to_send(d, message->top_thread_message_id, *get_message_input_reply_to(message.get()), options,
|
||||
get_message_to_send(d, message->top_thread_message_id, std::move(message->input_reply_to), options,
|
||||
std::move(new_contents[i]), message->invert_media, &need_update_dialog_pos, false, nullptr,
|
||||
message->is_copy, need_another_sender ? DialogId() : get_message_sender(message.get()));
|
||||
m->reply_markup = std::move(message->reply_markup);
|
||||
@ -30834,7 +30835,7 @@ MessageFullId MessagesManager::on_send_message_success(int64 random_id, MessageI
|
||||
}
|
||||
|
||||
const auto *input_reply_to = get_message_input_reply_to(sent_message.get());
|
||||
if (input_reply_to->is_valid() &&
|
||||
if (input_reply_to != nullptr && input_reply_to->is_valid() &&
|
||||
input_reply_to->get_reply_message_full_id(dialog_id).get_message_id().is_yet_unsent()) {
|
||||
set_message_reply(d, sent_message.get(), MessageId(), false);
|
||||
}
|
||||
|
@ -1798,12 +1798,12 @@ class MessagesManager final : public Actor {
|
||||
int64 generate_new_random_id(const Dialog *d);
|
||||
|
||||
unique_ptr<Message> create_message_to_send(Dialog *d, MessageId top_thread_message_id,
|
||||
MessageInputReplyTo input_reply_to, const MessageSendOptions &options,
|
||||
MessageInputReplyTo &&input_reply_to, const MessageSendOptions &options,
|
||||
unique_ptr<MessageContent> &&content, bool invert_media,
|
||||
bool suppress_reply_info, unique_ptr<MessageForwardInfo> forward_info,
|
||||
bool is_copy, DialogId send_as_dialog_id) const;
|
||||
|
||||
Message *get_message_to_send(Dialog *d, MessageId top_thread_message_id, MessageInputReplyTo input_reply_to,
|
||||
Message *get_message_to_send(Dialog *d, MessageId top_thread_message_id, MessageInputReplyTo &&input_reply_to,
|
||||
const MessageSendOptions &options, unique_ptr<MessageContent> &&content,
|
||||
bool invert_media, bool *need_update_dialog_pos, bool suppress_reply_info = false,
|
||||
unique_ptr<MessageForwardInfo> forward_info = nullptr, bool is_copy = false,
|
||||
|
Loading…
Reference in New Issue
Block a user