From 6b511f277b5d4aa1be1b538d3779cb525e422204 Mon Sep 17 00:00:00 2001 From: levlam Date: Sat, 9 Oct 2021 15:04:17 +0300 Subject: [PATCH] Add messageChatJoinByLink.is_approved. --- td/generate/scheme/td_api.tl | 4 ++-- td/telegram/MessageContent.cpp | 44 +++++++++++++++++++++++++++------- td/telegram/Version.h | 1 + 3 files changed, 39 insertions(+), 10 deletions(-) diff --git a/td/generate/scheme/td_api.tl b/td/generate/scheme/td_api.tl index e3340d32c..57a26fa04 100644 --- a/td/generate/scheme/td_api.tl +++ b/td/generate/scheme/td_api.tl @@ -1774,8 +1774,8 @@ messageChatDeletePhoto = MessageContent; //@description New chat members were added @member_user_ids User identifiers of the new members messageChatAddMembers member_user_ids:vector = MessageContent; -//@description A new member joined the chat by invite link -messageChatJoinByLink = MessageContent; +//@description A new member joined the chat by invite link @is_approved True, if the join request was approved by a chat administrator +messageChatJoinByLink is_approved:Bool = MessageContent; //@description A chat member was deleted @user_id User identifier of the deleted chat member messageChatDeleteMember user_id:int53 = MessageContent; diff --git a/td/telegram/MessageContent.cpp b/td/telegram/MessageContent.cpp index 112041712..108d02306 100644 --- a/td/telegram/MessageContent.cpp +++ b/td/telegram/MessageContent.cpp @@ -319,6 +319,12 @@ class MessageChatAddUsers final : public MessageContent { class MessageChatJoinedByLink final : public MessageContent { public: + bool is_approved = false; + + MessageChatJoinedByLink() = default; + explicit MessageChatJoinedByLink(bool is_approved) : is_approved(is_approved) { + } + MessageContentType get_type() const final { return MessageContentType::ChatJoinedByLink; } @@ -866,8 +872,13 @@ static void store(const MessageContent *content, StorerT &storer) { store(m->user_ids, storer); break; } - case MessageContentType::ChatJoinedByLink: + case MessageContentType::ChatJoinedByLink: { + auto m = static_cast(content); + BEGIN_STORE_FLAGS(); + STORE_FLAG(m->is_approved); + END_STORE_FLAGS(); break; + } case MessageContentType::ChatDeleteUser: { const auto *m = static_cast(content); store(m->user_id, storer); @@ -1229,9 +1240,18 @@ static void parse(unique_ptr &content, ParserT &parser) { content = std::move(m); break; } - case MessageContentType::ChatJoinedByLink: - content = make_unique(); + case MessageContentType::ChatJoinedByLink: { + auto m = make_unique(); + if (parser.version() >= static_cast(Version::AddInviteLinksRequiringApproval)) { + BEGIN_PARSE_FLAGS(); + PARSE_FLAG(m->is_approved); + END_PARSE_FLAGS(); + } else { + m->is_approved = false; + } + content = std::move(m); break; + } case MessageContentType::ChatDeleteUser: { auto m = make_unique(); parse(m->user_id, parser); @@ -3253,8 +3273,14 @@ void merge_message_contents(Td *td, const MessageContent *old_content, MessageCo } break; } - case MessageContentType::ChatJoinedByLink: + case MessageContentType::ChatJoinedByLink: { + auto old_ = static_cast(old_content); + auto new_ = static_cast(new_content); + if (old_->is_approved != new_->is_approved) { + need_update = true; + } break; + } case MessageContentType::ChatDeleteUser: { const auto *old_ = static_cast(old_content); const auto *new_ = static_cast(new_content); @@ -4538,7 +4564,7 @@ unique_ptr get_action_message_content(Td *td, tl_object_ptr(std::move(user_ids)); } case telegram_api::messageActionChatJoinedByLink::ID: - return make_unique(); + return make_unique(false); case telegram_api::messageActionChatDeleteUser::ID: { auto chat_delete_user = move_tl_object_as(action); @@ -4734,7 +4760,7 @@ unique_ptr get_action_message_content(Td *td, tl_object_ptr(std::move(set_chat_theme->emoticon_)); } case telegram_api::messageActionChatJoinedByRequest::ID: - return make_unique(); + return make_unique(true); default: UNREACHABLE(); } @@ -4855,8 +4881,10 @@ tl_object_ptr get_message_content_object(const MessageCo return make_tl_object( td->contacts_manager_->get_user_ids_object(m->user_ids, "MessageChatAddUsers")); } - case MessageContentType::ChatJoinedByLink: - return make_tl_object(); + case MessageContentType::ChatJoinedByLink: { + const MessageChatJoinedByLink *m = static_cast(content); + return make_tl_object(m->is_approved); + } case MessageContentType::ChatDeleteUser: { const auto *m = static_cast(content); return make_tl_object( diff --git a/td/telegram/Version.h b/td/telegram/Version.h index dacaea31d..2a8fbb5ee 100644 --- a/td/telegram/Version.h +++ b/td/telegram/Version.h @@ -47,6 +47,7 @@ enum class Version : int32 { SupportBannedChannels, RemovePhotoVolumeAndLocalId, Support64BitIds, + AddInviteLinksRequiringApproval, Next };