diff options
| author | levlam <levlam@telegram.org> | 2024-11-08 16:03:00 +0300 |
|---|---|---|
| committer | levlam <levlam@telegram.org> | 2024-11-08 16:03:00 +0300 |
| commit | f8ac090053c0de95cdf7e22cc7ded3a9a8e7e672 (patch) | |
| tree | 6f0321188147e28eb842348a5b6f148d420c8cb7 /td/telegram/InlineQueriesManager.cpp | |
| parent | 02a9daed3f5b42047a6b8f9e846a6898bbdb7524 (diff) | |
Add td_api::savePreparedInlineMessage.
Diffstat (limited to 'td/telegram/InlineQueriesManager.cpp')
| -rw-r--r-- | td/telegram/InlineQueriesManager.cpp | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/td/telegram/InlineQueriesManager.cpp b/td/telegram/InlineQueriesManager.cpp index 881c32209..5665ec23b 100644 --- a/td/telegram/InlineQueriesManager.cpp +++ b/td/telegram/InlineQueriesManager.cpp @@ -34,6 +34,7 @@ #include "td/telegram/PhotoSize.h" #include "td/telegram/ReplyMarkup.h" #include "td/telegram/StickersManager.h" +#include "td/telegram/TargetDialogTypes.h" #include "td/telegram/Td.h" #include "td/telegram/td_api.hpp" #include "td/telegram/TdDb.h" @@ -169,6 +170,41 @@ class SetInlineBotResultsQuery final : public Td::ResultHandler { } }; +class SavePreparedInlineMessageQuery final : public Td::ResultHandler { + Promise<td_api::object_ptr<td_api::preparedInlineMessage>> promise_; + + public: + explicit SavePreparedInlineMessageQuery(Promise<td_api::object_ptr<td_api::preparedInlineMessage>> &&promise) + : promise_(std::move(promise)) { + } + + void send(telegram_api::object_ptr<telegram_api::InputUser> &&input_user, + telegram_api::object_ptr<telegram_api::InputBotInlineResult> &&result, TargetDialogTypes types) { + int32 flags = 0; + auto peer_types = types.get_input_peer_types(); + if (!peer_types.empty()) { + flags |= telegram_api::messages_savePreparedInlineMessage::PEER_TYPES_MASK; + } + send_query(G()->net_query_creator().create(telegram_api::messages_savePreparedInlineMessage( + flags, std::move(result), std::move(input_user), std::move(peer_types)))); + } + + void on_result(BufferSlice packet) final { + auto result_ptr = fetch_result<telegram_api::messages_savePreparedInlineMessage>(packet); + if (result_ptr.is_error()) { + return on_error(result_ptr.move_as_error()); + } + + auto ptr = result_ptr.move_as_ok(); + LOG(INFO) << "Receive result for SavePreparedInlineMessageQuery: " << to_string(ptr); + promise_.set_value(td_api::make_object<td_api::preparedInlineMessage>(ptr->id_, ptr->expire_date_)); + } + + void on_error(Status status) final { + promise_.set_error(std::move(status)); + } +}; + class RequestSimpleWebViewQuery final : public Td::ResultHandler { Promise<string> promise_; @@ -551,6 +587,18 @@ void InlineQueriesManager::answer_inline_query( std::move(results), cache_time, next_offset); } +void InlineQueriesManager::save_prepared_inline_message( + UserId user_id, td_api::object_ptr<td_api::InputInlineQueryResult> &&input_result, + td_api::object_ptr<td_api::targetChatTypes> &&chat_types, + Promise<td_api::object_ptr<td_api::preparedInlineMessage>> &&promise) { + TRY_RESULT_PROMISE(promise, input_user, td_->user_manager_->get_input_user(user_id)); + TRY_RESULT_PROMISE(promise, result, get_input_bot_inline_result(std::move(input_result), nullptr, nullptr)); + TRY_RESULT_PROMISE(promise, types, TargetDialogTypes::get_target_dialog_types(chat_types)); + + td_->create_handler<SavePreparedInlineMessageQuery>(std::move(promise)) + ->send(std::move(input_user), std::move(result), types); +} + void InlineQueriesManager::get_simple_web_view_url(UserId bot_user_id, string &&url, const WebAppOpenParameters ¶meters, Promise<string> &&promise) { TRY_RESULT_PROMISE(promise, input_user, td_->user_manager_->get_input_user(bot_user_id)); |
