diff --git a/.github/dev.yml b/.github/dev.yml index 052762e..ebcdc85 100644 --- a/.github/dev.yml +++ b/.github/dev.yml @@ -2,7 +2,7 @@ pr: none trigger: - master -name: 2.6.3-dev.$(Rev:r) +name: 2.6.4-dev.$(Rev:r) pool: vmImage: ubuntu-latest diff --git a/src/TL.Helpers.cs b/src/TL.Helpers.cs index e8ad355..843b666 100644 --- a/src/TL.Helpers.cs +++ b/src/TL.Helpers.cs @@ -208,6 +208,21 @@ namespace TL partial class ChatParticipantsForbidden { public override ChatParticipantBase[] Participants => Array.Empty(); } partial class ChatParticipants { public override ChatParticipantBase[] Participants => participants; } + partial class MessageMedia { ///Use this helper method to send a copy of the media without downloading it + ///Quiz poll may need to be voted before obtaining the correct answers. Dice will not replicate same value.
May return for Invoice and other unsupported media types
+ public virtual InputMedia ToInputMedia() => null; } + partial class MessageMediaPhoto { public override InputMedia ToInputMedia() => new InputMediaPhoto { id = photo }; } + partial class MessageMediaGeo { public override InputMedia ToInputMedia() => new InputMediaGeoPoint { geo_point = geo }; } + partial class MessageMediaContact { public override InputMedia ToInputMedia() => new InputMediaContact { first_name = first_name, last_name = last_name, phone_number = phone_number, vcard = vcard }; } + partial class MessageMediaDocument { public override InputMedia ToInputMedia() => new InputMediaDocument { id = document }; } + partial class MessageMediaVenue { public override InputMedia ToInputMedia() => new InputMediaVenue { geo_point = geo, title = title, address = address, provider = provider, venue_id = venue_id, venue_type = venue_type }; } + partial class MessageMediaGame { public override InputMedia ToInputMedia() => new InputMediaGame { id = game }; } + partial class MessageMediaGeoLive { public override InputMedia ToInputMedia() => new InputMediaGeoLive { geo_point = geo, heading = heading, period = period, proximity_notification_radius = proximity_notification_radius, + flags = (period != 0 ? InputMediaGeoLive.Flags.has_period : 0) | (flags.HasFlag(Flags.has_heading) ? InputMediaGeoLive.Flags.has_heading : 0) | (flags.HasFlag(Flags.has_proximity_notification_radius) ? InputMediaGeoLive.Flags.has_proximity_notification_radius : 0) }; } + partial class MessageMediaPoll { public override InputMedia ToInputMedia() => new InputMediaPoll { poll = poll, correct_answers = results.results?.Where(pav => pav.flags.HasFlag(PollAnswerVoters.Flags.correct)).Select(pav => pav.option).ToArray(), solution = results.solution, solution_entities = results.solution_entities, + flags = (results.results != null ? InputMediaPoll.Flags.has_correct_answers : 0) | (results.solution != null ? InputMediaPoll.Flags.has_solution : 0) }; } + partial class MessageMediaDice { public override InputMedia ToInputMedia() => new InputMediaDice { emoticon = emoticon }; } + partial class PhotoBase { public abstract long ID { get; } @@ -287,7 +302,12 @@ namespace TL } } - public partial class InputMediaUploadedDocument + partial class GeoPoint + { + public static implicit operator InputGeoPoint(GeoPoint geo) => new() { lat = geo.lat, lon = geo.lon, accuracy_radius = geo.accuracy_radius, flags = (InputGeoPoint.Flags)geo.flags }; + } + + partial class InputMediaUploadedDocument { public InputMediaUploadedDocument() { } public InputMediaUploadedDocument(InputFileBase inputFile, string mimeType) @@ -495,7 +515,8 @@ namespace TL partial class Messages_PeerDialogs { public IPeerInfo UserOrChat(DialogBase dialog) => dialog.Peer?.UserOrChat(users, chats); } - partial class WebDocument { public static implicit operator InputWebFileLocation(WebDocument doc) => new() { url = doc.url, access_hash = doc.access_hash }; } + partial class Game { public static implicit operator InputGameID(Game game) => new() { id = game.id, access_hash = game.access_hash }; } + partial class WebDocument { public static implicit operator InputWebFileLocation(WebDocument doc) => new() { url = doc.url, access_hash = doc.access_hash }; } partial class InputMessage { diff --git a/src/TL.Schema.cs b/src/TL.Schema.cs index a6e8f7b..8b1d2a6 100644 --- a/src/TL.Schema.cs +++ b/src/TL.Schema.cs @@ -1673,10 +1673,10 @@ namespace TL /// Media Derived classes: , , , , , , , , , , , See /// a null value means messageMediaEmpty - public abstract class MessageMedia : IObject { } + public abstract partial class MessageMedia : IObject { } /// Attached photo. See [TLDef(0x695150D7)] - public class MessageMediaPhoto : MessageMedia + public partial class MessageMediaPhoto : MessageMedia { /// Flags, see TL conditional fields public Flags flags; @@ -1695,14 +1695,14 @@ namespace TL } /// Attached map. See [TLDef(0x56E0D474)] - public class MessageMediaGeo : MessageMedia + public partial class MessageMediaGeo : MessageMedia { /// GeoPoint public GeoPoint geo; } /// Attached contact. See [TLDef(0x70322949)] - public class MessageMediaContact : MessageMedia + public partial class MessageMediaContact : MessageMedia { /// Phone number public string phone_number; @@ -1720,7 +1720,7 @@ namespace TL public class MessageMediaUnsupported : MessageMedia { } /// Document (video, audio, voice, sticker, any media type except photo) See [TLDef(0x9CB070D7)] - public class MessageMediaDocument : MessageMedia + public partial class MessageMediaDocument : MessageMedia { /// Flags, see TL conditional fields public Flags flags; @@ -1748,7 +1748,7 @@ namespace TL } /// Venue See [TLDef(0x2EC0533F)] - public class MessageMediaVenue : MessageMedia + public partial class MessageMediaVenue : MessageMedia { /// Geolocation of venue public GeoPoint geo; @@ -1765,7 +1765,7 @@ namespace TL } /// Telegram game See [TLDef(0xFDB19008)] - public class MessageMediaGame : MessageMedia + public partial class MessageMediaGame : MessageMedia { /// Game public Game game; @@ -1805,7 +1805,7 @@ namespace TL } /// Indicates a live geolocation See [TLDef(0xB940C666)] - public class MessageMediaGeoLive : MessageMedia + public partial class MessageMediaGeoLive : MessageMedia { /// Flags, see TL conditional fields public Flags flags; @@ -1828,7 +1828,7 @@ namespace TL } /// Poll See [TLDef(0x4BD6E798)] - public class MessageMediaPoll : MessageMedia + public partial class MessageMediaPoll : MessageMedia { /// The poll public Poll poll; @@ -1837,7 +1837,7 @@ namespace TL } /// Dice-based animated sticker See [TLDef(0x3F7EE58B)] - public class MessageMediaDice : MessageMedia + public partial class MessageMediaDice : MessageMedia { /// Dice value public int value; @@ -2355,7 +2355,7 @@ namespace TL /// GeoPoint. See /// a null value means geoPointEmpty [TLDef(0xB2A2F663)] - public class GeoPoint : IObject + public partial class GeoPoint : IObject { /// Flags, see TL conditional fields public Flags flags; @@ -8029,7 +8029,7 @@ namespace TL /// Indicates an already sent game See [TLDef(0xBDF9653B)] - public class Game : IObject + public partial class Game : IObject { /// Flags, see TL conditional fields public Flags flags;