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