diff --git a/telegram-bot-api/Client.cpp b/telegram-bot-api/Client.cpp index 1beaf7a..07eb99c 100644 --- a/telegram-bot-api/Client.cpp +++ b/telegram-bot-api/Client.cpp @@ -293,6 +293,7 @@ bool Client::init_methods() { methods_.emplace("setgamescore", &Client::process_set_game_score_query); methods_.emplace("getgamehighscores", &Client::process_get_game_high_scores_query); methods_.emplace("answerwebappquery", &Client::process_answer_web_app_query_query); + methods_.emplace("answerguestquery", &Client::process_answer_guest_query_query); methods_.emplace("answerinlinequery", &Client::process_answer_inline_query_query); methods_.emplace("savepreparedinlinemessage", &Client::process_save_prepared_inline_message_query); methods_.emplace("savepreparedkeyboardbutton", &Client::process_save_prepared_keyboard_button_query); @@ -7452,6 +7453,25 @@ class Client::TdOnAnswerWebAppQueryCallback final : public TdQueryCallback { PromisedQueryPtr query_; }; +class Client::TdOnAnswerGuestQueryCallback final : public TdQueryCallback { + public: + explicit TdOnAnswerGuestQueryCallback(PromisedQueryPtr query) : query_(std::move(query)) { + } + + void on_result(object_ptr result) final { + if (result->get_id() == td_api::error::ID) { + return fail_query_with_error(std::move(query_), move_object_as(result)); + } + + CHECK(result->get_id() == td_api::inlineMessageId::ID); + auto inline_message_id = move_object_as(result); + answer_query(JsonInlineMessageId(inline_message_id.get()), std::move(query_)); + } + + private: + PromisedQueryPtr query_; +}; + class Client::TdOnSavePreparedInlineMessageCallback final : public TdQueryCallback { public: explicit TdOnSavePreparedInlineMessageCallback(PromisedQueryPtr query) : query_(std::move(query)) { @@ -13974,6 +13994,22 @@ td::Status Client::process_answer_web_app_query_query(PromisedQueryPtr &query) { return td::Status::OK(); } +td::Status Client::process_answer_guest_query_query(PromisedQueryPtr &query) { + auto guest_query_id = td::to_integer(query->arg("guest_query_id")); + TRY_RESULT(result, get_inline_query_result(query.get(), bot_user_ids_)); + td::vector> results; + results.push_back(std::move(result)); + + resolve_inline_query_results_bot_usernames( + std::move(results), std::move(query), + [this, guest_query_id](td::vector> results, PromisedQueryPtr query) { + CHECK(results.size() == 1); + send_request(make_object(guest_query_id, std::move(results[0])), + td::make_unique(std::move(query))); + }); + return td::Status::OK(); +} + td::Status Client::process_answer_inline_query_query(PromisedQueryPtr &query) { auto inline_query_id = td::to_integer(query->arg("inline_query_id")); auto is_personal = to_bool(query->arg("is_personal")); diff --git a/telegram-bot-api/Client.h b/telegram-bot-api/Client.h index cb06361..20e8365 100644 --- a/telegram-bot-api/Client.h +++ b/telegram-bot-api/Client.h @@ -304,6 +304,7 @@ class Client final : public WebhookActor::Callback { class TdOnGetChatInviteLinkCallback; class TdOnGetGameHighScoresCallback; class TdOnAnswerWebAppQueryCallback; + class TdOnAnswerGuestQueryCallback; class TdOnSavePreparedInlineMessageCallback; class TdOnSavePreparedKeyboardButtonCallback; class TdOnReturnFileCallback; @@ -829,6 +830,7 @@ class Client final : public WebhookActor::Callback { td::Status process_set_game_score_query(PromisedQueryPtr &query); td::Status process_get_game_high_scores_query(PromisedQueryPtr &query); td::Status process_answer_web_app_query_query(PromisedQueryPtr &query); + td::Status process_answer_guest_query_query(PromisedQueryPtr &query); td::Status process_answer_inline_query_query(PromisedQueryPtr &query); td::Status process_save_prepared_inline_message_query(PromisedQueryPtr &query); td::Status process_save_prepared_keyboard_button_query(PromisedQueryPtr &query);