using System;
using System.Collections.Generic;
using System.Linq;
namespace Discord
{
/// An extension class for building an embed.
public static class EmbedBuilderExtensions
{
/// Adds embed color based on the provided raw value.
public static EmbedBuilder WithColor(this EmbedBuilder builder, uint rawValue) =>
builder.WithColor(new Color(rawValue));
/// Adds embed color based on the provided RGB value.
public static EmbedBuilder WithColor(this EmbedBuilder builder, byte r, byte g, byte b) =>
builder.WithColor(new Color(r, g, b));
/// Adds embed color based on the provided RGB value.
/// The argument value is not between 0 to 255.
public static EmbedBuilder WithColor(this EmbedBuilder builder, int r, int g, int b) =>
builder.WithColor(new Color(r, g, b));
/// Adds embed color based on the provided RGB value.
/// The argument value is not between 0 to 1.
public static EmbedBuilder WithColor(this EmbedBuilder builder, float r, float g, float b) =>
builder.WithColor(new Color(r, g, b));
/// Fills the embed author field with the provided user's full username and avatar URL.
public static EmbedBuilder WithAuthor(this EmbedBuilder builder, IUser user) =>
builder.WithAuthor($"{user.Username}#{user.Discriminator}", user.GetAvatarUrl());
/// Converts a object to a .
/// The embed type is not .
public static EmbedBuilder ToEmbedBuilder(this IEmbed embed)
{
if (embed.Type != EmbedType.Rich)
throw new InvalidOperationException($"Only {nameof(EmbedType.Rich)} embeds may be built.");
var builder = new EmbedBuilder
{
Author = new EmbedAuthorBuilder
{
Name = embed.Author?.Name,
IconUrl = embed.Author?.IconUrl,
Url = embed.Author?.Url
},
Color = embed.Color,
Description = embed.Description,
Footer = new EmbedFooterBuilder
{
Text = embed.Footer?.Text,
IconUrl = embed.Footer?.IconUrl
},
ImageUrl = embed.Image?.Url,
ThumbnailUrl = embed.Thumbnail?.Url,
Timestamp = embed.Timestamp,
Title = embed.Title,
Url = embed.Url
};
foreach (var field in embed.Fields)
builder.AddField(field.Name, field.Value, field.Inline);
return builder;
}
///
/// Adds the specified fields into this .
///
/// Field count exceeds .
public static EmbedBuilder WithFields(this EmbedBuilder builder, IEnumerable fields)
{
foreach (var field in fields)
builder.AddField(field);
return builder;
}
///
/// Adds the specified fields into this .
///
public static EmbedBuilder WithFields(this EmbedBuilder builder, params EmbedFieldBuilder[] fields)
=> WithFields(builder, fields.AsEnumerable());
}
}