From 34f9b8a86089816dcf077ca0a7c1d3ba742c9a3a Mon Sep 17 00:00:00 2001 From: levlam Date: Mon, 13 Nov 2023 20:16:11 +0300 Subject: [PATCH] Add getUserChatBoosts. --- telegram-bot-api/Client.cpp | 56 +++++++++++++++++++++++++++++++++++-- telegram-bot-api/Client.h | 5 +++- 2 files changed, 57 insertions(+), 4 deletions(-) diff --git a/telegram-bot-api/Client.cpp b/telegram-bot-api/Client.cpp index 3b2ea05..d8ba354 100644 --- a/telegram-bot-api/Client.cpp +++ b/telegram-bot-api/Client.cpp @@ -312,6 +312,7 @@ bool Client::init_methods() { methods_.emplace("unbanchatsenderchat", &Client::process_unban_chat_sender_chat_query); methods_.emplace("approvechatjoinrequest", &Client::process_approve_chat_join_request_query); methods_.emplace("declinechatjoinrequest", &Client::process_decline_chat_join_request_query); + methods_.emplace("getuserchatboosts", &Client::process_get_user_chat_boosts_query); methods_.emplace("getstickerset", &Client::process_get_sticker_set_query); methods_.emplace("getcustomemojistickers", &Client::process_get_custom_emoji_stickers_query); methods_.emplace("uploadstickerfile", &Client::process_upload_sticker_file_query); @@ -3157,6 +3158,22 @@ class Client::JsonChatBoostRemoved final : public td::Jsonable { const Client *client_; }; +class Client::JsonChatBoosts final : public td::Jsonable { + public: + JsonChatBoosts(const td_api::foundChatBoosts *chat_boosts, const Client *client) + : chat_boosts_(chat_boosts), client_(client) { + } + void store(td::JsonValueScope *scope) const { + auto object = scope->enter_object(); + object("boosts", td::json_array(chat_boosts_->boosts_, + [client = client_](auto &boost) { return JsonChatBoost(boost.get(), client); })); + } + + private: + const td_api::foundChatBoosts *chat_boosts_; + const Client *client_; +}; + class Client::JsonGameHighScore final : public td::Jsonable { public: JsonGameHighScore(const td_api::gameHighScore *score, const Client *client) : score_(score), client_(client) { @@ -4557,9 +4574,9 @@ class Client::TdOnGetSupergroupMembersCallback final : public TdQueryCallback { PromisedQueryPtr query_; }; -class Client::TdOnGetSupergroupMembersCountCallback final : public TdQueryCallback { +class Client::TdOnGetSupergroupMemberCountCallback final : public TdQueryCallback { public: - explicit TdOnGetSupergroupMembersCountCallback(PromisedQueryPtr query) : query_(std::move(query)) { + explicit TdOnGetSupergroupMemberCountCallback(PromisedQueryPtr query) : query_(std::move(query)) { } void on_result(object_ptr result) final { @@ -4683,6 +4700,26 @@ class Client::TdOnAnswerWebAppQueryCallback final : public TdQueryCallback { PromisedQueryPtr query_; }; +class Client::TdOnGetUserChatBoostsCallback final : public TdQueryCallback { + public: + TdOnGetUserChatBoostsCallback(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::foundChatBoosts::ID); + auto chat_boosts = move_object_as(result); + answer_query(JsonChatBoosts(chat_boosts.get(), client_), std::move(query_)); + } + + private: + Client *client_; + PromisedQueryPtr query_; +}; + class Client::TdOnReturnFileCallback final : public TdQueryCallback { public: TdOnReturnFileCallback(const Client *client, PromisedQueryPtr query) : client_(client), query_(std::move(query)) { @@ -10212,7 +10249,7 @@ td::Status Client::process_get_chat_member_count_query(PromisedQueryPtr &query) } case ChatInfo::Type::Supergroup: return send_request(make_object(chat_info->supergroup_id), - td::make_unique(std::move(query))); + td::make_unique(std::move(query))); case ChatInfo::Type::Unknown: default: UNREACHABLE(); @@ -10474,6 +10511,19 @@ td::Status Client::process_decline_chat_join_request_query(PromisedQueryPtr &que return td::Status::OK(); } +td::Status Client::process_get_user_chat_boosts_query(PromisedQueryPtr &query) { + auto chat_id = query->arg("chat_id"); + TRY_RESULT(user_id, get_user_id(query.get())); + + check_chat(chat_id, AccessRights::Write, std::move(query), [this, user_id](int64 chat_id, PromisedQueryPtr query) { + check_user_no_fail(user_id, std::move(query), [this, chat_id, user_id](PromisedQueryPtr query) { + send_request(make_object(chat_id, user_id), + td::make_unique(this, std::move(query))); + }); + }); + return td::Status::OK(); +} + td::Status Client::process_get_sticker_set_query(PromisedQueryPtr &query) { auto name = query->arg("name"); if (td::trim(to_lower(name)) == to_lower(GREAT_MINDS_SET_NAME)) { diff --git a/telegram-bot-api/Client.h b/telegram-bot-api/Client.h index 9e4ad14..5a0be84 100644 --- a/telegram-bot-api/Client.h +++ b/telegram-bot-api/Client.h @@ -163,6 +163,7 @@ class Client final : public WebhookActor::Callback { class JsonChatBoost; class JsonChatBoostUpdated; class JsonChatBoostRemoved; + class JsonChatBoosts; class JsonForumTopicCreated; class JsonForumTopicEdited; class JsonForumTopicInfo; @@ -229,7 +230,8 @@ class Client final : public WebhookActor::Callback { class TdOnGetChatPinnedMessageToUnpinCallback; class TdOnGetGroupMembersCallback; class TdOnGetSupergroupMembersCallback; - class TdOnGetSupergroupMembersCountCallback; + class TdOnGetSupergroupMemberCountCallback; + class TdOnGetUserChatBoostsCallback; class TdOnCreateInvoiceLinkCallback; class TdOnReplacePrimaryChatInviteLinkCallback; class TdOnGetChatInviteLinkCallback; @@ -675,6 +677,7 @@ class Client final : public WebhookActor::Callback { td::Status process_unban_chat_sender_chat_query(PromisedQueryPtr &query); td::Status process_approve_chat_join_request_query(PromisedQueryPtr &query); td::Status process_decline_chat_join_request_query(PromisedQueryPtr &query); + td::Status process_get_user_chat_boosts_query(PromisedQueryPtr &query); td::Status process_get_sticker_set_query(PromisedQueryPtr &query); td::Status process_get_custom_emoji_stickers_query(PromisedQueryPtr &query); td::Status process_upload_sticker_file_query(PromisedQueryPtr &query);