Use get_message_sender_dialog_id in toggle_message_sender_is_blocked.

This commit is contained in:
levlam 2021-11-15 14:00:30 +03:00
parent 1a291847d7
commit b75d190e81
2 changed files with 24 additions and 42 deletions

View File

@ -102,7 +102,7 @@ Result<DialogId> get_message_sender_dialog_id(Td *td,
if (allow_empty) {
return DialogId();
}
return Status::Error(400, "Member identifier is not specified");
return Status::Error(400, "Message sender must be non-empty");
}
switch (message_sender_id->get_id()) {
case td_api::messageSenderUser::ID: {
@ -126,8 +126,12 @@ Result<DialogId> get_message_sender_dialog_id(Td *td,
}
return Status::Error(400, "Invalid chat identifier specified");
}
if (check_access && !td->messages_manager_->have_dialog_force(dialog_id, "get_message_sender_dialog_id")) {
return Status::Error(400, "Unknown chat identifier specified");
if (check_access) {
bool is_user = dialog_id.get_type() == DialogType::User;
if (is_user ? !td->contacts_manager_->have_user_force(dialog_id.get_user_id())
: !td->messages_manager_->have_dialog_force(dialog_id, "get_message_sender_dialog_id")) {
return Status::Error(400, "Unknown chat identifier specified");
}
}
return dialog_id;
}

View File

@ -19202,52 +19202,30 @@ void MessagesManager::toggle_dialog_is_marked_as_unread_on_server(DialogId dialo
Status MessagesManager::toggle_message_sender_is_blocked(const td_api::object_ptr<td_api::MessageSender> &sender,
bool is_blocked) {
if (sender == nullptr) {
return Status::Error(400, "Message sender must be non-empty");
}
UserId sender_user_id;
DialogId dialog_id;
switch (sender->get_id()) {
case td_api::messageSenderUser::ID:
sender_user_id = UserId(static_cast<const td_api::messageSenderUser *>(sender.get())->user_id_);
TRY_RESULT(dialog_id, get_message_sender_dialog_id(td_, sender, true, false));
switch (dialog_id.get_type()) {
case DialogType::User:
if (dialog_id == get_my_dialog_id()) {
return Status::Error(400, is_blocked ? Slice("Can't block self") : Slice("Can't unblock self"));
}
break;
case td_api::messageSenderChat::ID: {
auto sender_dialog_id = DialogId(static_cast<const td_api::messageSenderChat *>(sender.get())->chat_id_);
if (!have_dialog_force(sender_dialog_id, "toggle_message_sender_is_blocked")) {
return Status::Error(400, "Sender chat not found");
}
switch (sender_dialog_id.get_type()) {
case DialogType::User:
sender_user_id = sender_dialog_id.get_user_id();
break;
case DialogType::Chat:
return Status::Error(400, "Basic group chats can't be blocked");
case DialogType::Channel:
dialog_id = sender_dialog_id;
break;
case DialogType::SecretChat:
sender_user_id = td_->contacts_manager_->get_secret_chat_user_id(sender_dialog_id.get_secret_chat_id());
break;
case DialogType::None:
default:
UNREACHABLE();
case DialogType::Chat:
return Status::Error(400, "Basic group chats can't be blocked");
case DialogType::Channel:
// ok
break;
case DialogType::SecretChat: {
auto user_id = td_->contacts_manager_->get_secret_chat_user_id(dialog_id.get_secret_chat_id());
if (!user_id.is_valid() || !td_->contacts_manager_->have_user_force(user_id)) {
return Status::Error(400, "The secret chat can't be blocked");
}
dialog_id = DialogId(user_id);
break;
}
case DialogType::None:
default:
UNREACHABLE();
}
if (!dialog_id.is_valid()) {
if (!td_->contacts_manager_->have_user_force(sender_user_id)) {
return Status::Error(400, "Sender user not found");
}
dialog_id = DialogId(sender_user_id);
}
if (dialog_id == get_my_dialog_id()) {
return Status::Error(400, is_blocked ? Slice("Can't block self") : Slice("Can't unblock self"));
}
Dialog *d = get_dialog_force(dialog_id, "toggle_message_sender_is_blocked");
if (!have_input_peer(dialog_id, AccessRights::Know)) {