From b2a85a5d1b2a2f3a4f51b6fd3fa6e4553385a227 Mon Sep 17 00:00:00 2001 From: levlam Date: Tue, 31 Oct 2023 00:18:38 +0300 Subject: [PATCH] Add td_api::updateChatBoost. --- td/generate/scheme/td_api.tl | 5 +++++ td/telegram/BoostManager.cpp | 26 ++++++++++++++++++++++++-- td/telegram/BoostManager.h | 2 ++ td/telegram/UpdatesManager.cpp | 19 +++++++++++++++---- td/telegram/UpdatesManager.h | 3 +-- 5 files changed, 47 insertions(+), 8 deletions(-) diff --git a/td/generate/scheme/td_api.tl b/td/generate/scheme/td_api.tl index 8d4f87d4a..49bc11106 100644 --- a/td/generate/scheme/td_api.tl +++ b/td/generate/scheme/td_api.tl @@ -6457,6 +6457,11 @@ updateChatMember chat_id:int53 actor_user_id:int53 date:int32 invite_link:chatIn //@invite_link The invite link, which was used to send join request; may be null updateNewChatJoinRequest chat_id:int53 request:chatJoinRequest user_chat_id:int53 invite_link:chatInviteLink = Update; +//@description A chat boost has changed; for bots only +//@chat_id Chat identifier +//@boost New information about the boost +updateChatBoost chat_id:int53 boost:chatBoost = Update; + //@description Contains a list of updates @updates List of updates updates updates:vector = Updates; diff --git a/td/telegram/BoostManager.cpp b/td/telegram/BoostManager.cpp index df9b31f99..5b0de2a54 100644 --- a/td/telegram/BoostManager.cpp +++ b/td/telegram/BoostManager.cpp @@ -7,6 +7,7 @@ #include "td/telegram/BoostManager.h" #include "td/telegram/AccessRights.h" +#include "td/telegram/AuthManager.h" #include "td/telegram/ContactsManager.h" #include "td/telegram/Global.h" #include "td/telegram/LinkManager.h" @@ -25,7 +26,7 @@ namespace td { static td_api::object_ptr get_chat_boost_object( - Td *td, telegram_api::object_ptr &&boost) { + Td *td, const telegram_api::object_ptr &boost) { auto source = [&]() -> td_api::object_ptr { if (boost->giveaway_) { UserId user_id(boost->user_id_); @@ -269,7 +270,7 @@ class GetBoostsListQuery final : public Td::ResultHandler { auto total_count = result->count_; vector> boosts; for (auto &boost : result->boosts_) { - auto chat_boost_object = get_chat_boost_object(td_, std::move(boost)); + auto chat_boost_object = get_chat_boost_object(td_, boost); if (chat_boost_object == nullptr || chat_boost_object->expiration_date_ <= G()->unix_time()) { continue; } @@ -388,4 +389,25 @@ void BoostManager::get_dialog_boosts(DialogId dialog_id, bool only_gift_codes, c td_->create_handler(std::move(promise))->send(dialog_id, only_gift_codes, offset, limit); } +void BoostManager::on_update_dialog_boost(DialogId dialog_id, telegram_api::object_ptr &&boost) { + if (!td_->auth_manager_->is_bot()) { + LOG(ERROR) << "Receive updateBotChatBoost by a non-bot"; + return; + } + if (!dialog_id.is_valid() || !td_->messages_manager_->have_dialog_info_force(dialog_id, "on_update_dialog_boost")) { + LOG(ERROR) << "Receive updateBotChatBoost in " << dialog_id; + return; + } + auto chat_boost_object = get_chat_boost_object(td_, boost); + if (chat_boost_object == nullptr) { + LOG(ERROR) << "Receive wrong updateBotChatBoost in " << dialog_id << ": " << to_string(boost); + return; + } + td_->messages_manager_->force_create_dialog(dialog_id, "on_update_dialog_boost", true); + send_closure( + G()->td(), &Td::send_update, + td_api::make_object( + td_->messages_manager_->get_chat_id_object(dialog_id, "updateChatBoost"), std::move(chat_boost_object))); +} + } // namespace td diff --git a/td/telegram/BoostManager.h b/td/telegram/BoostManager.h index 547704c26..3ffe83c15 100644 --- a/td/telegram/BoostManager.h +++ b/td/telegram/BoostManager.h @@ -43,6 +43,8 @@ class BoostManager final : public Actor { void get_dialog_boosts(DialogId dialog_id, bool only_gift_codes, const string &offset, int32 limit, Promise> &&promise); + void on_update_dialog_boost(DialogId dialog_id, telegram_api::object_ptr &&boost); + private: void tear_down() final; diff --git a/td/telegram/UpdatesManager.cpp b/td/telegram/UpdatesManager.cpp index 70fb5f57a..06b02953e 100644 --- a/td/telegram/UpdatesManager.cpp +++ b/td/telegram/UpdatesManager.cpp @@ -11,6 +11,7 @@ #include "td/telegram/AttachMenuManager.h" #include "td/telegram/AuthManager.h" #include "td/telegram/AutosaveManager.h" +#include "td/telegram/BoostManager.h" #include "td/telegram/CallbackQueriesManager.h" #include "td/telegram/CallManager.h" #include "td/telegram/ChannelId.h" @@ -3029,6 +3030,12 @@ void UpdatesManager::process_qts_update(tl_object_ptr &&up add_qts(qts).set_value(Unit()); break; } + case telegram_api::updateBotChatBoost::ID: { + auto update = move_tl_object_as(update_ptr); + td_->boost_manager_->on_update_dialog_boost(DialogId(update->peer_), std::move(update->boost_)); + add_qts(qts).set_value(Unit()); + break; + } default: UNREACHABLE(); break; @@ -3793,6 +3800,7 @@ bool UpdatesManager::is_qts_update(const telegram_api::Update *update) { case telegram_api::updateChatParticipant::ID: case telegram_api::updateChannelParticipant::ID: case telegram_api::updateBotChatInviteRequester::ID: + case telegram_api::updateBotChatBoost::ID: return true; default: return false; @@ -3813,6 +3821,8 @@ int32 UpdatesManager::get_update_qts(const telegram_api::Update *update) { return static_cast(update)->qts_; case telegram_api::updateBotChatInviteRequester::ID: return static_cast(update)->qts_; + case telegram_api::updateBotChatBoost::ID: + return static_cast(update)->qts_; default: return 0; } @@ -4286,6 +4296,11 @@ void UpdatesManager::on_update(tl_object_ptr update, Promise &&promise) { + auto qts = update->qts_; + add_pending_qts_update(std::move(update), qts, std::move(promise)); +} + void UpdatesManager::on_update(tl_object_ptr update, Promise &&promise) { td_->theme_manager_->on_update_theme(std::move(update->theme_), std::move(promise)); } @@ -4366,8 +4381,4 @@ void UpdatesManager::on_update(tl_object_ptr update, Promise &&promise) { - promise.set_value(Unit()); -} - } // namespace td diff --git a/td/telegram/UpdatesManager.h b/td/telegram/UpdatesManager.h index 8aa61ddec..16eec6c64 100644 --- a/td/telegram/UpdatesManager.h +++ b/td/telegram/UpdatesManager.h @@ -615,6 +615,7 @@ class UpdatesManager final : public Actor { void on_update(tl_object_ptr update, Promise &&promise); void on_update(tl_object_ptr update, Promise &&promise); void on_update(tl_object_ptr update, Promise &&promise); + void on_update(tl_object_ptr update, Promise &&promise); void on_update(tl_object_ptr update, Promise &&promise); @@ -641,8 +642,6 @@ class UpdatesManager final : public Actor { void on_update(tl_object_ptr update, Promise &&promise); // unsupported updates - - void on_update(tl_object_ptr update, Promise &&promise); }; } // namespace td