diff --git a/td/generate/scheme/td_api.tl b/td/generate/scheme/td_api.tl index 25b5551e3..c153c2fe9 100644 --- a/td/generate/scheme/td_api.tl +++ b/td/generate/scheme/td_api.tl @@ -8020,11 +8020,16 @@ setStickerPositionInSet sticker:InputFile position:int32 = Ok; //@description Removes a sticker from the set to which it belongs; for bots only. The sticker set must have been created by the bot @sticker Sticker removeStickerFromSet sticker:InputFile = Ok; -//@description Changes the list of emoji corresponding to a sticker; for bots only. The sticker must belong to a sticker set created by the bot +//@description Changes the list of emoji corresponding to a sticker; for bots only. The sticker must belong to a regular or custom emoji sticker set created by the bot //@sticker Sticker //@emojis New string with 1-20 emoji corresponding to the sticker setStickerEmojis sticker:InputFile emojis:string = Ok; +//@description Changes the list of keywords of a sticker; for bots only. The sticker must belong to a regular or custom emoji sticker set created by the bot +//@sticker Sticker +//@keywords List of up to 20 keywords with total length up to 64 characters, which can be used to find the sticker +setStickerKeywords sticker:InputFile keywords:vector = Ok; + //@description Returns information about a file with a map thumbnail in PNG format. Only map thumbnail files with size less than 1MB can be downloaded //@location Location of the map center diff --git a/td/telegram/StickersManager.cpp b/td/telegram/StickersManager.cpp index cf137897e..491700188 100644 --- a/td/telegram/StickersManager.cpp +++ b/td/telegram/StickersManager.cpp @@ -1412,8 +1412,8 @@ class ChangeStickerQuery final : public Td::ResultHandler { flags |= telegram_api::stickers_changeSticker::KEYWORDS_MASK; } send_query(G()->net_query_creator().create( - telegram_api::stickers_changeSticker(flags, std::move(input_document), emojis, mask_position.get_input_mask_coords(), - keywords), + telegram_api::stickers_changeSticker(flags, std::move(input_document), emojis, + mask_position.get_input_mask_coords(), keywords), std::move(chain_ids))); } @@ -8701,6 +8701,22 @@ void StickersManager::set_sticker_emojis(const td_api::object_ptr &sticker, + vector &&keywords, Promise &&promise) { + TRY_RESULT_PROMISE(promise, input_document, get_sticker_input_document(sticker)); + + for (auto &keyword : keywords) { + for (auto &c : keyword) { + if (c == ',' || c == '\n') { + c = ' '; + } + } + } + td_->create_handler(std::move(promise)) + ->send(input_document.sticker_set_short_name_, std::move(input_document.input_document_), false, string(), false, + StickerMaskPosition(), true, implode(keywords, ',')); +} + vector StickersManager::get_attached_sticker_file_ids(const vector &int_file_ids) { vector result; diff --git a/td/telegram/StickersManager.h b/td/telegram/StickersManager.h index 0e8415b36..c3e55e4bf 100644 --- a/td/telegram/StickersManager.h +++ b/td/telegram/StickersManager.h @@ -319,6 +319,9 @@ class StickersManager final : public Actor { void set_sticker_emojis(const td_api::object_ptr &sticker, const string &emojis, Promise &&promise); + void set_sticker_keywords(const td_api::object_ptr &sticker, vector &&keywords, + Promise &&promise); + vector get_recent_stickers(bool is_attached, Promise &&promise); void on_get_recent_stickers(bool is_repair, bool is_attached, diff --git a/td/telegram/Td.cpp b/td/telegram/Td.cpp index 77d0983a5..afa2a0856 100644 --- a/td/telegram/Td.cpp +++ b/td/telegram/Td.cpp @@ -7345,6 +7345,15 @@ void Td::on_request(uint64 id, td_api::setStickerEmojis &request) { stickers_manager_->set_sticker_emojis(request.sticker_, request.emojis_, std::move(promise)); } +void Td::on_request(uint64 id, td_api::setStickerKeywords &request) { + CHECK_IS_BOT(); + for (auto &keyword : request.keywords_) { + CLEAN_INPUT_STRING(keyword); + } + CREATE_OK_REQUEST_PROMISE(); + stickers_manager_->set_sticker_keywords(request.sticker_, std::move(request.keywords_), std::move(promise)); +} + void Td::on_request(uint64 id, const td_api::getRecentStickers &request) { CHECK_IS_USER(); CREATE_REQUEST(GetRecentStickersRequest, request.is_attached_); diff --git a/td/telegram/Td.h b/td/telegram/Td.h index 03d4e001b..c522cb9cd 100644 --- a/td/telegram/Td.h +++ b/td/telegram/Td.h @@ -1210,6 +1210,8 @@ class Td final : public Actor { void on_request(uint64 id, td_api::setStickerEmojis &request); + void on_request(uint64 id, td_api::setStickerKeywords &request); + void on_request(uint64 id, const td_api::getRecentStickers &request); void on_request(uint64 id, td_api::addRecentSticker &request);