@@ -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, | ||||