Browse Source

Merge 28d44d586d into 9d77a3cd37

pull/926/merge
Acid Chicken (硫酸鶏) GitHub 7 years ago
parent
commit
b241a256a0
4 changed files with 86 additions and 4 deletions
  1. +1
    -1
      src/Discord.Net.Core/Entities/Messages/Embed.cs
  2. +2
    -2
      src/Discord.Net.Core/Entities/Messages/EmbedProvider.cs
  3. +76
    -0
      src/Discord.Net.Rest/Entities/Messages/EmbedBuilder.cs
  4. +7
    -1
      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; 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; public override string ToString() => Title;
private string DebuggerDisplay => $"{Title} ({Type})"; 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}")] [DebuggerDisplay("{DebuggerDisplay,nq}")]
public struct EmbedProvider 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) internal EmbedProvider(string name, string url)
{ {


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

@@ -66,11 +66,21 @@ namespace Discord
_embed.Image = new EmbedImage(value, null, null, null); _embed.Image = new EmbedImage(value, null, null, null);
} }
} }
public string VideoUrl
{
get => _embed.Video?.Url;
set
{
if (!value.IsNullOrUri()) throw new ArgumentException("Url must be a well-formed URI", nameof(VideoUrl));
_embed.Video = new EmbedVideo(value, null, null);
}
}
public DateTimeOffset? Timestamp { get => _embed.Timestamp; set { _embed.Timestamp = value; } } public DateTimeOffset? Timestamp { get => _embed.Timestamp; set { _embed.Timestamp = value; } }
public Color? Color { get => _embed.Color; set { _embed.Color = value; } } public Color? Color { get => _embed.Color; set { _embed.Color = value; } }


public EmbedAuthorBuilder Author { get; set; } public EmbedAuthorBuilder Author { get; set; }
public EmbedFooterBuilder Footer { get; set; } public EmbedFooterBuilder Footer { get; set; }
public EmbedProviderBuilder Provider { get; set; }
private List<EmbedFieldBuilder> _fields; private List<EmbedFieldBuilder> _fields;
public List<EmbedFieldBuilder> Fields public List<EmbedFieldBuilder> Fields
{ {
@@ -109,6 +119,11 @@ namespace Discord
ImageUrl = imageUrl; ImageUrl = imageUrl;
return this; return this;
} }
public EmbedBuilder WithVideoUrl(string videoUrl)
{
VideoUrl = videoUrl;
return this;
}
public EmbedBuilder WithCurrentTimestamp() public EmbedBuilder WithCurrentTimestamp()
{ {
Timestamp = DateTimeOffset.UtcNow; Timestamp = DateTimeOffset.UtcNow;
@@ -171,6 +186,31 @@ namespace Discord
return this; 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) public EmbedBuilder AddField(string name, object value, bool inline = false)
{ {
var field = new EmbedFieldBuilder() var field = new EmbedFieldBuilder()
@@ -203,6 +243,7 @@ namespace Discord
{ {
_embed.Footer = Footer?.Build(); _embed.Footer = Footer?.Build();
_embed.Author = Author?.Build(); _embed.Author = Author?.Build();
_embed.Provider = Provider?.Build();
var fields = ImmutableArray.CreateBuilder<EmbedField>(Fields.Count); var fields = ImmutableArray.CreateBuilder<EmbedField>(Fields.Count);
for (int i = 0; i < Fields.Count; i++) for (int i = 0; i < Fields.Count; i++)
fields.Add(Fields[i].Build()); fields.Add(Fields[i].Build());
@@ -376,4 +417,39 @@ namespace Discord
public EmbedFooter Build() public EmbedFooter Build()
=> _footer; => _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;
}
} }

+ 7
- 1
src/Discord.Net.Rest/Extensions/EmbedBuilderExtensions.cs View File

@@ -43,10 +43,16 @@ namespace Discord
IconUrl = embed.Footer?.IconUrl IconUrl = embed.Footer?.IconUrl
}, },
ImageUrl = embed.Image?.Url, ImageUrl = embed.Image?.Url,
Provider = new EmbedProviderBuilder
{
Name = embed.Provider?.Name,
Url = embed.Provider?.Url
},
ThumbnailUrl = embed.Thumbnail?.Url, ThumbnailUrl = embed.Thumbnail?.Url,
Timestamp = embed.Timestamp, Timestamp = embed.Timestamp,
Title = embed.Title, Title = embed.Title,
Url = embed.Url
Url = embed.Url,
VideoUrl = embed.Video?.Url
}; };


foreach (var field in embed.Fields) foreach (var field in embed.Fields)


Loading…
Cancel
Save