| @@ -1,4 +1,5 @@ | |||||
| #pragma warning disable CS1591 | #pragma warning disable CS1591 | ||||
| using System; | |||||
| using Newtonsoft.Json; | using Newtonsoft.Json; | ||||
| namespace Discord.API | namespace Discord.API | ||||
| @@ -15,6 +16,8 @@ namespace Discord.API | |||||
| public string Url { get; set; } | public string Url { get; set; } | ||||
| [JsonProperty("color")] | [JsonProperty("color")] | ||||
| public uint? Color { get; set; } | public uint? Color { get; set; } | ||||
| [JsonProperty("timestamp")] | |||||
| public Optional<DateTimeOffset> Timestamp { get; set; } | |||||
| [JsonProperty("author")] | [JsonProperty("author")] | ||||
| public Optional<EmbedAuthor> Author { get; set; } | public Optional<EmbedAuthor> Author { get; set; } | ||||
| [JsonProperty("footer")] | [JsonProperty("footer")] | ||||
| @@ -23,11 +23,11 @@ namespace Discord | |||||
| public string Title { get { return _model.Title; } set { _model.Title = value; } } | public string Title { get { return _model.Title; } set { _model.Title = value; } } | ||||
| public string Description { get { return _model.Description; } set { _model.Description = value; } } | public string Description { get { return _model.Description; } set { _model.Description = value; } } | ||||
| public string Url { get { return _model.Url; } set { _model.Url = value; } } | public string Url { get { return _model.Url; } set { _model.Url = value; } } | ||||
| public string ThumbnailUrl { get; set; } | |||||
| public string ImageUrl { get; set; } | |||||
| public Color? Color { get { return _model.Color.HasValue ? new Color(_model.Color.Value) : (Color?)null; } set { _model.Color = value?.RawValue; } } | public Color? Color { get { return _model.Color.HasValue ? new Color(_model.Color.Value) : (Color?)null; } set { _model.Color = value?.RawValue; } } | ||||
| public EmbedAuthorBuilder Author { get; set; } | public EmbedAuthorBuilder Author { get; set; } | ||||
| public EmbedFooterBuilder Footer { get; set; } | public EmbedFooterBuilder Footer { get; set; } | ||||
| public EmbedThumbnailBuilder Thumbnail { get; set; } | |||||
| public EmbedImageBuilder Image { get; set; } | |||||
| public EmbedBuilder WithTitle(string title) | public EmbedBuilder WithTitle(string title) | ||||
| { | { | ||||
| @@ -44,6 +44,16 @@ namespace Discord | |||||
| Url = url; | Url = url; | ||||
| return this; | return this; | ||||
| } | } | ||||
| public EmbedBuilder WithThumbnailUrl(string thumbnailUrl) | |||||
| { | |||||
| ThumbnailUrl = thumbnailUrl; | |||||
| return this; | |||||
| } | |||||
| public EmbedBuilder WithImageUrl(string imageUrl) | |||||
| { | |||||
| ImageUrl = ImageUrl; | |||||
| return this; | |||||
| } | |||||
| public EmbedBuilder WithColor(Color color) | public EmbedBuilder WithColor(Color color) | ||||
| { | { | ||||
| Color = color; | Color = color; | ||||
| @@ -74,30 +84,6 @@ namespace Discord | |||||
| Footer = footer; | Footer = footer; | ||||
| return this; | return this; | ||||
| } | } | ||||
| public EmbedBuilder WithThumbnail(EmbedThumbnailBuilder thumbnail) | |||||
| { | |||||
| Thumbnail = thumbnail; | |||||
| return this; | |||||
| } | |||||
| public EmbedBuilder WithThumbnail(Action<EmbedThumbnailBuilder> action) | |||||
| { | |||||
| var thumbnail = new EmbedThumbnailBuilder(); | |||||
| action(thumbnail); | |||||
| Thumbnail = thumbnail; | |||||
| return this; | |||||
| } | |||||
| public EmbedBuilder WithImage(EmbedImageBuilder image) | |||||
| { | |||||
| Image = image; | |||||
| return this; | |||||
| } | |||||
| public EmbedBuilder WithImage(Action<EmbedImageBuilder> action) | |||||
| { | |||||
| var image = new EmbedImageBuilder(); | |||||
| action(image); | |||||
| Image = image; | |||||
| return this; | |||||
| } | |||||
| public EmbedBuilder AddField(Action<EmbedFieldBuilder> action) | public EmbedBuilder AddField(Action<EmbedFieldBuilder> action) | ||||
| { | { | ||||
| @@ -111,8 +97,8 @@ namespace Discord | |||||
| { | { | ||||
| _model.Author = Author?.ToModel(); | _model.Author = Author?.ToModel(); | ||||
| _model.Footer = Footer?.ToModel(); | _model.Footer = Footer?.ToModel(); | ||||
| _model.Thumbnail = Thumbnail?.ToModel(); | |||||
| _model.Image = Image?.ToModel(); | |||||
| _model.Thumbnail = ThumbnailUrl != null ? new Thumbnail { Url = ThumbnailUrl } : null; | |||||
| _model.Image = ImageUrl != null ? new Image { Url = ImageUrl } : null; | |||||
| _model.Fields = _fields.ToArray(); | _model.Fields = _fields.ToArray(); | ||||
| return _model; | return _model; | ||||
| } | } | ||||
| @@ -207,44 +193,4 @@ namespace Discord | |||||
| internal Footer ToModel() => _model; | internal Footer ToModel() => _model; | ||||
| } | } | ||||
| public class EmbedThumbnailBuilder | |||||
| { | |||||
| private Thumbnail _model; | |||||
| public string Url { get { return _model.Url; } set { _model.Url = value; } } | |||||
| public EmbedThumbnailBuilder() | |||||
| { | |||||
| _model = new Thumbnail(); | |||||
| } | |||||
| public EmbedThumbnailBuilder WithUrl(string url) | |||||
| { | |||||
| Url = url; | |||||
| return this; | |||||
| } | |||||
| internal Thumbnail ToModel() => _model; | |||||
| } | |||||
| public class EmbedImageBuilder | |||||
| { | |||||
| private Image _model; | |||||
| public string Url { get { return _model.Url; } set { _model.Url = value; } } | |||||
| public EmbedImageBuilder() | |||||
| { | |||||
| _model = new Image(); | |||||
| } | |||||
| public EmbedImageBuilder WithUrl(string url) | |||||
| { | |||||
| Url = url; | |||||
| return this; | |||||
| } | |||||
| internal Image ToModel() => _model; | |||||
| } | |||||
| } | } | ||||
| @@ -1,4 +1,5 @@ | |||||
| using System.Collections.Immutable; | |||||
| using System; | |||||
| using System.Collections.Immutable; | |||||
| namespace Discord | namespace Discord | ||||
| { | { | ||||
| @@ -9,6 +10,7 @@ namespace Discord | |||||
| string Title { get; } | string Title { get; } | ||||
| string Description { get; } | string Description { get; } | ||||
| Color? Color { get; } | Color? Color { get; } | ||||
| DateTimeOffset? Timestamp { get; } | |||||
| EmbedImage? Image { get; } | EmbedImage? Image { get; } | ||||
| EmbedVideo? Video { get; } | EmbedVideo? Video { get; } | ||||
| EmbedAuthor? Author { get; } | EmbedAuthor? Author { get; } | ||||
| @@ -14,6 +14,7 @@ namespace Discord | |||||
| public string Title { get; } | public string Title { get; } | ||||
| public string Type { get; } | public string Type { get; } | ||||
| public Color? Color { get; } | public Color? Color { get; } | ||||
| public DateTimeOffset? Timestamp { get; } | |||||
| public EmbedImage? Image { get; } | public EmbedImage? Image { get; } | ||||
| public EmbedVideo? Video { get; } | public EmbedVideo? Video { get; } | ||||
| public EmbedAuthor? Author { get; } | public EmbedAuthor? Author { get; } | ||||
| @@ -26,7 +27,8 @@ namespace Discord | |||||
| string title, | string title, | ||||
| string description, | string description, | ||||
| string url, | string url, | ||||
| Color? color, | |||||
| Color? color, | |||||
| DateTimeOffset? timestamp, | |||||
| EmbedImage? image, | EmbedImage? image, | ||||
| EmbedVideo? video, | EmbedVideo? video, | ||||
| EmbedAuthor? author, | EmbedAuthor? author, | ||||
| @@ -40,6 +42,7 @@ namespace Discord | |||||
| Description = description; | Description = description; | ||||
| Url = url; | Url = url; | ||||
| Color = color; | Color = color; | ||||
| Timestamp = timestamp; | |||||
| Image = image; | Image = image; | ||||
| Video = video; | Video = video; | ||||
| Author = author; | Author = author; | ||||
| @@ -52,13 +55,14 @@ namespace Discord | |||||
| { | { | ||||
| return new Embed(model.Type, model.Title, model.Description, model.Url, | return new Embed(model.Type, model.Title, model.Description, model.Url, | ||||
| model.Color.HasValue ? new Color(model.Color.Value) : (Color?)null, | model.Color.HasValue ? new Color(model.Color.Value) : (Color?)null, | ||||
| model.Timestamp.IsSpecified ? model.Timestamp.Value : (DateTimeOffset?)null, | |||||
| model.Image.IsSpecified ? EmbedImage.Create(model.Image.Value) : (EmbedImage?)null, | model.Image.IsSpecified ? EmbedImage.Create(model.Image.Value) : (EmbedImage?)null, | ||||
| model.Video.IsSpecified ? EmbedVideo.Create(model.Video.Value) : (EmbedVideo?)null, | model.Video.IsSpecified ? EmbedVideo.Create(model.Video.Value) : (EmbedVideo?)null, | ||||
| model.Author.IsSpecified ? EmbedAuthor.Create(model.Author.Value) : (EmbedAuthor?)null, | model.Author.IsSpecified ? EmbedAuthor.Create(model.Author.Value) : (EmbedAuthor?)null, | ||||
| model.Footer.IsSpecified ? EmbedFooter.Create(model.Footer.Value) : (EmbedFooter?)null, | model.Footer.IsSpecified ? EmbedFooter.Create(model.Footer.Value) : (EmbedFooter?)null, | ||||
| model.Provider.IsSpecified ? EmbedProvider.Create(model.Provider.Value) : (EmbedProvider?)null, | model.Provider.IsSpecified ? EmbedProvider.Create(model.Provider.Value) : (EmbedProvider?)null, | ||||
| model.Thumbnail.IsSpecified ? EmbedThumbnail.Create(model.Thumbnail.Value) : (EmbedThumbnail?)null, | model.Thumbnail.IsSpecified ? EmbedThumbnail.Create(model.Thumbnail.Value) : (EmbedThumbnail?)null, | ||||
| model.Fields.IsSpecified ? model.Fields.Value.Select(x => EmbedField.Create(x)).ToImmutableArray() : ImmutableArray.Create<EmbedField>()); | |||||
| model.Fields.IsSpecified ? model.Fields.Value.Select(EmbedField.Create).ToImmutableArray() : ImmutableArray.Create<EmbedField>()); | |||||
| } | } | ||||
| public override string ToString() => Title; | public override string ToString() => Title; | ||||