Use get_message_sender_dialog_id in search_dialog_messages.
This commit is contained in:
parent
b75d190e81
commit
76e1466abd
@ -21401,45 +21401,19 @@ std::pair<int32, vector<MessageId>> MessagesManager::search_dialog_messages(
|
|||||||
}
|
}
|
||||||
if (!have_input_peer(dialog_id, AccessRights::Read)) {
|
if (!have_input_peer(dialog_id, AccessRights::Read)) {
|
||||||
promise.set_error(Status::Error(400, "Can't access the chat"));
|
promise.set_error(Status::Error(400, "Can't access the chat"));
|
||||||
return {};
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
DialogId sender_dialog_id;
|
auto r_sender_dialog_id = get_message_sender_dialog_id(td_, sender, true, true);
|
||||||
if (sender != nullptr) {
|
if (r_sender_dialog_id.is_error()) {
|
||||||
switch (sender->get_id()) {
|
promise.set_error(r_sender_dialog_id.move_as_error());
|
||||||
case td_api::messageSenderUser::ID:
|
|
||||||
sender_dialog_id = DialogId(UserId(static_cast<const td_api::messageSenderUser *>(sender.get())->user_id_));
|
|
||||||
break;
|
|
||||||
case td_api::messageSenderChat::ID:
|
|
||||||
sender_dialog_id = DialogId(static_cast<const td_api::messageSenderChat *>(sender.get())->chat_id_);
|
|
||||||
switch (sender_dialog_id.get_type()) {
|
|
||||||
case DialogType::User:
|
|
||||||
case DialogType::Chat:
|
|
||||||
case DialogType::Channel:
|
|
||||||
// ok
|
|
||||||
break;
|
|
||||||
case DialogType::SecretChat:
|
|
||||||
promise.set_value(Unit());
|
|
||||||
return result;
|
|
||||||
case DialogType::None:
|
|
||||||
if (sender_dialog_id == DialogId()) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
promise.set_error(Status::Error(400, "Invalid sender chat identifier specified"));
|
|
||||||
return result;
|
|
||||||
default:
|
|
||||||
UNREACHABLE();
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
break;
|
auto sender_dialog_id = r_sender_dialog_id.move_as_ok();
|
||||||
default:
|
|
||||||
UNREACHABLE();
|
|
||||||
}
|
|
||||||
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::Read)) {
|
||||||
promise.set_error(Status::Error(400, "Invalid message sender specified"));
|
promise.set_error(Status::Error(400, "Invalid message sender specified"));
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if (sender_dialog_id == dialog_id && is_broadcast_channel(dialog_id)) {
|
if (sender_dialog_id == dialog_id && is_broadcast_channel(dialog_id)) {
|
||||||
sender_dialog_id = DialogId();
|
sender_dialog_id = DialogId();
|
||||||
}
|
}
|
||||||
@ -21463,6 +21437,11 @@ std::pair<int32, vector<MessageId>> MessagesManager::search_dialog_messages(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (sender_dialog_id.get_type() == DialogType::SecretChat) {
|
||||||
|
promise.set_value(Unit());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
do {
|
do {
|
||||||
random_id = Random::secure_int64();
|
random_id = Random::secure_int64();
|
||||||
} while (random_id == 0 || found_dialog_messages_.find(random_id) != found_dialog_messages_.end());
|
} while (random_id == 0 || found_dialog_messages_.find(random_id) != found_dialog_messages_.end());
|
||||||
@ -27201,25 +27180,14 @@ Result<MessageId> MessagesManager::add_local_message(
|
|||||||
UserId sender_user_id;
|
UserId sender_user_id;
|
||||||
DialogId sender_dialog_id;
|
DialogId sender_dialog_id;
|
||||||
if (sender != nullptr) {
|
if (sender != nullptr) {
|
||||||
switch (sender->get_id()) {
|
TRY_RESULT_ASSIGN(sender_dialog_id, get_message_sender_dialog_id(td_, sender, true, false));
|
||||||
case td_api::messageSenderUser::ID:
|
auto sender_dialog_type = sender_dialog_id.get_type();
|
||||||
sender_user_id = UserId(static_cast<const td_api::messageSenderUser *>(sender.get())->user_id_);
|
if (sender_dialog_type == DialogType::User) {
|
||||||
if (!td_->contacts_manager_->have_user_force(sender_user_id)) {
|
sender_user_id = sender_dialog_id.get_user_id();
|
||||||
return Status::Error(400, "Sender user not found");
|
sender_dialog_id = DialogId();
|
||||||
}
|
} else if (sender_dialog_type != DialogType::Channel) {
|
||||||
break;
|
|
||||||
case td_api::messageSenderChat::ID:
|
|
||||||
sender_dialog_id = DialogId(static_cast<const td_api::messageSenderChat *>(sender.get())->chat_id_);
|
|
||||||
if (sender_dialog_id.get_type() != DialogType::Channel) {
|
|
||||||
return Status::Error(400, "Sender chat must be a supergroup or channel");
|
return Status::Error(400, "Sender chat must be a supergroup or channel");
|
||||||
}
|
}
|
||||||
if (!have_dialog_force(sender_dialog_id, "add_local_message")) {
|
|
||||||
return Status::Error(400, "Sender chat not found");
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
UNREACHABLE();
|
|
||||||
}
|
|
||||||
} else if (is_channel_post) {
|
} else if (is_channel_post) {
|
||||||
sender_dialog_id = dialog_id;
|
sender_dialog_id = dialog_id;
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
Reference in New Issue
Block a user