From f03bdc7e50fee3c08c005209505e9a916993ce2f Mon Sep 17 00:00:00 2001 From: levlam Date: Mon, 4 Mar 2024 15:00:00 +0300 Subject: [PATCH] Add td_api::setQuickReplyShortcutName. --- td/generate/scheme/td_api.tl | 3 ++ td/telegram/QuickReplyManager.cpp | 79 ++++++++++++++++++++++++++++--- td/telegram/QuickReplyManager.h | 8 ++++ td/telegram/Td.cpp | 7 +++ td/telegram/Td.h | 2 + td/telegram/cli.cpp | 5 ++ 6 files changed, 98 insertions(+), 6 deletions(-) diff --git a/td/generate/scheme/td_api.tl b/td/generate/scheme/td_api.tl index 3eef4e32a..79d4caafb 100644 --- a/td/generate/scheme/td_api.tl +++ b/td/generate/scheme/td_api.tl @@ -7786,6 +7786,9 @@ checkQuickReplyShortcutName name:string = Ok; //@description Loads quick reply shortcuts created by the current user. The loaded topics will be sent through updateQuickReplyShortcuts loadQuickReplyShortcuts = Ok; +//@description Changes name of a quick reply shortcut @shortcut_id Unique identifier of the quick reply shortcut @name New name for the shortcut. Use checkQuickReplyShortcutName to check its validness +setQuickReplyShortcutName shortcut_id:int32 name:string = Ok; + //@description Deletes a quick reply shortcut @shortcut_id Unique identifier of the quick reply shortcut deleteQuickReplyShortcut shortcut_id:int32 = Ok; diff --git a/td/telegram/QuickReplyManager.cpp b/td/telegram/QuickReplyManager.cpp index 6fe763355..ffa950a51 100644 --- a/td/telegram/QuickReplyManager.cpp +++ b/td/telegram/QuickReplyManager.cpp @@ -41,7 +41,7 @@ class GetQuickRepliesQuery final : public Td::ResultHandler { } void send(int64 hash) { - send_query(G()->net_query_creator().create(telegram_api::messages_getQuickReplies(hash), {{"me"}})); + send_query(G()->net_query_creator().create(telegram_api::messages_getQuickReplies(hash), {{"quick_reply"}})); } void on_result(BufferSlice packet) final { @@ -60,6 +60,32 @@ class GetQuickRepliesQuery final : public Td::ResultHandler { } }; +class EditQuickReplyShortcutQuery final : public Td::ResultHandler { + Promise promise_; + + public: + explicit EditQuickReplyShortcutQuery(Promise &&promise) : promise_(std::move(promise)) { + } + + void send(QuickReplyShortcutId shortcut_id, const string &name) { + send_query(G()->net_query_creator().create(telegram_api::messages_editQuickReplyShortcut(shortcut_id.get(), name), + {{"quick_reply"}})); + } + + void on_result(BufferSlice packet) final { + auto result_ptr = fetch_result(packet); + if (result_ptr.is_error()) { + return on_error(result_ptr.move_as_error()); + } + + promise_.set_value(Unit()); + } + + void on_error(Status status) final { + promise_.set_error(std::move(status)); + } +}; + class DeleteQuickReplyShortcutQuery final : public Td::ResultHandler { Promise promise_; @@ -68,8 +94,8 @@ class DeleteQuickReplyShortcutQuery final : public Td::ResultHandler { } void send(QuickReplyShortcutId shortcut_id) { - send_query( - G()->net_query_creator().create(telegram_api::messages_deleteQuickReplyShortcut(shortcut_id.get()), {{"me"}})); + send_query(G()->net_query_creator().create(telegram_api::messages_deleteQuickReplyShortcut(shortcut_id.get()), + {{"quick_reply"}})); } void on_result(BufferSlice packet) final { @@ -98,7 +124,7 @@ class ReorderQuickRepliesQuery final : public Td::ResultHandler { send_query( G()->net_query_creator().create(telegram_api::messages_reorderQuickReplies( QuickReplyShortcutId::get_input_quick_reply_shortcut_ids(shortcut_ids)), - {{"me"}})); + {{"quick_reply"}})); } void on_result(BufferSlice packet) final { @@ -132,7 +158,7 @@ class GetQuickReplyMessagesQuery final : public Td::ResultHandler { send_query(G()->net_query_creator().create( telegram_api::messages_getQuickReplyMessages(flags, shortcut_id.get(), MessageId::get_server_message_ids(message_ids), hash), - {{"me"}})); + {{"quick_reply"}})); } void on_result(BufferSlice packet) final { @@ -163,7 +189,7 @@ class DeleteQuickReplyMessagesQuery final : public Td::ResultHandler { shortcut_id_ = shortcut_id; send_query(G()->net_query_creator().create(telegram_api::messages_deleteQuickReplyMessages( shortcut_id.get(), MessageId::get_server_message_ids(message_ids)), - {{"me"}})); + {{"quick_reply"}})); } void on_result(BufferSlice packet) final { @@ -833,6 +859,47 @@ int64 QuickReplyManager::get_shortcuts_hash() const { return get_vector_hash(numbers); } +void QuickReplyManager::set_quick_reply_shortcut_name(QuickReplyShortcutId shortcut_id, const string &name, + Promise &&promise) { + const auto *shortcut = get_shortcut(shortcut_id); + if (shortcut == nullptr) { + return promise.set_error(Status::Error(400, "Shortcut not found")); + } + if (check_shortcut_name(name).is_error()) { + return promise.set_error(Status::Error(400, "Shortcut name is invalid")); + } + if (!shortcut_id.is_server()) { + return promise.set_error(Status::Error(400, "Shortcut isn't created yet")); + } + auto query_promise = PromiseCreator::lambda( + [actor_id = actor_id(this), shortcut_id, name, promise = std::move(promise)](Result &&result) mutable { + if (result.is_ok()) { + send_closure(actor_id, &QuickReplyManager::on_set_quick_reply_shortcut_name, shortcut_id, name, + std::move(promise)); + } + }); + set_quick_reply_shortcut_name_on_server(shortcut_id, name, std::move(query_promise)); +} + +void QuickReplyManager::set_quick_reply_shortcut_name_on_server(QuickReplyShortcutId shortcut_id, const string &name, + Promise &&promise) { + CHECK(shortcut_id.is_server()); + + td_->create_handler(std::move(promise))->send(shortcut_id, name); +} + +void QuickReplyManager::on_set_quick_reply_shortcut_name(QuickReplyShortcutId shortcut_id, const string &name, + Promise &&promise) { + auto *shortcut = get_shortcut(shortcut_id); + if (shortcut == nullptr || shortcut->name_ == name) { + return promise.set_value(Unit()); + } + shortcut->name_ = name; + send_update_quick_reply_shortcut(shortcut, "on_set_quick_reply_shortcut_name"); + save_quick_reply_shortcuts(); + promise.set_value(Unit()); +} + void QuickReplyManager::delete_quick_reply_shortcut(QuickReplyShortcutId shortcut_id, Promise &&promise) { auto it = get_shortcut_it(shortcut_id); if (it == shortcuts_.shortcuts_.end()) { diff --git a/td/telegram/QuickReplyManager.h b/td/telegram/QuickReplyManager.h index 4fa80f7a4..349ac3d1e 100644 --- a/td/telegram/QuickReplyManager.h +++ b/td/telegram/QuickReplyManager.h @@ -21,6 +21,7 @@ #include "td/utils/FlatHashMap.h" #include "td/utils/FlatHashSet.h" #include "td/utils/Promise.h" +#include "td/utils/Slice.h" #include "td/utils/Status.h" #include @@ -39,6 +40,8 @@ class QuickReplyManager final : public Actor { void get_quick_reply_shortcuts(Promise &&promise); + void set_quick_reply_shortcut_name(QuickReplyShortcutId shortcut_id, const string &name, Promise &&promise); + void delete_quick_reply_shortcut(QuickReplyShortcutId shortcut_id, Promise &&promise); void reorder_quick_reply_shortcuts(const vector &shortcut_ids, Promise &&promise); @@ -183,6 +186,8 @@ class QuickReplyManager final : public Actor { void on_load_quick_reply_fail(Status error); + void on_set_quick_reply_shortcut_name(QuickReplyShortcutId shortcut_id, const string &name, Promise &&promise); + int64 get_shortcuts_hash() const; void on_reload_quick_reply_messages(QuickReplyShortcutId shortcut_id, @@ -250,6 +255,9 @@ class QuickReplyManager final : public Actor { void send_update_quick_reply_shortcut_messages(const Shortcut *s, const char *source); + void set_quick_reply_shortcut_name_on_server(QuickReplyShortcutId shortcut_id, const string &name, + Promise &&promise); + void delete_quick_reply_shortcut_from_server(QuickReplyShortcutId shortcut_id, Promise &&promise); void reorder_quick_reply_shortcuts_on_server(vector shortcut_ids, Promise &&promise); diff --git a/td/telegram/Td.cpp b/td/telegram/Td.cpp index e7f93ab7c..fbf1732c9 100644 --- a/td/telegram/Td.cpp +++ b/td/telegram/Td.cpp @@ -5769,6 +5769,13 @@ void Td::on_request(uint64 id, const td_api::loadQuickReplyShortcuts &request) { quick_reply_manager_->get_quick_reply_shortcuts(std::move(promise)); } +void Td::on_request(uint64 id, const td_api::setQuickReplyShortcutName &request) { + CHECK_IS_USER(); + CREATE_OK_REQUEST_PROMISE(); + quick_reply_manager_->set_quick_reply_shortcut_name(QuickReplyShortcutId(request.shortcut_id_), request.name_, + std::move(promise)); +} + void Td::on_request(uint64 id, const td_api::deleteQuickReplyShortcut &request) { CHECK_IS_USER(); CREATE_OK_REQUEST_PROMISE(); diff --git a/td/telegram/Td.h b/td/telegram/Td.h index b2b80777b..20cff3d61 100644 --- a/td/telegram/Td.h +++ b/td/telegram/Td.h @@ -866,6 +866,8 @@ class Td final : public Actor { void on_request(uint64 id, const td_api::loadQuickReplyShortcuts &request); + void on_request(uint64 id, const td_api::setQuickReplyShortcutName &request); + void on_request(uint64 id, const td_api::deleteQuickReplyShortcut &request); void on_request(uint64 id, const td_api::reorderQuickReplyShortcuts &request); diff --git a/td/telegram/cli.cpp b/td/telegram/cli.cpp index 065e960f7..8c0249fc7 100644 --- a/td/telegram/cli.cpp +++ b/td/telegram/cli.cpp @@ -4853,6 +4853,11 @@ class CliClient final : public Actor { ShortcutId shortcut_id; get_args(args, shortcut_id); send_request(td_api::make_object(shortcut_id)); + } else if (op == "sqrsn") { + ShortcutId shortcut_id; + string name; + get_args(args, shortcut_id, name); + send_request(td_api::make_object(shortcut_id, name)); } else if (op == "rqrs") { string shortcut_ids; get_args(args, shortcut_ids);