Allow to replace caption when message is copied.
GitOrigin-RevId: 6e190830d66916de2deb0b371185b7db6ea42b00
This commit is contained in:
parent
c780fc2812
commit
8fb53c6ec2
@ -1691,8 +1691,9 @@ messageSendOptions disable_notification:Bool from_background:Bool scheduling_sta
|
|||||||
|
|
||||||
//@description Options to be used when a message content is copied without a link to the original message
|
//@description Options to be used when a message content is copied without a link to the original message
|
||||||
//@send_copy True, if content of the message needs to be copied without a link to the original message. Always true if the message is forwarded to a secret chat
|
//@send_copy True, if content of the message needs to be copied without a link to the original message. Always true if the message is forwarded to a secret chat
|
||||||
//@remove_caption True, if media caption of the message copy needs to be removed. Ignored if send_copy is false
|
//@replace_caption True, if media caption of the message copy needs to be replaced. Ignored if send_copy is false
|
||||||
messageCopyOptions send_copy:Bool remove_caption:Bool = MessageCopyOptions;
|
//@new_caption New message caption. Ignored if replace_caption is false
|
||||||
|
messageCopyOptions send_copy:Bool replace_caption:Bool new_caption:formattedText = MessageCopyOptions;
|
||||||
|
|
||||||
|
|
||||||
//@class InputMessageContent @description The content of a message to send
|
//@class InputMessageContent @description The content of a message to send
|
||||||
|
Binary file not shown.
@ -3964,12 +3964,12 @@ unique_ptr<MessageContent> dup_message_content(Td *td, DialogId dialog_id, const
|
|||||||
if (to_secret) {
|
if (to_secret) {
|
||||||
thumbnail_file_id = get_message_content_thumbnail_file_id(content, td);
|
thumbnail_file_id = get_message_content_thumbnail_file_id(content, td);
|
||||||
}
|
}
|
||||||
auto remove_caption = type == MessageContentDupType::Copy && copy_options.remove_caption;
|
auto replace_caption = type == MessageContentDupType::Copy && copy_options.replace_caption;
|
||||||
switch (content->get_type()) {
|
switch (content->get_type()) {
|
||||||
case MessageContentType::Animation: {
|
case MessageContentType::Animation: {
|
||||||
auto result = make_unique<MessageAnimation>(*static_cast<const MessageAnimation *>(content));
|
auto result = make_unique<MessageAnimation>(*static_cast<const MessageAnimation *>(content));
|
||||||
if (remove_caption) {
|
if (replace_caption) {
|
||||||
result->caption = FormattedText();
|
result->caption = std::move(copy_options.new_caption);
|
||||||
}
|
}
|
||||||
if (td->documents_manager_->has_input_media(result->file_id, thumbnail_file_id, to_secret)) {
|
if (td->documents_manager_->has_input_media(result->file_id, thumbnail_file_id, to_secret)) {
|
||||||
return std::move(result);
|
return std::move(result);
|
||||||
@ -3980,8 +3980,8 @@ unique_ptr<MessageContent> dup_message_content(Td *td, DialogId dialog_id, const
|
|||||||
}
|
}
|
||||||
case MessageContentType::Audio: {
|
case MessageContentType::Audio: {
|
||||||
auto result = make_unique<MessageAudio>(*static_cast<const MessageAudio *>(content));
|
auto result = make_unique<MessageAudio>(*static_cast<const MessageAudio *>(content));
|
||||||
if (remove_caption) {
|
if (replace_caption) {
|
||||||
result->caption = FormattedText();
|
result->caption = std::move(copy_options.new_caption);
|
||||||
}
|
}
|
||||||
if (td->documents_manager_->has_input_media(result->file_id, thumbnail_file_id, to_secret)) {
|
if (td->documents_manager_->has_input_media(result->file_id, thumbnail_file_id, to_secret)) {
|
||||||
return std::move(result);
|
return std::move(result);
|
||||||
@ -4001,8 +4001,8 @@ unique_ptr<MessageContent> dup_message_content(Td *td, DialogId dialog_id, const
|
|||||||
}
|
}
|
||||||
case MessageContentType::Document: {
|
case MessageContentType::Document: {
|
||||||
auto result = make_unique<MessageDocument>(*static_cast<const MessageDocument *>(content));
|
auto result = make_unique<MessageDocument>(*static_cast<const MessageDocument *>(content));
|
||||||
if (remove_caption) {
|
if (replace_caption) {
|
||||||
result->caption = FormattedText();
|
result->caption = std::move(copy_options.new_caption);
|
||||||
}
|
}
|
||||||
if (td->documents_manager_->has_input_media(result->file_id, thumbnail_file_id, to_secret)) {
|
if (td->documents_manager_->has_input_media(result->file_id, thumbnail_file_id, to_secret)) {
|
||||||
return std::move(result);
|
return std::move(result);
|
||||||
@ -4025,8 +4025,8 @@ unique_ptr<MessageContent> dup_message_content(Td *td, DialogId dialog_id, const
|
|||||||
return make_unique<MessageLocation>(*static_cast<const MessageLocation *>(content));
|
return make_unique<MessageLocation>(*static_cast<const MessageLocation *>(content));
|
||||||
case MessageContentType::Photo: {
|
case MessageContentType::Photo: {
|
||||||
auto result = make_unique<MessagePhoto>(*static_cast<const MessagePhoto *>(content));
|
auto result = make_unique<MessagePhoto>(*static_cast<const MessagePhoto *>(content));
|
||||||
if (remove_caption) {
|
if (replace_caption) {
|
||||||
result->caption = FormattedText();
|
result->caption = std::move(copy_options.new_caption);
|
||||||
}
|
}
|
||||||
|
|
||||||
CHECK(!result->photo.photos.empty());
|
CHECK(!result->photo.photos.empty());
|
||||||
@ -4106,8 +4106,8 @@ unique_ptr<MessageContent> dup_message_content(Td *td, DialogId dialog_id, const
|
|||||||
return make_unique<MessageVenue>(*static_cast<const MessageVenue *>(content));
|
return make_unique<MessageVenue>(*static_cast<const MessageVenue *>(content));
|
||||||
case MessageContentType::Video: {
|
case MessageContentType::Video: {
|
||||||
auto result = make_unique<MessageVideo>(*static_cast<const MessageVideo *>(content));
|
auto result = make_unique<MessageVideo>(*static_cast<const MessageVideo *>(content));
|
||||||
if (remove_caption) {
|
if (replace_caption) {
|
||||||
result->caption = FormattedText();
|
result->caption = std::move(copy_options.new_caption);
|
||||||
}
|
}
|
||||||
if (td->documents_manager_->has_input_media(result->file_id, thumbnail_file_id, to_secret)) {
|
if (td->documents_manager_->has_input_media(result->file_id, thumbnail_file_id, to_secret)) {
|
||||||
return std::move(result);
|
return std::move(result);
|
||||||
@ -4128,8 +4128,8 @@ unique_ptr<MessageContent> dup_message_content(Td *td, DialogId dialog_id, const
|
|||||||
}
|
}
|
||||||
case MessageContentType::VoiceNote: {
|
case MessageContentType::VoiceNote: {
|
||||||
auto result = make_unique<MessageVoiceNote>(*static_cast<const MessageVoiceNote *>(content));
|
auto result = make_unique<MessageVoiceNote>(*static_cast<const MessageVoiceNote *>(content));
|
||||||
if (remove_caption) {
|
if (replace_caption) {
|
||||||
result->caption = FormattedText();
|
result->caption = std::move(copy_options.new_caption);
|
||||||
}
|
}
|
||||||
result->is_listened = false;
|
result->is_listened = false;
|
||||||
if (td->documents_manager_->has_input_media(result->file_id, thumbnail_file_id, to_secret)) {
|
if (td->documents_manager_->has_input_media(result->file_id, thumbnail_file_id, to_secret)) {
|
||||||
|
@ -6,6 +6,8 @@
|
|||||||
//
|
//
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "td/telegram/MessageEntity.h"
|
||||||
|
|
||||||
#include "td/utils/common.h"
|
#include "td/utils/common.h"
|
||||||
#include "td/utils/StringBuilder.h"
|
#include "td/utils/StringBuilder.h"
|
||||||
|
|
||||||
@ -13,16 +15,23 @@ namespace td {
|
|||||||
|
|
||||||
struct MessageCopyOptions {
|
struct MessageCopyOptions {
|
||||||
bool send_copy = false;
|
bool send_copy = false;
|
||||||
bool remove_caption = false;
|
bool replace_caption = false;
|
||||||
|
FormattedText new_caption;
|
||||||
|
|
||||||
MessageCopyOptions() = default;
|
MessageCopyOptions() = default;
|
||||||
MessageCopyOptions(bool send_copy, bool remove_caption): send_copy(send_copy), remove_caption(remove_caption) {
|
MessageCopyOptions(bool send_copy, bool remove_caption) : send_copy(send_copy), replace_caption(remove_caption) {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
inline StringBuilder &operator<<(StringBuilder &string_builder, MessageCopyOptions copy_options) {
|
inline StringBuilder &operator<<(StringBuilder &string_builder, MessageCopyOptions copy_options) {
|
||||||
if (copy_options.send_copy) {
|
if (copy_options.send_copy) {
|
||||||
string_builder << "CopyOptions[remove_caption = " << copy_options.remove_caption << "]";
|
string_builder << "CopyOptions[replace_caption = " << copy_options.replace_caption;
|
||||||
|
}
|
||||||
|
if (copy_options.replace_caption) {
|
||||||
|
string_builder << ", new_caption = " << copy_options.new_caption;
|
||||||
|
}
|
||||||
|
if (copy_options.send_copy) {
|
||||||
|
string_builder << "]";
|
||||||
}
|
}
|
||||||
return string_builder;
|
return string_builder;
|
||||||
}
|
}
|
||||||
|
@ -20651,7 +20651,12 @@ Result<MessageCopyOptions> MessagesManager::process_message_copy_options(
|
|||||||
}
|
}
|
||||||
MessageCopyOptions result;
|
MessageCopyOptions result;
|
||||||
result.send_copy = true;
|
result.send_copy = true;
|
||||||
result.remove_caption = options->remove_caption_;
|
result.replace_caption = options->replace_caption_;
|
||||||
|
if (result.replace_caption) {
|
||||||
|
TRY_RESULT_ASSIGN(result.new_caption,
|
||||||
|
process_input_caption(td_->contacts_manager_.get(), dialog_id, std::move(options->new_caption_),
|
||||||
|
td_->auth_manager_->is_bot()));
|
||||||
|
}
|
||||||
return std::move(result);
|
return std::move(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5748,8 +5748,8 @@ void Td::on_request(uint64 id, td_api::forwardMessages &request) {
|
|||||||
DialogId dialog_id(request.chat_id_);
|
DialogId dialog_id(request.chat_id_);
|
||||||
auto input_message_ids = MessagesManager::get_message_ids(request.message_ids_);
|
auto input_message_ids = MessagesManager::get_message_ids(request.message_ids_);
|
||||||
auto message_copy_options =
|
auto message_copy_options =
|
||||||
transform(input_message_ids, [copy_options = MessageCopyOptions(request.send_copy_, request.remove_caption_)](
|
transform(input_message_ids, [send_copy = request.send_copy_, remove_caption = request.remove_caption_](
|
||||||
MessageId) { return copy_options; });
|
MessageId) { return MessageCopyOptions(send_copy, remove_caption); });
|
||||||
auto r_message_ids = messages_manager_->forward_messages(dialog_id, DialogId(request.from_chat_id_),
|
auto r_message_ids = messages_manager_->forward_messages(dialog_id, DialogId(request.from_chat_id_),
|
||||||
std::move(input_message_ids), std::move(request.options_),
|
std::move(input_message_ids), std::move(request.options_),
|
||||||
false, request.as_album_, std::move(message_copy_options));
|
false, request.as_album_, std::move(message_copy_options));
|
||||||
|
@ -3200,7 +3200,8 @@ class CliClient final : public Actor {
|
|||||||
|
|
||||||
td_api::object_ptr<td_api::messageCopyOptions> copy_options;
|
td_api::object_ptr<td_api::messageCopyOptions> copy_options;
|
||||||
if (op == "scopy") {
|
if (op == "scopy") {
|
||||||
copy_options = td_api::make_object<td_api::messageCopyOptions>(true, Random::fast(0, 1) == 0);
|
copy_options =
|
||||||
|
td_api::make_object<td_api::messageCopyOptions>(true, Random::fast(0, 1) == 0, as_caption("_as_d"));
|
||||||
}
|
}
|
||||||
|
|
||||||
send_message(chat_id,
|
send_message(chat_id,
|
||||||
|
Loading…
Reference in New Issue
Block a user