| @@ -9,124 +9,74 @@ namespace Discord | |||
| { | |||
| public class EmbedBuilder | |||
| { | |||
| private Embed embed = new Embed(); | |||
| List<Field> fields = new List<Field>(); | |||
| private Embed model = new Embed(); | |||
| private List<Field> fields = new List<Field>(); | |||
| public EmbedBuilder() | |||
| { | |||
| embed.Type = "rich"; | |||
| model.Type = "rich"; | |||
| } | |||
| public EmbedBuilder Title(string title) | |||
| { | |||
| embed.Title = title; | |||
| return this; | |||
| } | |||
| public EmbedBuilder Description(string description) | |||
| { | |||
| embed.Description = description; | |||
| return this; | |||
| } | |||
| public EmbedBuilder Url(string url) | |||
| { | |||
| embed.Url = url; | |||
| return this; | |||
| } | |||
| public EmbedBuilder Color(Color color) | |||
| { | |||
| embed.Color = color.RawValue; | |||
| return this; | |||
| } | |||
| public EmbedBuilder Field(Func<EmbedFieldBuilder, EmbedFieldBuilder> builder) | |||
| public string Title { get { return model.Title; } set { model.Title = value; } } | |||
| public string Description { get { return model.Description; } set { model.Description = value; } } | |||
| public string Url { get { return model.Url; } set { model.Url = value; } } | |||
| public Color? Color { get { return model.Color.HasValue ? new Color(model.Color.Value) : (Color?)null; } set { model.Color = value?.RawValue; } } | |||
| public void SetAuthor(Action<EmbedBuilderAuthor> action) | |||
| { | |||
| fields.Add(builder(new EmbedFieldBuilder()).Build()); | |||
| return this; | |||
| var author = new EmbedBuilderAuthor(); | |||
| action(author); | |||
| model.Author = author.ToModel(); | |||
| } | |||
| public EmbedBuilder Author(Func<EmbedAuthorBuilder, EmbedAuthorBuilder> builder) | |||
| public void SetFooter(Action<EmbedBuilderFooter> action) | |||
| { | |||
| embed.Author = builder(new EmbedAuthorBuilder()).Build(); | |||
| return this; | |||
| var footer = new EmbedBuilderFooter(); | |||
| action(footer); | |||
| model.Footer = footer.ToModel(); | |||
| } | |||
| public EmbedBuilder Footer(Func<EmbedFooterBuilder, EmbedFooterBuilder> builder) | |||
| public void AddField(Action<EmbedBuilderField> action) | |||
| { | |||
| embed.Footer = builder(new EmbedFooterBuilder()).Build(); | |||
| return this; | |||
| var field = new EmbedBuilderField(); | |||
| action(field); | |||
| fields.Add(field.ToModel()); | |||
| } | |||
| public Embed Build() | |||
| internal Embed Build() | |||
| { | |||
| embed.Fields = fields.ToArray(); | |||
| return embed; | |||
| model.Fields = fields.ToArray(); | |||
| return model; | |||
| } | |||
| } | |||
| public class EmbedFieldBuilder | |||
| public class EmbedBuilderField | |||
| { | |||
| private Field embedField = new Field(); | |||
| private Field model = new Field(); | |||
| public EmbedFieldBuilder Name(string name) | |||
| { | |||
| embedField.Name = name; | |||
| return this; | |||
| } | |||
| public EmbedFieldBuilder Value(string value) | |||
| { | |||
| embedField.Value = value; | |||
| return this; | |||
| } | |||
| public EmbedFieldBuilder Inline(bool inline) | |||
| { | |||
| embedField.Inline = inline; | |||
| return this; | |||
| } | |||
| public Field Build() | |||
| { | |||
| return embedField; | |||
| } | |||
| public string Name { get { return model.Name; } set { model.Name = value; } } | |||
| public string Value { get { return model.Value; } set { model.Value = value; } } | |||
| public bool IsInline { get { return model.Inline; } set { model.Inline = value; } } | |||
| internal Field ToModel() => model; | |||
| } | |||
| public class EmbedAuthorBuilder | |||
| public class EmbedBuilderAuthor | |||
| { | |||
| private Author author = new Author(); | |||
| public EmbedAuthorBuilder Name(string name) | |||
| { | |||
| author.Name = name; | |||
| return this; | |||
| } | |||
| public EmbedAuthorBuilder Url(string url) | |||
| { | |||
| author.Url = url; | |||
| return this; | |||
| } | |||
| public EmbedAuthorBuilder IconUrl(string iconUrl) | |||
| { | |||
| author.IconUrl = iconUrl; | |||
| return this; | |||
| } | |||
| public Author Build() | |||
| { | |||
| return author; | |||
| } | |||
| private Author model = new Author(); | |||
| public string Name { get { return model.Name; } set { model.Name = value; } } | |||
| public string Url { get { return model.Url; } set { model.Url = value; } } | |||
| public string IconUrl { get { return model.IconUrl; } set { model.IconUrl = value; } } | |||
| internal Author ToModel() => model; | |||
| } | |||
| public class EmbedFooterBuilder | |||
| public class EmbedBuilderFooter | |||
| { | |||
| private Footer footer = new Footer(); | |||
| private Footer model = new Footer(); | |||
| public EmbedFooterBuilder Text(string text) | |||
| { | |||
| footer.Text = text; | |||
| return this; | |||
| } | |||
| public EmbedFooterBuilder IconUrl(string iconUrl) | |||
| { | |||
| footer.IconUrl = iconUrl; | |||
| return this; | |||
| } | |||
| public Footer Build() | |||
| { | |||
| return footer; | |||
| } | |||
| public string Text { get { return model.Text; } set { model.Text = value; } } | |||
| public string IconUrl { get { return model.IconUrl; } set { model.IconUrl = value; } } | |||
| internal Footer ToModel() => model; | |||
| } | |||
| } | |||