From 39f96f93a9d1872ad0fb8a62a7da6ebac3f3e1e4 Mon Sep 17 00:00:00 2001 From: levlam Date: Thu, 8 Apr 2021 17:17:05 +0300 Subject: [PATCH] Update TDLib to 1.7.4. --- td | 2 +- telegram-bot-api/Client.cpp | 73 ++++++++++++++++++++++++++----------- 2 files changed, 52 insertions(+), 23 deletions(-) diff --git a/td b/td index fbc7e5a..5bd0c2c 160000 --- a/td +++ b/td @@ -1 +1 @@ -Subproject commit fbc7e5a7f845d6c8df12b11f5b9a5c9ffc6eea0e +Subproject commit 5bd0c2c46ded5c75a641829cfe84c0b5fead5bfc diff --git a/telegram-bot-api/Client.cpp b/telegram-bot-api/Client.cpp index a4ffeb3..2b5f39c 100644 --- a/telegram-bot-api/Client.cpp +++ b/telegram-bot-api/Client.cpp @@ -2166,7 +2166,18 @@ class Client::JsonChatMember : public Jsonable { void store(JsonValueScope *scope) const { auto object = scope->enter_object(); - object("user", JsonUser(member_->user_id_, client_)); + CHECK(member_->member_id_ != nullptr); + switch (member_->member_id_->get_id()) { + case td_api::messageSenderUser::ID: { + auto user_id = static_cast(member_->member_id_.get())->user_id_; + object("user", JsonUser(user_id, client_)); + break; + } + case td_api::messageSenderChat::ID: + break; + default: + UNREACHABLE(); + } object("status", Client::get_chat_member_status(member_->status_)); switch (member_->status_->get_id()) { case td_api::chatMemberStatusCreator::ID: { @@ -2239,15 +2250,20 @@ class Client::JsonChatMembers : public Jsonable { auto array = scope->enter_array(); for (auto &member : members_) { CHECK(member != nullptr); + CHECK(member->member_id_ != nullptr); + if (member->member_id_->get_id() != td_api::messageSenderUser::ID) { + continue; + } + auto user_id = static_cast(member->member_id_.get())->user_id_; bool is_member_bot = member->bot_info_ != nullptr; if (!is_member_bot) { // bot info may be unknown - auto user_info = client_->get_user_info(member->user_id_); + auto user_info = client_->get_user_info(user_id); if (user_info != nullptr && user_info->type == UserInfo::Type::Bot) { is_member_bot = true; } } - if (is_member_bot && member->user_id_ != client_->my_id_) { + if (is_member_bot && user_id != client_->my_id_) { continue; } if (administrators_only_) { @@ -3912,8 +3928,9 @@ void Client::get_chat_member(int64 chat_id, int32 user_id, PromisedQueryPtr quer check_user_no_fail( user_id, std::move(query), [this, chat_id, user_id, on_success = std::move(on_success)](PromisedQueryPtr query) mutable { - send_request(make_object(chat_id, user_id), - std::make_unique>(std::move(query), std::move(on_success))); + send_request( + make_object(chat_id, td_api::make_object(user_id)), + std::make_unique>(std::move(query), std::move(on_success))); }); } @@ -6327,9 +6344,9 @@ td::Status Client::process_send_invoice_query(PromisedQueryPtr &query) { do_send_message( make_object( - make_object(currency.str(), std::move(prices), false, need_name, need_phone_number, - need_email_address, need_shipping_address, send_phone_number_to_provider, - send_email_address_to_provider, is_flexible), + make_object(currency.str(), std::move(prices), 0, td::vector(), false, need_name, + need_phone_number, need_email_address, need_shipping_address, + send_phone_number_to_provider, send_email_address_to_provider, is_flexible), title.str(), description.str(), photo_url.str(), photo_size, photo_width, photo_height, payload.str(), provider_token.str(), provider_data.str(), start_parameter.str()), std::move(query)); @@ -7172,8 +7189,10 @@ td::Status Client::process_promote_chat_member_query(PromisedQueryPtr &query) { status->custom_title_ = std::move(administrator->custom_title_); } - send_request(make_object(chat_id, user_id, std::move(status)), - std::make_unique(std::move(query))); + send_request( + make_object( + chat_id, td_api::make_object(user_id), std::move(status)), + std::make_unique(std::move(query))); }); }); return Status::OK(); @@ -7204,7 +7223,8 @@ td::Status Client::process_set_chat_administrator_custom_title_query(PromisedQue } administrator->custom_title_ = query->arg("custom_title").str(); - send_request(make_object(chat_id, user_id, std::move(administrator)), + send_request(make_object( + chat_id, td_api::make_object(user_id), std::move(administrator)), std::make_unique(std::move(query))); }); }); @@ -7219,12 +7239,13 @@ td::Status Client::process_ban_chat_member_query(PromisedQueryPtr &query) { check_chat(chat_id, AccessRights::Write, std::move(query), [this, user_id, until_date, revoke_messages](int64 chat_id, PromisedQueryPtr query) { - check_user_no_fail( - user_id, std::move(query), - [this, chat_id, user_id, until_date, revoke_messages](PromisedQueryPtr query) { - send_request(make_object(chat_id, user_id, until_date, revoke_messages), - std::make_unique(std::move(query))); - }); + check_user_no_fail(user_id, std::move(query), + [this, chat_id, user_id, until_date, revoke_messages](PromisedQueryPtr query) { + send_request(make_object( + chat_id, td_api::make_object(user_id), + until_date, revoke_messages), + std::make_unique(std::move(query))); + }); }); return Status::OK(); } @@ -7258,7 +7279,7 @@ td::Status Client::process_restrict_chat_member_query(PromisedQueryPtr &query) { } send_request(make_object( - chat_id, user_id, + chat_id, td_api::make_object(user_id), make_object( is_chat_member(chat_member->status_), until_date, std::move(permissions))), std::make_unique(std::move(query))); @@ -7290,13 +7311,15 @@ td::Status Client::process_unban_chat_member_query(PromisedQueryPtr &query) { } send_request(make_object( - chat_id, user_id, make_object()), + chat_id, td_api::make_object(user_id), + make_object()), std::make_unique(std::move(query))); }); } else { check_user_no_fail(user_id, std::move(query), [this, chat_id, user_id](PromisedQueryPtr query) { - send_request(make_object(chat_id, user_id, - make_object()), + send_request(make_object( + chat_id, td_api::make_object(user_id), + make_object()), std::make_unique(std::move(query))); }); } @@ -8529,7 +8552,13 @@ void Client::add_update_chat_member(object_ptr &&updat CHECK(update != nullptr); auto left_time = update->date_ + 86400 - get_unix_time(); if (left_time > 0) { - bool is_my = (update->old_chat_member_->user_id_ == my_id_); + CHECK(update->old_chat_member_->member_id_ != nullptr); + if (update->old_chat_member_->member_id_->get_id() != td_api::messageSenderUser::ID || + update->new_chat_member_->member_id_->get_id() != td_api::messageSenderUser::ID) { + return; + } + auto user_id = static_cast(update->old_chat_member_->member_id_.get())->user_id_; + bool is_my = (user_id == my_id_); auto webhook_queue_id = update->chat_id_ + (static_cast(is_my ? 5 : 6) << 33); auto update_type = is_my ? UpdateType::MyChatMember : UpdateType::ChatMember; add_update(update_type, JsonChatMemberUpdated(update.get(), this), left_time, webhook_queue_id);