diff --git a/td/telegram/MessageReaction.cpp b/td/telegram/MessageReaction.cpp index 2415d2f6f..9d78f328d 100644 --- a/td/telegram/MessageReaction.cpp +++ b/td/telegram/MessageReaction.cpp @@ -7,6 +7,7 @@ #include "td/telegram/MessageReaction.h" #include "td/telegram/ContactsManager.h" +#include "td/telegram/MessageSender.h" #include "td/telegram/MessagesManager.h" #include "td/telegram/Td.h" #include "td/telegram/UpdatesManager.h" @@ -124,10 +125,11 @@ class GetMessageReactionsListQuery final : public Td::ResultHandler { continue; } - reactions.push_back(td_api::make_object( - reaction->reaction_, - td_api::make_object( - td_->contacts_manager_->get_user_id_object(user_id, "GetMessageReactionsListQuery")))); + auto message_sender = get_min_message_sender_object(td_, DialogId(user_id), "GetMessageReactionsListQuery"); + if (message_sender != nullptr) { + reactions.push_back( + td_api::make_object(reaction->reaction_, std::move(message_sender))); + } } promise_.set_value( @@ -158,28 +160,9 @@ td_api::object_ptr MessageReaction::get_message_reactio vector> recent_choosers; for (auto dialog_id : recent_chooser_dialog_ids_) { - auto dialog_type = dialog_id.get_type(); - if (dialog_type == DialogType::User) { - auto user_id = dialog_id.get_user_id(); - if (td->contacts_manager_->have_min_user(user_id)) { - recent_choosers.push_back(td_api::make_object( - td->contacts_manager_->get_user_id_object(user_id, "get_message_reaction_object"))); - } else { - LOG(ERROR) << "Skip unknown reacted " << user_id; - } - } else { - if (!td->messages_manager_->have_dialog(dialog_id) && - (td->messages_manager_->have_dialog_info(dialog_id) || - (dialog_type == DialogType::Channel && - td->contacts_manager_->have_min_channel(dialog_id.get_channel_id())))) { - LOG(INFO) << "Force creation of " << dialog_id; - td->messages_manager_->force_create_dialog(dialog_id, "get_message_reaction_object", true); - } - if (td->messages_manager_->have_dialog(dialog_id)) { - recent_choosers.push_back(td_api::make_object(dialog_id.get())); - } else { - LOG(ERROR) << "Skip unknown reacted " << dialog_id; - } + auto recent_chooser = get_min_message_sender_object(td, dialog_id, "get_message_reaction_object"); + if (recent_chooser != nullptr) { + recent_choosers.push_back(std::move(recent_chooser)); } } return td_api::make_object(reaction_, choose_count_, is_chosen_, std::move(recent_choosers)); diff --git a/td/telegram/MessageReplyInfo.cpp b/td/telegram/MessageReplyInfo.cpp index 6c1d82e17..4f746fc39 100644 --- a/td/telegram/MessageReplyInfo.cpp +++ b/td/telegram/MessageReplyInfo.cpp @@ -7,6 +7,7 @@ #include "td/telegram/MessageReplyInfo.h" #include "td/telegram/ContactsManager.h" +#include "td/telegram/MessageSender.h" #include "td/telegram/MessagesManager.h" #include "td/telegram/ServerMessageId.h" #include "td/telegram/Td.h" @@ -197,28 +198,9 @@ td_api::object_ptr MessageReplyInfo::get_message_reply vector> recent_repliers; for (auto dialog_id : recent_replier_dialog_ids) { - auto dialog_type = dialog_id.get_type(); - if (dialog_type == DialogType::User) { - auto user_id = dialog_id.get_user_id(); - if (td->contacts_manager_->have_min_user(user_id)) { - recent_repliers.push_back(td_api::make_object( - td->contacts_manager_->get_user_id_object(user_id, "get_message_reply_info_object"))); - } else { - LOG(ERROR) << "Skip unknown replied " << user_id; - } - } else { - if (!td->messages_manager_->have_dialog(dialog_id) && - (td->messages_manager_->have_dialog_info(dialog_id) || - (dialog_type == DialogType::Channel && - td->contacts_manager_->have_min_channel(dialog_id.get_channel_id())))) { - LOG(INFO) << "Force creation of " << dialog_id; - td->messages_manager_->force_create_dialog(dialog_id, "get_message_reply_info_object", true); - } - if (td->messages_manager_->have_dialog(dialog_id)) { - recent_repliers.push_back(td_api::make_object(dialog_id.get())); - } else { - LOG(ERROR) << "Skip unknown replied " << dialog_id; - } + auto recent_replier = get_min_message_sender_object(td, dialog_id, "get_message_reply_info_object"); + if (recent_replier != nullptr) { + recent_repliers.push_back(std::move(recent_replier)); } } return td_api::make_object(reply_count, std::move(recent_repliers), diff --git a/td/telegram/MessageSender.cpp b/td/telegram/MessageSender.cpp index 0f8557953..f809cbfa5 100644 --- a/td/telegram/MessageSender.cpp +++ b/td/telegram/MessageSender.cpp @@ -59,6 +59,29 @@ td_api::object_ptr get_message_sender_object(Td *td, Dial return get_message_sender_object(td, UserId(), dialog_id, source); } +td_api::object_ptr get_min_message_sender_object(Td *td, DialogId dialog_id, + const char *source) { + auto dialog_type = dialog_id.get_type(); + if (dialog_type == DialogType::User) { + auto user_id = dialog_id.get_user_id(); + if (td->contacts_manager_->have_min_user(user_id)) { + return td_api::make_object(td->contacts_manager_->get_user_id_object(user_id, source)); + } + } else { + if (!td->messages_manager_->have_dialog(dialog_id) && + (td->messages_manager_->have_dialog_info(dialog_id) || + (dialog_type == DialogType::Channel && td->contacts_manager_->have_min_channel(dialog_id.get_channel_id())))) { + LOG(INFO) << "Force creation of " << dialog_id; + td->messages_manager_->force_create_dialog(dialog_id, source, true); + } + if (td->messages_manager_->have_dialog(dialog_id)) { + return td_api::make_object(dialog_id.get()); + } + } + LOG(ERROR) << "Can't return unknown " << dialog_id << " from " << source; + return nullptr; +} + vector get_message_sender_dialog_ids(Td *td, const vector> &peers) { vector message_sender_dialog_ids; diff --git a/td/telegram/MessageSender.h b/td/telegram/MessageSender.h index b8ad38051..120fe5ff9 100644 --- a/td/telegram/MessageSender.h +++ b/td/telegram/MessageSender.h @@ -29,6 +29,8 @@ td_api::object_ptr get_message_sender_object(Td *td, User td_api::object_ptr get_message_sender_object(Td *td, DialogId dialog_id, const char *source); +td_api::object_ptr get_min_message_sender_object(Td *td, DialogId dialog_id, const char *source); + vector get_message_sender_dialog_ids(Td *td, const vector> &peers);