Allow to specify a chat as a local message sender.
GitOrigin-RevId: f1f5251b617a6f17188c7db49450a2eb433ef14c
This commit is contained in:
parent
b07d9634d6
commit
b1ed582737
@ -3785,9 +3785,13 @@ 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 @sender_user_id Identifier of the user who will be shown as the sender of the message; may be 0 for channel posts
|
//@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
|
||||||
//@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
|
//@chat_id Target chat
|
||||||
addLocalMessage chat_id:int53 sender_user_id:int32 reply_to_message_id:int53 disable_notification:Bool input_message_content:InputMessageContent = Message;
|
//@sender The sender sender of the message
|
||||||
|
//@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 sender:MessageSender 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 messages for all chat members. 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 messages for all chat members. 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.
@ -25459,8 +25459,8 @@ 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, UserId sender_user_id, MessageId reply_to_message_id, bool disable_notification,
|
DialogId dialog_id, td_api::object_ptr<td_api::MessageSender> &&sender, MessageId reply_to_message_id,
|
||||||
tl_object_ptr<td_api::InputMessageContent> &&input_message_content) {
|
bool disable_notification, 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");
|
||||||
}
|
}
|
||||||
@ -25486,8 +25486,38 @@ Result<MessageId> MessagesManager::add_local_message(
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool is_channel_post = is_broadcast_channel(dialog_id);
|
bool is_channel_post = is_broadcast_channel(dialog_id);
|
||||||
if (sender_user_id != UserId() && !td_->contacts_manager_->have_user_force(sender_user_id)) {
|
UserId sender_user_id;
|
||||||
return Status::Error(400, "User not found");
|
DialogId sender_dialog_id;
|
||||||
|
if (sender != nullptr) {
|
||||||
|
switch (sender->get_id()) {
|
||||||
|
case td_api::messageSenderUser::ID:
|
||||||
|
sender_user_id = UserId(static_cast<const td_api::messageSenderUser *>(sender.get())->user_id_);
|
||||||
|
if (!td_->contacts_manager_->have_user_force(sender_user_id)) {
|
||||||
|
return Status::Error(400, "Sender user not found");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case td_api::messageSenderChat::ID:
|
||||||
|
sender_dialog_id = DialogId(static_cast<const td_api::messageSenderChat *>(sender.get())->chat_id_);
|
||||||
|
if (sender_dialog_id.get_type() != DialogType::Channel) {
|
||||||
|
return Status::Error(400, "Sender chat must be a supergroup or channel");
|
||||||
|
}
|
||||||
|
if (!have_dialog_force(sender_dialog_id)) {
|
||||||
|
return Status::Error(400, "Sender chat not found");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
UNREACHABLE();
|
||||||
|
}
|
||||||
|
} else if (is_channel_post) {
|
||||||
|
sender_dialog_id = dialog_id;
|
||||||
|
} else {
|
||||||
|
return Status::Error(400, "The message must have a sender");
|
||||||
|
}
|
||||||
|
if (is_channel_post && sender_user_id.is_valid()) {
|
||||||
|
return Status::Error(400, "Channel post can't have a sender user");
|
||||||
|
}
|
||||||
|
if (is_channel_post && sender_dialog_id != dialog_id) {
|
||||||
|
return Status::Error(400, "Channel post must have the channel as a sender");
|
||||||
}
|
}
|
||||||
|
|
||||||
auto dialog_type = dialog_id.get_type();
|
auto dialog_type = dialog_id.get_type();
|
||||||
@ -25513,9 +25543,10 @@ Result<MessageId> MessagesManager::add_local_message(
|
|||||||
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(sender_user_id);
|
m->author_signature = td_->contacts_manager_->get_user_title(sender_user_id);
|
||||||
}
|
}
|
||||||
m->sender_dialog_id = dialog_id;
|
m->sender_dialog_id = sender_dialog_id;
|
||||||
} else {
|
} else {
|
||||||
m->sender_user_id = sender_user_id;
|
m->sender_user_id = sender_user_id;
|
||||||
|
m->sender_dialog_id = sender_dialog_id;
|
||||||
}
|
}
|
||||||
m->date = G()->unix_time();
|
m->date = G()->unix_time();
|
||||||
m->reply_to_message_id = get_reply_to_message_id(d, MessageId(), reply_to_message_id);
|
m->reply_to_message_id = get_reply_to_message_id(d, MessageId(), reply_to_message_id);
|
||||||
|
@ -425,9 +425,10 @@ 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(
|
Result<MessageId> add_local_message(DialogId dialog_id, td_api::object_ptr<td_api::MessageSender> &&sender,
|
||||||
DialogId dialog_id, UserId sender_user_id, MessageId reply_to_message_id, bool disable_notification,
|
MessageId reply_to_message_id, bool disable_notification,
|
||||||
tl_object_ptr<td_api::InputMessageContent> &&input_message_content) 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);
|
||||||
|
@ -5710,8 +5710,8 @@ void Td::on_request(uint64 id, td_api::addLocalMessage &request) {
|
|||||||
|
|
||||||
DialogId dialog_id(request.chat_id_);
|
DialogId dialog_id(request.chat_id_);
|
||||||
auto r_new_message_id = messages_manager_->add_local_message(
|
auto r_new_message_id = messages_manager_->add_local_message(
|
||||||
dialog_id, UserId(request.sender_user_id_), MessageId(request.reply_to_message_id_),
|
dialog_id, std::move(request.sender_), MessageId(request.reply_to_message_id_), request.disable_notification_,
|
||||||
request.disable_notification_, std::move(request.input_message_content_));
|
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());
|
||||||
}
|
}
|
||||||
|
@ -509,12 +509,12 @@ class CliClient final : public Actor {
|
|||||||
return as_message_id(str);
|
return as_message_id(str);
|
||||||
}
|
}
|
||||||
|
|
||||||
td_api::object_ptr<td_api::MessageSender> as_message_sender(Slice str) const {
|
td_api::object_ptr<td_api::MessageSender> as_message_sender(Slice sender_id) const {
|
||||||
str = trim(str);
|
sender_id = trim(sender_id);
|
||||||
if (str.empty() || str[0] != '-') {
|
if (sender_id.empty() || sender_id[0] != '-') {
|
||||||
return td_api::make_object<td_api::messageSenderUser>(as_user_id(str));
|
return td_api::make_object<td_api::messageSenderUser>(as_user_id(sender_id));
|
||||||
} else {
|
} else {
|
||||||
return td_api::make_object<td_api::messageSenderChat>(as_chat_id(str));
|
return td_api::make_object<td_api::messageSenderChat>(as_chat_id(sender_id));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3024,18 +3024,18 @@ 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 sender_id;
|
||||||
string reply_to_message_id;
|
string reply_to_message_id;
|
||||||
string message;
|
string message;
|
||||||
|
|
||||||
std::tie(chat_id, args) = split(args);
|
std::tie(chat_id, args) = split(args);
|
||||||
std::tie(user_id, message) = split(args);
|
std::tie(sender_id, message) = split(args);
|
||||||
if (op == "almr") {
|
if (op == "almr") {
|
||||||
std::tie(reply_to_message_id, message) = split(message);
|
std::tie(reply_to_message_id, message) = split(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
send_request(td_api::make_object<td_api::addLocalMessage>(
|
send_request(td_api::make_object<td_api::addLocalMessage>(
|
||||||
as_chat_id(chat_id), as_user_id(user_id), as_message_id(reply_to_message_id), false,
|
as_chat_id(chat_id), as_message_sender(sender_id), as_message_id(reply_to_message_id), false,
|
||||||
td_api::make_object<td_api::inputMessageText>(as_formatted_text(message), false, true)));
|
td_api::make_object<td_api::inputMessageText>(as_formatted_text(message), false, true)));
|
||||||
} else if (op == "smap" || op == "smapr") {
|
} else if (op == "smap" || op == "smapr") {
|
||||||
string chat_id;
|
string chat_id;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user