diff --git a/td/generate/scheme/td_api.tl b/td/generate/scheme/td_api.tl index a385c3fe9..c0a3b20b0 100644 --- a/td/generate/scheme/td_api.tl +++ b/td/generate/scheme/td_api.tl @@ -5137,6 +5137,9 @@ setMessageReaction chat_id:int53 message_id:int53 reaction_type:ReactionType is_ //@limit The maximum number of reactions to be returned; must be positive and can't be greater than 100 getMessageAddedReactions chat_id:int53 message_id:int53 reaction_type:ReactionType offset:string limit:int32 = AddedReactions; +//@description Changes default reaction type for the current user @reaction_type New type of the default reaction +setDefaultReactionType reaction_type:ReactionType = Ok; + //@description Returns all entities (mentions, hashtags, cashtags, bot commands, bank card numbers, URLs, and email addresses) contained in the text. Can be called synchronously @text The text in which to look for entites getTextEntities text:string = TextEntities; diff --git a/td/telegram/ConfigManager.cpp b/td/telegram/ConfigManager.cpp index d64d088ac..8d7d4233d 100644 --- a/td/telegram/ConfigManager.cpp +++ b/td/telegram/ConfigManager.cpp @@ -1473,7 +1473,6 @@ void ConfigManager::process_app_config(tl_object_ptr &c int64 chat_read_mark_expire_period = 0; int64 chat_read_mark_size_threshold = 0; double animated_emoji_zoom = 0.0; - string default_reaction; int64 reactions_uniq_max = 0; vector premium_features; auto &premium_limit_keys = get_premium_limit_keys(); @@ -1722,10 +1721,6 @@ void ConfigManager::process_app_config(tl_object_ptr &c chat_read_mark_size_threshold = get_json_value_int(std::move(key_value->value_), key); continue; } - if (key == "reactions_default") { - default_reaction = get_json_value_string(std::move(key_value->value_), key); - continue; - } if (key == "reactions_uniq_max") { reactions_uniq_max = get_json_value_int(std::move(key_value->value_), key); continue; @@ -1872,9 +1867,6 @@ void ConfigManager::process_app_config(tl_object_ptr &c } else { options.set_option_integer("chat_read_mark_size_threshold", chat_read_mark_size_threshold); } - if (!options.have_option("default_reaction_need_sync")) { - options.set_option_string("default_reaction", default_reaction); - } if (reactions_uniq_max <= 0 || reactions_uniq_max == 11) { options.set_option_empty("reactions_uniq_max"); } else { diff --git a/td/telegram/MessageReaction.cpp b/td/telegram/MessageReaction.cpp index d41ba3c0e..1760a4888 100644 --- a/td/telegram/MessageReaction.cpp +++ b/td/telegram/MessageReaction.cpp @@ -340,7 +340,7 @@ class SetDefaultReactionQuery final : public Td::ResultHandler { LOG(INFO) << "Failed to set default reaction: " << status; td_->option_manager_->set_option_empty("default_reaction_needs_sync"); - send_closure(G()->config_manager(), &ConfigManager::reget_app_config, Promise()); + send_closure(G()->config_manager(), &ConfigManager::request_config, false); } }; @@ -683,6 +683,7 @@ void set_default_reaction(Td *td, string reaction, Promise &&promise) { td->option_manager_->set_option_string("default_reaction", reaction); if (!td->option_manager_->get_option_boolean("default_reaction_needs_sync")) { td->option_manager_->set_option_boolean("default_reaction_needs_sync", true); + send_set_default_reaction_query(td); } } promise.set_value(Unit()); diff --git a/td/telegram/MessageReaction.hpp b/td/telegram/MessageReaction.hpp index 8f7307d0f..4c8e7f8a3 100644 --- a/td/telegram/MessageReaction.hpp +++ b/td/telegram/MessageReaction.hpp @@ -51,6 +51,7 @@ void MessageReaction::parse(ParserT &parser) { td::parse(recent_chooser_min_channels_, parser); } CHECK(!is_empty()); + CHECK(!reaction_.empty()); } template @@ -69,6 +70,7 @@ void UnreadMessageReaction::parse(ParserT &parser) { END_PARSE_FLAGS(); td::parse(reaction_, parser); td::parse(sender_dialog_id_, parser); + CHECK(!reaction_.empty()); } template diff --git a/td/telegram/OptionManager.cpp b/td/telegram/OptionManager.cpp index 6a15eb98b..88285224b 100644 --- a/td/telegram/OptionManager.cpp +++ b/td/telegram/OptionManager.cpp @@ -245,7 +245,7 @@ bool OptionManager::is_internal_option(Slice name) { name == "channels_read_media_period" || name == "chat_read_mark_expire_period" || name == "chat_read_mark_size_threshold"; case 'd': - return name == "dc_txt_domain_name" || name == "default_reaction_needs_sync" || + return name == "dc_txt_domain_name" || name == "default_reaction" || name == "default_reaction_needs_sync" || name == "dialog_filters_chats_limit_default" || name == "dialog_filters_chats_limit_premium" || name == "dialog_filters_limit_default" || name == "dialog_filters_limit_premium" || name == "dialogs_folder_pinned_limit_default" || name == "dialogs_folder_pinned_limit_premium" || @@ -317,9 +317,6 @@ void OptionManager::on_option_updated(Slice name) { } break; case 'd': - if (name == "default_reaction_needs_sync" && get_option_boolean(name)) { - send_set_default_reaction_query(td_); - } if (name == "dice_emojis") { send_closure(td_->stickers_manager_actor_, &StickersManager::on_update_dice_emojis); } @@ -621,14 +618,6 @@ void OptionManager::set_option(const string &name, td_api::object_ptr(value.get())->value_; - } - set_default_reaction(td_, std::move(reaction), std::move(promise)); - return; - } if (!is_bot && set_boolean_option("disable_animated_emoji")) { return; } diff --git a/td/telegram/Td.cpp b/td/telegram/Td.cpp index e8758db65..88d0d6eb3 100644 --- a/td/telegram/Td.cpp +++ b/td/telegram/Td.cpp @@ -5264,6 +5264,12 @@ void Td::on_request(uint64 id, td_api::getMessageAddedReactions &request) { request.limit_, std::move(promise)); } +void Td::on_request(uint64 id, td_api::setDefaultReactionType &request) { + CHECK_IS_USER(); + CREATE_OK_REQUEST_PROMISE(); + set_default_reaction(this, get_message_reaction_string(request.reaction_type_), std::move(promise)); +} + void Td::on_request(uint64 id, td_api::getMessagePublicForwards &request) { CHECK_IS_USER(); CLEAN_INPUT_STRING(request.offset_); diff --git a/td/telegram/Td.h b/td/telegram/Td.h index bd70e3e48..4e4794630 100644 --- a/td/telegram/Td.h +++ b/td/telegram/Td.h @@ -656,6 +656,8 @@ class Td final : public Actor { void on_request(uint64 id, td_api::getMessageAddedReactions &request); + void on_request(uint64 id, td_api::setDefaultReactionType &request); + void on_request(uint64 id, td_api::getMessagePublicForwards &request); void on_request(uint64 id, const td_api::removeNotification &request);