diff --git a/.github/release.yml b/.github/release.yml index cdaee87..bf2f148 100644 --- a/.github/release.yml +++ b/.github/release.yml @@ -14,6 +14,9 @@ stages: jobs: - job: publish steps: + - checkout: self + persistCredentials: true + - task: UseDotNet@2 displayName: 'Use .NET Core sdk' inputs: @@ -37,6 +40,12 @@ stages: nuGetFeedType: 'external' publishFeedCredentials: 'nuget.org' + - script: | + git tag $(Build.BuildNumber) + git push --tags + workingDirectory: $(Build.SourcesDirectory) + displayName: Git Tag + - stage: notify jobs: - job: notify diff --git a/src/TL.Helpers.cs b/src/TL.Helpers.cs index 0d40938..05a2338 100644 --- a/src/TL.Helpers.cs +++ b/src/TL.Helpers.cs @@ -279,6 +279,7 @@ namespace TL public override long ID => id; protected override InputDocument ToInputDocument() => new() { id = id, access_hash = access_hash, file_reference = file_reference }; public InputDocumentFileLocation ToFileLocation(PhotoSizeBase thumbSize = null) => new() { id = id, access_hash = access_hash, file_reference = file_reference, thumb_size = thumbSize?.Type }; + public PhotoSizeBase LargestThumbSize => thumbs.Aggregate((agg, next) => (long)next.Width * next.Height > (long)agg.Width * agg.Height ? next : agg); } partial class SendMessageAction diff --git a/src/TL.Schema.cs b/src/TL.Schema.cs index 4c97de8..ab27783 100644 --- a/src/TL.Schema.cs +++ b/src/TL.Schema.cs @@ -1062,9 +1062,10 @@ namespace TL public abstract string ThemeEmoticon { get; } public abstract int RequestsPending { get; } public abstract long[] RecentRequesters { get; } + public abstract string[] AvailableReactions { get; } } /// Detailed chat info See - [TLDef(0x46A6FFB4)] + [TLDef(0xD18EE226)] public class ChatFull : ChatFullBase { /// Flags, see TL conditional fields @@ -1097,6 +1098,7 @@ namespace TL [IfFlag(16)] public string theme_emoticon; [IfFlag(17)] public int requests_pending; [IfFlag(17)] public long[] recent_requesters; + [IfFlag(18)] public string[] available_reactions; [Flags] public enum Flags { @@ -1124,6 +1126,8 @@ namespace TL has_theme_emoticon = 0x10000, /// Field has a value has_requests_pending = 0x20000, + /// Field has a value + has_available_reactions = 0x40000, } /// ID of the chat @@ -1152,9 +1156,10 @@ namespace TL public override string ThemeEmoticon => theme_emoticon; public override int RequestsPending => requests_pending; public override long[] RecentRequesters => recent_requesters; + public override string[] AvailableReactions => available_reactions; } /// Full info about a channel/supergroup See - [TLDef(0x56662E2E)] + [TLDef(0xE13C3D20)] public class ChannelFull : ChatFullBase { /// Flags, see TL conditional fields @@ -1224,6 +1229,7 @@ namespace TL [IfFlag(28)] public int requests_pending; [IfFlag(28)] public long[] recent_requesters; [IfFlag(29)] public Peer default_send_as; + [IfFlag(30)] public string[] available_reactions; [Flags] public enum Flags { @@ -1287,6 +1293,8 @@ namespace TL has_requests_pending = 0x10000000, /// Field has a value has_default_send_as = 0x20000000, + /// Field has a value + has_available_reactions = 0x40000000, } /// ID of the channel @@ -1315,6 +1323,7 @@ namespace TL public override string ThemeEmoticon => theme_emoticon; public override int RequestsPending => requests_pending; public override long[] RecentRequesters => recent_requesters; + public override string[] AvailableReactions => available_reactions; } /// Details of a group member. Derived classes: , , See @@ -1460,7 +1469,7 @@ namespace TL public override int TtlPeriod => default; } /// A message See - [TLDef(0x85D6CBE2)] + [TLDef(0x38116EE0)] public class Message : MessageBase { /// Flags, see TL conditional fields @@ -1499,6 +1508,7 @@ namespace TL [IfFlag(16)] public string post_author; /// Multiple media messages sent using messages.sendMultiMedia with the same grouped ID indicate an album or media group [IfFlag(17)] public long grouped_id; + [IfFlag(20)] public MessageReactions reactions; /// Contains the reason why access to this message must be restricted. [IfFlag(22)] public RestrictionReason[] restriction_reason; /// Time To Live of the message, once message.date+message.ttl_period === time(), the message will be deleted on the server, and must be deleted locally as well. @@ -1542,6 +1552,8 @@ namespace TL from_scheduled = 0x40000, /// This is a legacy message: it has to be refetched with the new layer legacy = 0x80000, + /// Field has a value + has_reactions = 0x100000, /// Whether the message should be shown as not modified to the user, even if an edit date is present edit_hide = 0x200000, /// Field has a value @@ -4053,6 +4065,14 @@ namespace TL public ExportedChatInvite invite; public int qts; } + /// See + [TLDef(0x154798C3)] + public class UpdateMessageReactions : Update + { + public Peer peer; + public int msg_id; + public MessageReactions reactions; + } /// Updates state. See [TLDef(0xA56C2A3E)] @@ -6218,6 +6238,9 @@ namespace TL /// Indicates a credit card number See [TLDef(0x761E6AF4)] public class MessageEntityBankCard : MessageEntity { } + /// See + [TLDef(0x32CA960F)] + public class MessageEntitySpoiler : MessageEntity { } /// Represents a channel Derived classes: , See /// a null value means inputChannelEmpty @@ -9323,6 +9346,13 @@ namespace TL { public MessageBase message; } + /// See + [TLDef(0x9CF7F76A)] + public class ChannelAdminLogEventActionChangeAvailableReactions : ChannelAdminLogEventAction + { + public string[] prev_value; + public string[] new_value; + } /// Admin log event See [TLDef(0x1FAD68CD)] @@ -12260,7 +12290,7 @@ namespace TL public class Account_ResetPasswordOk : Account_ResetPasswordResult { } /// A sponsored message. See - [TLDef(0xD151E19A)] + [TLDef(0x3A836DF8)] public class SponsoredMessage : IObject { /// Flags, see TL conditional fields @@ -12268,7 +12298,9 @@ namespace TL /// Message ID public byte[] random_id; /// ID of the sender of the message - public Peer from_id; + [IfFlag(3)] public Peer from_id; + [IfFlag(4)] public ChatInviteBase chat_invite; + [IfFlag(4)] public string chat_invite_hash; [IfFlag(2)] public int channel_post; /// Parameter for the bot start message if the sponsored chat is a chat with a bot. [IfFlag(0)] public string start_param; @@ -12285,6 +12317,10 @@ namespace TL has_entities = 0x2, /// Field has a value has_channel_post = 0x4, + /// Field has a value + has_from_id = 0x8, + /// Field has a value + has_chat_invite = 0x10, } } @@ -12402,6 +12438,90 @@ namespace TL } } + /// See + [TLDef(0x6FB250D1)] + public class ReactionCount : IObject + { + public Flags flags; + public string reaction; + public int count; + + [Flags] public enum Flags + { + chosen = 0x1, + } + } + + /// See + [TLDef(0x087B6E36)] + public class MessageReactions : IObject + { + public Flags flags; + public ReactionCount[] results; + [IfFlag(1)] public MessageUserReaction[] recent_reactons; + + [Flags] public enum Flags + { + min = 0x1, + /// Field has a value + has_recent_reactons = 0x2, + can_see_list = 0x4, + } + } + + /// See + [TLDef(0x932844FA)] + public class MessageUserReaction : IObject + { + public long user_id; + public string reaction; + } + + /// See + [TLDef(0xA366923C)] + public class Messages_MessageReactionsList : IObject + { + public Flags flags; + public int count; + public MessageUserReaction[] reactions; + public Dictionary users; + [IfFlag(0)] public string next_offset; + + [Flags] public enum Flags + { + /// Field has a value + has_next_offset = 0x1, + } + } + + /// See + [TLDef(0x021D7C4B)] + public class AvailableReaction : IObject + { + public Flags flags; + public string reaction; + public string title; + public DocumentBase static_icon; + public DocumentBase appear_animation; + public DocumentBase select_animation; + public DocumentBase activate_animation; + public DocumentBase effect_animation; + + [Flags] public enum Flags + { + inactive = 0x1, + } + } + + /// See + /// a null value means messages.availableReactionsNotModified + [TLDef(0x768E3AAD)] + public class Messages_AvailableReactions : IObject + { + public int hash; + public AvailableReaction[] reactions; + } + // ---functions--- public static class SchemaExtensions @@ -13599,10 +13719,10 @@ namespace TL /// Reply markup for sending bot buttons /// Message entities for sending styled text /// Scheduled message date for scheduled messages - public static Task Messages_SendMessage(this Client client, InputPeer peer, string message, long random_id, bool no_webpage = false, bool silent = false, bool background = false, bool clear_draft = false, int? reply_to_msg_id = null, ReplyMarkup reply_markup = null, MessageEntity[] entities = null, DateTime? schedule_date = null, InputPeer send_as = null) + public static Task Messages_SendMessage(this Client client, InputPeer peer, string message, long random_id, bool no_webpage = false, bool silent = false, bool background = false, bool clear_draft = false, bool noforwards = false, int? reply_to_msg_id = null, ReplyMarkup reply_markup = null, MessageEntity[] entities = null, DateTime? schedule_date = null, InputPeer send_as = null) => client.Invoke(new Messages_SendMessage { - flags = (Messages_SendMessage.Flags)((no_webpage ? 0x2 : 0) | (silent ? 0x20 : 0) | (background ? 0x40 : 0) | (clear_draft ? 0x80 : 0) | (reply_to_msg_id != null ? 0x1 : 0) | (reply_markup != null ? 0x4 : 0) | (entities != null ? 0x8 : 0) | (schedule_date != null ? 0x400 : 0) | (send_as != null ? 0x2000 : 0)), + flags = (Messages_SendMessage.Flags)((no_webpage ? 0x2 : 0) | (silent ? 0x20 : 0) | (background ? 0x40 : 0) | (clear_draft ? 0x80 : 0) | (noforwards ? 0x4000 : 0) | (reply_to_msg_id != null ? 0x1 : 0) | (reply_markup != null ? 0x4 : 0) | (entities != null ? 0x8 : 0) | (schedule_date != null ? 0x400 : 0) | (send_as != null ? 0x2000 : 0)), peer = peer, reply_to_msg_id = reply_to_msg_id.GetValueOrDefault(), message = message, @@ -13624,10 +13744,10 @@ namespace TL /// Reply markup for bot keyboards /// Message entities for styled text /// Scheduled message date for scheduled messages - public static Task Messages_SendMedia(this Client client, InputPeer peer, InputMedia media, string message, long random_id, bool silent = false, bool background = false, bool clear_draft = false, int? reply_to_msg_id = null, ReplyMarkup reply_markup = null, MessageEntity[] entities = null, DateTime? schedule_date = null, InputPeer send_as = null) + public static Task Messages_SendMedia(this Client client, InputPeer peer, InputMedia media, string message, long random_id, bool silent = false, bool background = false, bool clear_draft = false, bool noforwards = false, int? reply_to_msg_id = null, ReplyMarkup reply_markup = null, MessageEntity[] entities = null, DateTime? schedule_date = null, InputPeer send_as = null) => client.Invoke(new Messages_SendMedia { - flags = (Messages_SendMedia.Flags)((silent ? 0x20 : 0) | (background ? 0x40 : 0) | (clear_draft ? 0x80 : 0) | (reply_to_msg_id != null ? 0x1 : 0) | (reply_markup != null ? 0x4 : 0) | (entities != null ? 0x8 : 0) | (schedule_date != null ? 0x400 : 0) | (send_as != null ? 0x2000 : 0)), + flags = (Messages_SendMedia.Flags)((silent ? 0x20 : 0) | (background ? 0x40 : 0) | (clear_draft ? 0x80 : 0) | (noforwards ? 0x4000 : 0) | (reply_to_msg_id != null ? 0x1 : 0) | (reply_markup != null ? 0x4 : 0) | (entities != null ? 0x8 : 0) | (schedule_date != null ? 0x400 : 0) | (send_as != null ? 0x2000 : 0)), peer = peer, reply_to_msg_id = reply_to_msg_id.GetValueOrDefault(), media = media, @@ -13649,10 +13769,10 @@ namespace TL /// Random ID to prevent resending of messages /// Destination peer /// Scheduled message date for scheduled messages - public static Task Messages_ForwardMessages(this Client client, InputPeer from_peer, int[] id, long[] random_id, InputPeer to_peer, bool silent = false, bool background = false, bool with_my_score = false, bool drop_author = false, bool drop_media_captions = false, DateTime? schedule_date = null, InputPeer send_as = null) + public static Task Messages_ForwardMessages(this Client client, InputPeer from_peer, int[] id, long[] random_id, InputPeer to_peer, bool silent = false, bool background = false, bool with_my_score = false, bool drop_author = false, bool drop_media_captions = false, bool noforwards = false, DateTime? schedule_date = null, InputPeer send_as = null) => client.Invoke(new Messages_ForwardMessages { - flags = (Messages_ForwardMessages.Flags)((silent ? 0x20 : 0) | (background ? 0x40 : 0) | (with_my_score ? 0x100 : 0) | (drop_author ? 0x800 : 0) | (drop_media_captions ? 0x1000 : 0) | (schedule_date != null ? 0x400 : 0) | (send_as != null ? 0x2000 : 0)), + flags = (Messages_ForwardMessages.Flags)((silent ? 0x20 : 0) | (background ? 0x40 : 0) | (with_my_score ? 0x100 : 0) | (drop_author ? 0x800 : 0) | (drop_media_captions ? 0x1000 : 0) | (noforwards ? 0x4000 : 0) | (schedule_date != null ? 0x400 : 0) | (send_as != null ? 0x2000 : 0)), from_peer = from_peer, id = id, random_id = random_id, @@ -14490,10 +14610,10 @@ namespace TL /// The message to reply to /// The medias to send /// Scheduled message date for scheduled messages - public static Task Messages_SendMultiMedia(this Client client, InputPeer peer, InputSingleMedia[] multi_media, bool silent = false, bool background = false, bool clear_draft = false, int? reply_to_msg_id = null, DateTime? schedule_date = null, InputPeer send_as = null) + public static Task Messages_SendMultiMedia(this Client client, InputPeer peer, InputSingleMedia[] multi_media, bool silent = false, bool background = false, bool clear_draft = false, bool noforwards = false, int? reply_to_msg_id = null, DateTime? schedule_date = null, InputPeer send_as = null) => client.Invoke(new Messages_SendMultiMedia { - flags = (Messages_SendMultiMedia.Flags)((silent ? 0x20 : 0) | (background ? 0x40 : 0) | (clear_draft ? 0x80 : 0) | (reply_to_msg_id != null ? 0x1 : 0) | (schedule_date != null ? 0x400 : 0) | (send_as != null ? 0x2000 : 0)), + flags = (Messages_SendMultiMedia.Flags)((silent ? 0x20 : 0) | (background ? 0x40 : 0) | (clear_draft ? 0x80 : 0) | (noforwards ? 0x4000 : 0) | (reply_to_msg_id != null ? 0x1 : 0) | (schedule_date != null ? 0x400 : 0) | (send_as != null ? 0x2000 : 0)), peer = peer, reply_to_msg_id = reply_to_msg_id.GetValueOrDefault(), multi_media = multi_media, @@ -15052,6 +15172,63 @@ namespace TL peer = peer, send_as = send_as, }); + /// Send reaction to message See [bots: ✓] Possible codes: 400 (details) + /// Peer + /// Message ID to react to + /// Reaction (a UTF8 emoji) + public static Task Messages_SendReaction(this Client client, InputPeer peer, int msg_id, string reaction = null) + => client.Invoke(new Messages_SendReaction + { + flags = (Messages_SendReaction.Flags)(reaction != null ? 0x1 : 0), + peer = peer, + msg_id = msg_id, + reaction = reaction, + }); + /// Get message reactions See [bots: ✓] + /// Peer + /// Message IDs + public static Task Messages_GetMessagesReactions(this Client client, InputPeer peer, int[] id) + => client.Invoke(new Messages_GetMessagesReactions + { + peer = peer, + id = id, + }); + /// Get full message reaction list See [bots: ✓] + /// Peer + /// Message ID + /// Get only reactions of this type (UTF8 emoji) + /// Offset (typically taken from the next_offset field of the returned ) + /// Maximum number of results to return, see pagination + public static Task Messages_GetMessageReactionsList(this Client client, InputPeer peer, int id, int limit, string reaction = null, string offset = null) + => client.Invoke(new Messages_GetMessageReactionsList + { + flags = (Messages_GetMessageReactionsList.Flags)((reaction != null ? 0x1 : 0) | (offset != null ? 0x2 : 0)), + peer = peer, + id = id, + reaction = reaction, + offset = offset, + limit = limit, + }); + /// See + public static Task Messages_SetChatAvailableReactions(this Client client, InputPeer peer, string[] available_reactions) + => client.Invoke(new Messages_SetChatAvailableReactions + { + peer = peer, + available_reactions = available_reactions, + }); + /// See + /// a null value means messages.availableReactionsNotModified + public static Task Messages_GetAvailableReactions(this Client client, int hash) + => client.Invoke(new Messages_GetAvailableReactions + { + hash = hash, + }); + /// See + public static Task Messages_SetDefaultReaction(this Client client, string reaction) + => client.Invoke(new Messages_SetDefaultReaction + { + reaction = reaction, + }); /// Returns a current state of updates. See [bots: ✓] public static Task Updates_GetState(this Client client) => client.Invoke(new Updates_GetState @@ -17414,6 +17591,7 @@ namespace TL.Methods has_schedule_date = 0x400, /// Field has a value has_send_as = 0x2000, + noforwards = 0x4000, } } @@ -17446,6 +17624,7 @@ namespace TL.Methods has_schedule_date = 0x400, /// Field has a value has_send_as = 0x2000, + noforwards = 0x4000, } } @@ -17471,6 +17650,7 @@ namespace TL.Methods drop_media_captions = 0x1000, /// Field has a value has_send_as = 0x2000, + noforwards = 0x4000, } } @@ -18286,6 +18466,7 @@ namespace TL.Methods has_schedule_date = 0x400, /// Field has a value has_send_as = 0x2000, + noforwards = 0x4000, } } @@ -18810,6 +18991,66 @@ namespace TL.Methods public InputPeer send_as; } + [TLDef(0x25690CE4)] + public class Messages_SendReaction : IMethod + { + public Flags flags; + public InputPeer peer; + public int msg_id; + [IfFlag(0)] public string reaction; + + [Flags] public enum Flags + { + /// Field has a value + has_reaction = 0x1, + } + } + + [TLDef(0x8BBA90E6)] + public class Messages_GetMessagesReactions : IMethod + { + public InputPeer peer; + public int[] id; + } + + [TLDef(0xE0EE6B77)] + public class Messages_GetMessageReactionsList : IMethod + { + public Flags flags; + public InputPeer peer; + public int id; + [IfFlag(0)] public string reaction; + [IfFlag(1)] public string offset; + public int limit; + + [Flags] public enum Flags + { + /// Field has a value + has_reaction = 0x1, + /// Field has a value + has_offset = 0x2, + } + } + + [TLDef(0x14050EA6)] + public class Messages_SetChatAvailableReactions : IMethod + { + public InputPeer peer; + public string[] available_reactions; + } + + [TLDef(0x18DEA0AC)] + public class Messages_GetAvailableReactions : IMethod + { + public int hash; + } + + [TLDef(0xD960C4D4)] + public class Messages_SetDefaultReaction : IMethod + { + public string reaction; + } + [TLDef(0xEDD4882A)] public class Updates_GetState : IMethod { } diff --git a/src/TL.Table.cs b/src/TL.Table.cs index 6856fa3..a624f11 100644 --- a/src/TL.Table.cs +++ b/src/TL.Table.cs @@ -6,7 +6,7 @@ namespace TL { public static class Layer { - public const int Version = 135; // fetched 27/11/2021 01:12:30 + public const int Version = 136; // fetched 30/12/2021 11:11:54 internal const uint VectorCtor = 0x1CB5C415; internal const uint NullCtor = 0x56730BCC; internal const uint RpcResultCtor = 0xF35C6D01; @@ -127,8 +127,8 @@ namespace TL [0x6592A1A7] = typeof(ChatForbidden), [0x8261AC61] = typeof(Channel), [0x17D493D5] = typeof(ChannelForbidden), - [0x46A6FFB4] = typeof(ChatFull), - [0x56662E2E] = typeof(ChannelFull), + [0xD18EE226] = typeof(ChatFull), + [0xE13C3D20] = typeof(ChannelFull), [0xC02D4007] = typeof(ChatParticipant), [0xE46BCEE4] = typeof(ChatParticipantCreator), [0xA0933F5B] = typeof(ChatParticipantAdmin), @@ -137,7 +137,7 @@ namespace TL [0x37C1011C] = null,//ChatPhotoEmpty [0x1C6E1C11] = typeof(ChatPhoto), [0x90A6CA84] = typeof(MessageEmpty), - [0x85D6CBE2] = typeof(Message), + [0x38116EE0] = typeof(Message), [0x2B085862] = typeof(MessageService), [0x3DED6320] = null,//MessageMediaEmpty [0x695150D7] = typeof(MessageMediaPhoto), @@ -339,6 +339,7 @@ namespace TL [0x4D712F2E] = typeof(UpdateBotCommands), [0x7063C3DB] = typeof(UpdatePendingJoinRequests), [0x11DFA986] = typeof(UpdateBotChatInviteRequester), + [0x154798C3] = typeof(UpdateMessageReactions), [0xA56C2A3E] = typeof(Updates_State), [0x5D75A138] = typeof(Updates_DifferenceEmpty), [0x00F49CA0] = typeof(Updates_Difference), @@ -502,6 +503,7 @@ namespace TL [0xBF0693D4] = typeof(MessageEntityStrike), [0x020DF5D0] = typeof(MessageEntityBlockquote), [0x761E6AF4] = typeof(MessageEntityBankCard), + [0x32CA960F] = typeof(MessageEntitySpoiler), [0xEE8C1E86] = null,//InputChannelEmpty [0xF35AEC28] = typeof(InputChannel), [0x5B934F9D] = typeof(InputChannelFromMessage), @@ -715,6 +717,7 @@ namespace TL [0xAFB6144A] = typeof(ChannelAdminLogEventActionParticipantJoinByRequest), [0xCB2AC766] = typeof(ChannelAdminLogEventActionToggleNoForwards), [0x278F2868] = typeof(ChannelAdminLogEventActionSendMessage), + [0x9CF7F76A] = typeof(ChannelAdminLogEventActionChangeAvailableReactions), [0x1FAD68CD] = typeof(ChannelAdminLogEvent), [0xED8AF74D] = typeof(Channels_AdminLogResults), [0xEA107AE4] = typeof(ChannelAdminLogEventsFilter), @@ -916,7 +919,7 @@ namespace TL [0xE3779861] = typeof(Account_ResetPasswordFailedWait), [0xE9EFFC7D] = typeof(Account_ResetPasswordRequestedWait), [0xE926D63E] = typeof(Account_ResetPasswordOk), - [0xD151E19A] = typeof(SponsoredMessage), + [0x3A836DF8] = typeof(SponsoredMessage), [0x65A4C7D5] = typeof(Messages_SponsoredMessages), [0xC9B0539F] = typeof(SearchResultsCalendarPeriod), [0x147EE23C] = typeof(Messages_SearchResultsCalendar), @@ -926,6 +929,13 @@ namespace TL [0x3B6D152E] = typeof(Users_UserFull), [0x6880B94D] = typeof(Messages_PeerSettings), [0xC3A2835F] = typeof(Auth_LoggedOut), + [0x6FB250D1] = typeof(ReactionCount), + [0x087B6E36] = typeof(MessageReactions), + [0x932844FA] = typeof(MessageUserReaction), + [0xA366923C] = typeof(Messages_MessageReactionsList), + [0x021D7C4B] = typeof(AvailableReaction), + [0x9F071957] = null,//Messages_AvailableReactionsNotModified + [0x768E3AAD] = typeof(Messages_AvailableReactions), // from TL.Secret: [0xBB718624] = typeof(Layer66.SendMessageUploadRoundAction), [0xE50511D8] = typeof(Layer45.DecryptedMessageMediaWebPage), @@ -1026,6 +1036,7 @@ namespace TL [typeof(ChannelLocation)] = 0xBFB5AD8B, //channelLocationEmpty [typeof(Account_Themes)] = 0xF41EB622, //account.themesNotModified [typeof(Help_CountriesList)] = 0x93CC1F32, //help.countriesListNotModified + [typeof(Messages_AvailableReactions)] = 0x9F071957, //messages.availableReactionsNotModified // from TL.Secret: [typeof(DecryptedMessageMedia)] = 0x089F5C4A, //decryptedMessageMediaEmpty // The End