diff --git a/telegram-bot-api/Client.cpp b/telegram-bot-api/Client.cpp index 07eb99c..093b651 100644 --- a/telegram-bot-api/Client.cpp +++ b/telegram-bot-api/Client.cpp @@ -325,6 +325,7 @@ bool Client::init_methods() { methods_.emplace("transfergift", &Client::process_transfer_gift_query); methods_.emplace("setuseremojistatus", &Client::process_set_user_emoji_status_query); methods_.emplace("getchat", &Client::process_get_chat_query); + methods_.emplace("getuserpersonalchatmessages", &Client::process_get_user_personal_chat_messages_query); methods_.emplace("setchatphoto", &Client::process_set_chat_photo_query); methods_.emplace("deletechatphoto", &Client::process_delete_chat_photo_query); methods_.emplace("setchattitle", &Client::process_set_chat_title_query); @@ -7078,6 +7079,32 @@ class Client::TdOnGetForumTopicInfoCallback final : public TdQueryCallback { PromisedQueryPtr query_; }; +class Client::TdOnGetMessagesCallback final : public TdQueryCallback { + public: + TdOnGetMessagesCallback(Client *client, PromisedQueryPtr query) : client_(client), 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::messages::ID); + auto messages = move_object_as(result); + td::vector message_strings; + for (auto &message : messages->messages_) { + auto message_info = client_->create_message(std::move(message)); + message_strings.push_back( + td::json_encode(JsonMessage(message_info.get(), false, "TdOnGetMessagesCallback", client_))); + } + answer_query(JsonMessages(message_strings), std::move(query_)); + } + + private: + Client *client_; + PromisedQueryPtr query_; +}; + class Client::TdOnGetMenuButtonCallback final : public TdQueryCallback { public: explicit TdOnGetMenuButtonCallback(PromisedQueryPtr query) : query_(std::move(query)) { @@ -14498,6 +14525,17 @@ td::Status Client::process_get_chat_query(PromisedQueryPtr &query) { return td::Status::OK(); } +td::Status Client::process_get_user_personal_chat_messages_query(PromisedQueryPtr &query) { + TRY_RESULT(user_id, get_user_id(query.get())); + auto limit = get_integer_arg(query.get(), "limit", 0, 0, 20); + + check_user(user_id, std::move(query), [this, user_id, limit](PromisedQueryPtr query) mutable { + send_request(make_object(user_id, limit), + td::make_unique(this, std::move(query))); + }); + return td::Status::OK(); +} + td::Status Client::process_set_chat_photo_query(PromisedQueryPtr &query) { auto chat_id = query->arg("chat_id"); auto photo = get_input_file(query.get(), "photo", true); diff --git a/telegram-bot-api/Client.h b/telegram-bot-api/Client.h index 20e8365..1e9cf40 100644 --- a/telegram-bot-api/Client.h +++ b/telegram-bot-api/Client.h @@ -278,6 +278,7 @@ class Client final : public WebhookActor::Callback { class TdOnGetEditedMessageCallback; class TdOnGetCallbackQueryMessageCallback; class TdOnGetForumTopicInfoCallback; + class TdOnGetMessagesCallback; class TdOnGetMenuButtonCallback; class TdOnGetMyCommandsCallback; class TdOnGetMyDefaultAdministratorRightsCallback; @@ -862,6 +863,7 @@ class Client final : public WebhookActor::Callback { td::Status process_transfer_gift_query(PromisedQueryPtr &query); td::Status process_set_user_emoji_status_query(PromisedQueryPtr &query); td::Status process_get_chat_query(PromisedQueryPtr &query); + td::Status process_get_user_personal_chat_messages_query(PromisedQueryPtr &query); td::Status process_set_chat_photo_query(PromisedQueryPtr &query); td::Status process_delete_chat_photo_query(PromisedQueryPtr &query); td::Status process_set_chat_title_query(PromisedQueryPtr &query);