From 8109988247f0b6f46f9b6fbb4120eb48e4c8c92d Mon Sep 17 00:00:00 2001 From: levlam Date: Tue, 21 Apr 2020 14:51:46 +0300 Subject: [PATCH] Add messageDice.need_success_animation. GitOrigin-RevId: 1c308f71d628d896321ce331c634a6868f504bc0 --- td/generate/scheme/td_api.tl | 3 ++- td/generate/scheme/td_api.tlo | Bin 171360 -> 171408 bytes td/telegram/ConfigManager.cpp | 24 ++++++++++++++++++++++++ td/telegram/MessageContent.cpp | 3 ++- td/telegram/StickersManager.cpp | 24 ++++++++++++++++++++++++ td/telegram/StickersManager.h | 7 +++++++ td/telegram/Td.cpp | 4 +++- 7 files changed, 62 insertions(+), 3 deletions(-) diff --git a/td/generate/scheme/td_api.tl b/td/generate/scheme/td_api.tl index c9f992ac..b5adf037 100644 --- a/td/generate/scheme/td_api.tl +++ b/td/generate/scheme/td_api.tl @@ -1385,7 +1385,8 @@ messageContact contact:contact = MessageContent; //@final_state_sticker The animated sticker with the final dice animation; may be null if unknown. updateMessageContent will be sent when the sticker became known //@emoji Emoji on which the dice throw animation is based //@value The dice value. If the value is 0, the dice don't have final state yet -messageDice initial_state_sticker:sticker final_state_sticker:sticker emoji:string value:int32 = MessageContent; +//@need_success_animation True, if a success animation like a shower of confetti needs to be shown on updateMessageSendSucceeded +messageDice initial_state_sticker:sticker final_state_sticker:sticker emoji:string value:int32 need_success_animation:Bool = MessageContent; //@description A message with a game @game The game description messageGame game:game = MessageContent; diff --git a/td/generate/scheme/td_api.tlo b/td/generate/scheme/td_api.tlo index d928d3c8c10dba411f0bde1a1ce56cb6ceed5427..09a2ce34f1a289cd2a7e61c20de80a6ce08ed690 100644 GIT binary patch delta 1115 zcmaJ=OK1~O6zxqWVG_G&{e*%+1{1KtNC(NnMQQ`hqF{xHK@b8pB!el$3Pzy|1s754 zE_w~mMZqdX-5Kp7QWaW|f|^AZ3K2vib`ivdi`XSXSF#VW~L-FMDC=YHl*dD)qH z<;;~`lHV6i0jzQal?^XZh0_qgVq*aP4NAth z8wyeCLGa^3ZLfJle~n-~R|^yJQXpSymk9}PdWSmYKd@&`#al0yy-dycqnAzmM z$`7NPg~!~t!eQ*MbC-0zhs#Rc>kuWZ>{J9s*vd6fSne!H7--N`m=HmxF-xuWH+lP7 z^C}^^rn2n>xcbP0t@kofa!VwC&<>mX>`Y^vPY0ZlJrnPIyDsRdRP?+aoQ~luzs4tD%$0<3=wdS2;c>C8k)qV5 zo|aneIQ*ymc)PSuXvd>mo8F3$c702wpmQ(WcWGq>HTEM}zL!|mC0rw2)qLYwKxX;>v-W#jhM4s0U zbEM7LIhHTmAprzV%Aj^%Sw8!nj`ZVyH&N zxV-HrDs~D&IA7^>-Y`@l7~_>FA@2n8r7})PbVt{k?LV&^A8fOq+x;FxzHq!$)SRhN=JSary03Nq9s?hKHLx78@pSzf0{GjNR+-pSJk0bV6wRhq!j} zPt4KIbb>)9>lclgQ3w;d2*$oyAI}DG>n!DD8bEg|ZsH*KwGv=!09;tI$(CQ6Y3&DW zKP3D1R>P)kuC=mgvrg(KE}(_5po>E+?t)&2WOD*Tds3$P+G%d4OTe%8paemxO-qM0 zT(%YaHgIg^G^u=UzDt%$h$JbuaDU|nx>`*4h`Oi;rbt^BSk8L{l0e|33`Xm@^RgIn wQx?H>MPLyH2FPVr5$&>l5M-7jHqxs?>mMgKu7b=Qhg|A8tZ8(NEJ66&UwK=SAOHXW diff --git a/td/telegram/ConfigManager.cpp b/td/telegram/ConfigManager.cpp index fa0d288d..4fb827b6 100644 --- a/td/telegram/ConfigManager.cpp +++ b/td/telegram/ConfigManager.cpp @@ -1292,6 +1292,7 @@ void ConfigManager::process_app_config(tl_object_ptr &c string wallet_config; string ignored_restriction_reasons; string dice_emojis; + string dice_success_values; if (config->get_id() == telegram_api::jsonObject::ID) { for (auto &key_value : static_cast(config.get())->value_) { Slice key = key_value->key_; @@ -1363,6 +1364,26 @@ void ConfigManager::process_app_config(tl_object_ptr &c } continue; } + if (key == "emojies_send_dice_success") { + if (value->get_id() == telegram_api::jsonArray::ID) { + auto success_values = std::move(static_cast(value)->value_); + for (auto &success_value : success_values) { + CHECK(success_value != nullptr); + if (success_value->get_id() == telegram_api::jsonNumber::ID) { + int32 dice_value = static_cast(static_cast(success_value.get())->value_); + if (!dice_success_values.empty()) { + dice_success_values += ','; + } + dice_success_values += to_string(dice_value); + } else { + LOG(ERROR) << "Receive unexpected dice success value " << to_string(success_value); + } + } + } else { + LOG(ERROR) << "Receive unexpected emojies_send_dice_success " << to_string(*value); + } + continue; + } new_values.push_back(std::move(key_value)); } @@ -1397,6 +1418,9 @@ void ConfigManager::process_app_config(tl_object_ptr &c if (!dice_emojis.empty()) { shared_config.set_option_string("dice_emojis", dice_emojis); } + if (!dice_success_values.empty()) { + shared_config.set_option_string("dice_success_values", dice_success_values); + } } } // namespace td diff --git a/td/telegram/MessageContent.cpp b/td/telegram/MessageContent.cpp index a82ee065..e3888b4a 100644 --- a/td/telegram/MessageContent.cpp +++ b/td/telegram/MessageContent.cpp @@ -4499,8 +4499,9 @@ tl_object_ptr get_message_content_object(const MessageCo auto initial_state = td->stickers_manager_->get_dice_sticker_object(m->emoji, 0); auto final_state = m->dice_value == 0 ? nullptr : td->stickers_manager_->get_dice_sticker_object(m->emoji, m->dice_value); + auto need_success_animation = td->stickers_manager_->need_dice_success_animation(m->emoji, m->dice_value); return make_tl_object(std::move(initial_state), std::move(final_state), m->emoji, - m->dice_value); + m->dice_value, need_success_animation); } default: UNREACHABLE(); diff --git a/td/telegram/StickersManager.cpp b/td/telegram/StickersManager.cpp index c42669b5..b7a664e5 100644 --- a/td/telegram/StickersManager.cpp +++ b/td/telegram/StickersManager.cpp @@ -1377,6 +1377,21 @@ tl_object_ptr StickersManager::get_dice_sticker_object(const st return nullptr; } +bool StickersManager::need_dice_success_animation(const string &emoji, int32 value) const { + if (td_->auth_manager_->is_bot()) { + return false; + } + if (value == 0 || !td::contains(dice_emojis_, emoji)) { + return false; + } + auto pos = static_cast(std::find(dice_emojis_.begin(), dice_emojis_.end(), emoji) - dice_emojis_.begin()); + if (pos >= dice_success_values_.size()) { + return false; + } + + return dice_success_values_[pos] == value; +} + tl_object_ptr StickersManager::get_sticker_set_object(StickerSetId sticker_set_id) const { const StickerSet *sticker_set = get_sticker_set(sticker_set_id); CHECK(sticker_set != nullptr); @@ -3370,6 +3385,15 @@ void StickersManager::on_update_dice_emojis() { send_closure(G()->td(), &Td::send_update, get_update_dice_emojis_object()); } +void StickersManager::on_update_dice_success_values() { + auto dice_success_values_str = G()->shared_config().get_option_string("dice_success_values", "0,0"); + if (dice_success_values_str == dice_success_values_str_) { + return; + } + dice_success_values_str_ = std::move(dice_success_values_str); + dice_success_values_ = transform(full_split(dice_success_values_str_, ','), to_integer); +} + void StickersManager::on_update_sticker_sets() { // TODO better support archived_sticker_set_ids_[0].clear(); diff --git a/td/telegram/StickersManager.h b/td/telegram/StickersManager.h index 7ba3136c..a89531e8 100644 --- a/td/telegram/StickersManager.h +++ b/td/telegram/StickersManager.h @@ -54,6 +54,8 @@ class StickersManager : public Actor { tl_object_ptr get_dice_sticker_object(const string &emoji, int32 value) const; + bool need_dice_success_animation(const string &emoji, int32 value) const; + tl_object_ptr get_sticker_set_object(StickerSetId sticker_set_id) const; tl_object_ptr get_sticker_sets_object(int32 total_count, @@ -131,6 +133,8 @@ class StickersManager : public Actor { void on_update_dice_emojis(); + void on_update_dice_success_values(); + void on_update_sticker_sets(); void on_update_sticker_sets_order(bool is_masks, const vector &sticker_set_ids); @@ -710,6 +714,9 @@ class StickersManager : public Actor { string dice_emojis_str_; vector dice_emojis_; + + string dice_success_values_str_; + vector dice_success_values_; }; } // namespace td diff --git a/td/telegram/Td.cpp b/td/telegram/Td.cpp index d017ad1a..9a0b5baa 100644 --- a/td/telegram/Td.cpp +++ b/td/telegram/Td.cpp @@ -3457,7 +3457,7 @@ bool Td::is_internal_config_option(Slice name) { return name == "call_ring_timeout_ms" || name == "call_receive_timeout_ms" || name == "channels_read_media_period"; case 'd': - return name == "dc_txt_domain_name" || name == "dice_emojis"; + return name == "dc_txt_domain_name" || name == "dice_emojis" || name == "dice_success_values"; case 'e': return name == "edit_time_limit"; case 'i': @@ -3546,6 +3546,8 @@ void Td::on_config_option_updated(const string &name) { return send_closure(contacts_manager_actor_, &ContactsManager::on_ignored_restriction_reasons_changed); } else if (name == "dice_emojis") { return send_closure(stickers_manager_actor_, &StickersManager::on_update_dice_emojis); + } else if (name == "dice_success_values") { + return send_closure(stickers_manager_actor_, &StickersManager::on_update_dice_success_values); } else if (is_internal_config_option(name)) { return; }