Allow to pass list of slots to boostChat.

This commit is contained in:
levlam 2023-10-20 23:28:09 +03:00
parent 00ac941e64
commit de3aebd011
5 changed files with 19 additions and 13 deletions

View File

@ -3512,7 +3512,7 @@ prepaidPremiumGiveaway id:int64 user_count:int32 month_count:int32 payment_date:
//@description Describes current boost status of a chat //@description Describes current boost status of a chat
//@boost_url An HTTP URL, which can be used to boost the chat //@boost_url An HTTP URL, which can be used to boost the chat
//@applied_slots Identifiers of boost slots of the current user applied to the chat //@applied_slot_ids Identifiers of boost slots of the current user applied to the chat
//@level Current boost level of the chat //@level Current boost level of the chat
//@gift_code_boost_count The number of boosts received by the chat from created Telegram Premium gift codes and giveaways //@gift_code_boost_count The number of boosts received by the chat from created Telegram Premium gift codes and giveaways
//@boost_count The number of boosts received by the chat //@boost_count The number of boosts received by the chat
@ -3521,7 +3521,7 @@ prepaidPremiumGiveaway id:int64 user_count:int32 month_count:int32 payment_date:
//@premium_member_count Approximate number of Telegram Premium subscribers joined the chat; always 0 if the current user isn't an administrator in the chat //@premium_member_count Approximate number of Telegram Premium subscribers joined the chat; always 0 if the current user isn't an administrator in the chat
//@premium_member_percentage A percentage of Telegram Premium subscribers joined the chat; always 0 if the current user isn't an administrator in the chat //@premium_member_percentage A percentage of Telegram Premium subscribers joined the chat; always 0 if the current user isn't an administrator in the chat
//@prepaid_giveaways The list of prepaid giveaways available for the chat; only for chat administrators //@prepaid_giveaways The list of prepaid giveaways available for the chat; only for chat administrators
chatBoostStatus boost_url:string applied_slots:vector<int32> level:int32 gift_code_boost_count:int32 boost_count:int32 current_level_boost_count:int32 next_level_boost_count:int32 premium_member_count:int32 premium_member_percentage:double prepaid_giveaways:vector<prepaidPremiumGiveaway> = ChatBoostStatus; chatBoostStatus boost_url:string applied_slot_ids:vector<int32> level:int32 gift_code_boost_count:int32 boost_count:int32 current_level_boost_count:int32 next_level_boost_count:int32 premium_member_count:int32 premium_member_percentage:double prepaid_giveaways:vector<prepaidPremiumGiveaway> = ChatBoostStatus;
//@description Describes a boost of a chat //@description Describes a boost of a chat
//@count The number of boosts applied //@count The number of boosts applied
@ -7923,8 +7923,8 @@ activateStoryStealthMode = Ok;
//@description Returns the current boost status for a channel chat @chat_id Identifier of the channel chat //@description Returns the current boost status for a channel chat @chat_id Identifier of the channel chat
getChatBoostStatus chat_id:int53 = ChatBoostStatus; getChatBoostStatus chat_id:int53 = ChatBoostStatus;
//@description Boosts a chat @chat_id Identifier of the chat //@description Boosts a chat @chat_id Identifier of the chat @slot_ids Identifiers of boost slots of the current user from which to apply boosts to the chat
boostChat chat_id:int53 = Ok; boostChat chat_id:int53 slot_ids:vector<int32> = Ok;
//@description Returns an HTTPS link to boost the specified channel chat @chat_id Identifier of the chat //@description Returns an HTTPS link to boost the specified channel chat @chat_id Identifier of the chat
getChatBoostLink chat_id:int53 = ChatBoostLink; getChatBoostLink chat_id:int53 = ChatBoostLink;

View File

