diff --git a/td/generate/scheme/td_api.tl b/td/generate/scheme/td_api.tl index 8f6719c16..0e00dcfc3 100644 --- a/td/generate/scheme/td_api.tl +++ b/td/generate/scheme/td_api.tl @@ -5303,6 +5303,9 @@ setBotUpdatesStatus pending_update_count:int32 error_message:string = Ok; //@user_id Sticker file owner @png_sticker PNG image with the sticker; must be up to 512 KB in size and fit in 512x512 square uploadStickerFile user_id:int32 png_sticker:InputFile = File; +//@description Returns a suggested name for a new sticker set with a given title @title Sticker set title; 1-64 characters +getSuggestedStickerSetName title:string = Text; + //@description Creates a new sticker set. Returns the newly created sticker set //@user_id Sticker set owner; ignored for regular users //@title Sticker set title; 1-64 characters diff --git a/td/telegram/StickersManager.cpp b/td/telegram/StickersManager.cpp index 37bc6e98f..dda2ac36c 100644 --- a/td/telegram/StickersManager.cpp +++ b/td/telegram/StickersManager.cpp @@ -900,6 +900,34 @@ class UploadStickerFileQuery : public Td::ResultHandler { } }; +class SuggestStickerSetShortNameQuery : public Td::ResultHandler { + Promise promise_; + + public: + explicit SuggestStickerSetShortNameQuery(Promise &&promise) : promise_(std::move(promise)) { + } + + void send(const string &title) { + send_query(G()->net_query_creator().create(telegram_api::stickers_suggestShortName(title))); + } + void on_result(uint64 id, BufferSlice packet) override { + auto result_ptr = fetch_result(packet); + if (result_ptr.is_error()) { + return on_error(id, result_ptr.move_as_error()); + } + + auto ptr = result_ptr.move_as_ok(); + promise_.set_value(std::move(ptr->short_name_)); + } + + void on_error(uint64 id, Status status) override { + if (status.message() == "TITLE_INVALID") { + return promise_.set_value(string()); + } + promise_.set_error(std::move(status)); + } +}; + class CreateNewStickerSetQuery : public Td::ResultHandler { Promise promise_; @@ -4717,6 +4745,15 @@ tl_object_ptr StickersManager::get_input_stic get_input_sticker_emojis(sticker), std::move(mask_coords)); } +void StickersManager::get_suggested_sticker_set_name(string title, Promise &&promise) { + title = strip_empty_characters(title, MAX_STICKER_SET_TITLE_LENGTH); + if (title.empty()) { + return promise.set_error(Status::Error(3, "Sticker set title can't be empty")); + } + + td_->create_handler(std::move(promise))->send(title); +} + void StickersManager::create_new_sticker_set(UserId user_id, string &title, string &short_name, bool is_masks, vector> &&stickers, Promise &&promise) { diff --git a/td/telegram/StickersManager.h b/td/telegram/StickersManager.h index b955eff57..0b83b05dc 100644 --- a/td/telegram/StickersManager.h +++ b/td/telegram/StickersManager.h @@ -165,6 +165,8 @@ class StickersManager : public Actor { FileId upload_sticker_file(UserId user_id, const tl_object_ptr &sticker, Promise &&promise); + void get_suggested_sticker_set_name(string short_name, Promise &&promise); + void create_new_sticker_set(UserId user_id, string &title, string &short_name, bool is_masks, vector> &&stickers, Promise &&promise); diff --git a/td/telegram/Td.cpp b/td/telegram/Td.cpp index bd4dfcb91..b48beccae 100644 --- a/td/telegram/Td.cpp +++ b/td/telegram/Td.cpp @@ -7038,6 +7038,19 @@ void Td::on_request(uint64 id, td_api::uploadStickerFile &request) { CREATE_REQUEST(UploadStickerFileRequest, request.user_id_, std::move(request.png_sticker_)); } +void Td::on_request(uint64 id, td_api::getSuggestedStickerSetName &request) { + CLEAN_INPUT_STRING(request.title_); + CREATE_REQUEST_PROMISE(); + auto query_promise = PromiseCreator::lambda([promise = std::move(promise)](Result result) mutable { + if (result.is_error()) { + promise.set_error(result.move_as_error()); + } else { + promise.set_value(make_tl_object(result.move_as_ok())); + } + }); + stickers_manager_->get_suggested_sticker_set_name(std::move(request.title_), std::move(query_promise)); +} + void Td::on_request(uint64 id, td_api::createNewStickerSet &request) { CLEAN_INPUT_STRING(request.title_); CLEAN_INPUT_STRING(request.name_); diff --git a/td/telegram/Td.h b/td/telegram/Td.h index 47344d626..4d54235d7 100644 --- a/td/telegram/Td.h +++ b/td/telegram/Td.h @@ -974,6 +974,8 @@ class Td final : public NetQueryCallback { void on_request(uint64 id, td_api::uploadStickerFile &request); + void on_request(uint64 id, td_api::getSuggestedStickerSetName &request); + void on_request(uint64 id, td_api::createNewStickerSet &request); void on_request(uint64 id, td_api::addStickerToSet &request); diff --git a/td/telegram/cli.cpp b/td/telegram/cli.cpp index fd7409cdc..e80e27520 100644 --- a/td/telegram/cli.cpp +++ b/td/telegram/cli.cpp @@ -2412,6 +2412,9 @@ class CliClient final : public Actor { string category; get_args(args, chat_id, category); send_request(td_api::make_object(get_top_chat_category(category), as_chat_id(chat_id))); + } else if (op == "gsssn") { + string title = args; + send_request(td_api::make_object(title)); } else if (op == "cnss") { string title; string name;