Skip to content

Commit 44eacdf

Browse files
committed
Add td_api::messageUpgradedGift.
1 parent edc397e commit 44eacdf

File tree

5 files changed

+142
-6
lines changed

5 files changed

+142
-6
lines changed

td/generate/scheme/td_api.tl

+10
Original file line numberDiff line numberDiff line change
@@ -3999,6 +3999,16 @@ messageGiveawayPrizeStars star_count:int53 transaction_id:string boosted_chat_id
39993999
//@was_upgraded True, if the gift was upgraded to a unique gift; only for the receiver of the gift
40004000
messageGift gift:gift text:formattedText sell_star_count:int53 upgrade_star_count:int53 is_private:Bool is_saved:Bool can_be_upgraded:Bool was_converted:Bool was_upgraded:Bool = MessageContent;
40014001

4002+
//@description An upgraded gift was received or sent by the current user
4003+
//@gift The gift
4004+
//@is_upgrade True, if the gift was received by upgrading of a previously received gift
4005+
//@is_saved True, if the gift is displayed on the user's profile page; only for the receiver of the gift
4006+
//@can_be_transferred True, if the gift can be transferred to another user; only for the receiver of the gift
4007+
//@was_transferred True, if the gift was transferred to another user; only for the receiver of the gift
4008+
//@transfer_star_count Number of Telegram Stars that must be paid to transfer the upgraded gift; only for the receiver of the gift
4009+
//@export_date Point in time (Unix timestamp) when the gift can be transferred to TON blockchain as an NFT; 0 if NFT export isn't possible; only for the receiver of the gift
4010+
messageUpgradedGift gift:upgradedGift is_upgrade:Bool is_saved:Bool can_be_transferred:Bool was_transferred:Bool transfer_star_count:int53 export_date:int32 = MessageContent;
4011+
40024012
//@description A contact has registered with Telegram
40034013
messageContactRegistered = MessageContent;
40044014

