Better td_api::addLocalMessage.
GitOrigin-RevId: be6a9d27d3d683fdd7c72bca6bb8ba080bdbfc0d
This commit is contained in:
parent
948e416d43
commit
f8efdc7b9d
@ -2228,9 +2228,9 @@ sendChatSetTtlMessage chat_id:int53 ttl:int32 = Message;
|
|||||||
//@description Sends a notification about a screenshot taken in a chat. Supported only in private and secret chats @chat_id Chat identifier
|
//@description Sends a notification about a screenshot taken in a chat. Supported only in private and secret chats @chat_id Chat identifier
|
||||||
sendChatScreenshotTakenNotification chat_id:int53 = Ok;
|
sendChatScreenshotTakenNotification chat_id:int53 = Ok;
|
||||||
|
|
||||||
//@description Adds a local message to a chat. The message is persistent across application restarts only if the message database is used. Returns the added message @chat_id Target chat
|
//@description Adds a local message to a chat. The message is persistent across application restarts only if the message database is used. Returns the added message @chat_id Target chat @sender_user_id Identifier of the user who will be shown as message sender; may be 0 for channel posts
|
||||||
//@reply_to_message_id Identifier of the message to reply to or 0 @input_message_content The content of the message to be added
|
//@reply_to_message_id Identifier of the message to reply to or 0 @disable_notification Pass true to disable notification for the message @input_message_content The content of the message to be added
|
||||||
addLocalMessage chat_id:int53 reply_to_message_id:int53 input_message_content:InputMessageContent = Message;
|
addLocalMessage chat_id:int53 sender_user_id:int32 reply_to_message_id:int53 disable_notification:Bool input_message_content:InputMessageContent = Message;
|
||||||
|
|
||||||
//@description Deletes messages @chat_id Chat identifier @message_ids Identifiers of the messages to be deleted @revoke Pass true to try to delete outgoing messages for all chat members (may fail if messages are too old). Always true for supergroups, channels and secret chats
|
//@description Deletes messages @chat_id Chat identifier @message_ids Identifiers of the messages to be deleted @revoke Pass true to try to delete outgoing messages for all chat members (may fail if messages are too old). Always true for supergroups, channels and secret chats
|
||||||
deleteMessages chat_id:int53 message_ids:vector<int53> revoke:Bool = Ok;
|
deleteMessages chat_id:int53 message_ids:vector<int53> revoke:Bool = Ok;
|
||||||
|
Binary file not shown.
@ -5267,8 +5267,7 @@ ContactsManager::User *ContactsManager::get_user_force(UserId user_id) {
|
|||||||
auto u = get_user_force_impl(user_id);
|
auto u = get_user_force_impl(user_id);
|
||||||
if (user_id == UserId(777000) && (u == nullptr || !u->is_received)) {
|
if (user_id == UserId(777000) && (u == nullptr || !u->is_received)) {
|
||||||
int32 flags = telegram_api::user::ACCESS_HASH_MASK | telegram_api::user::FIRST_NAME_MASK |
|
int32 flags = telegram_api::user::ACCESS_HASH_MASK | telegram_api::user::FIRST_NAME_MASK |
|
||||||
telegram_api::user::LAST_NAME_MASK | telegram_api::user::PHONE_MASK | telegram_api::user::PHOTO_MASK |
|
telegram_api::user::PHONE_MASK | telegram_api::user::PHOTO_MASK | telegram_api::user::VERIFIED_MASK;
|
||||||
telegram_api::user::VERIFIED_MASK;
|
|
||||||
auto profile_photo = telegram_api::make_object<telegram_api::userProfilePhoto>(
|
auto profile_photo = telegram_api::make_object<telegram_api::userProfilePhoto>(
|
||||||
3337190045231018,
|
3337190045231018,
|
||||||
telegram_api::make_object<telegram_api::fileLocation>(1, 702229962, 26779, 5859320227133863146),
|
telegram_api::make_object<telegram_api::fileLocation>(1, 702229962, 26779, 5859320227133863146),
|
||||||
@ -5281,8 +5280,8 @@ ContactsManager::User *ContactsManager::get_user_force(UserId user_id) {
|
|||||||
auto user = telegram_api::make_object<telegram_api::user>(
|
auto user = telegram_api::make_object<telegram_api::user>(
|
||||||
flags, false /*ignored*/, false /*ignored*/, false /*ignored*/, false /*ignored*/, false /*ignored*/,
|
flags, false /*ignored*/, false /*ignored*/, false /*ignored*/, false /*ignored*/, false /*ignored*/,
|
||||||
false /*ignored*/, false /*ignored*/, false /*ignored*/, false /*ignored*/, false /*ignored*/,
|
false /*ignored*/, false /*ignored*/, false /*ignored*/, false /*ignored*/, false /*ignored*/,
|
||||||
false /*ignored*/, 777000, 1, "Telegram", "Updates", string(), "42777", std::move(profile_photo),
|
false /*ignored*/, 777000, 1, "Telegram", string(), string(), "42777", std::move(profile_photo), nullptr, 0,
|
||||||
nullptr, 0, string(), string(), string());
|
string(), string(), string());
|
||||||
on_get_user(std::move(user));
|
on_get_user(std::move(user));
|
||||||
u = get_user(user_id);
|
u = get_user(user_id);
|
||||||
CHECK(u != nullptr && u->is_received);
|
CHECK(u != nullptr && u->is_received);
|
||||||
|
@ -18047,7 +18047,7 @@ void MessagesManager::do_send_screenshot_taken_notification_message(DialogId dia
|
|||||||
}
|
}
|
||||||
|
|
||||||
Result<MessageId> MessagesManager::add_local_message(
|
Result<MessageId> MessagesManager::add_local_message(
|
||||||
DialogId dialog_id, MessageId reply_to_message_id,
|
DialogId dialog_id, UserId sender_user_id, MessageId reply_to_message_id, bool disable_notification,
|
||||||
tl_object_ptr<td_api::InputMessageContent> &&input_message_content) {
|
tl_object_ptr<td_api::InputMessageContent> &&input_message_content) {
|
||||||
if (input_message_content == nullptr) {
|
if (input_message_content == nullptr) {
|
||||||
return Status::Error(5, "Can't add local message without content");
|
return Status::Error(5, "Can't add local message without content");
|
||||||
@ -18066,30 +18066,46 @@ Result<MessageId> MessagesManager::add_local_message(
|
|||||||
return Status::Error(5, "Chat not found");
|
return Status::Error(5, "Chat not found");
|
||||||
}
|
}
|
||||||
|
|
||||||
TRY_STATUS(can_send_message(dialog_id));
|
if (!have_input_peer(dialog_id, AccessRights::Read)) {
|
||||||
|
return Status::Error(400, "Can't access the chat");
|
||||||
|
}
|
||||||
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)));
|
||||||
|
|
||||||
MessageId message_id = get_next_local_message_id(d);
|
bool is_channel_post = is_broadcast_channel(dialog_id);
|
||||||
|
if (!td_->contacts_manager_->have_user_force(sender_user_id) && !(is_channel_post && sender_user_id == UserId())) {
|
||||||
|
return Status::Error(400, "User not found");
|
||||||
|
}
|
||||||
|
|
||||||
auto dialog_type = dialog_id.get_type();
|
auto dialog_type = dialog_id.get_type();
|
||||||
auto my_id = td_->contacts_manager_->get_my_id("add_local_message");
|
auto my_id = td_->contacts_manager_->get_my_id("add_local_message");
|
||||||
|
if (sender_user_id != my_id) {
|
||||||
|
if (dialog_type == DialogType::User && DialogId(sender_user_id) != dialog_id) {
|
||||||
|
return Status::Error(400, "Wrong sender user");
|
||||||
|
}
|
||||||
|
if (dialog_type == DialogType::SecretChat &&
|
||||||
|
sender_user_id != td_->contacts_manager_->get_secret_chat_user_id(dialog_id.get_secret_chat_id())) {
|
||||||
|
return Status::Error(400, "Wrong sender user");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
MessageId message_id = get_next_local_message_id(d);
|
||||||
|
|
||||||
auto m = make_unique<Message>();
|
auto m = make_unique<Message>();
|
||||||
m->random_y = get_random_y(message_id);
|
m->random_y = get_random_y(message_id);
|
||||||
m->message_id = message_id;
|
m->message_id = message_id;
|
||||||
bool is_channel_post = is_broadcast_channel(dialog_id);
|
|
||||||
if (is_channel_post) {
|
if (is_channel_post) {
|
||||||
// sender of the post can be hidden
|
// sender of the post can be hidden
|
||||||
if (td_->contacts_manager_->get_channel_sign_messages(dialog_id.get_channel_id())) {
|
if (td_->contacts_manager_->get_channel_sign_messages(dialog_id.get_channel_id())) {
|
||||||
m->author_signature = td_->contacts_manager_->get_user_title(my_id);
|
m->author_signature = td_->contacts_manager_->get_user_title(sender_user_id);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
m->sender_user_id = my_id;
|
m->sender_user_id = sender_user_id;
|
||||||
}
|
}
|
||||||
m->date = G()->unix_time();
|
m->date = G()->unix_time();
|
||||||
m->reply_to_message_id = get_reply_to_message_id(d, reply_to_message_id);
|
m->reply_to_message_id = get_reply_to_message_id(d, reply_to_message_id);
|
||||||
m->is_channel_post = is_channel_post;
|
m->is_channel_post = is_channel_post;
|
||||||
m->is_outgoing = dialog_id != DialogId(my_id);
|
m->is_outgoing = dialog_id != DialogId(my_id) && sender_user_id == my_id;
|
||||||
|
m->disable_notification = disable_notification;
|
||||||
m->from_background = false;
|
m->from_background = false;
|
||||||
m->views = 0;
|
m->views = 0;
|
||||||
m->content = std::move(message_content.content);
|
m->content = std::move(message_content.content);
|
||||||
@ -18100,7 +18116,6 @@ Result<MessageId> MessagesManager::add_local_message(
|
|||||||
if (is_service_message_content(m->content->get_id())) {
|
if (is_service_message_content(m->content->get_id())) {
|
||||||
m->ttl = 0;
|
m->ttl = 0;
|
||||||
}
|
}
|
||||||
m->is_content_secret = is_secret_message_content(m->ttl, m->content->get_id());
|
|
||||||
} else if (message_content.ttl > 0) {
|
} else if (message_content.ttl > 0) {
|
||||||
m->ttl = message_content.ttl;
|
m->ttl = message_content.ttl;
|
||||||
}
|
}
|
||||||
|
@ -1032,9 +1032,9 @@ class MessagesManager : public Actor {
|
|||||||
|
|
||||||
Status send_screenshot_taken_notification_message(DialogId dialog_id);
|
Status send_screenshot_taken_notification_message(DialogId dialog_id);
|
||||||
|
|
||||||
Result<MessageId> add_local_message(DialogId dialog_id, MessageId reply_to_message_id,
|
Result<MessageId> add_local_message(
|
||||||
tl_object_ptr<td_api::InputMessageContent> &&input_message_content)
|
DialogId dialog_id, UserId sender_user_id, MessageId reply_to_message_id, bool disable_notification,
|
||||||
TD_WARN_UNUSED_RESULT;
|
tl_object_ptr<td_api::InputMessageContent> &&input_message_content) TD_WARN_UNUSED_RESULT;
|
||||||
|
|
||||||
void edit_message_text(FullMessageId full_message_id, tl_object_ptr<td_api::ReplyMarkup> &&reply_markup,
|
void edit_message_text(FullMessageId full_message_id, tl_object_ptr<td_api::ReplyMarkup> &&reply_markup,
|
||||||
tl_object_ptr<td_api::InputMessageContent> &&input_message_content, Promise<Unit> &&promise);
|
tl_object_ptr<td_api::InputMessageContent> &&input_message_content, Promise<Unit> &&promise);
|
||||||
|
@ -5643,8 +5643,9 @@ void Td::on_request(uint64 id, td_api::addLocalMessage &request) {
|
|||||||
CHECK_IS_USER();
|
CHECK_IS_USER();
|
||||||
|
|
||||||
DialogId dialog_id(request.chat_id_);
|
DialogId dialog_id(request.chat_id_);
|
||||||
auto r_new_message_id = messages_manager_->add_local_message(dialog_id, MessageId(request.reply_to_message_id_),
|
auto r_new_message_id = messages_manager_->add_local_message(
|
||||||
std::move(request.input_message_content_));
|
dialog_id, UserId(request.sender_user_id_), MessageId(request.reply_to_message_id_),
|
||||||
|
request.disable_notification_, std::move(request.input_message_content_));
|
||||||
if (r_new_message_id.is_error()) {
|
if (r_new_message_id.is_error()) {
|
||||||
return send_closure(actor_id(this), &Td::send_error, id, r_new_message_id.move_as_error());
|
return send_closure(actor_id(this), &Td::send_error, id, r_new_message_id.move_as_error());
|
||||||
}
|
}
|
||||||
|
@ -2071,10 +2071,12 @@ class CliClient final : public Actor {
|
|||||||
op == "sms", false, as_message_id(reply_to_message_id));
|
op == "sms", false, as_message_id(reply_to_message_id));
|
||||||
} else if (op == "alm" || op == "almr") {
|
} else if (op == "alm" || op == "almr") {
|
||||||
string chat_id;
|
string chat_id;
|
||||||
|
string user_id;
|
||||||
string reply_to_message_id;
|
string reply_to_message_id;
|
||||||
string message;
|
string message;
|
||||||
|
|
||||||
std::tie(chat_id, message) = split(args);
|
std::tie(chat_id, args) = split(args);
|
||||||
|
std::tie(user_id, message) = split(args);
|
||||||
if (op == "smr") {
|
if (op == "smr") {
|
||||||
std::tie(reply_to_message_id, message) = split(message);
|
std::tie(reply_to_message_id, message) = split(message);
|
||||||
}
|
}
|
||||||
@ -2086,7 +2088,7 @@ class CliClient final : public Actor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
send_request(make_tl_object<td_api::addLocalMessage>(
|
send_request(make_tl_object<td_api::addLocalMessage>(
|
||||||
as_chat_id(chat_id), as_message_id(reply_to_message_id),
|
as_chat_id(chat_id), as_user_id(user_id), as_message_id(reply_to_message_id), false,
|
||||||
make_tl_object<td_api::inputMessageText>(move_tl_object_as<td_api::formattedText>(parsed_text), false,
|
make_tl_object<td_api::inputMessageText>(move_tl_object_as<td_api::formattedText>(parsed_text), false,
|
||||||
true)));
|
true)));
|
||||||
} else if (op == "smap" || op == "smapr") {
|
} else if (op == "smap" || op == "smapr") {
|
||||||
@ -2679,6 +2681,13 @@ class CliClient final : public Actor {
|
|||||||
std::tie(supergroup_id, is_all_history_available) = split(args);
|
std::tie(supergroup_id, is_all_history_available) = split(args);
|
||||||
send_request(make_tl_object<td_api::toggleSupergroupIsAllHistoryAvailable>(to_integer<int32>(supergroup_id),
|
send_request(make_tl_object<td_api::toggleSupergroupIsAllHistoryAvailable>(to_integer<int32>(supergroup_id),
|
||||||
as_bool(is_all_history_available)));
|
as_bool(is_all_history_available)));
|
||||||
|
} else if (op == "tsgsm") {
|
||||||
|
string supergroup_id;
|
||||||
|
string sign_messages;
|
||||||
|
|
||||||
|
std::tie(supergroup_id, sign_messages) = split(args);
|
||||||
|
send_request(make_tl_object<td_api::toggleSupergroupSignMessages>(to_integer<int32>(supergroup_id),
|
||||||
|
as_bool(sign_messages)));
|
||||||
} else if (op == "csgd" || op == "cchd") {
|
} else if (op == "csgd" || op == "cchd") {
|
||||||
string supergroup_id;
|
string supergroup_id;
|
||||||
string description;
|
string description;
|
||||||
|
Reference in New Issue
Block a user