From 2433518ee0c9a884b5dbc3a7691bd4d396b7b5df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?= Date: Sun, 7 Jan 2018 16:23:30 +0900 Subject: [PATCH] Add Embed Provider Structure into EmbedBuilder --- .../Entities/Messages/Embed.cs | 2 +- .../Entities/Messages/EmbedProvider.cs | 4 +- .../Entities/Messages/EmbedBuilder.cs | 62 +++++++++++++++++++ .../Extensions/EmbedBuilderExtensions.cs | 5 ++ 4 files changed, 70 insertions(+), 3 deletions(-) diff --git a/src/Discord.Net.Core/Entities/Messages/Embed.cs b/src/Discord.Net.Core/Entities/Messages/Embed.cs index 5fae7acde..8e7f67879 100644 --- a/src/Discord.Net.Core/Entities/Messages/Embed.cs +++ b/src/Discord.Net.Core/Entities/Messages/Embed.cs @@ -57,7 +57,7 @@ namespace Discord Fields = fields; } - public int Length => Title?.Length + Author?.Name?.Length + Description?.Length + Footer?.Text?.Length + Fields.Sum(f => f.Name.Length + f.Value.ToString().Length) ?? 0; + public int Length => Title?.Length + Author?.Name?.Length + Description?.Length + Footer?.Text?.Length + Provider?.Name?.Length + Fields.Sum(f => f.Name.Length + f.Value.ToString().Length) ?? 0; public override string ToString() => Title; private string DebuggerDisplay => $"{Title} ({Type})"; diff --git a/src/Discord.Net.Core/Entities/Messages/EmbedProvider.cs b/src/Discord.Net.Core/Entities/Messages/EmbedProvider.cs index 24722b158..f26dfba02 100644 --- a/src/Discord.Net.Core/Entities/Messages/EmbedProvider.cs +++ b/src/Discord.Net.Core/Entities/Messages/EmbedProvider.cs @@ -6,8 +6,8 @@ namespace Discord [DebuggerDisplay("{DebuggerDisplay,nq}")] public struct EmbedProvider { - public string Name { get; } - public string Url { get; } + public string Name { get; internal set; } + public string Url { get; internal set; } internal EmbedProvider(string name, string url) { diff --git a/src/Discord.Net.Rest/Entities/Messages/EmbedBuilder.cs b/src/Discord.Net.Rest/Entities/Messages/EmbedBuilder.cs index f5663cea3..fe894ecd9 100644 --- a/src/Discord.Net.Rest/Entities/Messages/EmbedBuilder.cs +++ b/src/Discord.Net.Rest/Entities/Messages/EmbedBuilder.cs @@ -71,6 +71,7 @@ namespace Discord public EmbedAuthorBuilder Author { get; set; } public EmbedFooterBuilder Footer { get; set; } + public EmbedProviderBuilder Provider { get; set; } private List _fields; public List Fields { @@ -171,6 +172,31 @@ namespace Discord return this; } + public EmbedBuilder WithProvider(EmbedProviderBuilder provider) + { + Provider = provider; + return this; + } + + public EmbedBuilder WithProvider(Action action) + { + var provider = new EmbedProviderBuilder(); + action(provider); + Provider = provider; + return this; + } + + public EmbedBuilder WithProvider(string name, string url = null) + { + var provider = new EmbedProviderBuilder + { + Name = name, + Url = url + }; + Provider = provider; + return this; + } + public EmbedBuilder AddField(string name, object value, bool inline = false) { var field = new EmbedFieldBuilder() @@ -203,6 +229,7 @@ namespace Discord { _embed.Footer = Footer?.Build(); _embed.Author = Author?.Build(); + _embed.Provider = Provider?.Build(); var fields = ImmutableArray.CreateBuilder(Fields.Count); for (int i = 0; i < Fields.Count; i++) fields.Add(Fields[i].Build()); @@ -376,4 +403,39 @@ namespace Discord public EmbedFooter Build() => _footer; } + + public class EmbedProviderBuilder + { + private EmbedProvider _provider; + + public string Name + { + get => _provider.Name; + set => _provider.Name = value; + } + + public string Url + { + get => _provider.Url; + set + { + if (!value.IsNullOrUri()) throw new ArgumentException("Url must be a well-formed URI", nameof(Url)); + } + } + + public EmbedProviderBuilder WithName(string name) + { + Name = name; + return this; + } + + public EmbedProviderBuilder WithUrl(string url) + { + Url = url; + return this; + } + + public EmbedProvider Build() + => _provider; + } } diff --git a/src/Discord.Net.Rest/Extensions/EmbedBuilderExtensions.cs b/src/Discord.Net.Rest/Extensions/EmbedBuilderExtensions.cs index 2eb4ed473..9b62072cb 100644 --- a/src/Discord.Net.Rest/Extensions/EmbedBuilderExtensions.cs +++ b/src/Discord.Net.Rest/Extensions/EmbedBuilderExtensions.cs @@ -43,6 +43,11 @@ namespace Discord IconUrl = embed.Footer?.IconUrl }, ImageUrl = embed.Image?.Url, + Provider = new EmbedProviderBuilder + { + Name = embed.Provider?.Name, + Url = embed.Provider?.Url + }, ThumbnailUrl = embed.Thumbnail?.Url, Timestamp = embed.Timestamp, Title = embed.Title,