diff --git a/README.md b/README.md index 8e10baa..e8c37d0 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -[![API Layer](https://img.shields.io/badge/API_Layer-186-blueviolet)](https://corefork.telegram.org/methods) +[![API Layer](https://img.shields.io/badge/API_Layer-187-blueviolet)](https://corefork.telegram.org/methods) [![NuGet version](https://img.shields.io/nuget/v/WTelegramClient?color=00508F)](https://www.nuget.org/packages/WTelegramClient/) [![NuGet prerelease](https://img.shields.io/nuget/vpre/WTelegramClient?color=C09030&label=dev+nuget)](https://www.nuget.org/packages/WTelegramClient/absoluteLatest) [![Donate](https://img.shields.io/badge/Help_this_project:-Donate-ff4444)](https://buymeacoffee.com/wizou) diff --git a/src/TL.Schema.cs b/src/TL.Schema.cs index 162370e..f5e93e8 100644 --- a/src/TL.Schema.cs +++ b/src/TL.Schema.cs @@ -471,13 +471,21 @@ public sealed partial class InputMediaWebPage : InputMedia } } /// Paid media, see here » for more info. See - [TLDef(0xAA661FC3)] + [TLDef(0xC4103386)] public sealed partial class InputMediaPaidMedia : InputMedia { + public Flags flags; /// The price of the media in Telegram Stars. public long stars_amount; /// Photos or videos. public InputMedia[] extended_media; + [IfFlag(0)] public string payload; + + [Flags] public enum Flags : uint + { + /// Field has a value + has_payload = 0x1, + } } /// Defines a new group profile photo. See Derived classes: , @@ -2142,7 +2150,7 @@ public sealed partial class MessageMediaStory : MessageMedia } } /// Contains info about a giveaway, see here » for more info. See - [TLDef(0xDAAD85B0)] + [TLDef(0xAA073BEB)] public sealed partial class MessageMediaGiveaway : MessageMedia { /// Extra bits of information, use flags.HasFlag(...) to test for those @@ -2156,7 +2164,8 @@ public sealed partial class MessageMediaGiveaway : MessageMedia /// Number of Telegram Premium subscriptions given away. public int quantity; /// Duration in months of each Telegram Premium subscription in the giveaway. - public int months; + [IfFlag(4)] public int months; + [IfFlag(5)] public long stars; /// The end date of the giveaway. public DateTime until_date; @@ -2170,10 +2179,14 @@ public sealed partial class MessageMediaGiveaway : MessageMedia winners_are_visible = 0x4, /// Field has a value has_prize_description = 0x8, + /// Field has a value + has_months = 0x10, + /// Field has a value + has_stars = 0x20, } } /// A giveaway with public winners has finished, this constructor contains info about the winners. See - [TLDef(0xC6991068)] + [TLDef(0xCEAA3EA1)] public sealed partial class MessageMediaGiveawayResults : MessageMedia { /// Extra bits of information, use flags.HasFlag(...) to test for those @@ -2191,7 +2204,8 @@ public sealed partial class MessageMediaGiveawayResults : MessageMedia /// Up to 100 user identifiers of the winners of the giveaway. public long[] winners; /// Duration in months of each Telegram Premium subscription in the giveaway. - public int months; + [IfFlag(4)] public int months; + [IfFlag(5)] public long stars; /// Can contain a textual description of additional giveaway prizes. [IfFlag(1)] public string prize_description; /// Point in time (Unix timestamp) when the winners were selected. May be bigger than winners selection date specified in initial parameters of the giveaway. @@ -2207,6 +2221,10 @@ public sealed partial class MessageMediaGiveawayResults : MessageMedia refunded = 0x4, /// Field has a value has_additional_peers_count = 0x8, + /// Field has a value + has_months = 0x10, + /// Field has a value + has_stars = 0x20, } } /// Paid media, see here » for more info. See @@ -2659,16 +2677,31 @@ public sealed partial class MessageActionGiftCode : MessageAction } } /// A giveaway was started. See - [TLDef(0x332BA9ED)] - public sealed partial class MessageActionGiveawayLaunch : MessageAction { } + [TLDef(0xA80F51E4)] + public sealed partial class MessageActionGiveawayLaunch : MessageAction + { + public Flags flags; + [IfFlag(0)] public long stars; + + [Flags] public enum Flags : uint + { + has_stars = 0x1, + } + } /// A giveaway has ended. See - [TLDef(0x2A9FADC5)] + [TLDef(0x87E2F155)] public sealed partial class MessageActionGiveawayResults : MessageAction { + public Flags flags; /// Number of winners in the giveaway public int winners_count; /// Number of undistributed prizes public int unclaimed_count; + + [Flags] public enum Flags : uint + { + stars = 0x1, + } } /// Some boosts » were applied to the channel or supergroup. See [TLDef(0xCC02AA6D)] @@ -2736,6 +2769,21 @@ public sealed partial class MessageActionGiftStars : MessageAction has_transaction_id = 0x2, } } + /// See + [TLDef(0xB00C47A2)] + public sealed partial class MessageActionPrizeStars : MessageAction + { + public Flags flags; + public long stars; + public string transaction_id; + public Peer boost_peer; + public int giveaway_msg_id; + + [Flags] public enum Flags : uint + { + unclaimed = 0x1, + } + } /// Chat info. See Derived classes: , public abstract partial class DialogBase : IObject @@ -5512,6 +5560,22 @@ public sealed partial class UpdateStarsRevenueStatus : Update /// New Telegram Star balance. public StarsRevenueStatus status; } + /// See + [TLDef(0x283BD312)] + public sealed partial class UpdateBotPurchasedPaidMedia : Update + { + public long user_id; + public string payload; + public int qts; + + public override (long, int, int) GetMBox() => (-1, qts, 1); + } + /// See + [TLDef(0x51CA7AEC)] + public sealed partial class UpdatePaidReactionPrivacy : Update + { + public bool private_; + } /// Updates state. See [TLDef(0xA56C2A3E)] @@ -11747,6 +11811,13 @@ public sealed partial class ChannelAdminLogEventActionChangeEmojiStickerSet : Ch /// See [TLDef(0x60A79C79)] public sealed partial class ChannelAdminLogEventActionToggleSignatureProfiles : ChannelAdminLogEventActionToggleSignatures { } + /// See + [TLDef(0x64642DB3)] + public sealed partial class ChannelAdminLogEventActionParticipantSubExtend : ChannelAdminLogEventAction + { + public ChannelParticipantBase prev_participant; + public ChannelParticipantBase new_participant; + } /// Admin log event See [TLDef(0x1FAD68CD)] @@ -11821,6 +11892,7 @@ public sealed partial class ChannelAdminLogEventsFilter : IObject send = 0x10000, /// Forum-related events forums = 0x20000, + sub_extend = 0x40000, } } @@ -15645,6 +15717,31 @@ public sealed partial class InputStorePaymentStarsGift : InputStorePaymentPurpos /// Total price in the smallest units of the currency (integer, not float/double). For example, for a price of US$ 1.45 pass amount = 145. See the exp parameter in currencies.json, it shows the number of digits past the decimal point for each currency (2 for the majority of currencies). public long amount; } + /// See + [TLDef(0x751F08FA)] + public sealed partial class InputStorePaymentStarsGiveaway : InputStorePaymentPurpose + { + public Flags flags; + public long stars; + public InputPeer boost_peer; + [IfFlag(1)] public InputPeer[] additional_peers; + [IfFlag(2)] public string[] countries_iso2; + [IfFlag(4)] public string prize_description; + public long random_id; + public DateTime until_date; + public string currency; + public long amount; + public int users; + + [Flags] public enum Flags : uint + { + only_new_subscribers = 0x1, + has_additional_peers = 0x2, + has_countries_iso2 = 0x4, + winners_are_visible = 0x8, + has_prize_description = 0x10, + } + } /// Telegram Premium gift option See [TLDef(0x74C34319)] @@ -17248,7 +17345,7 @@ public sealed partial class Payments_GiveawayInfo : Payments_GiveawayInfoBase public override DateTime StartDate => start_date; } /// A giveaway has ended. See - [TLDef(0x00CD5570)] + [TLDef(0xE175E66F)] public sealed partial class Payments_GiveawayInfoResults : Payments_GiveawayInfoBase { /// Extra bits of information, use flags.HasFlag(...) to test for those @@ -17256,13 +17353,14 @@ public sealed partial class Payments_GiveawayInfoResults : Payments_GiveawayInfo /// Start date of the giveaway public DateTime start_date; /// If we're one of the winners of this giveaway, contains the Premium gift code, see here » for more info on the full giveaway flow. - [IfFlag(0)] public string gift_code_slug; + [IfFlag(3)] public string gift_code_slug; + [IfFlag(4)] public long stars_prize; /// End date of the giveaway. May be bigger than the end date specified in parameters of the giveaway. public DateTime finish_date; /// Number of winners in the giveaway public int winners_count; /// Number of winners, which activated their gift codes. - public int activated_count; + [IfFlag(2)] public int activated_count; [Flags] public enum Flags : uint { @@ -17270,15 +17368,31 @@ public sealed partial class Payments_GiveawayInfoResults : Payments_GiveawayInfo winner = 0x1, /// Whether the giveaway was canceled and was fully refunded. refunded = 0x2, + /// Field has a value + has_activated_count = 0x4, + /// Field has a value + has_gift_code_slug = 0x8, + /// Field has a value + has_stars_prize = 0x10, } /// Start date of the giveaway public override DateTime StartDate => start_date; } + /// Contains info about a prepaid giveaway ». See Derived classes: + public abstract partial class PrepaidGiveawayBase : IObject + { + /// Prepaid giveaway ID. + public virtual long ID => default; + /// Number of given away Telegram Premium subscriptions. + public virtual int Quantity => default; + /// Payment date. + public virtual DateTime Date => default; + } /// Contains info about a prepaid giveaway ». See [TLDef(0xB2539D54)] - public sealed partial class PrepaidGiveaway : IObject + public sealed partial class PrepaidGiveaway : PrepaidGiveawayBase { /// Prepaid giveaway ID. public long id; @@ -17288,10 +17402,31 @@ public sealed partial class PrepaidGiveaway : IObject public int quantity; /// Payment date. public DateTime date; + + /// Prepaid giveaway ID. + public override long ID => id; + /// Number of given away Telegram Premium subscriptions. + public override int Quantity => quantity; + /// Payment date. + public override DateTime Date => date; + } + /// See + [TLDef(0x9A9D77E0)] + public sealed partial class PrepaidStarsGiveaway : PrepaidGiveawayBase + { + public long id; + public long stars; + public int quantity; + public int boosts; + public DateTime date; + + public override long ID => id; + public override int Quantity => quantity; + public override DateTime Date => date; } /// Info about one or more boosts applied by a specific user. See - [TLDef(0x2A1C8C71)] + [TLDef(0x4B3E14D6)] public sealed partial class Boost : IObject { /// Extra bits of information, use flags.HasFlag(...) to test for those @@ -17310,6 +17445,7 @@ public sealed partial class Boost : IObject [IfFlag(4)] public string used_gift_slug; /// If set, this boost counts as multiplier boosts, otherwise it counts as a single boost. [IfFlag(5)] public int multiplier; + [IfFlag(6)] public long stars; [Flags] public enum Flags : uint { @@ -17325,6 +17461,8 @@ public sealed partial class Boost : IObject has_used_gift_slug = 0x10, /// Field has a value has_multiplier = 0x20, + /// Field has a value + has_stars = 0x40, } } @@ -17411,7 +17549,7 @@ public sealed partial class Premium_BoostsStatus : IObject /// Boost deep link » that can be used to boost the chat. public string boost_url; /// A list of prepaid giveaways available for the chat; only returned to channel/supergroup admins. - [IfFlag(3)] public PrepaidGiveaway[] prepaid_giveaways; + [IfFlag(3)] public PrepaidGiveawayBase[] prepaid_giveaways; /// Indicates which of our boost slots we've assigned to this peer (populated if my_boost is set). [IfFlag(2)] public int[] my_boost_slots; @@ -18680,15 +18818,21 @@ public sealed partial class ReactionsNotifySettings : IObject } /// Describes channel ad revenue balances ». See - [TLDef(0x8438F1C6)] + [TLDef(0xC3FF71E7)] public sealed partial class BroadcastRevenueBalances : IObject { + public Flags flags; /// Amount of not-yet-withdrawn cryptocurrency. public long current_balance; /// Amount of withdrawable cryptocurrency, out of the currently available balance (available_balance <= current_balance). public long available_balance; /// Total amount of earned cryptocurrency. public long overall_revenue; + + [Flags] public enum Flags : uint + { + withdrawal_enabled = 0x1, + } } /// Represents a message effect ». See @@ -18807,7 +18951,7 @@ public sealed partial class StarsTopupOption : IObject } /// Represents a Telegram Stars transaction ». See - [TLDef(0x433AEB2B)] + [TLDef(0xEE7522D5)] public sealed partial class StarsTransaction : IObject { /// Extra bits of information, use flags.HasFlag(...) to test for those @@ -18837,6 +18981,7 @@ public sealed partial class StarsTransaction : IObject /// The purchased paid media ». [IfFlag(9)] public MessageMedia[] extended_media; [IfFlag(12)] public int subscription_period; + [IfFlag(13)] public int giveaway_post_id; [Flags] public enum Flags : uint { @@ -18865,6 +19010,8 @@ public sealed partial class StarsTransaction : IObject reaction = 0x800, /// Field has a value has_subscription_period = 0x1000, + /// Field has a value + has_giveaway_post_id = 0x2000, } } @@ -19141,4 +19288,38 @@ public sealed partial class MessageReactor : IObject has_peer_id = 0x8, } } + + /// See + [TLDef(0x94CE852A)] + public sealed partial class StarsGiveawayOption : IObject + { + public Flags flags; + public long stars; + public int yearly_boosts; + [IfFlag(2)] public string store_product; + public string currency; + public long amount; + public StarsGiveawayWinnersOption[] winners; + + [Flags] public enum Flags : uint + { + extended = 0x1, + default_ = 0x2, + has_store_product = 0x4, + } + } + + /// See + [TLDef(0x54236209)] + public sealed partial class StarsGiveawayWinnersOption : IObject + { + public Flags flags; + public int users; + public long per_user_stars; + + [Flags] public enum Flags : uint + { + default_ = 0x1, + } + } } diff --git a/src/TL.SchemaFuncs.cs b/src/TL.SchemaFuncs.cs index 490010f..8ebca1f 100644 --- a/src/TL.SchemaFuncs.cs +++ b/src/TL.SchemaFuncs.cs @@ -4313,14 +4313,15 @@ public static Task Messages_RequestMainWebView(this Client client }); /// See - public static Task Messages_SendPaidReaction(this Client client, InputPeer peer, int msg_id, int count, long random_id, bool private_ = false) + public static Task Messages_SendPaidReaction(this Client client, InputPeer peer, int msg_id, int count, long random_id, bool? private_ = default) => client.Invoke(new Messages_SendPaidReaction { - flags = (Messages_SendPaidReaction.Flags)(private_ ? 0x1 : 0), + flags = (Messages_SendPaidReaction.Flags)(private_ != default ? 0x1 : 0), peer = peer, msg_id = msg_id, count = count, random_id = random_id, + private_ = private_.GetValueOrDefault(), }); /// See @@ -4332,6 +4333,12 @@ public static Task Messages_TogglePaidReactionPrivacy(this Client client, private_ = private_, }); + /// See + public static Task Messages_GetPaidReactionPrivacy(this Client client) + => client.Invoke(new Messages_GetPaidReactionPrivacy + { + }); + /// Returns a current state of updates. See [bots: ✓] public static Task Updates_GetState(this Client client) => client.Invoke(new Updates_GetState @@ -5982,6 +5989,12 @@ public static Task Payments_FulfillStarsSubscription(this Client client, I subscription_id = subscription_id, }); + /// See + public static Task Payments_GetStarsGiveawayOptions(this Client client) + => client.Invoke(new Payments_GetStarsGiveawayOptions + { + }); + /// Create a stickerset. See [bots: ✓] Possible codes: 400 (details) /// Whether this is a mask stickerset /// Whether this is a custom emoji stickerset. @@ -10755,7 +10768,7 @@ public sealed partial class Messages_RequestMainWebView : IMethod } } - [TLDef(0x25C8FE3E)] + [TLDef(0x9DD6A67B)] public sealed partial class Messages_SendPaidReaction : IMethod { public Flags flags; @@ -10763,10 +10776,11 @@ public sealed partial class Messages_SendPaidReaction : IMethod public int msg_id; public int count; public long random_id; + [IfFlag(0)] public bool private_; [Flags] public enum Flags : uint { - private_ = 0x1, + has_private = 0x1, } } @@ -10778,6 +10792,9 @@ public sealed partial class Messages_TogglePaidReactionPrivacy : IMethod public bool private_; } + [TLDef(0x472455AA)] + public sealed partial class Messages_GetPaidReactionPrivacy : IMethod { } + [TLDef(0xEDD4882A)] public sealed partial class Updates_GetState : IMethod { } @@ -12085,6 +12102,9 @@ public sealed partial class Payments_FulfillStarsSubscription : IMethod public string subscription_id; } + [TLDef(0xBD1EFD3E)] + public sealed partial class Payments_GetStarsGiveawayOptions : IMethod { } + [TLDef(0x9021AB67)] public sealed partial class Stickers_CreateStickerSet : IMethod { diff --git a/src/TL.Table.cs b/src/TL.Table.cs index 4a6cb66..7ceea1f 100644 --- a/src/TL.Table.cs +++ b/src/TL.Table.cs @@ -6,7 +6,7 @@ namespace TL { public static partial class Layer { - public const int Version = 186; // fetched 14/08/2024 12:45:43 + public const int Version = 187; // fetched 07/09/2024 00:00:28 internal const int SecretChats = 144; internal const int MTProto2 = 73; internal const uint VectorCtor = 0x1CB5C415; @@ -102,7 +102,7 @@ public static partial class Layer [0xE66FBF7B] = typeof(InputMediaDice), [0x89FDD778] = typeof(InputMediaStory), [0xC21B8849] = typeof(InputMediaWebPage), - [0xAA661FC3] = typeof(InputMediaPaidMedia), + [0xC4103386] = typeof(InputMediaPaidMedia), [0x1CA48F57] = null,//InputChatPhotoEmpty [0xBDCDAEC0] = typeof(InputChatUploadedPhoto), [0x8953AD37] = typeof(InputChatPhoto), @@ -164,8 +164,8 @@ public static partial class Layer [0x4BD6E798] = typeof(MessageMediaPoll), [0x3F7EE58B] = typeof(MessageMediaDice), [0x68CB6283] = typeof(MessageMediaStory), - [0xDAAD85B0] = typeof(MessageMediaGiveaway), - [0xC6991068] = typeof(MessageMediaGiveawayResults), + [0xAA073BEB] = typeof(MessageMediaGiveaway), + [0xCEAA3EA1] = typeof(MessageMediaGiveawayResults), [0xA8852491] = typeof(MessageMediaPaidMedia), [0xB6AEF7B0] = null,//MessageActionEmpty [0xBD47CBAD] = typeof(MessageActionChatCreate), @@ -206,12 +206,13 @@ public static partial class Layer [0x31518E9B] = typeof(MessageActionRequestedPeer), [0x5060A3F4] = typeof(MessageActionSetChatWallPaper), [0x678C2E09] = typeof(MessageActionGiftCode), - [0x332BA9ED] = typeof(MessageActionGiveawayLaunch), - [0x2A9FADC5] = typeof(MessageActionGiveawayResults), + [0xA80F51E4] = typeof(MessageActionGiveawayLaunch), + [0x87E2F155] = typeof(MessageActionGiveawayResults), [0xCC02AA6D] = typeof(MessageActionBoostApply), [0x93B31848] = typeof(MessageActionRequestedPeerSentMe), [0x41B3E202] = typeof(MessageActionPaymentRefunded), [0x45D5B021] = typeof(MessageActionGiftStars), + [0xB00C47A2] = typeof(MessageActionPrizeStars), [0xD58A08C6] = typeof(Dialog), [0x71BD134C] = typeof(DialogFolder), [0x2331B22D] = typeof(PhotoEmpty), @@ -415,6 +416,8 @@ public static partial class Layer [0x0FB85198] = typeof(UpdateStarsBalance), [0x1EA2FDA7] = typeof(UpdateBusinessBotCallbackQuery), [0xA584B019] = typeof(UpdateStarsRevenueStatus), + [0x283BD312] = typeof(UpdateBotPurchasedPaidMedia), + [0x51CA7AEC] = typeof(UpdatePaidReactionPrivacy), [0xA56C2A3E] = typeof(Updates_State), [0x5D75A138] = typeof(Updates_DifferenceEmpty), [0x00F49CA0] = typeof(Updates_Difference), @@ -836,6 +839,7 @@ public static partial class Layer [0x3EA9FEB1] = typeof(ChannelAdminLogEventActionChangeEmojiStatus), [0x46D840AB] = typeof(ChannelAdminLogEventActionChangeEmojiStickerSet), [0x60A79C79] = typeof(ChannelAdminLogEventActionToggleSignatureProfiles), + [0x64642DB3] = typeof(ChannelAdminLogEventActionParticipantSubExtend), [0x1FAD68CD] = typeof(ChannelAdminLogEvent), [0xED8AF74D] = typeof(Channels_AdminLogResults), [0xEA107AE4] = typeof(ChannelAdminLogEventsFilter), @@ -1094,6 +1098,7 @@ public static partial class Layer [0x160544CA] = typeof(InputStorePaymentPremiumGiveaway), [0xDDDD0F56] = typeof(InputStorePaymentStarsTopup), [0x1D741EF7] = typeof(InputStorePaymentStarsGift), + [0x751F08FA] = typeof(InputStorePaymentStarsGiveaway), [0x74C34319] = typeof(PremiumGiftOption), [0x88F8F21B] = typeof(PaymentFormMethod), [0x2DE11AAE] = null,//EmojiStatusEmpty @@ -1195,9 +1200,10 @@ public static partial class Layer [0x257E962B] = typeof(PremiumGiftCodeOption), [0x284A1096] = typeof(Payments_CheckedGiftCode), [0x4367DAA0] = typeof(Payments_GiveawayInfo), - [0x00CD5570] = typeof(Payments_GiveawayInfoResults), + [0xE175E66F] = typeof(Payments_GiveawayInfoResults), [0xB2539D54] = typeof(PrepaidGiveaway), - [0x2A1C8C71] = typeof(Boost), + [0x9A9D77E0] = typeof(PrepaidStarsGiveaway), + [0x4B3E14D6] = typeof(Boost), [0x86F8613C] = typeof(Premium_BoostsList), [0xC448415C] = typeof(MyBoost), [0x9AE228E2] = typeof(Premium_MyBoosts), @@ -1285,7 +1291,7 @@ public static partial class Layer [0x42D30D2E] = typeof(BroadcastRevenueTransactionRefund), [0x87158466] = typeof(Stats_BroadcastRevenueTransactions), [0x56E34970] = typeof(ReactionsNotifySettings), - [0x8438F1C6] = typeof(BroadcastRevenueBalances), + [0xC3FF71E7] = typeof(BroadcastRevenueBalances), [0x93C3E27E] = typeof(AvailableEffect), [0xD1ED9A5B] = null,//Messages_AvailableEffectsNotModified [0xBDDB616E] = typeof(Messages_AvailableEffects), @@ -1298,7 +1304,7 @@ public static partial class Layer [0xD80DA15D] = typeof(StarsTransactionPeer), [0x60682812] = typeof(StarsTransactionPeerAds), [0x0BD915C0] = typeof(StarsTopupOption), - [0x433AEB2B] = typeof(StarsTransaction), + [0xEE7522D5] = typeof(StarsTransaction), [0xBBFA316C] = typeof(Payments_StarsStatus), [0xE87ACBC0] = typeof(FoundStory), [0xE2DE7737] = typeof(Stories_FoundStories), @@ -1315,6 +1321,8 @@ public static partial class Layer [0x05416D58] = typeof(StarsSubscriptionPricing), [0x538ECF18] = typeof(StarsSubscription), [0x4BA3A95A] = typeof(MessageReactor), + [0x94CE852A] = typeof(StarsGiveawayOption), + [0x54236209] = typeof(StarsGiveawayWinnersOption), // from TL.Secret: [0x6ABD9782] = typeof(Layer143.DecryptedMessageMediaDocument), [0x020DF5D0] = typeof(Layer101.MessageEntityBlockquote), diff --git a/src/WTelegramClient.csproj b/src/WTelegramClient.csproj index 3d71cd9..5aa756e 100644 --- a/src/WTelegramClient.csproj +++ b/src/WTelegramClient.csproj @@ -13,7 +13,7 @@ WTelegramClient 0.0.0 Wizou - Telegram Client API (MTProto) library written 100% in C# and .NET Standard | Latest API layer: 186 + Telegram Client API (MTProto) library written 100% in C# and .NET Standard | Latest API layer: 187 Release Notes: $(ReleaseNotes.Replace("|", "%0D%0A").Replace(" - ","%0D%0A- ").Replace(" ", "%0D%0A%0D%0A"))