mirror of
https://github.com/telegramdesktop/tdesktop
synced 2025-08-29 21:48:26 +00:00
Update API scheme on layer 160, show correct warnings.
This commit is contained in:
parent
1ecd7aa7cf
commit
b929e2a7b2
@ -4472,6 +4472,11 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|||||||
"lng_suggest_decline_title" = "Decline";
|
"lng_suggest_decline_title" = "Decline";
|
||||||
"lng_suggest_decline_text" = "Do you want to decline publishing this post from {from}?";
|
"lng_suggest_decline_text" = "Do you want to decline publishing this post from {from}?";
|
||||||
"lng_suggest_decline_reason" = "Add a reason (optional)";
|
"lng_suggest_decline_reason" = "Add a reason (optional)";
|
||||||
|
"lng_suggest_warn_title_stars" = "Stars will be lost";
|
||||||
|
"lng_suggest_warn_title_ton" = "TON will be lost";
|
||||||
|
"lng_suggest_warn_text_stars" = "You won't receive **Stars** for the post if you delete it now. The post must remain visible for at least **24 hours** after it was published.";
|
||||||
|
"lng_suggest_warn_text_ton" = "You won't receive **TON** for the post if you delete it now. The post must remain visible for at least **24 hours** after it was published.";
|
||||||
|
"lng_suggest_warn_delete_anyway" = "Delete Anyway";
|
||||||
|
|
||||||
"lng_reply_in_another_title" = "Reply in...";
|
"lng_reply_in_another_title" = "Reply in...";
|
||||||
"lng_reply_in_another_chat" = "Reply in Another Chat";
|
"lng_reply_in_another_chat" = "Reply in Another Chat";
|
||||||
|
@ -499,23 +499,32 @@ void DeleteMessagesBox::keyPressEvent(QKeyEvent *e) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DeleteMessagesBox::hasPaidSuggestedPosts() const {
|
PaidPostType DeleteMessagesBox::paidPostType() const {
|
||||||
|
auto result = PaidPostType::None;
|
||||||
const auto now = base::unixtime::now();
|
const auto now = base::unixtime::now();
|
||||||
for (const auto &id : _ids) {
|
for (const auto &id : _ids) {
|
||||||
if (const auto item = _session->data().message(id)) {
|
if (const auto item = _session->data().message(id)) {
|
||||||
if (item->isPaidSuggestedPost()) {
|
const auto type = item->paidType();
|
||||||
|
if (type != PaidPostType::None) {
|
||||||
const auto date = item->date();
|
const auto date = item->date();
|
||||||
if (now < date || now - date <= kPaidShowLive) {
|
if (now < date || now - date <= kPaidShowLive) {
|
||||||
return true;
|
if (type == PaidPostType::Ton) {
|
||||||
|
return type;
|
||||||
|
} else if (type == PaidPostType::Stars) {
|
||||||
|
result = type;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DeleteMessagesBox::deleteAndClear() {
|
void DeleteMessagesBox::deleteAndClear() {
|
||||||
if (hasPaidSuggestedPosts() && !_confirmedDeletePaidSuggestedPosts) {
|
const auto warnPaidType = _confirmedDeletePaidSuggestedPosts
|
||||||
|
? PaidPostType::None
|
||||||
|
: paidPostType();
|
||||||
|
if (warnPaidType != PaidPostType::None) {
|
||||||
const auto weak = Ui::MakeWeak(this);
|
const auto weak = Ui::MakeWeak(this);
|
||||||
const auto callback = [=](Fn<void()> close) {
|
const auto callback = [=](Fn<void()> close) {
|
||||||
close();
|
close();
|
||||||
@ -524,13 +533,19 @@ void DeleteMessagesBox::deleteAndClear() {
|
|||||||
strong->deleteAndClear();
|
strong->deleteAndClear();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
AssertIsDebug();
|
const auto ton = (warnPaidType == PaidPostType::Ton);
|
||||||
uiShow()->show(Ui::MakeConfirmBox({
|
uiShow()->show(Ui::MakeConfirmBox({
|
||||||
.text = u"You won't receive Stars for this post if you delete it now. The post must remain visible for at least 24 hours after it was published."_q,
|
.text = (ton
|
||||||
|
? tr::lng_suggest_warn_text_ton
|
||||||
|
: tr::lng_suggest_warn_text_stars)(
|
||||||
|
tr::now,
|
||||||
|
Ui::Text::RichLangValue),
|
||||||
.confirmed = callback,
|
.confirmed = callback,
|
||||||
.confirmText = u"Delete Anyway"_q,
|
.confirmText = tr::lng_suggest_warn_delete_anyway(tr::now),
|
||||||
.confirmStyle = &st::attentionBoxButton,
|
.confirmStyle = &st::attentionBoxButton,
|
||||||
.title = u"Stars will be lost"_q,
|
.title = (ton
|
||||||
|
? tr::lng_suggest_warn_title_ton
|
||||||
|
: tr::lng_suggest_warn_title_stars)(tr::now),
|
||||||
}));
|
}));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|||||||
|
|
||||||
#include "ui/layers/box_content.h"
|
#include "ui/layers/box_content.h"
|
||||||
|
|
||||||
|
enum class PaidPostType : uchar;
|
||||||
|
|
||||||
namespace Main {
|
namespace Main {
|
||||||
class Session;
|
class Session;
|
||||||
} // namespace Main
|
} // namespace Main
|
||||||
@ -58,7 +60,7 @@ private:
|
|||||||
[[nodiscard]] bool hasScheduledMessages() const;
|
[[nodiscard]] bool hasScheduledMessages() const;
|
||||||
[[nodiscard]] std::optional<RevokeConfig> revokeText(
|
[[nodiscard]] std::optional<RevokeConfig> revokeText(
|
||||||
not_null<PeerData*> peer) const;
|
not_null<PeerData*> peer) const;
|
||||||
[[nodiscard]] bool hasPaidSuggestedPosts() const;
|
[[nodiscard]] PaidPostType paidPostType() const;
|
||||||
|
|
||||||
const not_null<Main::Session*> _session;
|
const not_null<Main::Session*> _session;
|
||||||
|
|
||||||
|
@ -354,7 +354,8 @@ enum class MessageFlag : uint64 {
|
|||||||
|
|
||||||
HideDisplayDate = (1ULL << 51),
|
HideDisplayDate = (1ULL << 51),
|
||||||
|
|
||||||
PaidSuggestedPost = (1ULL << 52),
|
StarsPaidSuggested = (1ULL << 52),
|
||||||
|
TonPaidSuggested = (1ULL << 53),
|
||||||
};
|
};
|
||||||
inline constexpr bool is_flag_type(MessageFlag) { return true; }
|
inline constexpr bool is_flag_type(MessageFlag) { return true; }
|
||||||
using MessageFlags = base::flags<MessageFlag>;
|
using MessageFlags = base::flags<MessageFlag>;
|
||||||
|
@ -1775,6 +1775,14 @@ ServiceAction ParseServiceAction(
|
|||||||
.rejected = data.is_rejected(),
|
.rejected = data.is_rejected(),
|
||||||
.balanceTooLow = data.is_balance_too_low(),
|
.balanceTooLow = data.is_balance_too_low(),
|
||||||
};
|
};
|
||||||
|
}, [&](const MTPDmessageActionSuggestedPostSuccess &data) {
|
||||||
|
result.content = ActionSuggestedPostSuccess{
|
||||||
|
.price = CreditsAmountFromTL(data.vprice()),
|
||||||
|
};
|
||||||
|
}, [&](const MTPDmessageActionSuggestedPostRefund &data) {
|
||||||
|
result.content = ActionSuggestedPostRefund{
|
||||||
|
.payerInitiated = data.is_payer_initiated(),
|
||||||
|
};
|
||||||
}, [&](const MTPDmessageActionConferenceCall &data) {
|
}, [&](const MTPDmessageActionConferenceCall &data) {
|
||||||
auto content = ActionPhoneCall();
|
auto content = ActionPhoneCall();
|
||||||
using State = ActionPhoneCall::State;
|
using State = ActionPhoneCall::State;
|
||||||
|
@ -707,6 +707,14 @@ struct ActionSuggestedPostApproval {
|
|||||||
bool balanceTooLow = false;
|
bool balanceTooLow = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct ActionSuggestedPostSuccess {
|
||||||
|
CreditsAmount price;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ActionSuggestedPostRefund {
|
||||||
|
bool payerInitiated = false;
|
||||||
|
};
|
||||||
|
|
||||||
struct ServiceAction {
|
struct ServiceAction {
|
||||||
std::variant<
|
std::variant<
|
||||||
v::null_t,
|
v::null_t,
|
||||||
@ -757,7 +765,9 @@ struct ServiceAction {
|
|||||||
ActionPaidMessagesPrice,
|
ActionPaidMessagesPrice,
|
||||||
ActionTodoCompletions,
|
ActionTodoCompletions,
|
||||||
ActionTodoAppendTasks,
|
ActionTodoAppendTasks,
|
||||||
ActionSuggestedPostApproval> content;
|
ActionSuggestedPostApproval,
|
||||||
|
ActionSuggestedPostSuccess,
|
||||||
|
ActionSuggestedPostRefund> content;
|
||||||
};
|
};
|
||||||
|
|
||||||
ServiceAction ParseServiceAction(
|
ServiceAction ParseServiceAction(
|
||||||
|
@ -1466,6 +1466,15 @@ auto HtmlWriter::Wrap::pushMessage(
|
|||||||
: (", with comment: ""
|
: (", with comment: ""
|
||||||
+ SerializeString(data.rejectComment)
|
+ SerializeString(data.rejectComment)
|
||||||
+ """));
|
+ """));
|
||||||
|
}, [&](const ActionSuggestedPostSuccess &data) {
|
||||||
|
return "The paid post was shown for 24 hours and "
|
||||||
|
+ QString::number(data.price.value()).toUtf8()
|
||||||
|
+ (data.price.ton() ? " TON" : " stars")
|
||||||
|
+ " were transferred to the channel.";
|
||||||
|
}, [&](const ActionSuggestedPostRefund &data) {
|
||||||
|
return QByteArray() + (data.payerInitiated
|
||||||
|
? "The user refunded the payment, post was deleted."
|
||||||
|
: "The admin deleted the post early, the payment was refunded.");
|
||||||
}, [](v::null_t) { return QByteArray(); });
|
}, [](v::null_t) { return QByteArray(); });
|
||||||
|
|
||||||
if (!serviceText.isEmpty()) {
|
if (!serviceText.isEmpty()) {
|
||||||
|
@ -725,6 +725,16 @@ QByteArray SerializeMessage(
|
|||||||
push("price_currency", data.price.ton() ? "TON" : "Stars");
|
push("price_currency", data.price.ton() ? "TON" : "Stars");
|
||||||
push("scheduled_date", data.scheduleDate);
|
push("scheduled_date", data.scheduleDate);
|
||||||
}
|
}
|
||||||
|
}, [&](const ActionSuggestedPostSuccess &data) {
|
||||||
|
pushActor();
|
||||||
|
pushAction("suggested_post_success");
|
||||||
|
push("price_amount_whole", NumberToString(data.price.whole()));
|
||||||
|
push("price_amount_nano", NumberToString(data.price.nano()));
|
||||||
|
push("price_currency", data.price.ton() ? "TON" : "Stars");
|
||||||
|
}, [&](const ActionSuggestedPostRefund &data) {
|
||||||
|
pushActor();
|
||||||
|
pushAction("suggested_post_refund");
|
||||||
|
push("user_initiated", data.payerInitiated);
|
||||||
}, [](v::null_t) {});
|
}, [](v::null_t) {});
|
||||||
|
|
||||||
if (v::is_null(message.action.content)) {
|
if (v::is_null(message.action.content)) {
|
||||||
|
@ -830,6 +830,8 @@ HistoryServiceDependentData *HistoryItem::GetServiceDependentData() {
|
|||||||
return append;
|
return append;
|
||||||
} else if (const auto decision = Get<HistoryServiceSuggestDecision>()) {
|
} else if (const auto decision = Get<HistoryServiceSuggestDecision>()) {
|
||||||
return decision;
|
return decision;
|
||||||
|
} else if (const auto finish = Get<HistoryServiceSuggestFinish>()) {
|
||||||
|
return finish;
|
||||||
}
|
}
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
@ -1645,8 +1647,12 @@ bool HistoryItem::isEditingMedia() const {
|
|||||||
return Has<HistoryMessageSavedMediaData>();
|
return Has<HistoryMessageSavedMediaData>();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool HistoryItem::isPaidSuggestedPost() const {
|
PaidPostType HistoryItem::paidType() const {
|
||||||
return _flags & MessageFlag::PaidSuggestedPost;
|
return (_flags & MessageFlag::StarsPaidSuggested)
|
||||||
|
? PaidPostType::Stars
|
||||||
|
: (_flags & MessageFlag::TonPaidSuggested)
|
||||||
|
? PaidPostType::Ton
|
||||||
|
: PaidPostType::None;
|
||||||
}
|
}
|
||||||
|
|
||||||
void HistoryItem::clearSavedMedia() {
|
void HistoryItem::clearSavedMedia() {
|
||||||
@ -2474,7 +2480,7 @@ bool HistoryItem::allowsSendNow() const {
|
|||||||
&& !isSending()
|
&& !isSending()
|
||||||
&& !hasFailed()
|
&& !hasFailed()
|
||||||
&& !isEditingMedia()
|
&& !isEditingMedia()
|
||||||
&& !isPaidSuggestedPost();
|
&& (paidType() == PaidPostType::None);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool HistoryItem::allowsReschedule() const {
|
bool HistoryItem::allowsReschedule() const {
|
||||||
@ -2502,7 +2508,7 @@ bool HistoryItem::allowsEdit(TimeId now) const {
|
|||||||
&& (!_media || _media->allowsEdit())
|
&& (!_media || _media->allowsEdit())
|
||||||
&& !isLegacyMessage()
|
&& !isLegacyMessage()
|
||||||
&& !isEditingMedia()
|
&& !isEditingMedia()
|
||||||
&& !isPaidSuggestedPost();
|
&& (paidType() == PaidPostType::None);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool HistoryItem::allowsEditMedia() const {
|
bool HistoryItem::allowsEditMedia() const {
|
||||||
@ -4673,6 +4679,18 @@ void HistoryItem::createServiceFromMtp(const MTPDmessageService &message) {
|
|||||||
decision->rejected = data.is_rejected();
|
decision->rejected = data.is_rejected();
|
||||||
decision->rejectComment = qs(data.vreject_comment().value_or_empty());
|
decision->rejectComment = qs(data.vreject_comment().value_or_empty());
|
||||||
decision->date = data.vschedule_date().value_or_empty();
|
decision->date = data.vschedule_date().value_or_empty();
|
||||||
|
} else if (type == mtpc_messageActionSuggestedPostSuccess) {
|
||||||
|
const auto &data = action.c_messageActionSuggestedPostSuccess();
|
||||||
|
UpdateComponents(HistoryServiceSuggestFinish::Bit());
|
||||||
|
const auto finish = Get<HistoryServiceSuggestFinish>();
|
||||||
|
finish->successPrice = CreditsAmountFromTL(data.vprice());
|
||||||
|
} else if (type == mtpc_messageActionSuggestedPostRefund) {
|
||||||
|
const auto &data = action.c_messageActionSuggestedPostRefund();
|
||||||
|
UpdateComponents(HistoryServiceSuggestFinish::Bit());
|
||||||
|
const auto finish = Get<HistoryServiceSuggestFinish>();
|
||||||
|
finish->refundType = data.is_payer_initiated()
|
||||||
|
? SuggestRefundType::User
|
||||||
|
: SuggestRefundType::Admin;
|
||||||
}
|
}
|
||||||
if (const auto replyTo = message.vreply_to()) {
|
if (const auto replyTo = message.vreply_to()) {
|
||||||
replyTo->match([&](const MTPDmessageReplyHeader &data) {
|
replyTo->match([&](const MTPDmessageReplyHeader &data) {
|
||||||
@ -6058,7 +6076,15 @@ void HistoryItem::setServiceMessageByAction(const MTPmessageAction &action) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
auto prepareSuggestedPostApproval = [&](const MTPDmessageActionSuggestedPostApproval &data) {
|
auto prepareSuggestedPostApproval = [&](const MTPDmessageActionSuggestedPostApproval &data) {
|
||||||
return PreparedServiceText{ { u"hello"_q } };
|
return PreparedServiceText{ { tr::lng_suggest_action_agreement(tr::now) } };
|
||||||
|
};
|
||||||
|
|
||||||
|
auto prepareSuggestedPostSuccess = [&](const MTPDmessageActionSuggestedPostSuccess &data) {
|
||||||
|
return PreparedServiceText{ { u"hello"_q } }; AssertIsDebug();
|
||||||
|
};
|
||||||
|
|
||||||
|
auto prepareSuggestedPostRefund = [&](const MTPDmessageActionSuggestedPostRefund &data) {
|
||||||
|
return PreparedServiceText{ { u"hello"_q } }; AssertIsDebug();
|
||||||
};
|
};
|
||||||
|
|
||||||
auto prepareConferenceCall = [&](const MTPDmessageActionConferenceCall &) -> PreparedServiceText {
|
auto prepareConferenceCall = [&](const MTPDmessageActionConferenceCall &) -> PreparedServiceText {
|
||||||
@ -6119,6 +6145,8 @@ void HistoryItem::setServiceMessageByAction(const MTPmessageAction &action) {
|
|||||||
prepareTodoCompletions,
|
prepareTodoCompletions,
|
||||||
prepareTodoAppendTasks,
|
prepareTodoAppendTasks,
|
||||||
prepareSuggestedPostApproval,
|
prepareSuggestedPostApproval,
|
||||||
|
prepareSuggestedPostSuccess,
|
||||||
|
prepareSuggestedPostRefund,
|
||||||
PrepareEmptyText<MTPDmessageActionRequestedPeerSentMe>,
|
PrepareEmptyText<MTPDmessageActionRequestedPeerSentMe>,
|
||||||
PrepareErrorText<MTPDmessageActionEmpty>));
|
PrepareErrorText<MTPDmessageActionEmpty>));
|
||||||
|
|
||||||
|
@ -95,6 +95,12 @@ enum class HistoryReactionSource : char {
|
|||||||
Existing,
|
Existing,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum class PaidPostType : uchar {
|
||||||
|
None,
|
||||||
|
Stars,
|
||||||
|
Ton,
|
||||||
|
};
|
||||||
|
|
||||||
class HistoryItem final : public RuntimeComposer<HistoryItem> {
|
class HistoryItem final : public RuntimeComposer<HistoryItem> {
|
||||||
public:
|
public:
|
||||||
[[nodiscard]] static std::unique_ptr<Data::Media> CreateMedia(
|
[[nodiscard]] static std::unique_ptr<Data::Media> CreateMedia(
|
||||||
@ -314,7 +320,6 @@ public:
|
|||||||
[[nodiscard]] bool hasRealFromId() const;
|
[[nodiscard]] bool hasRealFromId() const;
|
||||||
[[nodiscard]] bool isPostHidingAuthor() const;
|
[[nodiscard]] bool isPostHidingAuthor() const;
|
||||||
[[nodiscard]] bool isPostShowingAuthor() const;
|
[[nodiscard]] bool isPostShowingAuthor() const;
|
||||||
[[nodiscard]] bool isPaidSuggestedPost() const;
|
|
||||||
[[nodiscard]] bool isRegular() const;
|
[[nodiscard]] bool isRegular() const;
|
||||||
[[nodiscard]] bool isUploading() const;
|
[[nodiscard]] bool isUploading() const;
|
||||||
void sendFailed();
|
void sendFailed();
|
||||||
@ -325,6 +330,7 @@ public:
|
|||||||
[[nodiscard]] bool hasUnpaidContent() const;
|
[[nodiscard]] bool hasUnpaidContent() const;
|
||||||
[[nodiscard]] bool inHighlightProcess() const;
|
[[nodiscard]] bool inHighlightProcess() const;
|
||||||
void highlightProcessDone();
|
void highlightProcessDone();
|
||||||
|
[[nodiscard]] PaidPostType paidType() const;
|
||||||
|
|
||||||
void setCommentsInboxReadTill(MsgId readTillId);
|
void setCommentsInboxReadTill(MsgId readTillId);
|
||||||
void setCommentsMaxId(MsgId maxId);
|
void setCommentsMaxId(MsgId maxId);
|
||||||
|
@ -708,6 +708,19 @@ struct HistoryServiceSuggestDecision
|
|||||||
bool balanceTooLow = false;
|
bool balanceTooLow = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum class SuggestRefundType {
|
||||||
|
None,
|
||||||
|
User,
|
||||||
|
Admin,
|
||||||
|
};
|
||||||
|
|
||||||
|
struct HistoryServiceSuggestFinish
|
||||||
|
: RuntimeComponent<HistoryServiceSuggestFinish, HistoryItem>
|
||||||
|
, HistoryServiceDependentData {
|
||||||
|
CreditsAmount successPrice;
|
||||||
|
SuggestRefundType refundType = SuggestRefundType::None;
|
||||||
|
};
|
||||||
|
|
||||||
struct HistoryServiceGameScore
|
struct HistoryServiceGameScore
|
||||||
: RuntimeComponent<HistoryServiceGameScore, HistoryItem>
|
: RuntimeComponent<HistoryServiceGameScore, HistoryItem>
|
||||||
, HistoryServiceDependentData {
|
, HistoryServiceDependentData {
|
||||||
|
@ -763,8 +763,10 @@ MessageFlags FlagsFromMTP(
|
|||||||
| ((flags & MTP::f_video_processing_pending)
|
| ((flags & MTP::f_video_processing_pending)
|
||||||
? Flag::EstimatedDate
|
? Flag::EstimatedDate
|
||||||
: Flag())
|
: Flag())
|
||||||
| ((flags & MTP::f_paid_suggested_post)
|
| ((flags & MTP::f_paid_suggested_post_ton)
|
||||||
? Flag::PaidSuggestedPost
|
? Flag::TonPaidSuggested
|
||||||
|
: (flags & MTP::f_paid_suggested_post_stars)
|
||||||
|
? Flag::StarsPaidSuggested
|
||||||
: Flag());
|
: Flag());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -117,7 +117,7 @@ chatPhotoEmpty#37c1011c = ChatPhoto;
|
|||||||
chatPhoto#1c6e1c11 flags:# has_video:flags.0?true photo_id:long stripped_thumb:flags.1?bytes dc_id:int = ChatPhoto;
|
chatPhoto#1c6e1c11 flags:# has_video:flags.0?true photo_id:long stripped_thumb:flags.1?bytes dc_id:int = ChatPhoto;
|
||||||
|
|
||||||
messageEmpty#90a6ca84 flags:# id:int peer_id:flags.0?Peer = Message;
|
messageEmpty#90a6ca84 flags:# id:int peer_id:flags.0?Peer = Message;
|
||||||
message#9815cec8 flags:# out:flags.1?true mentioned:flags.4?true media_unread:flags.5?true silent:flags.13?true post:flags.14?true from_scheduled:flags.18?true legacy:flags.19?true edit_hide:flags.21?true pinned:flags.24?true noforwards:flags.26?true invert_media:flags.27?true flags2:# offline:flags2.1?true video_processing_pending:flags2.4?true paid_suggested_post:flags2.8?true id:int from_id:flags.8?Peer from_boosts_applied:flags.29?int peer_id:Peer saved_peer_id:flags.28?Peer fwd_from:flags.2?MessageFwdHeader via_bot_id:flags.11?long via_business_bot_id:flags2.0?long reply_to:flags.3?MessageReplyHeader date:int message:string media:flags.9?MessageMedia reply_markup:flags.6?ReplyMarkup entities:flags.7?Vector<MessageEntity> views:flags.10?int forwards:flags.10?int replies:flags.23?MessageReplies edit_date:flags.15?int post_author:flags.16?string grouped_id:flags.17?long reactions:flags.20?MessageReactions restriction_reason:flags.22?Vector<RestrictionReason> ttl_period:flags.25?int quick_reply_shortcut_id:flags.30?int effect:flags2.2?long factcheck:flags2.3?FactCheck report_delivery_until_date:flags2.5?int paid_message_stars:flags2.6?long suggested_post:flags2.7?SuggestedPost = Message;
|
message#9815cec8 flags:# out:flags.1?true mentioned:flags.4?true media_unread:flags.5?true silent:flags.13?true post:flags.14?true from_scheduled:flags.18?true legacy:flags.19?true edit_hide:flags.21?true pinned:flags.24?true noforwards:flags.26?true invert_media:flags.27?true flags2:# offline:flags2.1?true video_processing_pending:flags2.4?true paid_suggested_post_stars:flags2.8?true paid_suggested_post_ton:flags2.9?true id:int from_id:flags.8?Peer from_boosts_applied:flags.29?int peer_id:Peer saved_peer_id:flags.28?Peer fwd_from:flags.2?MessageFwdHeader via_bot_id:flags.11?long via_business_bot_id:flags2.0?long reply_to:flags.3?MessageReplyHeader date:int message:string media:flags.9?MessageMedia reply_markup:flags.6?ReplyMarkup entities:flags.7?Vector<MessageEntity> views:flags.10?int forwards:flags.10?int replies:flags.23?MessageReplies edit_date:flags.15?int post_author:flags.16?string grouped_id:flags.17?long reactions:flags.20?MessageReactions restriction_reason:flags.22?Vector<RestrictionReason> ttl_period:flags.25?int quick_reply_shortcut_id:flags.30?int effect:flags2.2?long factcheck:flags2.3?FactCheck report_delivery_until_date:flags2.5?int paid_message_stars:flags2.6?long suggested_post:flags2.7?SuggestedPost = Message;
|
||||||
messageService#7a800e0a flags:# out:flags.1?true mentioned:flags.4?true media_unread:flags.5?true reactions_are_possible:flags.9?true silent:flags.13?true post:flags.14?true legacy:flags.19?true id:int from_id:flags.8?Peer peer_id:Peer saved_peer_id:flags.28?Peer reply_to:flags.3?MessageReplyHeader date:int action:MessageAction reactions:flags.20?MessageReactions ttl_period:flags.25?int = Message;
|
messageService#7a800e0a flags:# out:flags.1?true mentioned:flags.4?true media_unread:flags.5?true reactions_are_possible:flags.9?true silent:flags.13?true post:flags.14?true legacy:flags.19?true id:int from_id:flags.8?Peer peer_id:Peer saved_peer_id:flags.28?Peer reply_to:flags.3?MessageReplyHeader date:int action:MessageAction reactions:flags.20?MessageReactions ttl_period:flags.25?int = Message;
|
||||||
|
|
||||||
messageMediaEmpty#3ded6320 = MessageMedia;
|
messageMediaEmpty#3ded6320 = MessageMedia;
|
||||||
@ -193,6 +193,8 @@ messageActionConferenceCall#2ffe2f7a flags:# missed:flags.0?true active:flags.1?
|
|||||||
messageActionTodoCompletions#cc7c5c89 completed:Vector<int> incompleted:Vector<int> = MessageAction;
|
messageActionTodoCompletions#cc7c5c89 completed:Vector<int> incompleted:Vector<int> = MessageAction;
|
||||||
messageActionTodoAppendTasks#c7edbc83 list:Vector<TodoItem> = MessageAction;
|
messageActionTodoAppendTasks#c7edbc83 list:Vector<TodoItem> = MessageAction;
|
||||||
messageActionSuggestedPostApproval#ee7a1596 flags:# rejected:flags.0?true balance_too_low:flags.1?true reject_comment:flags.2?string schedule_date:flags.3?int price:flags.4?StarsAmount = MessageAction;
|
messageActionSuggestedPostApproval#ee7a1596 flags:# rejected:flags.0?true balance_too_low:flags.1?true reject_comment:flags.2?string schedule_date:flags.3?int price:flags.4?StarsAmount = MessageAction;
|
||||||
|
messageActionSuggestedPostSuccess#95ddcf69 price:StarsAmount = MessageAction;
|
||||||
|
messageActionSuggestedPostRefund#69f916f8 flags:# payer_initiated:flags.0?true = MessageAction;
|
||||||
messageActionGiftTon#a8a3c699 flags:# currency:string amount:long crypto_currency:string crypto_amount:long transaction_id:flags.0?string = MessageAction;
|
messageActionGiftTon#a8a3c699 flags:# currency:string amount:long crypto_currency:string crypto_amount:long transaction_id:flags.0?string = MessageAction;
|
||||||
|
|
||||||
dialog#d58a08c6 flags:# pinned:flags.2?true unread_mark:flags.3?true view_forum_as_messages:flags.6?true peer:Peer top_message:int read_inbox_max_id:int read_outbox_max_id:int unread_count:int unread_mentions_count:int unread_reactions_count:int notify_settings:PeerNotifySettings pts:flags.0?int draft:flags.1?DraftMessage folder_id:flags.4?int ttl_period:flags.5?int = Dialog;
|
dialog#d58a08c6 flags:# pinned:flags.2?true unread_mark:flags.3?true view_forum_as_messages:flags.6?true peer:Peer top_message:int read_inbox_max_id:int read_outbox_max_id:int unread_count:int unread_mentions_count:int unread_reactions_count:int notify_settings:PeerNotifySettings pts:flags.0?int draft:flags.1?DraftMessage folder_id:flags.4?int ttl_period:flags.5?int = Dialog;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user