From 8b5fd5d79a4bc2156f7326a470b56e057074d596 Mon Sep 17 00:00:00 2001 From: levlam Date: Mon, 20 Apr 2026 14:11:01 +0300 Subject: [PATCH] Load sticker sets for received gifts. --- telegram-bot-api/Client.cpp | 32 +++++++++++++++++++++++++++++--- telegram-bot-api/Client.h | 4 ++++ 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/telegram-bot-api/Client.cpp b/telegram-bot-api/Client.cpp index e6eb7a6..4f30b42 100644 --- a/telegram-bot-api/Client.cpp +++ b/telegram-bot-api/Client.cpp @@ -7324,7 +7324,7 @@ class Client::TdOnGetStarAmountCallback final : public TdQueryCallback { class Client::TdOnGetReceivedGiftsCallback final : public TdQueryCallback { public: - TdOnGetReceivedGiftsCallback(const Client *client, bool can_be_managed, PromisedQueryPtr query) + TdOnGetReceivedGiftsCallback(Client *client, bool can_be_managed, PromisedQueryPtr query) : client_(client), can_be_managed_(can_be_managed), query_(std::move(query)) { } @@ -7335,11 +7335,20 @@ class Client::TdOnGetReceivedGiftsCallback final : public TdQueryCallback { CHECK(result->get_id() == td_api::receivedGifts::ID); auto gifts = move_object_as(result); - answer_query(JsonReceivedGifts(gifts.get(), can_be_managed_, client_), std::move(query_)); + td::vector sticker_set_ids; + for (const auto &gift : gifts->gifts_) { + td::combine(sticker_set_ids, Client::get_sent_gift_sticker_set_ids(gift->gift_)); + } + client_->get_sticker_set_names( + std::move(sticker_set_ids), + td::PromiseCreator::lambda([actor_id = client_->actor_id(client_), gifts = std::move(gifts), + can_be_managed = can_be_managed_, query = std::move(query_)](td::Unit) mutable { + send_closure(actor_id, &Client::return_received_gifts, std::move(gifts), can_be_managed, std::move(query)); + })); } private: - const Client *client_; + Client *client_; bool can_be_managed_; PromisedQueryPtr query_; }; @@ -15361,6 +15370,11 @@ void Client::return_stickers(object_ptr stickers, PromisedQuer answer_query(JsonStickers(stickers->stickers_, this), std::move(query)); } +void Client::return_received_gifts(object_ptr gifts, bool can_be_managed, + PromisedQueryPtr query) { + answer_query(JsonReceivedGifts(gifts.get(), can_be_managed, this), std::move(query)); +} + void Client::return_chat_full_info(int64 chat_id, int64 pinned_message_id, PromisedQueryPtr query) { answer_query(JsonChat(chat_id, this, true, pinned_message_id), std::move(query)); } @@ -17242,6 +17256,18 @@ td::vector Client::get_upgraded_gift_sticker_set_ids(const object_ptr return sticker_set_ids; } +td::vector Client::get_sent_gift_sticker_set_ids(const object_ptr &gift) { + switch (gift->get_id()) { + case td_api::sentGiftRegular::ID: + return get_gift_sticker_set_ids(static_cast(gift.get())->gift_); + case td_api::sentGiftUpgraded::ID: + return get_upgraded_gift_sticker_set_ids(static_cast(gift.get())->gift_); + default: + UNREACHABLE(); + return {}; + } +} + td::vector Client::get_message_content_sticker_set_ids(const object_ptr &content) { CHECK(content != nullptr); switch (content->get_id()) { diff --git a/telegram-bot-api/Client.h b/telegram-bot-api/Client.h index 54bbc6b..cccbcaf 100644 --- a/telegram-bot-api/Client.h +++ b/telegram-bot-api/Client.h @@ -947,6 +947,8 @@ class Client final : public WebhookActor::Callback { void return_stickers(object_ptr stickers, PromisedQueryPtr query); + void return_received_gifts(object_ptr gifts, bool can_be_managed, PromisedQueryPtr query); + void return_chat_full_info(int64 chat_id, int64 pinned_message_id, PromisedQueryPtr query); void fix_reply_markup_bot_user_ids(object_ptr &reply_markup) const; @@ -1188,6 +1190,8 @@ class Client final : public WebhookActor::Callback { static td::vector get_upgraded_gift_sticker_set_ids(const object_ptr &gift); + static td::vector get_sent_gift_sticker_set_ids(const object_ptr &gift); + static td::vector get_message_content_sticker_set_ids(const object_ptr &content); static td::vector get_message_sticker_set_ids(const MessageInfo *message_info);