Allow to search for messages from inaccessible chats.

This commit is contained in:
levlam 2021-11-30 15:07:14 +03:00
parent 0c6922a0bf
commit ab153e306a
2 changed files with 10 additions and 9 deletions

View File

@ -2280,7 +2280,7 @@ class SearchMessagesQuery final : public Td::ResultHandler {
tl_object_ptr<telegram_api::InputPeer> sender_input_peer;
if (sender_dialog_id.is_valid()) {
flags |= telegram_api::messages_search::FROM_ID_MASK;
sender_input_peer = td_->messages_manager_->get_input_peer(sender_dialog_id, AccessRights::Read);
sender_input_peer = td_->messages_manager_->get_input_peer(sender_dialog_id, AccessRights::Know);
CHECK(sender_input_peer != nullptr);
}
if (top_thread_message_id.is_valid()) {
@ -6221,14 +6221,14 @@ int32 MessagesManager::get_message_index_mask(DialogId dialog_id, const Message
}
void MessagesManager::update_reply_count_by_message(Dialog *d, int diff, const Message *m) {
CHECK(d != nullptr);
CHECK(m != nullptr);
if (td_->auth_manager_->is_bot() || !m->top_thread_message_id.is_valid() ||
m->top_thread_message_id == m->message_id || !m->message_id.is_valid() || !m->message_id.is_server()) {
return;
}
auto replier_dialog_id =
has_message_sender_user_id(d->dialog_id, m) ? DialogId(m->sender_user_id) : m->sender_dialog_id;
update_message_reply_count(d, m->top_thread_message_id, replier_dialog_id, m->message_id,
update_message_reply_count(d, m->top_thread_message_id, get_message_sender(m), m->message_id,
diff < 0 ? G()->unix_time() : m->date, diff);
}
@ -21523,7 +21523,7 @@ std::pair<int32, vector<MessageId>> MessagesManager::search_dialog_messages(
return result;
}
auto sender_dialog_id = r_sender_dialog_id.move_as_ok();
if (sender_dialog_id != DialogId() && !have_input_peer(sender_dialog_id, AccessRights::Read)) {
if (sender_dialog_id != DialogId() && !have_input_peer(sender_dialog_id, AccessRights::Know)) {
promise.set_error(Status::Error(400, "Invalid message sender specified"));
return result;
}
@ -26483,8 +26483,7 @@ tl_object_ptr<telegram_api::InputPeer> MessagesManager::get_send_message_as_inpu
if (!m->has_explicit_sender) {
return nullptr;
}
auto sender_dialog_id = get_message_sender(m);
return get_input_peer(sender_dialog_id, AccessRights::Write);
return get_input_peer(get_message_sender(m), AccessRights::Write);
}
bool MessagesManager::can_set_game_score(FullMessageId full_message_id) const {

View File

@ -2087,10 +2087,12 @@ class CliClient final : public Actor {
} else if (op == "SMU" || op == "SMC") {
string chat_id;
string sender_id;
string from_message_id;
string limit;
get_args(args, chat_id, sender_id, limit);
get_args(args, chat_id, sender_id, from_message_id, limit);
send_request(td_api::make_object<td_api::searchChatMessages>(
as_chat_id(chat_id), "", as_message_sender(sender_id), 0, 0, as_limit(limit), nullptr, 0));
as_chat_id(chat_id), "", as_message_sender(sender_id), as_message_id(from_message_id), 0, as_limit(limit),
nullptr, 0));
} else if (op == "SM") {
string chat_id;
string filter;