Add MessagesManager::can_save_message.
This commit is contained in:
parent
f5c65b83ee
commit
8a9506c1de
@ -10200,6 +10200,13 @@ bool MessagesManager::can_forward_message(DialogId from_dialog_id, const Message
|
|||||||
return can_forward_message_content(m->content.get());
|
return can_forward_message_content(m->content.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool MessagesManager::can_save_message(DialogId dialog_id, const Message *m) const {
|
||||||
|
if (m == nullptr || m->noforwards || m->is_content_secret) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return get_dialog_allow_saving_content(dialog_id);
|
||||||
|
}
|
||||||
|
|
||||||
bool MessagesManager::can_get_message_statistics(FullMessageId full_message_id) {
|
bool MessagesManager::can_get_message_statistics(FullMessageId full_message_id) {
|
||||||
return can_get_message_statistics(full_message_id.get_dialog_id(),
|
return can_get_message_statistics(full_message_id.get_dialog_id(),
|
||||||
get_message_force(full_message_id, "can_get_message_statistics"));
|
get_message_force(full_message_id, "can_get_message_statistics"));
|
||||||
@ -23562,7 +23569,7 @@ tl_object_ptr<td_api::message> MessagesManager::get_message_object(DialogId dial
|
|||||||
auto scheduling_state = is_scheduled ? get_message_scheduling_state_object(m->date) : nullptr;
|
auto scheduling_state = is_scheduled ? get_message_scheduling_state_object(m->date) : nullptr;
|
||||||
auto forward_info = get_message_forward_info_object(m->forward_info);
|
auto forward_info = get_message_forward_info_object(m->forward_info);
|
||||||
auto interaction_info = get_message_interaction_info_object(dialog_id, m);
|
auto interaction_info = get_message_interaction_info_object(dialog_id, m);
|
||||||
auto can_be_saved = !m->noforwards && get_dialog_allow_saving_content(dialog_id) && !m->is_content_secret;
|
auto can_be_saved = can_save_message(dialog_id, m);
|
||||||
auto can_be_edited = for_event_log ? false : can_edit_message(dialog_id, m, false, td_->auth_manager_->is_bot());
|
auto can_be_edited = for_event_log ? false : can_edit_message(dialog_id, m, false, td_->auth_manager_->is_bot());
|
||||||
auto can_be_forwarded = for_event_log ? false : can_forward_message(dialog_id, m) && can_be_saved;
|
auto can_be_forwarded = for_event_log ? false : can_forward_message(dialog_id, m) && can_be_saved;
|
||||||
auto can_get_statistics = for_event_log ? false : can_get_message_statistics(dialog_id, m);
|
auto can_get_statistics = for_event_log ? false : can_get_message_statistics(dialog_id, m);
|
||||||
@ -24267,6 +24274,9 @@ Result<InputMessageContent> MessagesManager::process_input_message_content(
|
|||||||
if (!can_forward_message(from_dialog_id, copied_message)) {
|
if (!can_forward_message(from_dialog_id, copied_message)) {
|
||||||
return Status::Error(400, "Can't copy message");
|
return Status::Error(400, "Can't copy message");
|
||||||
}
|
}
|
||||||
|
if (!can_save_message(from_dialog_id, copied_message) && !td_->auth_manager_->is_bot()) {
|
||||||
|
return Status::Error(400, "Message copying is restricted");
|
||||||
|
}
|
||||||
|
|
||||||
unique_ptr<MessageContent> content = dup_message_content(td_, dialog_id, copied_message->content.get(),
|
unique_ptr<MessageContent> content = dup_message_content(td_, dialog_id, copied_message->content.get(),
|
||||||
MessageContentDupType::Copy, std::move(copy_options));
|
MessageContentDupType::Copy, std::move(copy_options));
|
||||||
@ -26988,6 +26998,11 @@ Result<MessagesManager::ForwardedMessages> MessagesManager::get_forwarded_messag
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool need_copy = !message_id.is_server() || to_secret || copy_options[i].send_copy;
|
bool need_copy = !message_id.is_server() || to_secret || copy_options[i].send_copy;
|
||||||
|
if (!(need_copy && td_->auth_manager_->is_bot()) && !can_save_message(from_dialog_id, forwarded_message)) {
|
||||||
|
LOG(INFO) << "Forward of " << message_id << " is restricted";
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
auto type = need_copy ? MessageContentDupType::Copy : MessageContentDupType::Forward;
|
auto type = need_copy ? MessageContentDupType::Copy : MessageContentDupType::Forward;
|
||||||
auto top_thread_message_id = copy_options[i].top_thread_message_id;
|
auto top_thread_message_id = copy_options[i].top_thread_message_id;
|
||||||
auto reply_to_message_id = copy_options[i].reply_to_message_id;
|
auto reply_to_message_id = copy_options[i].reply_to_message_id;
|
||||||
|
@ -1971,6 +1971,8 @@ class MessagesManager final : public Actor {
|
|||||||
|
|
||||||
static bool can_forward_message(DialogId from_dialog_id, const Message *m);
|
static bool can_forward_message(DialogId from_dialog_id, const Message *m);
|
||||||
|
|
||||||
|
bool can_save_message(DialogId dialog_id, const Message *m) const;
|
||||||
|
|
||||||
bool can_get_message_statistics(DialogId dialog_id, const Message *m) const;
|
bool can_get_message_statistics(DialogId dialog_id, const Message *m) const;
|
||||||
|
|
||||||
static bool can_delete_channel_message(const DialogParticipantStatus &status, const Message *m, bool is_bot);
|
static bool can_delete_channel_message(const DialogParticipantStatus &status, const Message *m, bool is_bot);
|
||||||
|
Loading…
Reference in New Issue
Block a user