From 4be79ff78cae7c3ec649f8fb28b8d4dbea9d3f26 Mon Sep 17 00:00:00 2001 From: levlam Date: Wed, 20 Jul 2022 22:54:07 +0300 Subject: [PATCH] Update TDLib to 1.8.5. --- td | 2 +- telegram-bot-api/Client.cpp | 83 ++++++++++++++++++++----------------- telegram-bot-api/Client.h | 2 +- 3 files changed, 48 insertions(+), 39 deletions(-) diff --git a/td b/td index 9a061c3..d9cfcf8 160000 --- a/td +++ b/td @@ -1 +1 @@ -Subproject commit 9a061c30c1f1928f12bdb3feb2108a8052b102be +Subproject commit d9cfcf88fe4ad06dae1716ce8f66bbeb7f9491d9 diff --git a/telegram-bot-api/Client.cpp b/telegram-bot-api/Client.cpp index f045df5..02a6feb 100644 --- a/telegram-bot-api/Client.cpp +++ b/telegram-bot-api/Client.cpp @@ -481,7 +481,8 @@ class Client::JsonVectorEntities final : public Jsonable { for (auto &entity : entities_) { auto entity_type = entity->type_->get_id(); if (entity_type != td_api::textEntityTypeBankCardNumber::ID && - entity_type != td_api::textEntityTypeMediaTimestamp::ID) { + entity_type != td_api::textEntityTypeMediaTimestamp::ID && + entity_type != td_api::textEntityTypeCustomEmoji::ID) { array << JsonEntity(entity.get(), client_); } } @@ -1018,14 +1019,12 @@ class Client::JsonSticker final : public Jsonable { if (!set_name.empty()) { object("set_name", set_name); } - auto type = sticker_->type_->get_id(); - object("is_animated", td::JsonBool(type == td_api::stickerTypeAnimated::ID)); - object("is_video", td::JsonBool(type == td_api::stickerTypeVideo::ID)); - if (type == td_api::stickerTypeMask::ID) { - const auto &mask_position = static_cast(sticker_->type_.get())->mask_position_; - if (mask_position != nullptr) { - object("mask_position", JsonMaskPosition(mask_position.get())); - } + auto format = sticker_->format_->get_id(); + object("is_animated", td::JsonBool(format == td_api::stickerFormatTgs::ID)); + object("is_video", td::JsonBool(format == td_api::stickerFormatWebm::ID)); + const auto &mask_position = sticker_->mask_position_; + if (mask_position != nullptr) { + object("mask_position", JsonMaskPosition(mask_position.get())); } if (sticker_->premium_animation_ != nullptr) { object("premium_animation", JsonFile(sticker_->premium_animation_.get(), client_, false)); @@ -2018,6 +2017,8 @@ void Client::JsonMessage::store(JsonValueScope *scope) const { object("web_app_data", JsonWebAppData(content)); break; } + case td_api::messageGiftedPremium::ID: + break; default: UNREACHABLE(); } @@ -2612,9 +2613,10 @@ class Client::JsonStickerSet final : public Jsonable { if (sticker_set_->thumbnail_ != nullptr) { client_->json_store_thumbnail(object, sticker_set_->thumbnail_.get()); } + auto format = sticker_set_->sticker_format_->get_id(); + object("is_animated", td::JsonBool(format == td_api::stickerFormatTgs::ID)); + object("is_video", td::JsonBool(format == td_api::stickerFormatWebm::ID)); auto type = sticker_set_->sticker_type_->get_id(); - object("is_animated", td::JsonBool(type == td_api::stickerTypeAnimated::ID)); - object("is_video", td::JsonBool(type == td_api::stickerTypeVideo::ID)); object("contains_masks", td::JsonBool(type == td_api::stickerTypeMask::ID)); object("stickers", JsonStickers(sticker_set_->stickers_, client_)); } @@ -6144,27 +6146,23 @@ td::Result> Client::get_mask_position(c return r_mask_position.move_as_ok(); } -td::Result>> Client::get_input_stickers(const Query *query, - bool is_masks) const { +td::Result>> Client::get_input_stickers(const Query *query) const { auto emojis = query->arg("emojis"); auto sticker = get_input_file(query, "png_sticker"); - object_ptr sticker_type; + object_ptr sticker_format; + object_ptr mask_position; if (sticker != nullptr) { - if (is_masks) { - TRY_RESULT(mask_position, get_mask_position(query, "mask_position")); - sticker_type = make_object(std::move(mask_position)); - } else { - sticker_type = make_object(); - } + sticker_format = make_object(); + TRY_RESULT_ASSIGN(mask_position, get_mask_position(query, "mask_position")); } else { sticker = get_input_file(query, "tgs_sticker", true); if (sticker != nullptr) { - sticker_type = make_object(); + sticker_format = make_object(); } else { sticker = get_input_file(query, "webm_sticker", true); if (sticker != nullptr) { - sticker_type = make_object(); + sticker_format = make_object(); } else { if (!query->arg("tgs_sticker").empty()) { return Status::Error(400, "Bad Request: animated sticker must be uploaded as an InputFile"); @@ -6178,7 +6176,8 @@ td::Result>> Client::get_inp } td::vector> stickers; - stickers.push_back(make_object(std::move(sticker), emojis.str(), std::move(sticker_type))); + stickers.push_back(make_object(std::move(sticker), emojis.str(), std::move(sticker_format), + std::move(mask_position))); return std::move(stickers); } @@ -8256,13 +8255,13 @@ td::Status Client::process_upload_sticker_file_query(PromisedQueryPtr &query) { TRY_RESULT(user_id, get_user_id(query.get())); auto png_sticker = get_input_file(query.get(), "png_sticker"); - check_user(user_id, std::move(query), - [this, user_id, png_sticker = std::move(png_sticker)](PromisedQueryPtr query) mutable { - send_request(make_object( - user_id, make_object(std::move(png_sticker), "", - make_object())), - td::make_unique(this, std::move(query))); - }); + check_user( + user_id, std::move(query), [this, user_id, png_sticker = std::move(png_sticker)](PromisedQueryPtr query) mutable { + send_request(make_object( + user_id, make_object(std::move(png_sticker), "", + make_object(), nullptr)), + td::make_unique(this, std::move(query))); + }); return Status::OK(); } @@ -8270,14 +8269,22 @@ td::Status Client::process_create_new_sticker_set_query(PromisedQueryPtr &query) TRY_RESULT(user_id, get_user_id(query.get())); auto name = query->arg("name"); auto title = query->arg("title"); - auto is_masks = to_bool(query->arg("contains_masks")); - TRY_RESULT(stickers, get_input_stickers(query.get(), is_masks)); + TRY_RESULT(stickers, get_input_stickers(query.get())); + + object_ptr sticker_type; + if (to_bool(query->arg("contains_masks"))) { + sticker_type = make_object(); + } else { + sticker_type = make_object(); + } check_user(user_id, std::move(query), - [this, user_id, title, name, stickers = std::move(stickers)](PromisedQueryPtr query) mutable { - send_request(make_object(user_id, title.str(), name.str(), - std::move(stickers), PSTRING() << "bot" << my_id_), - td::make_unique(this, false, std::move(query))); + [this, user_id, title, name, sticker_type = std::move(sticker_type), + stickers = std::move(stickers)](PromisedQueryPtr query) mutable { + send_request( + make_object(user_id, title.str(), name.str(), std::move(sticker_type), + std::move(stickers), PSTRING() << "bot" << my_id_), + td::make_unique(this, false, std::move(query))); }); return Status::OK(); } @@ -8285,7 +8292,7 @@ td::Status Client::process_create_new_sticker_set_query(PromisedQueryPtr &query) td::Status Client::process_add_sticker_to_set_query(PromisedQueryPtr &query) { TRY_RESULT(user_id, get_user_id(query.get())); auto name = query->arg("name"); - TRY_RESULT(stickers, get_input_stickers(query.get(), true)); + TRY_RESULT(stickers, get_input_stickers(query.get())); CHECK(!stickers.empty()); check_user(user_id, std::move(query), @@ -9723,6 +9730,8 @@ bool Client::need_skip_update_message(int64 chat_id, const object_ptr mask_index_to_point(int32 index); - td::Result>> get_input_stickers(const Query *query, bool is_masks) const; + td::Result>> get_input_stickers(const Query *query) const; static td::Result get_passport_element_hash(Slice encoded_hash);