@ -99,12 +99,14 @@ class ApplyBoostQuery final : public Td::ResultHandler {
explicit ApplyBoostQuery(Promise<Unit> &&promise) : promise_(std::move(promise)) { explicit ApplyBoostQuery(Promise<Unit> &&promise) : promise_(std::move(promise)) {
} }
void send(DialogId dialog_id) { void send(DialogId dialog_id, vector<int32> slot_ids) {
dialog_id_ = dialog_id; dialog_id_ = dialog_id;
auto input_peer = td_->messages_manager_->get_input_peer(dialog_id_, AccessRights::Read); auto input_peer = td_->messages_manager_->get_input_peer(dialog_id_, AccessRights::Read);
CHECK(input_peer != nullptr); CHECK(input_peer != nullptr);
send_query(G()->net_query_creator().create( send_query(
telegram_api::premium_applyBoost(0, vector<int>(), std::move(input_peer)), {{dialog_id}})); G()->net_query_creator().create(telegram_api::premium_applyBoost(telegram_api::premium_applyBoost::SLOTS_MASK,
std::move(slot_ids), std::move(input_peer)),
{{dialog_id}}));
} }
void on_result(BufferSlice packet) final { void on_result(BufferSlice packet) final {
@ -226,15 +228,18 @@ void BoostManager::get_dialog_boost_status(DialogId dialog_id,
td_->create_handler<GetBoostsStatusQuery>(std::move(promise))->send(dialog_id); td_->create_handler<GetBoostsStatusQuery>(std::move(promise))->send(dialog_id);
} }
void BoostManager::boost_dialog(DialogId dialog_id, Promise<Unit> &&promise) { void BoostManager::boost_dialog(DialogId dialog_id, vector<int32> slot_ids, Promise<Unit> &&promise) {
if (!td_->messages_manager_->have_dialog_force(dialog_id, "get_dialog_boost_status")) { if (!td_->messages_manager_->have_dialog_force(dialog_id, "get_dialog_boost_status")) {
return promise.set_error(Status::Error(400, "Chat not found")); return promise.set_error(Status::Error(400, "Chat not found"));
} }
if (!td_->messages_manager_->have_input_peer(dialog_id, AccessRights::Read)) { if (!td_->messages_manager_->have_input_peer(dialog_id, AccessRights::Read)) {
return promise.set_error(Status::Error(400, "Can't access the chat")); return promise.set_error(Status::Error(400, "Can't access the chat"));
} }
if (slot_ids.empty()) {
return promise.set_value(Unit());
}
td_->create_handler<ApplyBoostQuery>(std::move(promise))->send(dialog_id); td_->create_handler<ApplyBoostQuery>(std::move(promise))->send(dialog_id, slot_ids);
} }
Result<std::pair<string, bool>> BoostManager::get_dialog_boost_link(DialogId dialog_id) { Result<std::pair<string, bool>> BoostManager::get_dialog_boost_link(DialogId dialog_id) {

View File

@ -26,7 +26,7 @@ class BoostManager final : public Actor {
void get_dialog_boost_status(DialogId dialog_id, Promise<td_api::object_ptr<td_api::chatBoostStatus>> &&promise); void get_dialog_boost_status(DialogId dialog_id, Promise<td_api::object_ptr<td_api::chatBoostStatus>> &&promise);
void boost_dialog(DialogId dialog_id, Promise<Unit> &&promise); void boost_dialog(DialogId dialog_id, vector<int32> slot_ids, Promise<Unit> &&promise);
Result<std::pair<string, bool>> get_dialog_boost_link(DialogId dialog_id); Result<std::pair<string, bool>> get_dialog_boost_link(DialogId dialog_id);

View File

@ -6646,7 +6646,7 @@ void Td::on_request(uint64 id, const td_api::getChatBoostStatus &request) {
void Td::on_request(uint64 id, const td_api::boostChat &request) { void Td::on_request(uint64 id, const td_api::boostChat &request) {
CHECK_IS_USER(); CHECK_IS_USER();
CREATE_OK_REQUEST_PROMISE(); CREATE_OK_REQUEST_PROMISE();
boost_manager_->boost_dialog(DialogId(request.chat_id_), std::move(promise)); boost_manager_->boost_dialog(DialogId(request.chat_id_), std::move(request.slot_ids_), std::move(promise));
} }
void Td::on_request(uint64 id, const td_api::getChatBoostLink &request) { void Td::on_request(uint64 id, const td_api::getChatBoostLink &request) {

View File

@ -4373,8 +4373,9 @@ class CliClient final : public Actor {
send_request(td_api::make_object<td_api::getChatBoostStatus>(chat_id)); send_request(td_api::make_object<td_api::getChatBoostStatus>(chat_id));
} else if (op == "bc") { } else if (op == "bc") {
ChatId chat_id; ChatId chat_id;
get_args(args, chat_id); string slot_ids;
send_request(td_api::make_object<td_api::boostChat>(chat_id)); get_args(args, chat_id, slot_ids);
send_request(td_api::make_object<td_api::boostChat>(chat_id, to_integers<int32>(slot_ids)));
} else if (op == "gcbl") { } else if (op == "gcbl") {
ChatId chat_id; ChatId chat_id;
get_args(args, chat_id); get_args(args, chat_id);