From 9c7e0f6b22d9db2a89eac68a4916f7fec49720f5 Mon Sep 17 00:00:00 2001 From: levlam Date: Fri, 15 Mar 2024 21:08:30 +0300 Subject: [PATCH] Move sticker_format to inputSticker. --- td/generate/scheme/td_api.tl | 12 ++++++------ td/telegram/StickersManager.cpp | 26 ++++++++++++-------------- td/telegram/StickersManager.h | 18 ++++++++---------- td/telegram/Td.cpp | 11 ++++++----- td/telegram/cli.cpp | 8 ++++---- 5 files changed, 36 insertions(+), 39 deletions(-) diff --git a/td/generate/scheme/td_api.tl b/td/generate/scheme/td_api.tl index 500e0085d..cf35dc0b1 100644 --- a/td/generate/scheme/td_api.tl +++ b/td/generate/scheme/td_api.tl @@ -6309,10 +6309,11 @@ proxies proxies:vector = Proxies; //@description A sticker to be added to a sticker set //@sticker File with the sticker; must fit in a 512x512 square. For WEBP stickers the file must be in WEBP or PNG format, which will be converted to WEBP server-side. //-See https://core.telegram.org/animated_stickers#technical-requirements for technical requirements +//@format Format of the sticker //@emojis String with 1-20 emoji corresponding to the sticker //@mask_position Position where the mask is placed; pass null if not specified //@keywords List of up to 20 keywords with total length up to 64 characters, which can be used to find the sticker -inputSticker sticker:InputFile emojis:string mask_position:maskPosition keywords:vector = InputSticker; +inputSticker sticker:InputFile format:StickerFormat emojis:string mask_position:maskPosition keywords:vector = InputSticker; //@description Represents a date range @start_date Point in time (Unix timestamp) at which the date range begins @end_date Point in time (Unix timestamp) at which the date range ends @@ -10069,13 +10070,11 @@ checkStickerSetName name:string = CheckStickerSetNameResult; //@user_id Sticker set owner; ignored for regular users //@title Sticker set title; 1-64 characters //@name Sticker set name. Can contain only English letters, digits and underscores. Must end with *"_by_"* (** is case insensitive) for bots; 1-64 characters -//@sticker_format Format of the stickers in the set //@sticker_type Type of the stickers in the set //@needs_repainting Pass true if stickers in the sticker set must be repainted; for custom emoji sticker sets only //@stickers List of stickers to be added to the set; must be non-empty. All stickers must have the same format. For TGS stickers, uploadStickerFile must be used before the sticker is shown //@source Source of the sticker set; may be empty if unknown -createNewStickerSet user_id:int53 title:string name:string sticker_format:StickerFormat sticker_type:StickerType needs_repainting:Bool stickers:vector source:string = StickerSet; - +createNewStickerSet user_id:int53 title:string name:string sticker_type:StickerType needs_repainting:Bool stickers:vector source:string = StickerSet; //@description Adds a new sticker to a set; for bots only //@user_id Sticker set owner @@ -10086,8 +10085,9 @@ addStickerToSet user_id:int53 name:string sticker:inputSticker = Ok; //@description Sets a sticker set thumbnail; for bots only //@user_id Sticker set owner //@name Sticker set name -//@thumbnail Thumbnail to set in PNG, TGS, or WEBM format; pass null to remove the sticker set thumbnail. Thumbnail format must match the format of stickers in the set -setStickerSetThumbnail user_id:int53 name:string thumbnail:InputFile = Ok; +//@thumbnail Thumbnail to set; pass null to remove the sticker set thumbnail +//@format Format of the thumbnail; pass null if thumbnail is removed +setStickerSetThumbnail user_id:int53 name:string thumbnail:InputFile format:StickerFormat = Ok; //@description Sets a custom emoji sticker set thumbnail; for bots only //@name Sticker set name diff --git a/td/telegram/StickersManager.cpp b/td/telegram/StickersManager.cpp index 1b0ce890a..158906eeb 100644 --- a/td/telegram/StickersManager.cpp +++ b/td/telegram/StickersManager.cpp @@ -7712,7 +7712,6 @@ void StickersManager::move_sticker_set_to_top_by_custom_emoji_ids(const vector> StickersManager::prepare_input_sticker(td_api::inputSticker *sticker, - StickerFormat sticker_format, StickerType sticker_type) { if (sticker == nullptr) { return Status::Error(400, "Input sticker must be non-empty"); @@ -7733,7 +7732,7 @@ Result> StickersManager::prepare_input_sticker(td } } - return prepare_input_file(sticker->sticker_, sticker_format, sticker_type, false); + return prepare_input_file(sticker->sticker_, get_sticker_format(sticker->format_), sticker_type, false); } Result> StickersManager::prepare_input_file( @@ -7898,8 +7897,7 @@ td_api::object_ptr StickersManager::get_check } } -void StickersManager::create_new_sticker_set(UserId user_id, string title, string short_name, - StickerFormat sticker_format, StickerType sticker_type, +void StickersManager::create_new_sticker_set(UserId user_id, string title, string short_name, StickerType sticker_type, bool has_text_color, vector> &&stickers, string software, @@ -7934,7 +7932,7 @@ void StickersManager::create_new_sticker_set(UserId user_id, string title, strin vector local_file_ids; vector url_file_ids; for (auto &sticker : stickers) { - auto r_file_id = prepare_input_sticker(sticker.get(), sticker_format, sticker_type); + auto r_file_id = prepare_input_sticker(sticker.get(), sticker_type); if (r_file_id.is_error()) { return promise.set_error(r_file_id.move_as_error()); } @@ -7954,7 +7952,6 @@ void StickersManager::create_new_sticker_set(UserId user_id, string title, strin pending_new_sticker_set->user_id_ = user_id; pending_new_sticker_set->title_ = std::move(title); pending_new_sticker_set->short_name_ = short_name; - pending_new_sticker_set->sticker_format_ = sticker_format; pending_new_sticker_set->sticker_type_ = sticker_type; pending_new_sticker_set->has_text_color_ = has_text_color; pending_new_sticker_set->file_ids_ = std::move(file_ids); @@ -8199,7 +8196,7 @@ void StickersManager::do_add_sticker_to_set(UserId user_id, string short_name, return promise.set_error(Status::Error(400, "Sticker set not found")); } - auto r_file_id = prepare_input_sticker(sticker.get(), StickerFormat::Webp, sticker_set->sticker_type_); + auto r_file_id = prepare_input_sticker(sticker.get(), sticker_set->sticker_type_); if (r_file_id.is_error()) { return promise.set_error(r_file_id.move_as_error()); } @@ -8254,7 +8251,8 @@ void StickersManager::on_added_sticker_uploaded(int64 random_id, Result re } void StickersManager::set_sticker_set_thumbnail(UserId user_id, string short_name, - tl_object_ptr &&thumbnail, Promise &&promise) { + td_api::object_ptr &&thumbnail, StickerFormat format, + Promise &&promise) { TRY_RESULT_PROMISE(promise, input_user, td_->contacts_manager_->get_input_user(user_id)); short_name = clean_username(strip_empty_characters(short_name, MAX_STICKER_SET_SHORT_NAME_LENGTH)); @@ -8264,26 +8262,26 @@ void StickersManager::set_sticker_set_thumbnail(UserId user_id, string short_nam const StickerSet *sticker_set = get_sticker_set(short_name_to_sticker_set_id_.get(short_name)); if (sticker_set != nullptr && sticker_set->was_loaded_) { - return do_set_sticker_set_thumbnail(user_id, short_name, std::move(thumbnail), std::move(promise)); + return do_set_sticker_set_thumbnail(user_id, short_name, std::move(thumbnail), format, std::move(promise)); } do_reload_sticker_set( StickerSetId(), make_tl_object(short_name), 0, - PromiseCreator::lambda([actor_id = actor_id(this), user_id, short_name, thumbnail = std::move(thumbnail), + PromiseCreator::lambda([actor_id = actor_id(this), user_id, short_name, thumbnail = std::move(thumbnail), format, promise = std::move(promise)](Result result) mutable { if (result.is_error()) { promise.set_error(result.move_as_error()); } else { send_closure(actor_id, &StickersManager::do_set_sticker_set_thumbnail, user_id, std::move(short_name), - std::move(thumbnail), std::move(promise)); + std::move(thumbnail), format, std::move(promise)); } }), "set_sticker_set_thumbnail"); } void StickersManager::do_set_sticker_set_thumbnail(UserId user_id, string short_name, - tl_object_ptr &&thumbnail, - Promise &&promise) { + td_api::object_ptr &&thumbnail, + StickerFormat format, Promise &&promise) { TRY_STATUS_PROMISE(promise, G()->close_status()); const StickerSet *sticker_set = get_sticker_set(short_name_to_sticker_set_id_.get(short_name)); @@ -8295,7 +8293,7 @@ void StickersManager::do_set_sticker_set_thumbnail(UserId user_id, string short_ Status::Error(400, "The method can't be used to set thumbnail of custom emoji sticker sets")); } - auto r_file_id = prepare_input_file(thumbnail, StickerFormat::Webp, sticker_set->sticker_type_, true); + auto r_file_id = prepare_input_file(thumbnail, format, sticker_set->sticker_type_, true); if (r_file_id.is_error()) { return promise.set_error(r_file_id.move_as_error()); } diff --git a/td/telegram/StickersManager.h b/td/telegram/StickersManager.h index 60a4b9281..663514a6c 100644 --- a/td/telegram/StickersManager.h +++ b/td/telegram/StickersManager.h @@ -289,16 +289,15 @@ class StickersManager final : public Actor { static td_api::object_ptr get_check_sticker_set_name_result_object( CheckStickerSetNameResult result); - void create_new_sticker_set(UserId user_id, string title, string short_name, StickerFormat sticker_format, - StickerType sticker_type, bool has_text_color, - vector> &&stickers, string software, - Promise> &&promise); + void create_new_sticker_set(UserId user_id, string title, string short_name, StickerType sticker_type, + bool has_text_color, vector> &&stickers, + string software, Promise> &&promise); void add_sticker_to_set(UserId user_id, string short_name, td_api::object_ptr &&sticker, Promise &&promise); - void set_sticker_set_thumbnail(UserId user_id, string short_name, tl_object_ptr &&thumbnail, - Promise &&promise); + void set_sticker_set_thumbnail(UserId user_id, string short_name, td_api::object_ptr &&thumbnail, + StickerFormat format, Promise &&promise); void set_custom_emoji_sticker_set_thumbnail(string short_name, CustomEmojiId custom_emoji_id, Promise &&promise); @@ -520,7 +519,6 @@ class StickersManager final : public Actor { string title_; string short_name_; StickerType sticker_type_ = StickerType::Regular; - StickerFormat sticker_format_ = StickerFormat::Unknown; bool has_text_color_ = false; vector file_ids_; vector> stickers_; @@ -796,8 +794,7 @@ class StickersManager final : public Actor { StickerFormat sticker_format, StickerType sticker_type, bool for_thumbnail); - Result> prepare_input_sticker(td_api::inputSticker *sticker, - StickerFormat sticker_format, StickerType sticker_type); + Result> prepare_input_sticker(td_api::inputSticker *sticker, StickerType sticker_type); tl_object_ptr get_input_sticker(const td_api::inputSticker *sticker, FileId file_id) const; @@ -820,7 +817,8 @@ class StickersManager final : public Actor { void on_sticker_set_thumbnail_uploaded(int64 random_id, Result result); - void do_set_sticker_set_thumbnail(UserId user_id, string short_name, tl_object_ptr &&thumbnail, + void do_set_sticker_set_thumbnail(UserId user_id, string short_name, + td_api::object_ptr &&thumbnail, StickerFormat format, Promise &&promise); void do_set_custom_emoji_sticker_set_thumbnail(string short_name, CustomEmojiId custom_emoji_id, diff --git a/td/telegram/Td.cpp b/td/telegram/Td.cpp index 7ebd98a5a..0a6e59391 100644 --- a/td/telegram/Td.cpp +++ b/td/telegram/Td.cpp @@ -8202,10 +8202,10 @@ void Td::on_request(uint64 id, td_api::createNewStickerSet &request) { CLEAN_INPUT_STRING(request.name_); CLEAN_INPUT_STRING(request.source_); CREATE_REQUEST_PROMISE(); - stickers_manager_->create_new_sticker_set( - UserId(request.user_id_), std::move(request.title_), std::move(request.name_), - get_sticker_format(request.sticker_format_), get_sticker_type(request.sticker_type_), request.needs_repainting_, - std::move(request.stickers_), std::move(request.source_), std::move(promise)); + stickers_manager_->create_new_sticker_set(UserId(request.user_id_), std::move(request.title_), + std::move(request.name_), get_sticker_type(request.sticker_type_), + request.needs_repainting_, std::move(request.stickers_), + std::move(request.source_), std::move(promise)); } void Td::on_request(uint64 id, td_api::addStickerToSet &request) { @@ -8221,7 +8221,8 @@ void Td::on_request(uint64 id, td_api::setStickerSetThumbnail &request) { CLEAN_INPUT_STRING(request.name_); CREATE_OK_REQUEST_PROMISE(); stickers_manager_->set_sticker_set_thumbnail(UserId(request.user_id_), std::move(request.name_), - std::move(request.thumbnail_), std::move(promise)); + std::move(request.thumbnail_), get_sticker_format(request.format_), + std::move(promise)); } void Td::on_request(uint64 id, td_api::setCustomEmojiStickerSetThumbnail &request) { diff --git a/td/telegram/cli.cpp b/td/telegram/cli.cpp index e31fad6c2..fc9b7d15a 100644 --- a/td/telegram/cli.cpp +++ b/td/telegram/cli.cpp @@ -3516,11 +3516,11 @@ class CliClient final : public Actor { get_args(args, title, name, stickers); auto input_stickers = transform(autosplit(stickers), [op](Slice sticker) -> td_api::object_ptr { - return td_api::make_object(as_input_file(sticker), "😀", as_mask_position(op), - vector{"keyword"}); + return td_api::make_object(as_input_file(sticker), as_sticker_format(op), "😀", + as_mask_position(op), vector{"keyword"}); }); - send_request(td_api::make_object( - my_id_, title, name, as_sticker_format(op), as_sticker_type(op), false, std::move(input_stickers), "tg_cli")); + send_request(td_api::make_object(my_id_, title, name, as_sticker_type(op), false, + std::move(input_stickers), "tg_cli")); } else if (op == "sss") { send_request(td_api::make_object(args)); } else if (op == "siss") {