diff --git a/telegram-bot-api/Client.cpp b/telegram-bot-api/Client.cpp index 8c93de9..47c5660 100644 --- a/telegram-bot-api/Client.cpp +++ b/telegram-bot-api/Client.cpp @@ -303,6 +303,7 @@ bool Client::init_methods() { methods_.emplace("uploadstickerfile", &Client::process_upload_sticker_file_query); methods_.emplace("createnewstickerset", &Client::process_create_new_sticker_set_query); methods_.emplace("addstickertoset", &Client::process_add_sticker_to_set_query); + methods_.emplace("replacestickerinset", &Client::process_replace_sticker_in_set_query); methods_.emplace("setstickersettitle", &Client::process_set_sticker_set_title_query); methods_.emplace("setstickersetthumb", &Client::process_set_sticker_set_thumbnail_query); methods_.emplace("setstickersetthumbnail", &Client::process_set_sticker_set_thumbnail_query); @@ -8421,8 +8422,9 @@ td::Result>> Client::get_inp return std::move(stickers); } -td::Result> Client::get_sticker_input_file(const Query *query) { - auto file_id = trim(query->arg("sticker")); +td::Result> Client::get_sticker_input_file(const Query *query, + td::Slice field_name) { + auto file_id = trim(query->arg(field_name)); if (file_id.empty()) { return td::Status::Error(400, "Sticker is not specified"); } @@ -11217,6 +11219,22 @@ td::Status Client::process_add_sticker_to_set_query(PromisedQueryPtr &query) { return td::Status::OK(); } +td::Status Client::process_replace_sticker_in_set_query(PromisedQueryPtr &query) { + TRY_RESULT(user_id, get_user_id(query.get())); + auto name = query->arg("name"); + TRY_RESULT(input_file, get_sticker_input_file(query.get(), "old_sticker")); + TRY_RESULT(sticker, get_input_sticker(query.get())); + + check_user(user_id, std::move(query), + [this, user_id, name, input_file = std::move(input_file), + sticker = std::move(sticker)](PromisedQueryPtr query) mutable { + send_request(make_object(user_id, name.str(), std::move(input_file), + std::move(sticker)), + td::make_unique(std::move(query))); + }); + return td::Status::OK(); +} + td::Status Client::process_set_sticker_set_title_query(PromisedQueryPtr &query) { auto name = query->arg("name"); auto title = query->arg("title"); diff --git a/telegram-bot-api/Client.h b/telegram-bot-api/Client.h index 9dba4fe..147629a 100644 --- a/telegram-bot-api/Client.h +++ b/telegram-bot-api/Client.h @@ -502,7 +502,8 @@ class Client final : public WebhookActor::Callback { td::Result>> get_input_stickers(const Query *query) const; - static td::Result> get_sticker_input_file(const Query *query); + static td::Result> get_sticker_input_file(const Query *query, + td::Slice field_name = "sticker"); static td::Result get_passport_element_hash(td::Slice encoded_hash); @@ -697,6 +698,7 @@ class Client final : public WebhookActor::Callback { td::Status process_upload_sticker_file_query(PromisedQueryPtr &query); td::Status process_create_new_sticker_set_query(PromisedQueryPtr &query); td::Status process_add_sticker_to_set_query(PromisedQueryPtr &query); + td::Status process_replace_sticker_in_set_query(PromisedQueryPtr &query); td::Status process_set_sticker_set_title_query(PromisedQueryPtr &query); td::Status process_set_sticker_set_thumbnail_query(PromisedQueryPtr &query); td::Status process_set_custom_emoji_sticker_set_thumbnail_query(PromisedQueryPtr &query);