From 2acbcdbb600908449f2a19f772dec82768f9adbc Mon Sep 17 00:00:00 2001 From: levlam Date: Thu, 25 Jan 2024 20:56:10 +0300 Subject: [PATCH] Allow sending messages to user after receiving a message from them. --- td/telegram/ContactsManager.cpp | 7 +++++++ td/telegram/ContactsManager.h | 2 ++ td/telegram/MessagesManager.cpp | 4 ++++ 3 files changed, 13 insertions(+) diff --git a/td/telegram/ContactsManager.cpp b/td/telegram/ContactsManager.cpp index 33e9f9a35..b5781ae63 100644 --- a/td/telegram/ContactsManager.cpp +++ b/td/telegram/ContactsManager.cpp @@ -5593,6 +5593,13 @@ void ContactsManager::on_get_is_premium_required_to_contact_users(vector promise.set_value(Unit()); } +void ContactsManager::allow_send_message_to_user(UserId user_id) { + if (get_user_full(user_id) == nullptr) { + CHECK(user_id.is_valid()); + user_full_contact_require_premium_[user_id] = true; + } +} + void ContactsManager::load_contacts(Promise &&promise) { if (td_->auth_manager_->is_bot()) { are_contacts_loaded_ = true; diff --git a/td/telegram/ContactsManager.h b/td/telegram/ContactsManager.h index 178f5b477..591fb39b8 100644 --- a/td/telegram/ContactsManager.h +++ b/td/telegram/ContactsManager.h @@ -188,6 +188,8 @@ class ContactsManager final : public Actor { void can_send_message_to_user(UserId user_id, bool force, Promise> &&promise); + void allow_send_message_to_user(UserId user_id); + void on_imported_contacts(int64 random_id, Result> result); void on_deleted_contacts(const vector &deleted_contact_user_ids); diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index 2bfc07cfc..4023a0838 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -33198,6 +33198,10 @@ MessagesManager::Message *MessagesManager::add_message_to_dialog(Dialog *d, uniq CHECK(is_inserted); } + if (!td_->auth_manager_->is_bot() && dialog_type == DialogType::User && !m->is_outgoing) { + td_->contacts_manager_->allow_send_message_to_user(dialog_id.get_user_id()); + } + switch (dialog_type) { case DialogType::User: case DialogType::Chat: