From a455ccc3343e058fcb0c6e3714128b33d1da4e49 Mon Sep 17 00:00:00 2001 From: "Sindre G. Langhus" Date: Thu, 24 Nov 2016 01:17:39 +0100 Subject: [PATCH 1/4] Adds a timestamp and fixes Volts issues with Thumbnail and Image URLs. --- src/Discord.Net.Core/API/Common/Embed.cs | 3 + .../Entities/Messages/EmbedBuilder.cs | 82 ++++--------------- .../Entities/Messages/IEmbed.cs | 4 +- .../Entities/Messages/Embed.cs | 8 +- 4 files changed, 26 insertions(+), 71 deletions(-) diff --git a/src/Discord.Net.Core/API/Common/Embed.cs b/src/Discord.Net.Core/API/Common/Embed.cs index eb56ce696..5a6661f0a 100644 --- a/src/Discord.Net.Core/API/Common/Embed.cs +++ b/src/Discord.Net.Core/API/Common/Embed.cs @@ -1,4 +1,5 @@ #pragma warning disable CS1591 +using System; using Newtonsoft.Json; namespace Discord.API @@ -15,6 +16,8 @@ namespace Discord.API public string Url { get; set; } [JsonProperty("color")] public uint? Color { get; set; } + [JsonProperty("timestamp")] + public Optional Timestamp { get; set; } [JsonProperty("author")] public Optional Author { get; set; } [JsonProperty("footer")] diff --git a/src/Discord.Net.Core/Entities/Messages/EmbedBuilder.cs b/src/Discord.Net.Core/Entities/Messages/EmbedBuilder.cs index c0069aa9a..f98371a31 100644 --- a/src/Discord.Net.Core/Entities/Messages/EmbedBuilder.cs +++ b/src/Discord.Net.Core/Entities/Messages/EmbedBuilder.cs @@ -23,11 +23,11 @@ namespace Discord public string Title { get { return _model.Title; } set { _model.Title = 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 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 EmbedAuthorBuilder Author { get; set; } public EmbedFooterBuilder Footer { get; set; } - public EmbedThumbnailBuilder Thumbnail { get; set; } - public EmbedImageBuilder Image { get; set; } public EmbedBuilder WithTitle(string title) { @@ -44,6 +44,16 @@ namespace Discord Url = url; 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) { Color = color; @@ -74,30 +84,6 @@ namespace Discord Footer = footer; return this; } - public EmbedBuilder WithThumbnail(EmbedThumbnailBuilder thumbnail) - { - Thumbnail = thumbnail; - return this; - } - public EmbedBuilder WithThumbnail(Action action) - { - var thumbnail = new EmbedThumbnailBuilder(); - action(thumbnail); - Thumbnail = thumbnail; - return this; - } - public EmbedBuilder WithImage(EmbedImageBuilder image) - { - Image = image; - return this; - } - public EmbedBuilder WithImage(Action action) - { - var image = new EmbedImageBuilder(); - action(image); - Image = image; - return this; - } public EmbedBuilder AddField(Action action) { @@ -111,8 +97,8 @@ namespace Discord { _model.Author = Author?.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(); return _model; } @@ -207,44 +193,4 @@ namespace Discord 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; - } } diff --git a/src/Discord.Net.Core/Entities/Messages/IEmbed.cs b/src/Discord.Net.Core/Entities/Messages/IEmbed.cs index 86463534d..d684827c3 100644 --- a/src/Discord.Net.Core/Entities/Messages/IEmbed.cs +++ b/src/Discord.Net.Core/Entities/Messages/IEmbed.cs @@ -1,4 +1,5 @@ -using System.Collections.Immutable; +using System; +using System.Collections.Immutable; namespace Discord { @@ -9,6 +10,7 @@ namespace Discord string Title { get; } string Description { get; } Color? Color { get; } + DateTimeOffset? Timestamp { get; } EmbedImage? Image { get; } EmbedVideo? Video { get; } EmbedAuthor? Author { get; } diff --git a/src/Discord.Net.Rest/Entities/Messages/Embed.cs b/src/Discord.Net.Rest/Entities/Messages/Embed.cs index 7124df417..f51e7e7a7 100644 --- a/src/Discord.Net.Rest/Entities/Messages/Embed.cs +++ b/src/Discord.Net.Rest/Entities/Messages/Embed.cs @@ -14,6 +14,7 @@ namespace Discord public string Title { get; } public string Type { get; } public Color? Color { get; } + public DateTimeOffset? Timestamp { get; } public EmbedImage? Image { get; } public EmbedVideo? Video { get; } public EmbedAuthor? Author { get; } @@ -26,7 +27,8 @@ namespace Discord string title, string description, string url, - Color? color, + Color? color, + DateTimeOffset? timestamp, EmbedImage? image, EmbedVideo? video, EmbedAuthor? author, @@ -40,6 +42,7 @@ namespace Discord Description = description; Url = url; Color = color; + Timestamp = timestamp; Image = image; Video = video; Author = author; @@ -52,13 +55,14 @@ namespace Discord { return new Embed(model.Type, model.Title, model.Description, model.Url, 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.Video.IsSpecified ? EmbedVideo.Create(model.Video.Value) : (EmbedVideo?)null, model.Author.IsSpecified ? EmbedAuthor.Create(model.Author.Value) : (EmbedAuthor?)null, model.Footer.IsSpecified ? EmbedFooter.Create(model.Footer.Value) : (EmbedFooter?)null, model.Provider.IsSpecified ? EmbedProvider.Create(model.Provider.Value) : (EmbedProvider?)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()); + model.Fields.IsSpecified ? model.Fields.Value.Select(EmbedField.Create).ToImmutableArray() : ImmutableArray.Create()); } public override string ToString() => Title; From d0158816d373261f72458b63c2d415757bf2fa47 Mon Sep 17 00:00:00 2001 From: "Sindre G. Langhus" Date: Fri, 25 Nov 2016 17:09:17 +0100 Subject: [PATCH 2/4] Adds DateFormatString to DiscordRestApiClient --- src/Discord.Net.Core/API/Common/Embed.cs | 2 +- .../API/DiscordRestApiClient.cs | 2 +- .../Entities/Messages/EmbedBuilder.cs | 20 +++++++++++++++---- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/Discord.Net.Core/API/Common/Embed.cs b/src/Discord.Net.Core/API/Common/Embed.cs index 5a6661f0a..33b97e641 100644 --- a/src/Discord.Net.Core/API/Common/Embed.cs +++ b/src/Discord.Net.Core/API/Common/Embed.cs @@ -17,7 +17,7 @@ namespace Discord.API [JsonProperty("color")] public uint? Color { get; set; } [JsonProperty("timestamp")] - public Optional Timestamp { get; set; } + public DateTimeOffset? Timestamp { get; set; } [JsonProperty("author")] public Optional Author { get; set; } [JsonProperty("footer")] diff --git a/src/Discord.Net.Core/API/DiscordRestApiClient.cs b/src/Discord.Net.Core/API/DiscordRestApiClient.cs index d050f12a4..a03351a7b 100644 --- a/src/Discord.Net.Core/API/DiscordRestApiClient.cs +++ b/src/Discord.Net.Core/API/DiscordRestApiClient.cs @@ -49,7 +49,7 @@ namespace Discord.API { _restClientProvider = restClientProvider; _userAgent = userAgent; - _serializer = serializer ?? new JsonSerializer { ContractResolver = new DiscordContractResolver() }; + _serializer = serializer ?? new JsonSerializer { DateFormatString = "yyyy-MM-ddTHH:mm:ssZ", DateTimeZoneHandling = DateTimeZoneHandling.Utc, ContractResolver = new DiscordContractResolver() }; RequestQueue = requestQueue; FetchCurrentUser = true; diff --git a/src/Discord.Net.Core/Entities/Messages/EmbedBuilder.cs b/src/Discord.Net.Core/Entities/Messages/EmbedBuilder.cs index f98371a31..045af3b05 100644 --- a/src/Discord.Net.Core/Entities/Messages/EmbedBuilder.cs +++ b/src/Discord.Net.Core/Entities/Messages/EmbedBuilder.cs @@ -20,12 +20,13 @@ namespace Discord _fields = new List(); } - 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 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 DateTimeOffset? Timestamp { get; set; } public EmbedAuthorBuilder Author { get; set; } public EmbedFooterBuilder Footer { get; set; } @@ -59,6 +60,16 @@ namespace Discord Color = color; return this; } + public EmbedBuilder WithTimestamp() + { + Timestamp = DateTimeOffset.UtcNow; + return this; + } + public EmbedBuilder WithTimestamp(DateTimeOffset dateTimeOffset) + { + Timestamp = dateTimeOffset; + return this; + } public EmbedBuilder WithAuthor(EmbedAuthorBuilder author) { @@ -97,6 +108,7 @@ namespace Discord { _model.Author = Author?.ToModel(); _model.Footer = Footer?.ToModel(); + _model.Timestamp = Timestamp?.ToUniversalTime(); _model.Thumbnail = ThumbnailUrl != null ? new Thumbnail { Url = ThumbnailUrl } : null; _model.Image = ImageUrl != null ? new Image { Url = ImageUrl } : null; _model.Fields = _fields.ToArray(); @@ -106,7 +118,7 @@ namespace Discord public class EmbedFieldBuilder { - private Field _model; + private readonly Field _model; public string Name { get { return _model.Name; } set { _model.Name = value; } } public string Value { get { return _model.Value; } set { _model.Value = value; } } @@ -138,7 +150,7 @@ namespace Discord public class EmbedAuthorBuilder { - private Author _model; + private readonly Author _model; public string Name { get { return _model.Name; } set { _model.Name = value; } } public string Url { get { return _model.Url; } set { _model.Url = value; } } @@ -170,7 +182,7 @@ namespace Discord public class EmbedFooterBuilder { - private Footer _model; + private readonly Footer _model; public string Text { get { return _model.Text; } set { _model.Text = value; } } public string IconUrl { get { return _model.IconUrl; } set { _model.IconUrl = value; } } From 54dd0a5cec3d67d7fed120d7bb07d532d3be6036 Mon Sep 17 00:00:00 2001 From: "Sindre G. Langhus" Date: Fri, 25 Nov 2016 21:51:01 +0100 Subject: [PATCH 3/4] Fixed ordering. --- src/Discord.Net.Core/API/DiscordRestApiClient.cs | 2 +- .../Entities/Messages/EmbedBuilder.cs | 12 ++++++------ src/Discord.Net.Core/Entities/Messages/IEmbed.cs | 2 +- src/Discord.Net.Rest/Entities/Messages/Embed.cs | 15 +++++++-------- 4 files changed, 15 insertions(+), 16 deletions(-) diff --git a/src/Discord.Net.Core/API/DiscordRestApiClient.cs b/src/Discord.Net.Core/API/DiscordRestApiClient.cs index a03351a7b..451470d73 100644 --- a/src/Discord.Net.Core/API/DiscordRestApiClient.cs +++ b/src/Discord.Net.Core/API/DiscordRestApiClient.cs @@ -49,7 +49,7 @@ namespace Discord.API { _restClientProvider = restClientProvider; _userAgent = userAgent; - _serializer = serializer ?? new JsonSerializer { DateFormatString = "yyyy-MM-ddTHH:mm:ssZ", DateTimeZoneHandling = DateTimeZoneHandling.Utc, ContractResolver = new DiscordContractResolver() }; + _serializer = serializer ?? new JsonSerializer { DateFormatString = "yyyy-MM-ddTHH:mm:ssZ", ContractResolver = new DiscordContractResolver() }; RequestQueue = requestQueue; FetchCurrentUser = true; diff --git a/src/Discord.Net.Core/Entities/Messages/EmbedBuilder.cs b/src/Discord.Net.Core/Entities/Messages/EmbedBuilder.cs index 045af3b05..aac361888 100644 --- a/src/Discord.Net.Core/Entities/Messages/EmbedBuilder.cs +++ b/src/Discord.Net.Core/Entities/Messages/EmbedBuilder.cs @@ -25,8 +25,8 @@ namespace Discord 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 DateTimeOffset? Timestamp { get; set; } + 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 EmbedFooterBuilder Footer { get; set; } @@ -55,11 +55,6 @@ namespace Discord ImageUrl = ImageUrl; return this; } - public EmbedBuilder WithColor(Color color) - { - Color = color; - return this; - } public EmbedBuilder WithTimestamp() { Timestamp = DateTimeOffset.UtcNow; @@ -70,6 +65,11 @@ namespace Discord Timestamp = dateTimeOffset; return this; } + public EmbedBuilder WithColor(Color color) + { + Color = color; + return this; + } public EmbedBuilder WithAuthor(EmbedAuthorBuilder author) { diff --git a/src/Discord.Net.Core/Entities/Messages/IEmbed.cs b/src/Discord.Net.Core/Entities/Messages/IEmbed.cs index d684827c3..5eef5ec9b 100644 --- a/src/Discord.Net.Core/Entities/Messages/IEmbed.cs +++ b/src/Discord.Net.Core/Entities/Messages/IEmbed.cs @@ -9,8 +9,8 @@ namespace Discord string Type { get; } string Title { get; } string Description { get; } - Color? Color { get; } DateTimeOffset? Timestamp { get; } + Color? Color { get; } EmbedImage? Image { get; } EmbedVideo? Video { get; } EmbedAuthor? Author { get; } diff --git a/src/Discord.Net.Rest/Entities/Messages/Embed.cs b/src/Discord.Net.Rest/Entities/Messages/Embed.cs index f51e7e7a7..a291dc6c0 100644 --- a/src/Discord.Net.Rest/Entities/Messages/Embed.cs +++ b/src/Discord.Net.Rest/Entities/Messages/Embed.cs @@ -13,8 +13,8 @@ namespace Discord public string Url { get; } public string Title { get; } public string Type { get; } - public Color? Color { get; } public DateTimeOffset? Timestamp { get; } + public Color? Color { get; } public EmbedImage? Image { get; } public EmbedVideo? Video { get; } public EmbedAuthor? Author { get; } @@ -24,11 +24,11 @@ namespace Discord public ImmutableArray Fields { get; } internal Embed(string type, - string title, - string description, - string url, - Color? color, + string title, + string description, + string url, DateTimeOffset? timestamp, + Color? color, EmbedImage? image, EmbedVideo? video, EmbedAuthor? author, @@ -53,9 +53,8 @@ namespace Discord } internal static Embed Create(Model model) { - return new Embed(model.Type, model.Title, model.Description, model.Url, - model.Color.HasValue ? new Color(model.Color.Value) : (Color?)null, - model.Timestamp.IsSpecified ? model.Timestamp.Value : (DateTimeOffset?)null, + return new Embed(model.Type, model.Title, model.Description, model.Url,model.Timestamp, + model.Color.HasValue ? new Color(model.Color.Value) : (Color?)null, model.Image.IsSpecified ? EmbedImage.Create(model.Image.Value) : (EmbedImage?)null, model.Video.IsSpecified ? EmbedVideo.Create(model.Video.Value) : (EmbedVideo?)null, model.Author.IsSpecified ? EmbedAuthor.Create(model.Author.Value) : (EmbedAuthor?)null, From 08b836797bd902b1e3cd10472856f2db145643b8 Mon Sep 17 00:00:00 2001 From: Sindre Langhus Date: Sat, 26 Nov 2016 04:43:29 +0100 Subject: [PATCH 4/4] Current timestamp namechange --- src/Discord.Net.Core/Entities/Messages/EmbedBuilder.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Discord.Net.Core/Entities/Messages/EmbedBuilder.cs b/src/Discord.Net.Core/Entities/Messages/EmbedBuilder.cs index aac361888..2fba6d47e 100644 --- a/src/Discord.Net.Core/Entities/Messages/EmbedBuilder.cs +++ b/src/Discord.Net.Core/Entities/Messages/EmbedBuilder.cs @@ -55,7 +55,7 @@ namespace Discord ImageUrl = ImageUrl; return this; } - public EmbedBuilder WithTimestamp() + public EmbedBuilder WithCurrentTimestamp() { Timestamp = DateTimeOffset.UtcNow; return this;