td/telegram/DialogAction.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -427,6 +427,7 @@ bool DialogAction::is_canceled_by_message_of_type(MessageContentType message_con
427427
case MessageContentType::GiftStars:
428428
case MessageContentType::PrizeStars:
429429
case MessageContentType::StarGift:
430+
case MessageContentType::StarGiftUnique:
430431
return false;
431432
default:
432433
UNREACHABLE();

td/telegram/MessageContent.cpp

+119-5
Original file line numberDiff line numberDiff line change
@@ -513,7 +513,7 @@ class MessageChatSetTtl final : public MessageContent {
513513

514514
class MessageUnsupported final : public MessageContent {
515515
public:
516-
static constexpr int32 CURRENT_VERSION = 38;
516+
static constexpr int32 CURRENT_VERSION = 39;
517517
int32 version = CURRENT_VERSION;
518518

519519
MessageUnsupported() = default;
@@ -1275,6 +1275,33 @@ class MessageStarGift final : public MessageContent {
12751275
}
12761276
};
12771277

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+
12781305
template <class StorerT>
12791306
static void store(const MessageContent *content, StorerT &storer) {
12801307
CHECK(content != nullptr);
@@ -1978,6 +2005,27 @@ static void store(const MessageContent *content, StorerT &storer) {
19782005
}
19792006
break;
19802007
}
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+
}
19812029
default:
19822030
UNREACHABLE();
19832031
}
@@ -2891,7 +2939,33 @@ static void parse(unique_ptr<MessageContent> &content, ParserT &parser) {
28912939
if (has_upgrade_star_count) {
28922940
parse(m->upgrade_star_count, parser);
28932941
}
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()) {
28952969
is_bad = true;
28962970
break;
28972971
}
@@ -3667,6 +3741,7 @@ bool can_message_content_have_input_media(const Td *td, const MessageContent *co
36673741
case MessageContentType::GiftStars:
36683742
case MessageContentType::PrizeStars:
36693743
case MessageContentType::StarGift:
3744+
case MessageContentType::StarGiftUnique:
36703745
return false;
36713746
case MessageContentType::Animation:
36723747
case MessageContentType::Audio:
@@ -3814,6 +3889,7 @@ SecretInputMedia get_message_content_secret_input_media(
38143889
case MessageContentType::GiftStars:
38153890
case MessageContentType::PrizeStars:
38163891
case MessageContentType::StarGift:
3892+
case MessageContentType::StarGiftUnique:
38173893
break;
38183894
default:
38193895
UNREACHABLE();
@@ -3989,6 +4065,7 @@ static telegram_api::object_ptr<telegram_api::InputMedia> get_message_content_in
39894065
case MessageContentType::GiftStars:
39904066
case MessageContentType::PrizeStars:
39914067
case MessageContentType::StarGift:
4068+
case MessageContentType::StarGiftUnique:
39924069
break;
39934070
default:
39944071
UNREACHABLE();
@@ -4247,6 +4324,7 @@ void delete_message_content_thumbnail(MessageContent *content, Td *td, int32 med
42474324
case MessageContentType::GiftStars:
42484325
case MessageContentType::PrizeStars:
42494326
case MessageContentType::StarGift:
4327+
case MessageContentType::StarGiftUnique:
42504328
break;
42514329
default:
42524330
UNREACHABLE();
@@ -4468,6 +4546,7 @@ Status can_send_message_content(DialogId dialog_id, const MessageContent *conten
44684546
case MessageContentType::GiftStars:
44694547
case MessageContentType::PrizeStars:
44704548
case MessageContentType::StarGift:
4549+
case MessageContentType::StarGiftUnique:
44714550
UNREACHABLE();
44724551
}
44734552
return Status::OK();
@@ -4621,6 +4700,7 @@ static int32 get_message_content_media_index_mask(const MessageContent *content,
46214700
case MessageContentType::GiftStars:
46224701
case MessageContentType::PrizeStars:
46234702
case MessageContentType::StarGift:
4703+
case MessageContentType::StarGiftUnique:
46244704
return 0;
46254705
default:
46264706
UNREACHABLE();
@@ -4923,6 +5003,8 @@ vector<UserId> get_message_content_min_user_ids(const Td *td, const MessageConte
49235003
break;
49245004
case MessageContentType::StarGift:
49255005
break;
5006+
case MessageContentType::StarGiftUnique:
5007+
break;
49265008
default:
49275009
UNREACHABLE();
49285010
break;
@@ -5353,6 +5435,7 @@ void merge_message_contents(Td *td, const MessageContent *old_content, MessageCo
53535435
case MessageContentType::GiftStars:
53545436
case MessageContentType::PrizeStars:
53555437
case MessageContentType::StarGift:
5438+
case MessageContentType::StarGiftUnique:
53565439
break;
53575440
default:
53585441
UNREACHABLE();
@@ -5509,6 +5592,7 @@ bool merge_message_content_file_id(Td *td, MessageContent *message_content, File
55095592
case MessageContentType::GiftStars:
55105593
case MessageContentType::PrizeStars:
55115594
case MessageContentType::StarGift:
5595+
case MessageContentType::StarGiftUnique:
55125596
LOG(ERROR) << "Receive new file " << new_file_id << " in a sent message of the type " << content_type;
55135597
break;
55145598
default:
@@ -6123,6 +6207,17 @@ void compare_message_contents(Td *td, const MessageContent *old_content, const M
61236207
}
61246208
break;
61256209
}
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+
}
61266221
default:
61276222
UNREACHABLE();
61286223
break;
@@ -7371,6 +7466,7 @@ unique_ptr<MessageContent> dup_message_content(Td *td, DialogId dialog_id, const
73717466
case MessageContentType::GiftStars:
73727467
case MessageContentType::PrizeStars:
73737468
case MessageContentType::StarGift:
7469+
case MessageContentType::StarGiftUnique:
73747470
return nullptr;
73757471
default:
73767472
UNREACHABLE();
@@ -7903,7 +7999,7 @@ unique_ptr<MessageContent> get_action_message_content(Td *td, tl_object_ptr<tele
79037999
case telegram_api::messageActionStarGift::ID: {
79048000
auto action = move_tl_object_as<telegram_api::messageActionStarGift>(action_ptr);
79058001
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()) {
79078003
break;
79088004
}
79098005
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
79138009
StarManager::get_star_count(action->upgrade_stars_), action->name_hidden_, action->saved_,
79148010
action->can_upgrade_, action->converted_, action->upgraded_);
79158011
}
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+
}
79188024
default:
79198025
UNREACHABLE();
79208026
}
@@ -8405,6 +8511,12 @@ td_api::object_ptr<td_api::MessageContent> get_message_content_object(const Mess
84058511
m->convert_star_count, m->upgrade_star_count, m->name_hidden,
84068512
m->is_saved, m->can_upgrade, m->was_converted, m->was_upgraded);
84078513
}
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+
}
84088520
default:
84098521
UNREACHABLE();
84108522
return nullptr;
@@ -9381,6 +9493,8 @@ void add_message_content_dependencies(Dependencies &dependencies, const MessageC
93819493
}
93829494
case MessageContentType::StarGift:
93839495
break;
9496+
case MessageContentType::StarGiftUnique:
9497+
break;
93849498
default:
93859499
UNREACHABLE();
93869500
break;

td/telegram/MessageContentType.cpp

+10
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,8 @@ StringBuilder &operator<<(StringBuilder &string_builder, MessageContentType cont
156156
return string_builder << "PrizeStars";
157157
case MessageContentType::StarGift:
158158
return string_builder << "StarGift";
159+
case MessageContentType::StarGiftUnique:
160+
return string_builder << "UpgradedStarGift";
159161
default:
160162
return string_builder << "Invalid type " << static_cast<int32>(content_type);
161163
}
@@ -248,6 +250,7 @@ bool is_allowed_media_group_content(MessageContentType content_type) {
248250
case MessageContentType::GiftStars:
249251
case MessageContentType::PrizeStars:
250252
case MessageContentType::StarGift:
253+
case MessageContentType::StarGiftUnique:
251254
return false;
252255
default:
253256
UNREACHABLE();
@@ -334,6 +337,7 @@ bool can_be_secret_message_content(MessageContentType content_type) {
334337
case MessageContentType::GiftStars:
335338
case MessageContentType::PrizeStars:
336339
case MessageContentType::StarGift:
340+
case MessageContentType::StarGiftUnique:
337341
return false;
338342
default:
339343
UNREACHABLE();
@@ -416,6 +420,7 @@ bool can_be_local_message_content(MessageContentType content_type) {
416420
case MessageContentType::GiftStars:
417421
case MessageContentType::PrizeStars:
418422
case MessageContentType::StarGift:
423+
case MessageContentType::StarGiftUnique:
419424
return false;
420425
default:
421426
UNREACHABLE();
@@ -498,6 +503,7 @@ bool is_service_message_content(MessageContentType content_type) {
498503
case MessageContentType::GiftStars:
499504
case MessageContentType::PrizeStars:
500505
case MessageContentType::StarGift:
506+
case MessageContentType::StarGiftUnique:
501507
return true;
502508
default:
503509
UNREACHABLE();
@@ -580,6 +586,7 @@ bool is_editable_message_content(MessageContentType content_type) {
580586
case MessageContentType::GiftStars:
581587
case MessageContentType::PrizeStars:
582588
case MessageContentType::StarGift:
589+
case MessageContentType::StarGiftUnique:
583590
return false;
584591
default:
585592
UNREACHABLE();
@@ -726,6 +733,7 @@ bool can_have_message_content_caption(MessageContentType content_type) {
726733
case MessageContentType::GiftStars:
727734
case MessageContentType::PrizeStars:
728735
case MessageContentType::StarGift:
736+
case MessageContentType::StarGiftUnique:
729737
return false;
730738
default:
731739
UNREACHABLE();
@@ -810,6 +818,7 @@ bool can_send_message_content_to_secret_chat(MessageContentType content_type) {
810818
case MessageContentType::GiftStars:
811819
case MessageContentType::PrizeStars:
812820
case MessageContentType::StarGift:
821+
case MessageContentType::StarGiftUnique:
813822
default:
814823
UNREACHABLE();
815824
return false;
@@ -909,6 +918,7 @@ bool get_default_service_message_content_reactions_are_possible(MessageContentTy
909918
case MessageContentType::GiftStars:
910919
case MessageContentType::PrizeStars:
911920
case MessageContentType::StarGift:
921+
case MessageContentType::StarGiftUnique:
912922
return true;
913923
default:
914924
UNREACHABLE();

td/telegram/MessageContentType.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,8 @@ enum class MessageContentType : int32 {
8585
PaymentRefunded,
8686
GiftStars,
8787
PrizeStars,
88-
StarGift
88+
StarGift,
89+
StarGiftUnique
8990
};
9091
// increase MessageUnsupported::CURRENT_VERSION each time a new message content type is added
9192

0 commit comments

Comments
 (0)