| @@ -1,4 +1,5 @@ | |||
| #pragma warning disable CS1591 | |||
| using System; | |||
| using Newtonsoft.Json; | |||
| namespace Discord.API.Rest | |||
| @@ -13,6 +14,8 @@ namespace Discord.API.Rest | |||
| public Optional<string> Nonce { get; set; } | |||
| [JsonProperty("tts")] | |||
| public Optional<bool> IsTTS { get; set; } | |||
| [JsonProperty("embed")] | |||
| public Optional<Embed> Embed { get; set; } | |||
| public CreateMessageParams(string content) | |||
| { | |||
| @@ -8,7 +8,7 @@ namespace Discord | |||
| string Type { get; } | |||
| string Title { get; } | |||
| string Description { get; } | |||
| uint? Color { get; } | |||
| Color? Color { get; } | |||
| EmbedAuthor? Author { get; } | |||
| EmbedFooter? Footer { get; } | |||
| EmbedProvider? Provider { get; } | |||
| @@ -0,0 +1,132 @@ | |||
| using System; | |||
| using System.Collections.Generic; | |||
| using Embed = Discord.API.Embed; | |||
| using Field = Discord.API.EmbedField; | |||
| using Author = Discord.API.EmbedAuthor; | |||
| using Footer = Discord.API.EmbedFooter; | |||
| namespace Discord | |||
| { | |||
| public class EmbedBuilder | |||
| { | |||
| private Embed embed = new Embed(); | |||
| List<Field> fields = new List<Field>(); | |||
| public EmbedBuilder() | |||
| { | |||
| embed.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) | |||
| { | |||
| fields.Add(builder(new EmbedFieldBuilder()).Build()); | |||
| return this; | |||
| } | |||
| public EmbedBuilder Author(Func<EmbedAuthorBuilder, EmbedAuthorBuilder> builder) | |||
| { | |||
| embed.Author = builder(new EmbedAuthorBuilder()).Build(); | |||
| return this; | |||
| } | |||
| public EmbedBuilder Footer(Func<EmbedFooterBuilder, EmbedFooterBuilder> builder) | |||
| { | |||
| embed.Footer = builder(new EmbedFooterBuilder()).Build(); | |||
| return this; | |||
| } | |||
| public Embed Build() | |||
| { | |||
| embed.Fields = fields.ToArray(); | |||
| return embed; | |||
| } | |||
| } | |||
| public class EmbedFieldBuilder | |||
| { | |||
| private Field embedField = 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 class EmbedAuthorBuilder | |||
| { | |||
| 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; | |||
| } | |||
| } | |||
| public class EmbedFooterBuilder | |||
| { | |||
| private Footer footer = 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; | |||
| } | |||
| } | |||
| } | |||
| @@ -116,6 +116,13 @@ namespace Discord.Rest | |||
| var model = await client.ApiClient.CreateMessageAsync(channel.Id, args, options).ConfigureAwait(false); | |||
| return RestUserMessage.Create(client, guild, model); | |||
| } | |||
| public static async Task<RestUserMessage> SendRichMessageAsync(IChannel channel, BaseDiscordClient client, | |||
| string text, bool isTTS, API.Embed embed, IGuild guild, RequestOptions options) | |||
| { | |||
| var args = new CreateMessageParams(text) { IsTTS = isTTS, Embed = embed }; | |||
| var model = await client.ApiClient.CreateMessageAsync(channel.Id, args, options).ConfigureAwait(false); | |||
| return RestUserMessage.Create(client, guild, model); | |||
| } | |||
| public static async Task<RestUserMessage> SendFileAsync(IChannel channel, BaseDiscordClient client, | |||
| string filePath, string text, bool isTTS, IGuild guild, RequestOptions options) | |||
| @@ -1,4 +1,5 @@ | |||
| using System.Collections.Immutable; | |||
| using System; | |||
| using System.Collections.Immutable; | |||
| using System.Diagnostics; | |||
| using System.Linq; | |||
| using Model = Discord.API.Embed; | |||
| @@ -12,7 +13,7 @@ namespace Discord | |||
| public string Url { get; } | |||
| public string Title { get; } | |||
| public string Type { get; } | |||
| public uint? Color { get; } | |||
| public Color? Color { get; } | |||
| public EmbedAuthor? Author { get; } | |||
| public EmbedFooter? Footer { get; } | |||
| public EmbedProvider? Provider { get; } | |||
| @@ -23,7 +24,7 @@ namespace Discord | |||
| string title, | |||
| string description, | |||
| string url, | |||
| uint? color, | |||
| Color? color, | |||
| EmbedAuthor? author, | |||
| EmbedFooter? footer, | |||
| EmbedProvider? provider, | |||
| @@ -34,12 +35,17 @@ namespace Discord | |||
| Title = title; | |||
| Description = description; | |||
| Url = url; | |||
| Color = color; | |||
| Author = author; | |||
| Footer = footer; | |||
| Provider = provider; | |||
| Thumbnail = thumbnail; | |||
| Fields = fields; | |||
| } | |||
| internal static Embed Create(Model model) | |||
| { | |||
| return new Embed(model.Type, model.Title, model.Description, model.Url, model.Color, | |||
| return new Embed(model.Type, model.Title, model.Description, model.Url, | |||
| model.Color.HasValue ? new Color(model.Color.Value) : (Color?)null, | |||
| model.Author.IsSpecified ? EmbedAuthor.Create(model.Author.Value) : (EmbedAuthor?)null, | |||
| model.Footer.IsSpecified ? EmbedFooter.Create(model.Footer.Value) : (EmbedFooter?)null, | |||
| model.Provider.IsSpecified ? EmbedProvider.Create(model.Provider.Value) : (EmbedProvider?)null, | |||