From e62f612c368de00f20fb4f997de306e17f79077a Mon Sep 17 00:00:00 2001 From: levlam Date: Sun, 11 Feb 2024 02:45:18 +0300 Subject: [PATCH] Add Message.sender_boost_count. --- td/generate/scheme/td_api.tl | 3 ++- td/telegram/ContactsManager.cpp | 11 +++++++++++ td/telegram/ContactsManager.h | 1 + td/telegram/MessagesManager.cpp | 33 ++++++++++++++++++++++++++++----- td/telegram/MessagesManager.h | 4 +++- 5 files changed, 45 insertions(+), 7 deletions(-) diff --git a/td/generate/scheme/td_api.tl b/td/generate/scheme/td_api.tl index cf2023c66..c75184f68 100644 --- a/td/generate/scheme/td_api.tl +++ b/td/generate/scheme/td_api.tl @@ -1364,12 +1364,13 @@ inputMessageReplyToStory story_sender_chat_id:int53 story_id:int32 = InputMessag //@self_destruct_in Time left before the message self-destruct timer expires, in seconds; 0 if self-destruction isn't scheduled yet //@auto_delete_in Time left before the message will be automatically deleted by message_auto_delete_time setting of the chat, in seconds; 0 if never //@via_bot_user_id If non-zero, the user identifier of the bot through which this message was sent +//@sender_boost_count Number of times the sender of the message boosted the supergroup at the time the message was sent; 0 if none or unknown. For messages sent by the current user, supergroupFullInfo.my_boost_count must be used instead //@author_signature For channel posts and anonymous group messages, optional author signature //@media_album_id Unique identifier of an album this message belongs to. Only audios, documents, photos and videos can be grouped together in albums //@restriction_reason If non-empty, contains a human-readable description of the reason why access to this message must be restricted //@content Content of the message //@reply_markup Reply markup for the message; may be null if none -message id:int53 sender_id:MessageSender chat_id:int53 sending_state:MessageSendingState scheduling_state:MessageSchedulingState is_outgoing:Bool is_pinned:Bool can_be_edited:Bool can_be_forwarded:Bool can_be_replied_in_another_chat:Bool can_be_saved:Bool can_be_deleted_only_for_self:Bool can_be_deleted_for_all_users:Bool can_get_added_reactions:Bool can_get_statistics:Bool can_get_message_thread:Bool can_get_read_date:Bool can_get_viewers:Bool can_get_media_timestamp_links:Bool can_report_reactions:Bool has_timestamped_media:Bool is_channel_post:Bool is_topic_message:Bool contains_unread_mention:Bool date:int32 edit_date:int32 forward_info:messageForwardInfo import_info:messageImportInfo interaction_info:messageInteractionInfo unread_reactions:vector reply_to:MessageReplyTo message_thread_id:int53 saved_messages_topic_id:int53 self_destruct_type:MessageSelfDestructType self_destruct_in:double auto_delete_in:double via_bot_user_id:int53 author_signature:string media_album_id:int64 restriction_reason:string content:MessageContent reply_markup:ReplyMarkup = Message; +message id:int53 sender_id:MessageSender chat_id:int53 sending_state:MessageSendingState scheduling_state:MessageSchedulingState is_outgoing:Bool is_pinned:Bool can_be_edited:Bool can_be_forwarded:Bool can_be_replied_in_another_chat:Bool can_be_saved:Bool can_be_deleted_only_for_self:Bool can_be_deleted_for_all_users:Bool can_get_added_reactions:Bool can_get_statistics:Bool can_get_message_thread:Bool can_get_read_date:Bool can_get_viewers:Bool can_get_media_timestamp_links:Bool can_report_reactions:Bool has_timestamped_media:Bool is_channel_post:Bool is_topic_message:Bool contains_unread_mention:Bool date:int32 edit_date:int32 forward_info:messageForwardInfo import_info:messageImportInfo interaction_info:messageInteractionInfo unread_reactions:vector reply_to:MessageReplyTo message_thread_id:int53 saved_messages_topic_id:int53 self_destruct_type:MessageSelfDestructType self_destruct_in:double auto_delete_in:double via_bot_user_id:int53 sender_boost_count:int32 author_signature:string media_album_id:int64 restriction_reason:string content:MessageContent reply_markup:ReplyMarkup = Message; //@description Contains a list of messages @total_count Approximate total number of messages found @messages List of messages; messages may be null messages total_count:int32 messages:vector = Messages; diff --git a/td/telegram/ContactsManager.cpp b/td/telegram/ContactsManager.cpp index f1a133168..8ac53b4c0 100644 --- a/td/telegram/ContactsManager.cpp +++ b/td/telegram/ContactsManager.cpp @@ -16736,6 +16736,17 @@ bool ContactsManager::get_channel_effective_has_hidden_participants(ChannelId ch return channel_full->has_hidden_participants || !channel_full->can_get_participants; } +int32 ContactsManager::get_channel_my_boost_count(ChannelId channel_id) { + auto channel_full = get_channel_full_const(channel_id); + if (channel_full == nullptr) { + channel_full = get_channel_full_force(channel_id, true, "get_channel_my_boost_count"); + if (channel_full == nullptr) { + return 0; + } + } + return channel_full->boost_count; +} + bool ContactsManager::have_channel(ChannelId channel_id) const { return channels_.count(channel_id) > 0; } diff --git a/td/telegram/ContactsManager.h b/td/telegram/ContactsManager.h index ff1769a0e..8981a2695 100644 --- a/td/telegram/ContactsManager.h +++ b/td/telegram/ContactsManager.h @@ -653,6 +653,7 @@ class ContactsManager final : public Actor { ChannelId get_channel_linked_channel_id(ChannelId channel_id, const char *source); int32 get_channel_slow_mode_delay(ChannelId channel_id, const char *source); bool get_channel_effective_has_hidden_participants(ChannelId channel_id, const char *source); + int32 get_channel_my_boost_count(ChannelId channel_id); void add_chat_participant(ChatId chat_id, UserId user_id, int32 forward_limit, Promise &&promise); diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index 212e8b761..1a257642d 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -4016,6 +4016,7 @@ void MessagesManager::Message::store(StorerT &storer) const { bool has_forward_info = forward_info != nullptr; bool has_saved_messages_topic_id = saved_messages_topic_id.is_valid(); bool has_initial_top_thread_message_id = !message_id.is_any_server() && initial_top_thread_message_id.is_valid(); + bool has_sender_boost_count = sender_boost_count != 0; BEGIN_STORE_FLAGS(); STORE_FLAG(is_channel_post); STORE_FLAG(is_outgoing); @@ -4099,6 +4100,7 @@ void MessagesManager::Message::store(StorerT &storer) const { STORE_FLAG(has_forward_info); STORE_FLAG(has_saved_messages_topic_id); STORE_FLAG(has_initial_top_thread_message_id); + STORE_FLAG(has_sender_boost_count); END_STORE_FLAGS(); } @@ -4219,6 +4221,9 @@ void MessagesManager::Message::store(StorerT &storer) const { if (has_initial_top_thread_message_id) { store(initial_top_thread_message_id, storer); } + if (has_sender_boost_count) { + store(sender_boost_count, storer); + } } // do not forget to resolve message dependencies @@ -4274,6 +4279,7 @@ void MessagesManager::Message::parse(ParserT &parser) { bool has_forward_info = false; bool has_saved_messages_topic_id = false; bool has_initial_top_thread_message_id = false; + bool has_sender_boost_count = false; BEGIN_PARSE_FLAGS(); PARSE_FLAG(is_channel_post); PARSE_FLAG(is_outgoing); @@ -4357,6 +4363,7 @@ void MessagesManager::Message::parse(ParserT &parser) { PARSE_FLAG(has_forward_info); PARSE_FLAG(has_saved_messages_topic_id); PARSE_FLAG(has_initial_top_thread_message_id); + PARSE_FLAG(has_sender_boost_count); END_PARSE_FLAGS(); } @@ -4541,6 +4548,9 @@ void MessagesManager::Message::parse(ParserT &parser) { if (has_initial_top_thread_message_id) { parse(initial_top_thread_message_id, parser); } + if (has_sender_boost_count) { + parse(sender_boost_count, parser); + } CHECK(content != nullptr); is_content_secret |= ttl.is_secret_message_content(content->get_type()); // repair is_content_secret for old messages @@ -12986,6 +12996,7 @@ MessagesManager::MessageInfo MessagesManager::parse_telegram_api_message( message_info.reply_markup = std::move(message->reply_markup_); message_info.restriction_reasons = get_restriction_reasons(std::move(message->restriction_reason_)); message_info.author_signature = std::move(message->post_author_); + message_info.sender_boost_count = message->from_boosts_applied_; if (message->saved_peer_id_ != nullptr) { message_info.saved_messages_topic_id = SavedMessagesTopicId(DialogId(message->saved_peer_id_)); } @@ -13271,6 +13282,7 @@ std::pair> MessagesManager::creat message->reply_to_story_full_id = reply_to_story_full_id; message->restriction_reasons = std::move(message_info.restriction_reasons); message->author_signature = std::move(message_info.author_signature); + message->sender_boost_count = message_info.sender_boost_count; message->saved_messages_topic_id = message_info.saved_messages_topic_id; message->is_outgoing = is_outgoing; message->is_channel_post = is_channel_post; @@ -22548,8 +22560,8 @@ td_api::object_ptr MessagesManager::get_dialog_event_log_messag nullptr, nullptr, m->is_outgoing, m->is_pinned, false, false, false, can_be_saved, false, false, false, false, false, false, false, false, false, true, m->is_channel_post, m->is_topic_message, false, m->date, edit_date, std::move(forward_info), std::move(import_info), std::move(interaction_info), Auto(), nullptr, 0, 0, nullptr, 0.0, - 0.0, via_bot_user_id, m->author_signature, 0, get_restriction_reason_description(m->restriction_reasons), - std::move(content), std::move(reply_markup)); + 0.0, via_bot_user_id, m->sender_boost_count, m->author_signature, 0, + get_restriction_reason_description(m->restriction_reasons), std::move(content), std::move(reply_markup)); } tl_object_ptr MessagesManager::get_message_object(MessageFullId message_full_id, const char *source) { @@ -22660,9 +22672,9 @@ tl_object_ptr MessagesManager::get_message_object(DialogId dial m->is_topic_message, m->contains_unread_mention, date, edit_date, std::move(forward_info), std::move(import_info), std::move(interaction_info), std::move(unread_reactions), std::move(reply_to), top_thread_message_id, td_->saved_messages_manager_->get_saved_messages_topic_id_object(m->saved_messages_topic_id), - std::move(self_destruct_type), ttl_expires_in, auto_delete_in, via_bot_user_id, m->author_signature, - m->media_album_id, get_restriction_reason_description(m->restriction_reasons), std::move(content), - std::move(reply_markup)); + std::move(self_destruct_type), ttl_expires_in, auto_delete_in, via_bot_user_id, m->sender_boost_count, + m->author_signature, m->media_album_id, get_restriction_reason_description(m->restriction_reasons), + std::move(content), std::move(reply_markup)); } tl_object_ptr MessagesManager::get_messages_object(int32 total_count, DialogId dialog_id, @@ -22855,6 +22867,9 @@ unique_ptr MessagesManager::create_message_to_send( } } } + if (m->sender_user_id == my_id && dialog_type == DialogType::Channel) { + m->sender_boost_count = td_->contacts_manager_->get_channel_my_boost_count(dialog_id.get_channel_id()); + } m->content = std::move(content); m->invert_media = invert_media; m->forward_info = std::move(forward_info); @@ -26953,6 +26968,9 @@ Result MessagesManager::add_local_message( m->update_stickersets_order = false; m->view_count = 0; m->forward_count = 0; + if (m->sender_user_id == my_id && dialog_type == DialogType::Channel) { + m->sender_boost_count = td_->contacts_manager_->get_channel_my_boost_count(dialog_id.get_channel_id()); + } m->content = std::move(message_content.content); m->invert_media = message_content.invert_media; m->disable_web_page_preview = message_content.disable_web_page_preview; @@ -33403,6 +33421,11 @@ bool MessagesManager::update_message(Dialog *d, Message *old_message, unique_ptr old_message->sender_dialog_id = new_message->sender_dialog_id; need_send_update = true; } + if (old_message->sender_boost_count != new_message->sender_boost_count) { + LOG(DEBUG) << "Change sender boost count"; + old_message->sender_boost_count = new_message->sender_boost_count; + need_send_update = true; + } if (old_message->forward_info != new_message->forward_info) { if (!replace_legacy && is_new_available && MessageForwardInfo::need_change_warning(old_message->forward_info.get(), new_message->forward_info.get(), diff --git a/td/telegram/MessagesManager.h b/td/telegram/MessagesManager.h index edb6db5c9..09411e3cd 100644 --- a/td/telegram/MessagesManager.h +++ b/td/telegram/MessagesManager.h @@ -981,6 +981,7 @@ class MessagesManager final : public Actor { int32 forward_count = 0; tl_object_ptr reply_info; tl_object_ptr reactions; + int32 sender_boost_count = 0; int32 edit_date = 0; vector restriction_reasons; string author_signature; @@ -1010,7 +1011,8 @@ class MessagesManager final : public Actor { int32 date = 0; int32 edit_date = 0; int32 send_date = 0; - int32 sending_id = 0; + int32 sending_id = 0; // for yet unsent messages + int32 sender_boost_count = 0; int64 random_id = 0;