@@ -513,7 +513,7 @@ class MessageChatSetTtl final : public MessageContent {
513
513
514
514
class MessageUnsupported final : public MessageContent {
515
515
public:
516
- static constexpr int32 CURRENT_VERSION = 38 ;
516
+ static constexpr int32 CURRENT_VERSION = 39 ;
517
517
int32 version = CURRENT_VERSION;
518
518
519
519
MessageUnsupported () = default ;
@@ -1275,6 +1275,33 @@ class MessageStarGift final : public MessageContent {
1275
1275
}
1276
1276
};
1277
1277
1278
+ class MessageStarGiftUnique final : public MessageContent {
1279
+ public:
1280
+ StarGift star_gift;
1281
+ int64 transfer_star_count = 0 ;
1282
+ int32 can_export_at = 0 ;
1283
+ bool is_saved = false ;
1284
+ bool is_upgrade = false ;
1285
+ bool can_transfer = false ;
1286
+ bool was_transferred = false ;
1287
+
1288
+ MessageStarGiftUnique () = default ;
1289
+ MessageStarGiftUnique (StarGift &&star_gift, int64 transfer_star_count, int32 can_export_at, bool is_saved,
1290
+ bool is_upgrade, bool can_transfer, bool was_transferred)
1291
+ : star_gift(std::move(star_gift))
1292
+ , transfer_star_count(transfer_star_count)
1293
+ , can_export_at(can_export_at)
1294
+ , is_saved(is_saved)
1295
+ , is_upgrade(is_upgrade)
1296
+ , can_transfer(can_transfer)
1297
+ , was_transferred(was_transferred) {
1298
+ }
1299
+
1300
+ MessageContentType get_type () const final {
1301
+ return MessageContentType::StarGiftUnique;
1302
+ }
1303
+ };
1304
+
1278
1305
template <class StorerT >
1279
1306
static void store (const MessageContent *content, StorerT &storer) {
1280
1307
CHECK (content != nullptr );
@@ -1978,6 +2005,27 @@ static void store(const MessageContent *content, StorerT &storer) {
1978
2005
}
1979
2006
break ;
1980
2007
}
2008
+ case MessageContentType::StarGiftUnique: {
2009
+ const auto *m = static_cast <const MessageStarGiftUnique *>(content);
2010
+ bool has_transfer_star_count = m->transfer_star_count != 0 ;
2011
+ bool has_can_export_at = m->can_export_at != 0 ;
2012
+ BEGIN_STORE_FLAGS ();
2013
+ STORE_FLAG (has_transfer_star_count);
2014
+ STORE_FLAG (has_can_export_at);
2015
+ STORE_FLAG (m->is_saved );
2016
+ STORE_FLAG (m->is_upgrade );
2017
+ STORE_FLAG (m->was_transferred );
2018
+ STORE_FLAG (m->can_transfer );
2019
+ END_STORE_FLAGS ();
2020
+ store (m->star_gift , storer);
2021
+ if (has_transfer_star_count) {
2022
+ store (m->transfer_star_count , storer);
2023
+ }
2024
+ if (has_can_export_at) {
2025
+ store (m->can_export_at , storer);
2026
+ }
2027
+ break ;
2028
+ }
1981
2029
default :
1982
2030
UNREACHABLE ();
1983
2031
}
@@ -2891,7 +2939,33 @@ static void parse(unique_ptr<MessageContent> &content, ParserT &parser) {
2891
2939
if (has_upgrade_star_count) {
2892
2940
parse (m->upgrade_star_count , parser);
2893
2941
}
2894
- if (!m->star_gift .is_valid ()) {
2942
+ if (!m->star_gift .is_valid () || m->star_gift .is_unique ()) {
2943
+ is_bad = true ;
2944
+ break ;
2945
+ }
2946
+ content = std::move (m);
2947
+ break ;
2948
+ }
2949
+ case MessageContentType::StarGiftUnique: {
2950
+ auto m = make_unique<MessageStarGiftUnique>();
2951
+ bool has_transfer_star_count;
2952
+ bool has_can_export_at;
2953
+ BEGIN_PARSE_FLAGS ();
2954
+ PARSE_FLAG (has_transfer_star_count);
2955
+ PARSE_FLAG (has_can_export_at);
2956
+ PARSE_FLAG (m->is_saved );
2957
+ PARSE_FLAG (m->is_upgrade );
2958
+ PARSE_FLAG (m->was_transferred );
2959
+ PARSE_FLAG (m->can_transfer );
2960
+ END_PARSE_FLAGS ();
2961
+ parse (m->star_gift , parser);
2962
+ if (has_transfer_star_count) {
2963
+ parse (m->transfer_star_count , parser);
2964
+ }
2965
+ if (has_can_export_at) {
2966
+ parse (m->can_export_at , parser);
2967
+ }
2968
+ if (!m->star_gift .is_valid () || !m->star_gift .is_unique ()) {
2895
2969
is_bad = true ;
2896
2970
break ;
2897
2971
}
@@ -3667,6 +3741,7 @@ bool can_message_content_have_input_media(const Td *td, const MessageContent *co
3667
3741
case MessageContentType::GiftStars:
3668
3742
case MessageContentType::PrizeStars:
3669
3743
case MessageContentType::StarGift:
3744
+ case MessageContentType::StarGiftUnique:
3670
3745
return false ;
3671
3746
case MessageContentType::Animation:
3672
3747
case MessageContentType::Audio:
@@ -3814,6 +3889,7 @@ SecretInputMedia get_message_content_secret_input_media(
3814
3889
case MessageContentType::GiftStars:
3815
3890
case MessageContentType::PrizeStars:
3816
3891
case MessageContentType::StarGift:
3892
+ case MessageContentType::StarGiftUnique:
3817
3893
break ;
3818
3894
default :
3819
3895
UNREACHABLE ();
@@ -3989,6 +4065,7 @@ static telegram_api::object_ptr<telegram_api::InputMedia> get_message_content_in
3989
4065
case MessageContentType::GiftStars:
3990
4066
case MessageContentType::PrizeStars:
3991
4067
case MessageContentType::StarGift:
4068
+ case MessageContentType::StarGiftUnique:
3992
4069
break ;
3993
4070
default :
3994
4071
UNREACHABLE ();
@@ -4247,6 +4324,7 @@ void delete_message_content_thumbnail(MessageContent *content, Td *td, int32 med
4247
4324
case MessageContentType::GiftStars:
4248
4325
case MessageContentType::PrizeStars:
4249
4326
case MessageContentType::StarGift:
4327
+ case MessageContentType::StarGiftUnique:
4250
4328
break ;
4251
4329
default :
4252
4330
UNREACHABLE ();
@@ -4468,6 +4546,7 @@ Status can_send_message_content(DialogId dialog_id, const MessageContent *conten
4468
4546
case MessageContentType::GiftStars:
4469
4547
case MessageContentType::PrizeStars:
4470
4548
case MessageContentType::StarGift:
4549
+ case MessageContentType::StarGiftUnique:
4471
4550
UNREACHABLE ();
4472
4551
}
4473
4552
return Status::OK ();
@@ -4621,6 +4700,7 @@ static int32 get_message_content_media_index_mask(const MessageContent *content,
4621
4700
case MessageContentType::GiftStars:
4622
4701
case MessageContentType::PrizeStars:
4623
4702
case MessageContentType::StarGift:
4703
+ case MessageContentType::StarGiftUnique:
4624
4704
return 0 ;
4625
4705
default :
4626
4706
UNREACHABLE ();
@@ -4923,6 +5003,8 @@ vector<UserId> get_message_content_min_user_ids(const Td *td, const MessageConte
4923
5003
break ;
4924
5004
case MessageContentType::StarGift:
4925
5005
break ;
5006
+ case MessageContentType::StarGiftUnique:
5007
+ break ;
4926
5008
default :
4927
5009
UNREACHABLE ();
4928
5010
break ;
@@ -5353,6 +5435,7 @@ void merge_message_contents(Td *td, const MessageContent *old_content, MessageCo
5353
5435
case MessageContentType::GiftStars:
5354
5436
case MessageContentType::PrizeStars:
5355
5437
case MessageContentType::StarGift:
5438
+ case MessageContentType::StarGiftUnique:
5356
5439
break ;
5357
5440
default :
5358
5441
UNREACHABLE ();
@@ -5509,6 +5592,7 @@ bool merge_message_content_file_id(Td *td, MessageContent *message_content, File
5509
5592
case MessageContentType::GiftStars:
5510
5593
case MessageContentType::PrizeStars:
5511
5594
case MessageContentType::StarGift:
5595
+ case MessageContentType::StarGiftUnique:
5512
5596
LOG (ERROR) << " Receive new file " << new_file_id << " in a sent message of the type " << content_type;
5513
5597
break ;
5514
5598
default :
@@ -6123,6 +6207,17 @@ void compare_message_contents(Td *td, const MessageContent *old_content, const M
6123
6207
}
6124
6208
break ;
6125
6209
}
6210
+ case MessageContentType::StarGiftUnique: {
6211
+ const auto *lhs = static_cast <const MessageStarGiftUnique *>(old_content);
6212
+ const auto *rhs = static_cast <const MessageStarGiftUnique *>(new_content);
6213
+ if (lhs->star_gift != rhs->star_gift || lhs->transfer_star_count != rhs->transfer_star_count ||
6214
+ lhs->can_export_at != rhs->can_export_at || lhs->is_saved != rhs->is_saved ||
6215
+ lhs->is_upgrade != rhs->is_upgrade || lhs->can_transfer != rhs->can_transfer ||
6216
+ lhs->was_transferred != rhs->was_transferred ) {
6217
+ need_update = true ;
6218
+ }
6219
+ break ;
6220
+ }
6126
6221
default :
6127
6222
UNREACHABLE ();
6128
6223
break ;
@@ -7371,6 +7466,7 @@ unique_ptr<MessageContent> dup_message_content(Td *td, DialogId dialog_id, const
7371
7466
case MessageContentType::GiftStars:
7372
7467
case MessageContentType::PrizeStars:
7373
7468
case MessageContentType::StarGift:
7469
+ case MessageContentType::StarGiftUnique:
7374
7470
return nullptr ;
7375
7471
default :
7376
7472
UNREACHABLE ();
@@ -7903,7 +7999,7 @@ unique_ptr<MessageContent> get_action_message_content(Td *td, tl_object_ptr<tele
7903
7999
case telegram_api::messageActionStarGift::ID: {
7904
8000
auto action = move_tl_object_as<telegram_api::messageActionStarGift>(action_ptr);
7905
8001
StarGift star_gift (td, std::move (action->gift_ ), false );
7906
- if (!star_gift.is_valid ()) {
8002
+ if (!star_gift.is_valid () || star_gift. is_unique () ) {
7907
8003
break ;
7908
8004
}
7909
8005
FormattedText text = get_formatted_text (td->user_manager_ .get (), std::move (action->message_ ), true , false ,
@@ -7913,8 +8009,18 @@ unique_ptr<MessageContent> get_action_message_content(Td *td, tl_object_ptr<tele
7913
8009
StarManager::get_star_count (action->upgrade_stars_ ), action->name_hidden_ , action->saved_ ,
7914
8010
action->can_upgrade_ , action->converted_ , action->upgraded_ );
7915
8011
}
7916
- case telegram_api::messageActionStarGiftUnique::ID:
7917
- return td::make_unique<MessageUnsupported>();
8012
+ case telegram_api::messageActionStarGiftUnique::ID: {
8013
+ auto action = move_tl_object_as<telegram_api::messageActionStarGiftUnique>(action_ptr);
8014
+ StarGift star_gift (td, std::move (action->gift_ ), true );
8015
+ if (!star_gift.is_valid () || !star_gift.is_unique ()) {
8016
+ break ;
8017
+ }
8018
+ return td::make_unique<MessageStarGiftUnique>(
8019
+ std::move (star_gift), StarManager::get_star_count (action->transfer_stars_ ), max (0 , action->can_export_at_ ),
8020
+ action->saved_ , action->upgrade_ ,
8021
+ (action->flags_ && telegram_api::messageActionStarGiftUnique::TRANSFER_STARS_MASK) != 0 ,
8022
+ action->transferred_ );
8023
+ }
7918
8024
default :
7919
8025
UNREACHABLE ();
7920
8026
}
@@ -8405,6 +8511,12 @@ td_api::object_ptr<td_api::MessageContent> get_message_content_object(const Mess
8405
8511
m->convert_star_count , m->upgrade_star_count , m->name_hidden ,
8406
8512
m->is_saved , m->can_upgrade , m->was_converted , m->was_upgraded );
8407
8513
}
8514
+ case MessageContentType::StarGiftUnique: {
8515
+ const auto *m = static_cast <const MessageStarGiftUnique *>(content);
8516
+ return td_api::make_object<td_api::messageUpgradedGift>(m->star_gift .get_upgraded_gift_object (td), m->is_upgrade ,
8517
+ m->is_saved , m->can_transfer , m->was_transferred ,
8518
+ m->transfer_star_count , m->can_export_at );
8519
+ }
8408
8520
default :
8409
8521
UNREACHABLE ();
8410
8522
return nullptr ;
@@ -9381,6 +9493,8 @@ void add_message_content_dependencies(Dependencies &dependencies, const MessageC
9381
9493
}
9382
9494
case MessageContentType::StarGift:
9383
9495
break ;
9496
+ case MessageContentType::StarGiftUnique:
9497
+ break ;
9384
9498
default :
9385
9499
UNREACHABLE ();
9386
9500
break ;
0 commit comments