Add MessageSchedulingState to sendMessageOptions.
GitOrigin-RevId: a2a7d6e3c9283b645b0a155f96c8165a7a717b8d
This commit is contained in:
parent
b43dd2be8e
commit
211ab071b2
@ -1490,7 +1490,8 @@ messageSchedulingStateSendWhenOnline = MessageSchedulingState;
|
|||||||
//@description Options to be used when a message is send
|
//@description Options to be used when a message is send
|
||||||
//@disable_notification Pass true to disable notification for the message. Must be false if the message is sent to a secret chat
|
//@disable_notification Pass true to disable notification for the message. Must be false if the message is sent to a secret chat
|
||||||
//@from_background Pass true if the message is sent from the background
|
//@from_background Pass true if the message is sent from the background
|
||||||
sendMessageOptions disable_notification:Bool from_background:Bool = SendMessageOptions;
|
//@scheduling_state Message scheduling state. Messages sent to a secret chat, live location messages and self-destructing messages can't be scheduled
|
||||||
|
sendMessageOptions disable_notification:Bool from_background:Bool scheduling_state:MessageSchedulingState = SendMessageOptions;
|
||||||
|
|
||||||
|
|
||||||
//@class InputMessageContent @description The content of a message to send
|
//@class InputMessageContent @description The content of a message to send
|
||||||
|
Binary file not shown.
@ -17287,11 +17287,10 @@ MessagesManager::Message *MessagesManager::get_message_to_send(Dialog *d, Messag
|
|||||||
CHECK(d != nullptr);
|
CHECK(d != nullptr);
|
||||||
CHECK(!reply_to_message_id.is_scheduled());
|
CHECK(!reply_to_message_id.is_scheduled());
|
||||||
|
|
||||||
int32 schedule_date = 0;
|
bool is_scheduled = options.schedule_date != 0;
|
||||||
bool is_scheduled = schedule_date != 0;
|
|
||||||
DialogId dialog_id = d->dialog_id;
|
DialogId dialog_id = d->dialog_id;
|
||||||
MessageId message_id =
|
MessageId message_id = is_scheduled ? get_next_yet_unsent_scheduled_message_id(d, options.schedule_date)
|
||||||
is_scheduled ? get_next_yet_unsent_scheduled_message_id(d, schedule_date) : get_next_yet_unsent_message_id(d);
|
: get_next_yet_unsent_message_id(d);
|
||||||
LOG(INFO) << "Create " << message_id << " in " << dialog_id;
|
LOG(INFO) << "Create " << message_id << " in " << dialog_id;
|
||||||
|
|
||||||
auto dialog_type = dialog_id.get_type();
|
auto dialog_type = dialog_id.get_type();
|
||||||
@ -17309,7 +17308,7 @@ MessagesManager::Message *MessagesManager::get_message_to_send(Dialog *d, Messag
|
|||||||
m->sender_user_id = my_id;
|
m->sender_user_id = my_id;
|
||||||
}
|
}
|
||||||
m->send_date = G()->unix_time();
|
m->send_date = G()->unix_time();
|
||||||
m->date = is_scheduled ? schedule_date : m->send_date;
|
m->date = is_scheduled ? options.schedule_date : m->send_date;
|
||||||
m->reply_to_message_id = reply_to_message_id;
|
m->reply_to_message_id = reply_to_message_id;
|
||||||
m->is_channel_post = is_channel_post;
|
m->is_channel_post = is_channel_post;
|
||||||
m->is_outgoing = is_scheduled || dialog_id != DialogId(my_id);
|
m->is_outgoing = is_scheduled || dialog_id != DialogId(my_id);
|
||||||
@ -17960,17 +17959,35 @@ Result<InputMessageContent> MessagesManager::process_input_message_content(
|
|||||||
}
|
}
|
||||||
|
|
||||||
Result<MessagesManager::SendMessageOptions> MessagesManager::process_send_message_options(
|
Result<MessagesManager::SendMessageOptions> MessagesManager::process_send_message_options(
|
||||||
DialogId dialog_id, tl_object_ptr<td_api::sendMessageOptions> &&options) {
|
DialogId dialog_id, tl_object_ptr<td_api::sendMessageOptions> &&options) const {
|
||||||
SendMessageOptions result;
|
SendMessageOptions result;
|
||||||
if (options != nullptr) {
|
if (options != nullptr) {
|
||||||
result.disable_notification = options->disable_notification_;
|
result.disable_notification = options->disable_notification_;
|
||||||
result.from_background = options->from_background_;
|
result.from_background = options->from_background_;
|
||||||
|
TRY_RESULT_ASSIGN(result.schedule_date, get_message_schedule_date(std::move(options->scheduling_state_)));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool is_secret = dialog_id.get_type() == DialogType::SecretChat;
|
auto dialog_type = dialog_id.get_type();
|
||||||
|
bool is_secret = dialog_type == DialogType::SecretChat;
|
||||||
if (result.disable_notification && is_secret) {
|
if (result.disable_notification && is_secret) {
|
||||||
return Status::Error(400, "Can't send messages with silent notifications to secret chats");
|
return Status::Error(400, "Can't send messages with silent notifications to secret chats");
|
||||||
}
|
}
|
||||||
|
if (result.schedule_date != 0) {
|
||||||
|
if (is_secret) {
|
||||||
|
return Status::Error(400, "Can't schedule messages in secret chats");
|
||||||
|
}
|
||||||
|
if (td_->auth_manager_->is_bot()) {
|
||||||
|
return Status::Error(400, "Bots can't send scheduled messages");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (result.schedule_date == SCHEDULE_WHEN_ONLINE_DATE) {
|
||||||
|
if (dialog_type != DialogType::User) {
|
||||||
|
return Status::Error(400, "Messages can be scheduled till online only in private chats");
|
||||||
|
}
|
||||||
|
if (dialog_id == get_my_dialog_id()) {
|
||||||
|
return Status::Error(400, "Can't scheduled till online messages in chat with self");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -20521,7 +20538,8 @@ Result<vector<MessageId>> MessagesManager::resend_messages(DialogId dialog_id, v
|
|||||||
CHECK(message != nullptr);
|
CHECK(message != nullptr);
|
||||||
send_update_delete_messages(dialog_id, {message->message_id.get()}, true, false);
|
send_update_delete_messages(dialog_id, {message->message_id.get()}, true, false);
|
||||||
|
|
||||||
SendMessageOptions options(message->disable_notification, message->from_background);
|
SendMessageOptions options(message->disable_notification, message->from_background,
|
||||||
|
get_message_schedule_date(message.get()));
|
||||||
Message *m = get_message_to_send(d, get_reply_to_message_id(d, message->reply_to_message_id), options,
|
Message *m = get_message_to_send(d, get_reply_to_message_id(d, message->reply_to_message_id), options,
|
||||||
std::move(new_contents[i]), &need_update_dialog_pos);
|
std::move(new_contents[i]), &need_update_dialog_pos);
|
||||||
m->reply_markup = std::move(message->reply_markup);
|
m->reply_markup = std::move(message->reply_markup);
|
||||||
|
@ -1370,10 +1370,11 @@ class MessagesManager : public Actor {
|
|||||||
struct SendMessageOptions {
|
struct SendMessageOptions {
|
||||||
bool disable_notification = false;
|
bool disable_notification = false;
|
||||||
bool from_background = false;
|
bool from_background = false;
|
||||||
|
int32 schedule_date = 0;
|
||||||
|
|
||||||
SendMessageOptions() = default;
|
SendMessageOptions() = default;
|
||||||
SendMessageOptions(bool disable_notification, bool from_background)
|
SendMessageOptions(bool disable_notification, bool from_background, int32 schedule_date)
|
||||||
: disable_notification(disable_notification), from_background(from_background) {
|
: disable_notification(disable_notification), from_background(from_background), schedule_date(schedule_date) {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1498,7 +1499,7 @@ class MessagesManager : public Actor {
|
|||||||
DialogId dialog_id, tl_object_ptr<td_api::InputMessageContent> &&input_message_content);
|
DialogId dialog_id, tl_object_ptr<td_api::InputMessageContent> &&input_message_content);
|
||||||
|
|
||||||
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);
|
tl_object_ptr<td_api::sendMessageOptions> &&options) const;
|
||||||
|
|
||||||
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,
|
||||||
|
@ -1277,8 +1277,9 @@ class CliClient final : public Actor {
|
|||||||
auto chat = as_chat_id(chat_id);
|
auto chat = as_chat_id(chat_id);
|
||||||
auto id = send_request(td_api::make_object<td_api::sendMessage>(
|
auto id = send_request(td_api::make_object<td_api::sendMessage>(
|
||||||
chat, reply_to_message_id,
|
chat, reply_to_message_id,
|
||||||
td_api::make_object<td_api::sendMessageOptions>(disable_notification, from_background), nullptr,
|
td_api::make_object<td_api::sendMessageOptions>(disable_notification, from_background,
|
||||||
std::move(input_message_content)));
|
as_message_scheduling_state(schedule_date_)),
|
||||||
|
nullptr, std::move(input_message_content)));
|
||||||
query_id_to_send_message_info_[id].start_time = Time::now();
|
query_id_to_send_message_info_[id].start_time = Time::now();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2751,6 +2752,8 @@ class CliClient final : public Actor {
|
|||||||
send_request(td_api::make_object<td_api::searchSecretMessages>(
|
send_request(td_api::make_object<td_api::searchSecretMessages>(
|
||||||
as_chat_id(chat_id), query, to_integer<int64>(from_search_id), to_integer<int32>(limit),
|
as_chat_id(chat_id), query, to_integer<int64>(from_search_id), to_integer<int32>(limit),
|
||||||
get_search_messages_filter(filter)));
|
get_search_messages_filter(filter)));
|
||||||
|
} else if (op == "ssd") {
|
||||||
|
schedule_date_ = args;
|
||||||
} else if (op == "sm" || op == "sms" || op == "smr" || op == "smf") {
|
} else if (op == "sm" || op == "sms" || op == "smr" || op == "smf") {
|
||||||
string chat_id;
|
string chat_id;
|
||||||
string reply_to_message_id;
|
string reply_to_message_id;
|
||||||
@ -3995,6 +3998,7 @@ class CliClient final : public Actor {
|
|||||||
std::unordered_map<int32, double> being_downloaded_files_;
|
std::unordered_map<int32, double> being_downloaded_files_;
|
||||||
|
|
||||||
int32 my_id_ = 0;
|
int32 my_id_ = 0;
|
||||||
|
string schedule_date_;
|
||||||
|
|
||||||
ConcurrentScheduler *scheduler_{nullptr};
|
ConcurrentScheduler *scheduler_{nullptr};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user