From ef1b2921ae6e193521f261d5eed14f96353ed210 Mon Sep 17 00:00:00 2001 From: levlam Date: Thu, 29 Oct 2020 01:06:07 +0300 Subject: [PATCH] Add td_api::getCallbackQueryMessage. GitOrigin-RevId: a5ca7eab673e00942b4e2fe7a9c6e17dfb3784f8 --- td/generate/scheme/td_api.tl | 3 +++ td/generate/scheme/td_api.tlo | Bin 185092 -> 185268 bytes td/generate/scheme/telegram_api.tl | 1 + td/generate/scheme/telegram_api.tlo | Bin 218440 -> 218572 bytes td/telegram/MessagesManager.cpp | 31 ++++++++++++++++++------- td/telegram/MessagesManager.h | 25 ++++++++++---------- td/telegram/Td.cpp | 34 +++++++++++++++++++++++++--- td/telegram/Td.h | 2 ++ 8 files changed, 73 insertions(+), 23 deletions(-) diff --git a/td/generate/scheme/td_api.tl b/td/generate/scheme/td_api.tl index 1ffa87edb..0d769bd14 100644 --- a/td/generate/scheme/td_api.tl +++ b/td/generate/scheme/td_api.tl @@ -3599,6 +3599,9 @@ getRepliedMessage chat_id:int53 message_id:int53 = Message; //@description Returns information about a newest pinned chat message @chat_id Identifier of the chat the message belongs to getChatPinnedMessage chat_id:int53 = Message; +//@description Returns information about a message with the callback button that originated a callback query; for bots only @chat_id Identifier of the chat the message belongs to @message_id Message identifier @callback_query_id Identifier of the callback query +getCallbackQueryMessage chat_id:int53 message_id:int53 callback_query_id:int64 = Message; + //@description Returns information about messages. If a message is not found, returns null on the corresponding position of the result @chat_id Identifier of the chat the messages belong to @message_ids Identifiers of the messages to get getMessages chat_id:int53 message_ids:vector = Messages; diff --git a/td/generate/scheme/td_api.tlo b/td/generate/scheme/td_api.tlo index dbdd661cce66c97de3037415a0cd14be2aad0c26..46096b414633466cd2c96cb78a7d073391986ad2 100644 GIT binary patch delta 76 zcmV-S0JHyurVF&E3xI?Hv;xEs0fx855CYpd9CDE$y%%R?bVFfmY+_+!Yf*J&a(PW< ib8}&5WtSj70#uhk83HJmkhK8_m+(9S5VxR80%V9@*&IFq delta 27 jcmdn8oV#TicS8%~7N#QtjIG;`3NYQa+#cY~l+pnJnTQIL diff --git a/td/generate/scheme/telegram_api.tl b/td/generate/scheme/telegram_api.tl index b5af97f13..5bdda4caa 100644 --- a/td/generate/scheme/telegram_api.tl +++ b/td/generate/scheme/telegram_api.tl @@ -889,6 +889,7 @@ account.webAuthorizations#ed56c9fc authorizations:Vector users inputMessageID#a676a322 id:int = InputMessage; inputMessageReplyTo#bad88395 id:int = InputMessage; inputMessagePinned#86872538 = InputMessage; +inputMessageCallbackQuery#acfa1a7e id:int query_id:long = InputMessage; inputDialogPeer#fcaafeb7 peer:InputPeer = InputDialogPeer; inputDialogPeerFolder#64600527 folder_id:int = InputDialogPeer; diff --git a/td/generate/scheme/telegram_api.tlo b/td/generate/scheme/telegram_api.tlo index 7f33b24efbf3a7d8d0657c6d104c803a432a565a..bb3f233d1cffbcd3c131306b6869984832e834b8 100644 GIT binary patch delta 210 zcmX@HiucTF-VHT;f*<8CoAG$&6_l3vrWO|`rl(Fm$Su8j1z(E>W7K9{^W#fdKq@8& z+|_|FH14XPi8S0*@c^m0c}&QM0SJnm*>pH;+YW-nKztCmD#sO5C-rNMWG0eL&WSlW zNr}nXfu*TMl?)6Z^^;OHruSTARG7SA2M5@i<~?_}@43r3MX4B!YZ951OYj(J|-QgbNl$&5Z(-nf56t@4^ P&J^H+#LxM|ln@C3xScbS diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index 5f35795fc..65ecb1350 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -5811,10 +5811,6 @@ vector MessagesManager::get_scheduled_server_message_ids(const vector MessagesManager::get_input_message(MessageId message_id) { - return make_tl_object(message_id.get_server_message_id().get()); -} - tl_object_ptr MessagesManager::get_input_peer(DialogId dialog_id, AccessRights access_rights) const { switch (dialog_id.get_type()) { @@ -16396,6 +16392,23 @@ MessageId MessagesManager::get_dialog_pinned_message(DialogId dialog_id, Promise return d->last_pinned_message_id; } +void MessagesManager::get_callback_query_message(DialogId dialog_id, MessageId message_id, int64 callback_query_id, + Promise &&promise) { + Dialog *d = get_dialog_force(dialog_id); + if (d == nullptr) { + return promise.set_error(Status::Error(6, "Chat not found")); + } + if (!message_id.is_valid() || !message_id.is_server()) { + return promise.set_error(Status::Error(6, "Invalid message identifier specified")); + } + + LOG(INFO) << "Get callback query " << message_id << " in " << dialog_id << " for query " << callback_query_id; + + auto input_message = make_tl_object(message_id.get_server_message_id().get(), + callback_query_id); + get_message_force_from_server(d, message_id, std::move(promise), std::move(input_message)); +} + bool MessagesManager::get_messages(DialogId dialog_id, const vector &message_ids, Promise &&promise) { Dialog *d = get_dialog_force(dialog_id); if (d == nullptr) { @@ -16459,15 +16472,17 @@ void MessagesManager::get_messages_from_server(vector &&message_i continue; } + if (input_message == nullptr) { + input_message = make_tl_object(message_id.get_server_message_id().get()); + } + switch (dialog_id.get_type()) { case DialogType::User: case DialogType::Chat: - ordinary_message_ids.push_back(input_message == nullptr ? get_input_message(message_id) - : std::move(input_message)); + ordinary_message_ids.push_back(std::move(input_message)); break; case DialogType::Channel: - channel_message_ids[dialog_id.get_channel_id()].push_back( - input_message == nullptr ? get_input_message(message_id) : std::move(input_message)); + channel_message_ids[dialog_id.get_channel_id()].push_back(std::move(input_message)); break; case DialogType::SecretChat: LOG(ERROR) << "Can't get secret chat message from server"; diff --git a/td/telegram/MessagesManager.h b/td/telegram/MessagesManager.h index b330ff117..2f9d87563 100644 --- a/td/telegram/MessagesManager.h +++ b/td/telegram/MessagesManager.h @@ -587,6 +587,19 @@ class MessagesManager : public Actor { FullMessageId get_replied_message(DialogId dialog_id, MessageId message_id, bool force, Promise &&promise); + MessageId get_dialog_pinned_message(DialogId dialog_id, Promise &&promise); + + void get_callback_query_message(DialogId dialog_id, MessageId message_id, int64 callback_query_id, + Promise &&promise); + + bool get_messages(DialogId dialog_id, const vector &message_ids, Promise &&promise); + + void get_message_from_server(FullMessageId full_message_id, Promise &&promise, + tl_object_ptr input_message = nullptr); + + void get_messages_from_server(vector &&message_ids, Promise &&promise, + tl_object_ptr input_message = nullptr); + struct MessageThreadInfo { DialogId dialog_id; vector message_ids; @@ -598,16 +611,6 @@ class MessagesManager : public Actor { void on_get_discussion_message(DialogId dialog_id, MessageId message_id, vector full_message_ids, Promise &&promise); - MessageId get_dialog_pinned_message(DialogId dialog_id, Promise &&promise); - - bool get_messages(DialogId dialog_id, const vector &message_ids, Promise &&promise); - - void get_message_from_server(FullMessageId full_message_id, Promise &&promise, - tl_object_ptr input_message = nullptr); - - void get_messages_from_server(vector &&message_ids, Promise &&promise, - tl_object_ptr input_message = nullptr); - bool is_message_edited_recently(FullMessageId full_message_id, int32 seconds); Result> get_message_link(FullMessageId full_message_id, bool for_group, bool for_comment); @@ -1710,8 +1713,6 @@ class MessagesManager : public Actor { static int32 get_message_date(const tl_object_ptr &message_ptr); - static tl_object_ptr get_input_message(MessageId message_id); - static bool is_dialog_inited(const Dialog *d); int32 get_dialog_mute_until(const Dialog *d) const; diff --git a/td/telegram/Td.cpp b/td/telegram/Td.cpp index d9c51acb6..238a95546 100644 --- a/td/telegram/Td.cpp +++ b/td/telegram/Td.cpp @@ -1102,6 +1102,29 @@ class GetChatPinnedMessageRequest : public RequestOnceActor { } }; +class GetCallbackQueryMessageRequest : public RequestOnceActor { + DialogId dialog_id_; + MessageId message_id_; + int64 callback_query_id_; + + void do_run(Promise &&promise) override { + td->messages_manager_->get_callback_query_message(dialog_id_, message_id_, callback_query_id_, std::move(promise)); + } + + void do_send_result() override { + send_result(td->messages_manager_->get_message_object({dialog_id_, message_id_})); + } + + public: + GetCallbackQueryMessageRequest(ActorShared td, uint64 request_id, int64 dialog_id, int64 message_id, + int64 callback_query_id) + : RequestOnceActor(std::move(td), request_id) + , dialog_id_(dialog_id) + , message_id_(message_id) + , callback_query_id_(callback_query_id) { + } +}; + class GetMessagesRequest : public RequestOnceActor { DialogId dialog_id_; vector message_ids_; @@ -5157,15 +5180,20 @@ void Td::on_request(uint64 id, const td_api::getChatPinnedMessage &request) { CREATE_REQUEST(GetChatPinnedMessageRequest, request.chat_id_); } -void Td::on_request(uint64 id, const td_api::getMessageThread &request) { - CHECK_IS_USER(); - CREATE_REQUEST(GetMessageThreadRequest, request.chat_id_, request.message_id_); +void Td::on_request(uint64 id, const td_api::getCallbackQueryMessage &request) { + CHECK_IS_BOT(); + CREATE_REQUEST(GetCallbackQueryMessageRequest, request.chat_id_, request.message_id_, request.callback_query_id_); } void Td::on_request(uint64 id, const td_api::getMessages &request) { CREATE_REQUEST(GetMessagesRequest, request.chat_id_, request.message_ids_); } +void Td::on_request(uint64 id, const td_api::getMessageThread &request) { + CHECK_IS_USER(); + CREATE_REQUEST(GetMessageThreadRequest, request.chat_id_, request.message_id_); +} + void Td::on_request(uint64 id, const td_api::getMessageLink &request) { auto r_message_link = messages_manager_->get_message_link( {DialogId(request.chat_id_), MessageId(request.message_id_)}, request.for_album_, request.for_comment_); diff --git a/td/telegram/Td.h b/td/telegram/Td.h index ee82ef34c..804cf0215 100644 --- a/td/telegram/Td.h +++ b/td/telegram/Td.h @@ -493,6 +493,8 @@ class Td final : public NetQueryCallback { void on_request(uint64 id, const td_api::getChatPinnedMessage &request); + void on_request(uint64 id, const td_api::getCallbackQueryMessage &request); + void on_request(uint64 id, const td_api::getMessageThread &request); void on_request(uint64 id, const td_api::getMessages &request);