Do not allow to send scheduled live location and self-destructing messages.
GitOrigin-RevId: 17a93e32f995f67cc164ca7636c8a2025376525c
This commit is contained in:
parent
5f2b97b8a7
commit
439ff9be0b
@ -17869,6 +17869,7 @@ Result<MessageId> MessagesManager::send_message(DialogId dialog_id, MessageId re
|
|||||||
TRY_RESULT(message_reply_markup, get_dialog_reply_markup(dialog_id, std::move(reply_markup)));
|
TRY_RESULT(message_reply_markup, get_dialog_reply_markup(dialog_id, std::move(reply_markup)));
|
||||||
TRY_RESULT(message_content, process_input_message_content(dialog_id, std::move(input_message_content)));
|
TRY_RESULT(message_content, process_input_message_content(dialog_id, std::move(input_message_content)));
|
||||||
TRY_RESULT(send_message_options, process_send_message_options(dialog_id, std::move(options)));
|
TRY_RESULT(send_message_options, process_send_message_options(dialog_id, std::move(options)));
|
||||||
|
TRY_STATUS(can_use_send_message_options(send_message_options, message_content));
|
||||||
|
|
||||||
// there must be no errors after get_message_to_send call
|
// there must be no errors after get_message_to_send call
|
||||||
|
|
||||||
@ -17992,6 +17993,25 @@ Result<MessagesManager::SendMessageOptions> MessagesManager::process_send_messag
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Status MessagesManager::can_use_send_message_options(const SendMessageOptions &options,
|
||||||
|
const unique_ptr<MessageContent> &content, int32 ttl) {
|
||||||
|
if (options.schedule_date != 0) {
|
||||||
|
if (ttl > 0) {
|
||||||
|
return Status::Error(400, "Can't send scheduled self-destructing messages");
|
||||||
|
}
|
||||||
|
if (content->get_type() == MessageContentType::LiveLocation) {
|
||||||
|
return Status::Error(400, "Can't send scheduled live location messages");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return Status::OK();
|
||||||
|
}
|
||||||
|
|
||||||
|
Status MessagesManager::can_use_send_message_options(const SendMessageOptions &options,
|
||||||
|
const InputMessageContent &content) {
|
||||||
|
return can_use_send_message_options(options, content.content, content.ttl);
|
||||||
|
}
|
||||||
|
|
||||||
int64 MessagesManager::generate_new_media_album_id() {
|
int64 MessagesManager::generate_new_media_album_id() {
|
||||||
int64 media_album_id = 0;
|
int64 media_album_id = 0;
|
||||||
do {
|
do {
|
||||||
@ -18021,6 +18041,7 @@ Result<vector<MessageId>> MessagesManager::send_message_group(
|
|||||||
vector<std::pair<unique_ptr<MessageContent>, int32>> message_contents;
|
vector<std::pair<unique_ptr<MessageContent>, int32>> message_contents;
|
||||||
for (auto &input_message_content : input_message_contents) {
|
for (auto &input_message_content : input_message_contents) {
|
||||||
TRY_RESULT(message_content, process_input_message_content(dialog_id, std::move(input_message_content)));
|
TRY_RESULT(message_content, process_input_message_content(dialog_id, std::move(input_message_content)));
|
||||||
|
TRY_STATUS(can_use_send_message_options(send_message_options, message_content));
|
||||||
if (!is_allowed_media_group_content(message_content.content->get_type())) {
|
if (!is_allowed_media_group_content(message_content.content->get_type())) {
|
||||||
return Status::Error(5, "Wrong message content type");
|
return Status::Error(5, "Wrong message content type");
|
||||||
}
|
}
|
||||||
@ -18772,6 +18793,7 @@ Result<MessageId> MessagesManager::send_inline_query_result_message(DialogId dia
|
|||||||
return Status::Error(5, "Inline query result not found");
|
return Status::Error(5, "Inline query result not found");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TRY_STATUS(can_use_send_message_options(send_message_options, content->message_content, 0));
|
||||||
TRY_STATUS(can_send_message_content(dialog_id, content->message_content.get(), false, true));
|
TRY_STATUS(can_send_message_content(dialog_id, content->message_content.get(), false, true));
|
||||||
|
|
||||||
bool need_update_dialog_pos = false;
|
bool need_update_dialog_pos = false;
|
||||||
@ -20280,6 +20302,12 @@ Result<vector<MessageId>> MessagesManager::forward_messages(DialogId to_dialog_i
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto can_use_options_status = can_use_send_message_options(send_message_options, content, 0);
|
||||||
|
if (can_use_options_status.is_error()) {
|
||||||
|
LOG(INFO) << "Can't forward " << message_id << ": " << can_send_status.message();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
auto content_type = content->get_type();
|
auto content_type = content->get_type();
|
||||||
bool is_game = content_type == MessageContentType::Game;
|
bool is_game = content_type == MessageContentType::Game;
|
||||||
if (need_copy) {
|
if (need_copy) {
|
||||||
|
@ -1501,6 +1501,10 @@ class MessagesManager : public Actor {
|
|||||||
Result<SendMessageOptions> process_send_message_options(DialogId dialog_id,
|
Result<SendMessageOptions> process_send_message_options(DialogId dialog_id,
|
||||||
tl_object_ptr<td_api::sendMessageOptions> &&options) const;
|
tl_object_ptr<td_api::sendMessageOptions> &&options) const;
|
||||||
|
|
||||||
|
static Status can_use_send_message_options(const SendMessageOptions &options,
|
||||||
|
const unique_ptr<MessageContent> &content, int32 ttl);
|
||||||
|
static Status can_use_send_message_options(const SendMessageOptions &options, const InputMessageContent &content);
|
||||||
|
|
||||||
Message *get_message_to_send(Dialog *d, MessageId reply_to_message_id, const SendMessageOptions &options,
|
Message *get_message_to_send(Dialog *d, MessageId reply_to_message_id, const SendMessageOptions &options,
|
||||||
unique_ptr<MessageContent> &&content, bool *need_update_dialog_pos,
|
unique_ptr<MessageContent> &&content, bool *need_update_dialog_pos,
|
||||||
unique_ptr<MessageForwardInfo> forward_info = nullptr);
|
unique_ptr<MessageForwardInfo> forward_info = nullptr);
|
||||||
|
Loading…
Reference in New Issue
Block a user