From e4717bae0edfa1345516aa66c70f221697942c8b Mon Sep 17 00:00:00 2001 From: levlam Date: Mon, 3 Apr 2023 21:04:22 +0300 Subject: [PATCH] Send updateUserFullInfo when bot edit links are changed. --- td/telegram/ContactsManager.cpp | 33 +++++++++++++++++++++++++-------- td/telegram/ContactsManager.h | 1 + 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/td/telegram/ContactsManager.cpp b/td/telegram/ContactsManager.cpp index 6c2be5f55..6c8ee4497 100644 --- a/td/telegram/ContactsManager.cpp +++ b/td/telegram/ContactsManager.cpp @@ -10207,12 +10207,15 @@ void ContactsManager::on_get_user(tl_object_ptr &&user_ptr, if (is_verified != u->is_verified || is_support != u->is_support || is_bot != u->is_bot || can_join_groups != u->can_join_groups || can_read_all_group_messages != u->can_read_all_group_messages || restriction_reasons != u->restriction_reasons || is_scam != u->is_scam || is_fake != u->is_fake || - can_be_edited_bot != u->can_be_edited_bot || is_inline_bot != u->is_inline_bot || - inline_query_placeholder != u->inline_query_placeholder || need_location_bot != u->need_location_bot || - can_be_added_to_attach_menu != u->can_be_added_to_attach_menu || attach_menu_enabled != u->attach_menu_enabled) { - LOG_IF(ERROR, is_bot != u->is_bot && !is_deleted && !u->is_deleted && u->is_received) - << "User.is_bot has changed for " << user_id << "/" << u->usernames << " from " << source << " from " - << u->is_bot << " to " << is_bot; + is_inline_bot != u->is_inline_bot || inline_query_placeholder != u->inline_query_placeholder || + need_location_bot != u->need_location_bot || can_be_added_to_attach_menu != u->can_be_added_to_attach_menu || + attach_menu_enabled != u->attach_menu_enabled) { + if (is_bot != u->is_bot) { + LOG_IF(ERROR, !is_deleted && !u->is_deleted && u->is_received) + << "User.is_bot has changed for " << user_id << "/" << u->usernames << " from " << source << " from " + << u->is_bot << " to " << is_bot; + u->is_full_info_changed = true; + } u->is_verified = is_verified; u->is_support = is_support; u->is_bot = is_bot; @@ -10221,7 +10224,6 @@ void ContactsManager::on_get_user(tl_object_ptr &&user_ptr, u->restriction_reasons = std::move(restriction_reasons); u->is_scam = is_scam; u->is_fake = is_fake; - u->can_be_edited_bot = can_be_edited_bot; u->is_inline_bot = is_inline_bot; u->inline_query_placeholder = std::move(inline_query_placeholder); u->need_location_bot = need_location_bot; @@ -10231,9 +10233,11 @@ void ContactsManager::on_get_user(tl_object_ptr &&user_ptr, LOG(DEBUG) << "Info has changed for " << user_id; u->is_changed = true; } - if (is_premium != u->is_premium) { + if (is_premium != u->is_premium || can_be_edited_bot != u->can_be_edited_bot) { u->is_premium = is_premium; + u->can_be_edited_bot = can_be_edited_bot; u->is_changed = true; + u->is_full_info_changed = true; } if (u->bot_info_version != bot_info_version) { @@ -11754,6 +11758,7 @@ void ContactsManager::update_user(User *u, UserId user_id, bool from_binlog, boo if (u->is_deleted) { auto user_full = get_user_full(user_id); // must not load user_full from database before sending updateUser if (user_full != nullptr) { + u->is_full_info_changed = false; drop_user_full(user_id); } } @@ -11866,6 +11871,15 @@ void ContactsManager::update_user(User *u, UserId user_id, bool from_binlog, boo LOG(INFO) << "Repairing cache of " << user_id; reload_user(user_id, Promise()); } + + if (u->is_full_info_changed) { + u->is_full_info_changed = false; + auto user_full = get_user_full(user_id); + if (user_full != nullptr) { + user_full->need_send_update = true; + update_user_full(user_full, user_id, "update_user is_full_info_changed"); + } + } } void ContactsManager::update_chat(Chat *c, ChatId chat_id, bool from_binlog, bool from_database) { @@ -13065,6 +13079,9 @@ void ContactsManager::on_update_user_name(User *u, UserId user_id, string &&firs void ContactsManager::on_update_user_usernames(User *u, UserId user_id, Usernames &&usernames) { td_->messages_manager_->on_dialog_usernames_updated(DialogId(user_id), u->usernames, usernames); if (u->usernames != usernames) { + if (u->can_be_edited_bot && u->usernames.get_editable_username() != usernames.get_editable_username()) { + u->is_full_info_changed = true; + } u->usernames = std::move(usernames); u->is_username_changed = true; LOG(DEBUG) << "Usernames have changed for " << user_id; diff --git a/td/telegram/ContactsManager.h b/td/telegram/ContactsManager.h index 2120ce531..5996d7f35 100644 --- a/td/telegram/ContactsManager.h +++ b/td/telegram/ContactsManager.h @@ -784,6 +784,7 @@ class ContactsManager final : public Actor { bool is_phone_number_changed = true; bool is_is_contact_changed = true; bool is_is_deleted_changed = true; + bool is_full_info_changed = false; bool is_changed = true; // have new changes that need to be sent to the client and database bool need_save_to_database = true; // have new changes that need only to be saved to the database bool is_status_changed = true;