diff --git a/td/telegram/ChainId.h b/td/telegram/ChainId.h index 58676ef37..a03f6cf5e 100644 --- a/td/telegram/ChainId.h +++ b/td/telegram/ChainId.h @@ -13,6 +13,8 @@ #include "td/utils/common.h" +#include + namespace td { class ChainId { @@ -29,6 +31,9 @@ class ChainId { ChainId(PollId poll_id) : id(static_cast(poll_id.get())) { } + ChainId(const string &str) : id(std::hash()(str)) { + } + uint64 get() const { return id; } diff --git a/td/telegram/StickersManager.cpp b/td/telegram/StickersManager.cpp index bf764ce22..12cf426aa 100644 --- a/td/telegram/StickersManager.cpp +++ b/td/telegram/StickersManager.cpp @@ -1015,9 +1015,11 @@ class CreateNewStickerSetQuery final : public Td::ResultHandler { flags |= telegram_api::stickers_createStickerSet::SOFTWARE_MASK; } - send_query(G()->net_query_creator().create(telegram_api::stickers_createStickerSet( - flags, false /*ignored*/, false /*ignored*/, false /*ignored*/, std::move(input_user), title, short_name, - nullptr, std::move(input_stickers), software))); + send_query(G()->net_query_creator().create( + telegram_api::stickers_createStickerSet(flags, false /*ignored*/, false /*ignored*/, false /*ignored*/, + std::move(input_user), title, short_name, nullptr, + std::move(input_stickers), software), + {{short_name}})); } void on_result(BufferSlice packet) final { @@ -1046,8 +1048,10 @@ class AddStickerToSetQuery final : public Td::ResultHandler { } void send(const string &short_name, tl_object_ptr &&input_sticker) { - send_query(G()->net_query_creator().create(telegram_api::stickers_addStickerToSet( - make_tl_object(short_name), std::move(input_sticker)))); + send_query(G()->net_query_creator().create( + telegram_api::stickers_addStickerToSet(make_tl_object(short_name), + std::move(input_sticker)), + {{short_name}})); } void on_result(BufferSlice packet) final { @@ -1076,8 +1080,10 @@ class SetStickerSetThumbnailQuery final : public Td::ResultHandler { } void send(const string &short_name, tl_object_ptr &&input_document) { - send_query(G()->net_query_creator().create(telegram_api::stickers_setStickerSetThumb( - make_tl_object(short_name), std::move(input_document)))); + send_query(G()->net_query_creator().create( + telegram_api::stickers_setStickerSetThumb(make_tl_object(short_name), + std::move(input_document)), + {{short_name}})); } void on_result(BufferSlice packet) final { @@ -1105,9 +1111,9 @@ class SetStickerPositionQuery final : public Td::ResultHandler { explicit SetStickerPositionQuery(Promise &&promise) : promise_(std::move(promise)) { } - void send(tl_object_ptr &&input_document, int32 position) { + void send(const string &short_name, tl_object_ptr &&input_document, int32 position) { send_query(G()->net_query_creator().create( - telegram_api::stickers_changeStickerPosition(std::move(input_document), position))); + telegram_api::stickers_changeStickerPosition(std::move(input_document), position), {{short_name}})); } void on_result(BufferSlice packet) final { @@ -1135,8 +1141,9 @@ class DeleteStickerFromSetQuery final : public Td::ResultHandler { explicit DeleteStickerFromSetQuery(Promise &&promise) : promise_(std::move(promise)) { } - void send(tl_object_ptr &&input_document) { - send_query(G()->net_query_creator().create(telegram_api::stickers_removeStickerFromSet(std::move(input_document)))); + void send(const string &short_name, tl_object_ptr &&input_document) { + send_query(G()->net_query_creator().create(telegram_api::stickers_removeStickerFromSet(std::move(input_document)), + {{short_name}})); } void on_result(BufferSlice packet) final { @@ -6154,6 +6161,18 @@ void StickersManager::on_sticker_set_thumbnail_uploaded(int64 random_id, Result< ->send(pending_set_sticker_set_thumbnail->short_name, file_view.main_remote_location().as_input_document()); } +string StickersManager::get_sticker_set_short_name(FileId sticker_id) const { + string sticker_set_short_name; + const Sticker *s = get_sticker(sticker_id); + if (s != nullptr && s->set_id.is_valid()) { + const StickerSet *sticker_set = get_sticker_set(s->set_id); + if (sticker_set != nullptr) { + return sticker_set->short_name; + } + } + return string(); +} + void StickersManager::set_sticker_position_in_set(const tl_object_ptr &sticker, int32 position, Promise &&promise) { if (position < 0) { @@ -6173,7 +6192,7 @@ void StickersManager::set_sticker_position_in_set(const tl_object_ptrcreate_handler(std::move(promise)) - ->send(file_view.main_remote_location().as_input_document(), position); + ->send(get_sticker_set_short_name(file_id), file_view.main_remote_location().as_input_document(), position); } void StickersManager::remove_sticker_from_set(const tl_object_ptr &sticker, @@ -6191,7 +6210,7 @@ void StickersManager::remove_sticker_from_set(const tl_object_ptrcreate_handler(std::move(promise)) - ->send(file_view.main_remote_location().as_input_document()); + ->send(get_sticker_set_short_name(file_id), file_view.main_remote_location().as_input_document()); } vector StickersManager::get_attached_sticker_file_ids(const vector &int_file_ids) { diff --git a/td/telegram/StickersManager.h b/td/telegram/StickersManager.h index 4f65be009..01caf5aea 100644 --- a/td/telegram/StickersManager.h +++ b/td/telegram/StickersManager.h @@ -504,6 +504,8 @@ class StickersManager final : public Actor { StickerSetId on_get_input_sticker_set(FileId sticker_file_id, tl_object_ptr &&set_ptr, MultiPromiseActor *load_data_multipromise_ptr = nullptr); + string get_sticker_set_short_name(FileId sticker_id) const; + void on_resolve_sticker_set_short_name(FileId sticker_file_id, const string &short_name); int apply_installed_sticker_sets_order(bool is_masks, const vector &sticker_set_ids); diff --git a/td/telegram/net/NetQuery.cpp b/td/telegram/net/NetQuery.cpp index b7e786e9a..8bc4019cf 100644 --- a/td/telegram/net/NetQuery.cpp +++ b/td/telegram/net/NetQuery.cpp @@ -24,7 +24,7 @@ int64 NetQuery::get_my_id() { } void NetQuery::set_chain_ids(vector &&chain_ids) { - chain_ids_ = transform(chain_ids, [](ChainId chain_id) { return chain_id.get(); }); + chain_ids_ = transform(chain_ids, [](ChainId chain_id) { return chain_id.get() == 0 ? 1 : chain_id.get(); }); td::unique(chain_ids_); }