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()); } }