diff --git a/td/generate/scheme/td_api.tl b/td/generate/scheme/td_api.tl index 61c9c1183..5ed571253 100644 --- a/td/generate/scheme/td_api.tl +++ b/td/generate/scheme/td_api.tl @@ -539,9 +539,10 @@ messageForwardOriginChannel chat_id:int53 message_id:int53 author_signature:stri //@description Contains information about a forwarded message //@origin Origin of a forwarded message //@date Point in time (Unix timestamp) when the message was originally sent +//@public_service_announcement_type The type of a public service announcement for the forwarded message //@from_chat_id For messages forwarded to the chat with the current user (Saved Messages) or to the channel's discussion group, the identifier of the chat from which the message was forwarded last time; 0 if unknown //@from_message_id For messages forwarded to the chat with the current user (Saved Messages) or to the channel's discussion group, the identifier of the original message from which the new message was forwarded last time; 0 if unknown -messageForwardInfo origin:MessageForwardOrigin date:int32 from_chat_id:int53 from_message_id:int53 = MessageForwardInfo; +messageForwardInfo origin:MessageForwardOrigin date:int32 public_service_announcement_type:string from_chat_id:int53 from_message_id:int53 = MessageForwardInfo; //@class MessageSendingState @description Contains information about the sending state of the message diff --git a/td/generate/scheme/td_api.tlo b/td/generate/scheme/td_api.tlo index b60c6a11b..40649fd82 100644 Binary files a/td/generate/scheme/td_api.tlo and b/td/generate/scheme/td_api.tlo differ diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index 0af051af4..d7f016f9b 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -3942,6 +3942,7 @@ void MessagesManager::Message::store(StorerT &storer) const { bool has_real_forward_from = real_forward_from_dialog_id.is_valid() && real_forward_from_message_id.is_valid(); bool has_legacy_layer = legacy_layer != 0; bool has_restriction_reasons = !restriction_reasons.empty(); + bool has_forward_psa_type = is_forwarded && !forward_info->psa_type.empty(); BEGIN_STORE_FLAGS(); STORE_FLAG(is_channel_post); STORE_FLAG(is_outgoing); @@ -3989,6 +3990,7 @@ void MessagesManager::Message::store(StorerT &storer) const { STORE_FLAG(has_restriction_reasons); STORE_FLAG(is_from_scheduled); STORE_FLAG(is_copy); + STORE_FLAG(has_forward_psa_type); END_STORE_FLAGS(); } @@ -4021,6 +4023,9 @@ void MessagesManager::Message::store(StorerT &storer) const { store(forward_info->from_dialog_id, storer); store(forward_info->from_message_id, storer); } + if (has_forward_psa_type) { + store(forward_info->psa_type, storer); + } } if (has_real_forward_from) { store(real_forward_from_dialog_id, storer); @@ -4096,6 +4101,7 @@ void MessagesManager::Message::parse(ParserT &parser) { bool has_real_forward_from = false; bool has_legacy_layer = false; bool has_restriction_reasons = false; + bool has_forward_psa_type = false; BEGIN_PARSE_FLAGS(); PARSE_FLAG(is_channel_post); PARSE_FLAG(is_outgoing); @@ -4143,6 +4149,7 @@ void MessagesManager::Message::parse(ParserT &parser) { PARSE_FLAG(has_restriction_reasons); PARSE_FLAG(is_from_scheduled); PARSE_FLAG(is_copy); + PARSE_FLAG(has_forward_psa_type); END_PARSE_FLAGS(); } @@ -4181,6 +4188,9 @@ void MessagesManager::Message::parse(ParserT &parser) { parse(forward_info->from_dialog_id, parser); parse(forward_info->from_message_id, parser); } + if (has_forward_psa_type) { + parse(forward_info->psa_type, parser); + } } if (has_real_forward_from) { parse(real_forward_from_dialog_id, parser); @@ -20577,7 +20587,7 @@ unique_ptr MessagesManager::get_message_for return td::make_unique(sender_user_id, forward_header->date_, dialog_id, message_id, std::move(author_signature), std::move(sender_name), from_dialog_id, - from_message_id); + from_message_id, std::move(forward_header->psa_type_)); } td_api::object_ptr MessagesManager::get_message_forward_info_object( @@ -20599,8 +20609,9 @@ td_api::object_ptr MessagesManager::get_message_forw td_->contacts_manager_->get_user_id_object(forward_info->sender_user_id, "messageForwardOriginUser")); }(); - return td_api::make_object( - std::move(origin), forward_info->date, forward_info->from_dialog_id.get(), forward_info->from_message_id.get()); + return td_api::make_object(std::move(origin), forward_info->date, forward_info->psa_type, + forward_info->from_dialog_id.get(), + forward_info->from_message_id.get()); } Result> MessagesManager::get_dialog_reply_markup( @@ -20858,14 +20869,14 @@ Result> MessagesManager::forward_messages(DialogId to_dialog_i : forwarded_message->author_signature; forward_info = td::make_unique( UserId(), forwarded_message->date, from_dialog_id, forwarded_message->message_id, - std::move(author_signature), "", saved_from_dialog_id, saved_from_message_id); + std::move(author_signature), "", saved_from_dialog_id, saved_from_message_id, ""); } else { LOG(ERROR) << "Don't know how to forward a channel post not from a channel"; } } else if (forwarded_message->sender_user_id.is_valid()) { forward_info = make_unique(forwarded_message->sender_user_id, forwarded_message->date, DialogId(), - MessageId(), "", "", saved_from_dialog_id, saved_from_message_id); + MessageId(), "", "", saved_from_dialog_id, saved_from_message_id, ""); } else { LOG(ERROR) << "Don't know how to forward a non-channel post message without forward info and sender"; } diff --git a/td/telegram/MessagesManager.h b/td/telegram/MessagesManager.h index 0a625b1c7..5c016bd84 100644 --- a/td/telegram/MessagesManager.h +++ b/td/telegram/MessagesManager.h @@ -875,11 +875,13 @@ class MessagesManager : public Actor { string sender_name; DialogId from_dialog_id; MessageId from_message_id; + string psa_type; MessageForwardInfo() = default; MessageForwardInfo(UserId sender_user_id, int32 date, DialogId dialog_id, MessageId message_id, - string author_signature, string sender_name, DialogId from_dialog_id, MessageId from_message_id) + string author_signature, string sender_name, DialogId from_dialog_id, MessageId from_message_id, + string psa_type) : sender_user_id(sender_user_id) , date(date) , dialog_id(dialog_id) @@ -887,14 +889,15 @@ class MessagesManager : public Actor { , author_signature(std::move(author_signature)) , sender_name(std::move(sender_name)) , from_dialog_id(from_dialog_id) - , from_message_id(from_message_id) { + , from_message_id(from_message_id) + , psa_type(psa_type) { } bool operator==(const MessageForwardInfo &rhs) const { return sender_user_id == rhs.sender_user_id && date == rhs.date && dialog_id == rhs.dialog_id && message_id == rhs.message_id && author_signature == rhs.author_signature && sender_name == rhs.sender_name && from_dialog_id == rhs.from_dialog_id && - from_message_id == rhs.from_message_id; + from_message_id == rhs.from_message_id && psa_type == rhs.psa_type; } bool operator!=(const MessageForwardInfo &rhs) const { @@ -903,10 +906,10 @@ class MessagesManager : public Actor { friend StringBuilder &operator<<(StringBuilder &string_builder, const MessageForwardInfo &forward_info) { return string_builder << "MessageForwardInfo[sender " << forward_info.sender_user_id << "(" - << forward_info.author_signature << "/" << forward_info.sender_name << "), source " - << forward_info.dialog_id << ", source " << forward_info.message_id << ", from " - << forward_info.from_dialog_id << ", from " << forward_info.from_message_id << " at " - << forward_info.date << "]"; + << forward_info.author_signature << "/" << forward_info.sender_name << "), psa_type " + << forward_info.psa_type << ", source " << forward_info.dialog_id << ", source " + << forward_info.message_id << ", from " << forward_info.from_dialog_id << ", from " + << forward_info.from_message_id << " at " << forward_info.date << "]"; } };