diff --git a/td/generate/scheme/td_api.tl b/td/generate/scheme/td_api.tl index 6a68073a1..62d2fbf3c 100644 --- a/td/generate/scheme/td_api.tl +++ b/td/generate/scheme/td_api.tl @@ -5205,7 +5205,7 @@ addChatToList chat_id:int53 chat_list:ChatList = Ok; //@description Returns information about a chat filter by its identifier @chat_filter_id Chat filter identifier getChatFilter chat_filter_id:int32 = ChatFilter; -//@description Creates new chat filter. Returns information about the created chat filter @filter Chat filter +//@description Creates new chat filter. Returns information about the created chat filter. User can have up to GetOption("chat_filter_count_max") chat filters, but can increase the number with Teegram Premium @filter Chat filter createChatFilter filter:chatFilter = ChatFilterInfo; //@description Edits existing chat filter. Returns information about the edited chat filter @chat_filter_id Chat filter identifier @filter The edited chat filter diff --git a/td/telegram/ConfigManager.cpp b/td/telegram/ConfigManager.cpp index 740433c8b..f61fc1ab9 100644 --- a/td/telegram/ConfigManager.cpp +++ b/td/telegram/ConfigManager.cpp @@ -1964,6 +1964,12 @@ void ConfigManager::process_app_config(tl_object_ptr &c shared_config.set_option_integer("reactions_uniq_max", reactions_uniq_max); } + bool is_premium = shared_config.get_option_boolean("is_premium"); + + auto chat_filter_count_max = shared_config.get_option_integer( + is_premium ? Slice("dialog_filters_limit_premium") : Slice("dialog_filters_limit_default"), is_premium ? 20 : 10); + shared_config.set_option_integer("chat_filter_count_max", static_cast(chat_filter_count_max)); + shared_config.set_option_string("premium_features", implode(premium_features, ',')); shared_config.set_option_empty("default_ton_blockchain_config"); diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index 87c82f239..d67d30f08 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -19069,7 +19069,8 @@ Result> MessagesManager::create_dialog_filter(DialogFil void MessagesManager::create_dialog_filter(td_api::object_ptr filter, Promise> &&promise) { CHECK(!td_->auth_manager_->is_bot()); - if (dialog_filters_.size() >= MAX_DIALOG_FILTERS) { + auto max_dialog_filters = G()->shared_config().get_option_integer("chat_filter_count_max"); + if (dialog_filters_.size() >= max_dialog_filters) { return promise.set_error(Status::Error(400, "The maximum number of chat folders exceeded")); } if (!is_update_chat_filters_sent_) { diff --git a/td/telegram/MessagesManager.h b/td/telegram/MessagesManager.h index e0b994e13..aeda0faf9 100644 --- a/td/telegram/MessagesManager.h +++ b/td/telegram/MessagesManager.h @@ -1757,7 +1757,6 @@ class MessagesManager final : public Actor { static constexpr size_t MAX_DESCRIPTION_LENGTH = 255; // server side limit for chat description static constexpr size_t MAX_DIALOG_FILTER_TITLE_LENGTH = 12; // server side limit for dialog filter title static constexpr int32 MAX_PRIVATE_MESSAGE_TTL = 60; // server side limit - static constexpr int32 MAX_DIALOG_FILTERS = 10; // server side limit static constexpr int32 DIALOG_FILTERS_CACHE_TIME = 86400; static constexpr int64 SPONSORED_DIALOG_ORDER = static_cast(2147483647) << 32; diff --git a/td/telegram/OptionManager.cpp b/td/telegram/OptionManager.cpp index 0bdea9e87..5f30c6d95 100644 --- a/td/telegram/OptionManager.cpp +++ b/td/telegram/OptionManager.cpp @@ -111,6 +111,9 @@ OptionManager::OptionManager(Td *td, ActorShared<> parent) : td_(td), parent_(st if (!G()->shared_config().have_option("notification_sound_count_max")) { G()->shared_config().set_option_integer("notification_sound_count_max", G()->is_test_dc() ? 5 : 100); } + if (!G()->shared_config().have_option("chat_filter_count_max")) { + G()->shared_config().set_option_integer("chat_filter_count_max", G()->is_test_dc() ? 3 : 10); + } G()->shared_config().set_option_integer("utc_time_offset", Clocks::tz_offset()); }