From f958b4081dfaa5391cadfd123293ec248aaa31ed Mon Sep 17 00:00:00 2001 From: Wizou <11647984+wiz0u@users.noreply.github.com> Date: Mon, 4 Mar 2024 23:54:58 +0100 Subject: [PATCH] Fix properties base implementation --- EXAMPLES.md | 1 + src/TL.MTProto.cs | 6 +- src/TL.Schema.cs | 224 ++++++++++++++++++++++------------------------ src/TL.Secret.cs | 30 +++---- 4 files changed, 126 insertions(+), 135 deletions(-) diff --git a/EXAMPLES.md b/EXAMPLES.md index 5e7ca9d..57b461d 100644 --- a/EXAMPLES.md +++ b/EXAMPLES.md @@ -463,6 +463,7 @@ into either a `User` or `ChatBase` (`Chat`,`Channel`...) description structure * You can also use the `CollectUsersChats` helper method to collect these 2 fields into 2 aggregate dictionaries to remember details *(including access hashes)* about all the users/chats you've encountered so far. +This method also helps dealing with [incomplete `min` structures](https://core.telegram.org/api/min). Example of usage: ```csharp diff --git a/src/TL.MTProto.cs b/src/TL.MTProto.cs index d6313b1..fa8754c 100644 --- a/src/TL.MTProto.cs +++ b/src/TL.MTProto.cs @@ -160,9 +160,9 @@ namespace TL public abstract class MsgDetailedInfoBase : IObject { - public virtual long AnswerMsgId { get; } - public virtual int Bytes { get; } - public virtual int Status { get; } + public virtual long AnswerMsgId => default; + public virtual int Bytes => default; + public virtual int Status => default; } [TLDef(0x276D3EC6)] //msg_detailed_info#276d3ec6 msg_id:long answer_msg_id:long bytes:int status:int = MsgDetailedInfo public class MsgDetailedInfo : MsgDetailedInfoBase diff --git a/src/TL.Schema.cs b/src/TL.Schema.cs index 045905a..7e7e52a 100644 --- a/src/TL.Schema.cs +++ b/src/TL.Schema.cs @@ -133,11 +133,11 @@ namespace TL public abstract partial class InputFileBase : IObject { /// Random file identifier created by the client - public virtual long ID { get; set; } + public abstract long ID { get; set; } /// Number of parts saved - public virtual int Parts { get; set; } + public abstract int Parts { get; set; } /// Full name of the file - public virtual string Name { get; set; } + public abstract string Name { get; set; } } /// Defines a file saved in parts using the method Upload_SaveFilePart. See [TLDef(0xF52FF27F)] @@ -948,9 +948,9 @@ namespace TL public abstract partial class ChatBase : IObject { /// ID of the group - public virtual long ID { get; } + public virtual long ID => default; /// Title - public virtual string Title { get; } + public virtual string Title => default; } /// Empty constructor, group doesn't exist See [TLDef(0x29562865)] @@ -1189,35 +1189,35 @@ namespace TL public abstract partial class ChatFullBase : IObject { /// ID of the chat - public virtual long ID { get; } + public virtual long ID => default; /// About string for this chat - public virtual string About { get; } + public virtual string About => default; /// Chat photo - public virtual PhotoBase ChatPhoto { get; } + public virtual PhotoBase ChatPhoto => default; /// Notification settings - public virtual PeerNotifySettings NotifySettings { get; } + public virtual PeerNotifySettings NotifySettings => default; /// Chat invite - public virtual ExportedChatInvite ExportedInvite { get; } + public virtual ExportedChatInvite ExportedInvite => default; /// Info about bots that are in this chat - public virtual BotInfo[] BotInfo { get; } + public virtual BotInfo[] BotInfo => default; /// Message ID of the last pinned message - public virtual int PinnedMsg { get; } + public virtual int PinnedMsg => default; /// Peer folder ID, for more info click here - public virtual int Folder { get; } + public virtual int Folder => default; /// Group call information - public virtual InputGroupCall Call { get; } + public virtual InputGroupCall Call => default; /// Time-To-Live of messages sent by the current user to this chat - public virtual int TtlPeriod { get; } + public virtual int TtlPeriod => default; /// When using Phone_GetGroupCallJoinAs to get a list of peers that can be used to join a group call, this field indicates the peer that should be selected by default. - public virtual Peer GroupcallDefaultJoinAs { get; } + public virtual Peer GroupcallDefaultJoinAs => default; /// Emoji representing a specific chat theme - public virtual string ThemeEmoticon { get; } + public virtual string ThemeEmoticon => default; /// Pending join requests » - public virtual int RequestsPending { get; } + public virtual int RequestsPending => default; /// IDs of users who requested to join recently - public virtual long[] RecentRequesters { get; } + public virtual long[] RecentRequesters => default; /// Allowed message reactions » - public virtual ChatReactions AvailableReactions { get; } + public virtual ChatReactions AvailableReactions => default; } /// Full info about a basic group. See [TLDef(0xC9D31138)] @@ -1535,7 +1535,7 @@ namespace TL public abstract partial class ChatParticipantBase : IObject { /// Member user ID - public virtual long UserId { get; } + public virtual long UserId => default; } /// Group member. See [TLDef(0xC02D4007)] @@ -1571,7 +1571,7 @@ namespace TL public abstract partial class ChatParticipantsBase : IObject { /// Group ID - public virtual long ChatId { get; } + public virtual long ChatId => default; } /// Info on members is unavailable See [TLDef(0x8763D3E1)] @@ -1635,17 +1635,17 @@ namespace TL public abstract class MessageBase : IObject { /// ID of the message - public virtual int ID { get; } + public virtual int ID => default; /// ID of the sender of the message - public virtual Peer From { get; } + public virtual Peer From => default; /// Peer ID, the chat where this message was sent - public virtual Peer Peer { get; } + public virtual Peer Peer => default; /// Reply information - public virtual MessageReplyHeaderBase ReplyTo { get; } + public virtual MessageReplyHeaderBase ReplyTo => default; /// Date of the message - public virtual DateTime Date { get; } + public virtual DateTime Date => default; /// 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. - public virtual int TtlPeriod { get; } + public virtual int TtlPeriod => default; } /// Empty constructor, non-existent message. See [TLDef(0x90A6CA84)] @@ -2606,9 +2606,9 @@ namespace TL public abstract class DialogBase : IObject { /// The chat - public virtual Peer Peer { get; } + public virtual Peer Peer => default; /// The latest message ID - public virtual int TopMessage { get; } + public virtual int TopMessage => default; } /// Chat See [TLDef(0xD58A08C6)] @@ -2740,7 +2740,7 @@ namespace TL public abstract partial class PhotoSizeBase : IObject { /// Thumbnail type » - public virtual string Type { get; } + public virtual string Type => default; } /// Empty constructor. Image with this thumbnail is unavailable. See [TLDef(0x0E17E23C)] @@ -3102,9 +3102,9 @@ namespace TL public abstract partial class WallPaperBase : IObject { /// Identifier - public virtual long ID { get; } + public virtual long ID => default; /// Info on how to generate the wallpaper, according to these instructions ». - public virtual WallPaperSettings Settings { get; } + public virtual WallPaperSettings Settings => default; } /// Represents a wallpaper based on an image. See [TLDef(0xA437C3ED)] @@ -3380,9 +3380,9 @@ namespace TL public abstract partial class Messages_DialogsBase : IObject, IPeerResolver { /// List of chats - public virtual DialogBase[] Dialogs { get; } + public virtual DialogBase[] Dialogs => default; /// List of last messages from each chat - public virtual MessageBase[] Messages { get; } + public virtual MessageBase[] Messages => default; /// returns a or for the given Peer public abstract IPeerInfo UserOrChat(Peer peer); } @@ -3427,7 +3427,7 @@ namespace TL public abstract partial class Messages_MessagesBase : IObject, IPeerResolver { /// List of messages - public virtual MessageBase[] Messages { get; } + public virtual MessageBase[] Messages => default; /// returns a or for the given Peer public abstract IPeerInfo UserOrChat(Peer peer); } @@ -3544,13 +3544,9 @@ namespace TL } /// Affected part of communication history with the user or in a chat. See - [TLDef(0xB45C69D1)] - public class Messages_AffectedHistory : IObject + [TLDef(0xB45C69D1, inheritBefore = true)] + public class Messages_AffectedHistory : Messages_AffectedMessages { - /// Number of events occurred in a text box - public int pts; - /// Number of affected events - public int pts_count; /// If a parameter contains positive value, it is necessary to repeat the method call using the given value; during the proceeding of all the history the value itself shall gradually decrease public int offset; } @@ -5170,11 +5166,11 @@ namespace TL public abstract partial class Updates_DifferenceBase : IObject, IPeerResolver { /// List of new messages - public virtual MessageBase[] NewMessages { get; } + public virtual MessageBase[] NewMessages => default; /// List of new encrypted secret chat messages - public virtual EncryptedMessageBase[] NewEncryptedMessages { get; } + public virtual EncryptedMessageBase[] NewEncryptedMessages => default; /// List of updates - public virtual Update[] OtherUpdates { get; } + public virtual Update[] OtherUpdates => default; /// returns a or for the given Peer public abstract IPeerInfo UserOrChat(Peer peer); } @@ -5259,7 +5255,7 @@ namespace TL public abstract partial class UpdatesBase : IObject, IPeerResolver { /// date - public virtual DateTime Date { get; } + public virtual DateTime Date => default; /// returns a or for the given Peer public abstract IPeerInfo UserOrChat(Peer peer); } @@ -5752,15 +5748,15 @@ namespace TL public abstract class EncryptedChatBase : IObject { /// Chat ID - public virtual int ID { get; } + public virtual int ID => default; /// Checking sum depending on user ID - public virtual long AccessHash { get; } + public virtual long AccessHash => default; /// Date of chat creation - public virtual DateTime Date { get; } + public virtual DateTime Date => default; /// Chat creator ID - public virtual long AdminId { get; } + public virtual long AdminId => default; /// ID of second chat participant - public virtual long ParticipantId { get; } + public virtual long ParticipantId => default; } /// Empty constructor. See [TLDef(0xAB7EC0A0)] @@ -5917,7 +5913,7 @@ namespace TL public abstract class InputEncryptedFileBase : IObject { /// Random file ID created by client - public virtual long ID { get; set; } + public abstract long ID { get; set; } } /// Sets new encrypted file saved by parts using upload.saveFilePart method. See [TLDef(0x64BD0306)] @@ -5966,13 +5962,13 @@ namespace TL public abstract class EncryptedMessageBase : IObject { /// Random message ID, assigned by the author of message - public virtual long RandomId { get; } + public virtual long RandomId => default; /// ID of encrypted chat - public virtual int ChatId { get; } + public virtual int ChatId => default; /// Date of sending - public virtual DateTime Date { get; } + public virtual DateTime Date => default; /// TL-serialization of type, encrypted with the key created at chat initialization - public virtual byte[] Bytes { get; } + public virtual byte[] Bytes => default; } /// Encrypted message. See [TLDef(0xED18C118)] @@ -6593,9 +6589,9 @@ namespace TL public abstract class WebPageBase : IObject { /// Preview ID - public virtual long ID { get; } + public virtual long ID => default; /// URL of the webpage. - public virtual string Url { get; } + public virtual string Url => default; } /// No preview is available for the webpage See [TLDef(0x211A1788)] @@ -7191,7 +7187,7 @@ namespace TL public abstract class KeyboardButtonBase : IObject { /// Button text - public virtual string Text { get; } + public virtual string Text => default; } /// Bot keyboard button See [TLDef(0xA2FA4880)] @@ -7554,7 +7550,7 @@ namespace TL public abstract class InputChannelBase : IObject { /// Channel ID - public virtual long ChannelId { get; set; } + public abstract long ChannelId { get; set; } } /// Represents a channel See [TLDef(0xF35AEC28)] @@ -8151,9 +8147,9 @@ namespace TL public abstract class InputBotInlineResultBase : IObject { /// ID of result - public virtual string ID { get; set; } + public abstract string ID { get; set; } /// Message to send when the result is selected - public virtual InputBotInlineMessage SendMessage { get; set; } + public abstract InputBotInlineMessage SendMessage { get; set; } } /// An inline bot result See [TLDef(0x88BF9319)] @@ -8462,15 +8458,15 @@ namespace TL public abstract class BotInlineResultBase : IObject { /// Result ID - public virtual string ID { get; } + public virtual string ID => default; /// Result type (see bot API docs) - public virtual string Type { get; } + public virtual string Type => default; /// Result title - public virtual string Title { get; } + public virtual string Title => default; /// Result description - public virtual string Description { get; } + public virtual string Description => default; /// Message to send - public virtual BotInlineMessage SendMessage { get; } + public virtual BotInlineMessage SendMessage => default; } /// Generic result See [TLDef(0x11965F3A)] @@ -8834,9 +8830,9 @@ namespace TL public abstract class InputBotInlineMessageIDBase : IObject { /// DC ID to use when working with this inline message - public virtual int DcId { get; set; } + public abstract int DcId { get; set; } /// Access hash of message - public virtual long AccessHash { get; set; } + public abstract long AccessHash { get; set; } } /// Represents a sent inline message from the perspective of a bot (legacy constructor) See [TLDef(0x890C3D89)] @@ -9086,7 +9082,7 @@ namespace TL public abstract class StickerSetCoveredBase : IObject { /// Stickerset - public virtual StickerSet Set { get; } + public virtual StickerSet Set => default; } /// Stickerset with a single sticker as preview See [TLDef(0x6410A5D2)] @@ -9821,13 +9817,13 @@ namespace TL public abstract partial class WebDocumentBase : IObject { /// Document URL - public virtual string Url { get; } + public virtual string Url => default; /// File size - public virtual int Size { get; } + public virtual int Size => default; /// MIME type - public virtual string MimeType { get; } + public virtual string MimeType => default; /// Attributes for media types - public virtual DocumentAttribute[] Attributes { get; } + public virtual DocumentAttribute[] Attributes => default; } /// Remote document See [TLDef(0x1C570ED1)] @@ -10216,17 +10212,17 @@ namespace TL public abstract partial class PhoneCallBase : IObject { /// Call ID - public virtual long ID { get; } + public virtual long ID => default; /// Access hash - public virtual long AccessHash { get; } + public virtual long AccessHash => default; /// Date - public virtual DateTime Date { get; } + public virtual DateTime Date => default; /// Admin ID - public virtual long AdminId { get; } + public virtual long AdminId => default; /// Participant ID - public virtual long ParticipantId { get; } + public virtual long ParticipantId => default; /// Phone call protocol info - public virtual PhoneCallProtocol Protocol { get; } + public virtual PhoneCallProtocol Protocol => default; } /// Empty constructor See [TLDef(0x5366C915)] @@ -10443,13 +10439,13 @@ namespace TL public abstract class PhoneConnectionBase : IObject { /// Endpoint ID - public virtual long ID { get; } + public virtual long ID => default; /// IP address of endpoint - public virtual string Ip { get; } + public virtual string Ip => default; /// IPv6 address of endpoint - public virtual string Ipv6 { get; } + public virtual string Ipv6 => default; /// Port ID - public virtual int Port { get; } + public virtual int Port => default; } /// Identifies an endpoint that can be used to connect to the other user in a phone call See [TLDef(0x9CC123C7)] @@ -10591,7 +10587,7 @@ namespace TL public abstract class LangPackStringBase : IObject { /// Language key - public virtual string Key { get; } + public virtual string Key => default; } /// Translated localization string See [TLDef(0xCAD181F6)] @@ -11415,7 +11411,7 @@ namespace TL public abstract class InputSecureFileBase : IObject { /// Secure file ID - public virtual long ID { get; set; } + public abstract long ID { get; set; } } /// Uploaded secure file, for more info see the passport docs » See [TLDef(0x3334B0F0)] @@ -11629,9 +11625,9 @@ namespace TL public abstract class SecureValueErrorBase : IObject { /// The section of the user's Telegram Passport which has the error, one of , , , , , - public virtual SecureValueType Type { get; } + public virtual SecureValueType Type => default; /// Error message - public virtual string Text { get; } + public virtual string Text => default; } /// Represents an issue in one of the data fields that was provided by the user. The error is considered resolved when the field's value changes. See [TLDef(0xE8A40BD9)] @@ -12704,7 +12700,7 @@ namespace TL public abstract class PeerLocatedBase : IObject { /// Validity period of current data - public virtual DateTime Expires { get; } + public virtual DateTime Expires => default; } /// Peer geolocated nearby See [TLDef(0xCA461B5D)] @@ -13042,15 +13038,15 @@ namespace TL public abstract class DialogFilterBase : IObject { /// Folder ID - public virtual int ID { get; } + public virtual int ID => default; /// Folder name - public virtual string Title { get; } + public virtual string Title => default; /// Emoji to use as icon for the folder. - public virtual string Emoticon { get; } + public virtual string Emoticon => default; /// Pinned chats, folders can have unlimited pinned chats - public virtual InputPeer[] PinnedPeers { get; } + public virtual InputPeer[] PinnedPeers => default; /// Include the following chats in this folder - public virtual InputPeer[] IncludePeers { get; } + public virtual InputPeer[] IncludePeers => default; } /// Dialog filter AKA folder See [TLDef(0x7438F7E8)] @@ -13693,9 +13689,9 @@ namespace TL public abstract partial class GroupCallBase : IObject { /// Group call ID - public virtual long ID { get; } + public virtual long ID => default; /// Group call access hash - public virtual long AccessHash { get; } + public virtual long AccessHash => default; } /// An ended group call See [TLDef(0x7780BCB4)] @@ -13932,15 +13928,9 @@ namespace TL } /// Messages found and affected by changes See - [TLDef(0xEF8D3E6C)] - public class Messages_AffectedFoundMessages : IObject + [TLDef(0xEF8D3E6C, inheritBefore = true)] + public class Messages_AffectedFoundMessages : Messages_AffectedHistory { - /// Event count after generation - public int pts; - /// Number of events that were generated - public int pts_count; - /// If bigger than zero, the request must be repeated to remove more messages - public int offset; /// Affected message IDs public int[] messages; } @@ -13989,9 +13979,9 @@ namespace TL public abstract class Messages_ExportedChatInviteBase : IObject { /// Info about the chat invite - public virtual ExportedChatInvite Invite { get; } + public virtual ExportedChatInvite Invite => default; /// Mentioned users - public virtual Dictionary Users { get; } + public virtual Dictionary Users => default; } /// Info about a chat invite See [TLDef(0x1871BE50)] @@ -15215,7 +15205,7 @@ namespace TL public abstract class ForumTopicBase : IObject { /// The ID of the deleted forum topic. - public virtual int ID { get; } + public virtual int ID => default; } /// Represents a deleted forum topic. See [TLDef(0x023F109B)] @@ -15681,9 +15671,9 @@ namespace TL public abstract class Chatlists_ChatlistInviteBase : IObject { /// Related chat information - public virtual Dictionary Chats { get; } + public virtual Dictionary Chats => default; /// Related user information - public virtual Dictionary Users { get; } + public virtual Dictionary Users => default; } /// Updated info about a chat folder deep link » we already imported. See [TLDef(0xFA87F659)] @@ -15768,9 +15758,9 @@ namespace TL public abstract class MessagePeerVoteBase : IObject { /// Peer ID - public virtual Peer Peer { get; } + public virtual Peer Peer => default; /// When did the peer cast the vote - public virtual DateTime Date { get; } + public virtual DateTime Date => default; } /// How a peer voted in a poll See [TLDef(0xB6CC2D5C)] @@ -15875,7 +15865,7 @@ namespace TL public abstract class StoryItemBase : IObject { /// Story ID - public virtual int ID { get; } + public virtual int ID => default; } /// Represents a previously active story, that was deleted See [TLDef(0x51E6EE4F)] @@ -16437,7 +16427,7 @@ namespace TL public abstract class Payments_GiveawayInfoBase : IObject { /// When was the giveaway started - public virtual DateTime StartDate { get; } + public virtual DateTime StartDate => default; } /// Contains info about an ongoing giveaway. See [TLDef(0x4367DAA0)] @@ -16921,13 +16911,13 @@ namespace TL public abstract class Messages_SavedDialogsBase : IObject { /// Saved message dialogs ». - public virtual SavedDialog[] Dialogs { get; } + public virtual SavedDialog[] Dialogs => default; /// List of last messages from each saved dialog - public virtual MessageBase[] Messages { get; } + public virtual MessageBase[] Messages => default; /// Mentioned chats - public virtual Dictionary Chats { get; } + public virtual Dictionary Chats => default; /// Mentioned users - public virtual Dictionary Users { get; } + public virtual Dictionary Users => default; } /// Represents some saved message dialogs ». See [TLDef(0xF83AE221)] diff --git a/src/TL.Secret.cs b/src/TL.Secret.cs index 3e31293..6028014 100644 --- a/src/TL.Secret.cs +++ b/src/TL.Secret.cs @@ -7,32 +7,32 @@ namespace TL public abstract class DecryptedMessageBase : IObject { /// Flags, see TL conditional fields (added in layer 45) - public virtual uint FFlags { get; } + public virtual uint FFlags => default; /// Random message ID, assigned by the author of message.
Must be equal to the ID passed to sending method.
- public virtual long RandomId { get; } + public virtual long RandomId => default; /// Message lifetime. Has higher priority than .
Parameter added in Layer 17.
- public virtual int Ttl { get; } + public virtual int Ttl => default; /// Message text - public virtual string Message { get; } + public virtual string Message => default; /// Media content - public virtual DecryptedMessageMedia Media { get; } + public virtual DecryptedMessageMedia Media => default; /// Message entities for styled text (parameter added in layer 45) - public virtual MessageEntity[] Entities { get; } + public virtual MessageEntity[] Entities => default; /// Specifies the ID of the inline bot that generated the message (parameter added in layer 45) - public virtual string ViaBotName { get; } + public virtual string ViaBotName => default; /// Random message ID of the message this message replies to (parameter added in layer 45) - public virtual long ReplyToRandom { get; } + public virtual long ReplyToRandom => default; /// Random group ID, assigned by the author of message.
Multiple encrypted messages with a photo attached and with the same group ID indicate an album or grouped media (parameter added in layer 45)
- public virtual long Grouped { get; } - public virtual byte[] RandomBytes { get; } - public virtual DecryptedMessageAction Action { get; } + public virtual long Grouped => default; + public virtual byte[] RandomBytes => default; + public virtual DecryptedMessageAction Action => default; } /// Object describes media contents of an encrypted message. See /// a value means decryptedMessageMediaEmpty public abstract class DecryptedMessageMedia : IObject { - public virtual string MimeType { get; } + public virtual string MimeType => default; internal virtual (long size, byte[] key, byte[] iv) SizeKeyIV { get => default; set => throw new WTelegram.WTException("Incompatible DecryptedMessageMedia"); } } @@ -43,11 +43,11 @@ namespace TL public abstract class FileLocationBase : IObject { /// Server volume - public virtual long VolumeId { get; } + public virtual long VolumeId => default; /// File ID - public virtual int LocalId { get; } + public virtual int LocalId => default; /// Checksum to access the file - public virtual long Secret { get; } + public virtual long Secret => default; } namespace Layer8