diff --git a/td/telegram/CallbackQueriesManager.cpp b/td/telegram/CallbackQueriesManager.cpp index 1859cd2f..7a6ee9e8 100644 --- a/td/telegram/CallbackQueriesManager.cpp +++ b/td/telegram/CallbackQueriesManager.cpp @@ -182,7 +182,7 @@ void CallbackQueriesManager::on_new_query(int32 flags, int64 callback_query_id, return; } - td_->messages_manager_->force_create_dialog(dialog_id, "on_new_callback_query"); + td_->messages_manager_->force_create_dialog(dialog_id, "on_new_callback_query", true); send_closure( G()->td(), &Td::send_update, make_tl_object<td_api::updateNewCallbackQuery>( diff --git a/td/telegram/ContactsManager.cpp b/td/telegram/ContactsManager.cpp index cd157284..08f2b22e 100644 --- a/td/telegram/ContactsManager.cpp +++ b/td/telegram/ContactsManager.cpp @@ -3721,7 +3721,7 @@ bool ContactsManager::have_input_peer_channel(const Channel *c, ChannelId channe if (!c->username.empty() || c->has_location) { return true; } - if (!from_linked && c->has_linked_channel) { + if (!from_linked) { auto linked_channel_id = get_linked_channel_id(channel_id); if (linked_channel_id.is_valid() && have_input_peer_channel(get_channel(linked_channel_id), linked_channel_id, access_rights, true)) { @@ -8089,7 +8089,7 @@ void ContactsManager::update_channel(Channel *c, ChannelId channel_id, bool from } else if (!from_database && c->was_member != is_member) { DialogId dialog_id(channel_id); send_closure_later(G()->messages_manager(), &MessagesManager::force_create_dialog, dialog_id, "update channel", - true); + true, true); } c->had_read_access = have_read_access; c->was_member = is_member; @@ -8117,7 +8117,7 @@ void ContactsManager::update_secret_chat(SecretChat *c, SecretChatId secret_chat DialogId dialog_id(secret_chat_id); send_closure_later(G()->messages_manager(), &MessagesManager::force_create_dialog, dialog_id, "update secret chat", - true); + true, true); if (c->is_state_changed) { send_closure_later(G()->messages_manager(), &MessagesManager::on_update_secret_chat_state, secret_chat_id, c->state); @@ -8229,7 +8229,8 @@ void ContactsManager::update_channel_full(ChannelFull *channel_full, ChannelId c channel_full->is_changed = false; if (channel_full->need_send_update) { if (channel_full->linked_channel_id.is_valid()) { - td_->messages_manager_->force_create_dialog(DialogId(channel_full->linked_channel_id), "update_channel_full"); + td_->messages_manager_->force_create_dialog(DialogId(channel_full->linked_channel_id), "update_channel_full", + true); } send_closure( diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index 05625af4..82e6491c 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -20265,14 +20265,14 @@ unique_ptr<MessagesManager::MessageForwardInfo> MessagesManager::get_message_for } else { LOG_IF(ERROR, td_->contacts_manager_->have_min_channel(channel_id)) << "Receive forward from min channel"; dialog_id = DialogId(channel_id); - force_create_dialog(dialog_id, "message forward info"); + force_create_dialog(dialog_id, "message forward info", true); if (sender_user_id.is_valid()) { LOG(ERROR) << "Receive valid sender user id in message forward header: " << oneline(to_string(forward_header)); sender_user_id = UserId(); } } if (from_dialog_id.is_valid()) { - force_create_dialog(from_dialog_id, "message forward from info"); + force_create_dialog(from_dialog_id, "message forward from info", true); } return td::make_unique<MessageForwardInfo>(sender_user_id, forward_header->date_, dialog_id, message_id, @@ -23770,7 +23770,7 @@ DialogId MessagesManager::search_public_dialog(const string &username_to_search, if (dialog_id.is_valid()) { if (have_input_peer(dialog_id, AccessRights::Read)) { if (td_->auth_manager_->is_bot()) { - force_create_dialog(dialog_id, "search public dialog"); + force_create_dialog(dialog_id, "search public dialog", true); } else { const Dialog *d = get_dialog_force(dialog_id); if (!is_dialog_inited(d)) { @@ -23784,7 +23784,7 @@ DialogId MessagesManager::search_public_dialog(const string &username_to_search, } else { // bot username maybe known despite there is no access_hash if (force || dialog_id.get_type() != DialogType::User) { - force_create_dialog(dialog_id, "search public dialog"); + force_create_dialog(dialog_id, "search public dialog", true); promise.set_value(Unit()); return dialog_id; } @@ -27259,7 +27259,8 @@ MessageId MessagesManager::get_message_id_by_random_id(Dialog *d, int64 random_i return it->second; } -void MessagesManager::force_create_dialog(DialogId dialog_id, const char *source, bool force_update_dialog_pos) { +void MessagesManager::force_create_dialog(DialogId dialog_id, const char *source, bool expect_no_access, + bool force_update_dialog_pos) { LOG_CHECK(dialog_id.is_valid()) << source; Dialog *d = get_dialog_force(dialog_id); if (d == nullptr) { @@ -27319,12 +27320,8 @@ void MessagesManager::force_create_dialog(DialogId dialog_id, const char *source if (!have_input_peer(dialog_id, AccessRights::Read)) { if (!have_dialog_info(dialog_id)) { LOG(ERROR) << "Have no info about " << dialog_id << " received from " << source << ", but forced to create it"; - } else { - LOG_IF(ERROR, - Slice(source) != Slice("message forward info") && Slice(source) != Slice("message forward from info") && - Slice(source) != Slice("on_new_callback_query") && Slice(source) != Slice("search public dialog") && - Slice(source) != Slice("create new secret chat") && !force_update_dialog_pos) - << "Have no access to " << dialog_id << " received from " << source << ", but forced to create it"; + } else if (!expect_no_access) { + LOG(ERROR) << "Have no access to " << dialog_id << " received from " << source << ", but forced to create it"; } } } else if (force_update_dialog_pos) { diff --git a/td/telegram/MessagesManager.h b/td/telegram/MessagesManager.h index f8579f3a..73468fd5 100644 --- a/td/telegram/MessagesManager.h +++ b/td/telegram/MessagesManager.h @@ -747,7 +747,8 @@ class MessagesManager : public Actor { void on_get_channel_difference(DialogId dialog_id, int32 request_pts, int32 request_limit, tl_object_ptr<telegram_api::updates_ChannelDifference> &&difference_ptr); - void force_create_dialog(DialogId dialog_id, const char *source, bool force_update_dialog_pos = false); + void force_create_dialog(DialogId dialog_id, const char *source, bool expect_no_access = false, + bool force_update_dialog_pos = false); void send_get_dialog_notification_settings_query(DialogId dialog_id, Promise<Unit> &&promise); diff --git a/td/telegram/Td.cpp b/td/telegram/Td.cpp index 4d629c0e..fe1efff9 100644 --- a/td/telegram/Td.cpp +++ b/td/telegram/Td.cpp @@ -1830,7 +1830,7 @@ class CreateNewSecretChatRequest : public RequestActor<SecretChatId> { secret_chat_id_, 0 /* no access_hash */, user_id_, SecretChatState::Unknown, true /* it is outbound chat */, -1 /* unknown ttl */, 0 /* unknown creation date */, "" /* no key_hash */, 0); DialogId dialog_id(secret_chat_id_); - td->messages_manager_->force_create_dialog(dialog_id, "create new secret chat"); + td->messages_manager_->force_create_dialog(dialog_id, "create new secret chat", true); send_result(td->messages_manager_->get_chat_object(dialog_id)); }