Browse Source

Add Embed Provider Structure into EmbedBuilder

pull/926/head
Acid Chicken (硫酸鶏) 7 years ago
parent
commit
2433518ee0
No known key found for this signature in database GPG Key ID: E292DBE5D23A5846
4 changed files with 70 additions and 3 deletions
  1. +1
    -1
      src/Discord.Net.Core/Entities/Messages/Embed.cs
  2. +2
    -2
      src/Discord.Net.Core/Entities/Messages/EmbedProvider.cs
  3. +62
    -0
      src/Discord.Net.Rest/Entities/Messages/EmbedBuilder.cs
  4. +5
    -0
      src/Discord.Net.Rest/Extensions/EmbedBuilderExtensions.cs

+ 1
- 1
src/Discord.Net.Core/Entities/Messages/Embed.cs View File

@@ -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})";


+ 2
- 2
src/Discord.Net.Core/Entities/Messages/EmbedProvider.cs View File

@@ -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)
{


+ 62
- 0
src/Discord.Net.Rest/Entities/Messages/EmbedBuilder.cs View File

@@ -71,6 +71,7 @@ namespace Discord

public EmbedAuthorBuilder Author { get; set; }
public EmbedFooterBuilder Footer { get; set; }
public EmbedProviderBuilder Provider { get; set; }
private List<EmbedFieldBuilder> _fields;
public List<EmbedFieldBuilder> Fields
{
@@ -171,6 +172,31 @@ namespace Discord
return this;
}

public EmbedBuilder WithProvider(EmbedProviderBuilder provider)
{
Provider = provider;
return this;
}

public EmbedBuilder WithProvider(Action<EmbedProviderBuilder> 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<EmbedField>(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;
}
}

+ 5
- 0
src/Discord.Net.Rest/Extensions/EmbedBuilderExtensions.cs View File

@@ -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,


Loading…
Cancel
Save