| @@ -6,9 +6,9 @@ namespace Discord.Commands | |||||
| { | { | ||||
| public CommandContext Context { get; internal set; } | public CommandContext Context { get; internal set; } | ||||
| protected virtual async Task<IUserMessage> ReplyAsync(string message, bool isTTS = false, RequestOptions options = null) | |||||
| protected virtual async Task<IUserMessage> ReplyAsync(string message, bool isTTS = false, API.Embed embed = null, RequestOptions options = null) | |||||
| { | { | ||||
| return await Context.Channel.SendMessageAsync(message, isTTS, options).ConfigureAwait(false); | |||||
| return await Context.Channel.SendMessageAsync(message, isTTS, embed, options).ConfigureAwait(false); | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| @@ -13,9 +13,17 @@ namespace Discord.API | |||||
| public string Description { get; set; } | public string Description { get; set; } | ||||
| [JsonProperty("url")] | [JsonProperty("url")] | ||||
| public string Url { get; set; } | public string Url { get; set; } | ||||
| [JsonProperty("color")] | |||||
| public uint? Color { get; set; } | |||||
| [JsonProperty("author")] | |||||
| public Optional<EmbedAuthor> Author { get; set; } | |||||
| [JsonProperty("footer")] | |||||
| public Optional<EmbedFooter> Footer { get; set; } | |||||
| [JsonProperty("thumbnail")] | [JsonProperty("thumbnail")] | ||||
| public Optional<EmbedThumbnail> Thumbnail { get; set; } | public Optional<EmbedThumbnail> Thumbnail { get; set; } | ||||
| [JsonProperty("provider")] | [JsonProperty("provider")] | ||||
| public Optional<EmbedProvider> Provider { get; set; } | public Optional<EmbedProvider> Provider { get; set; } | ||||
| [JsonProperty("fields")] | |||||
| public Optional<EmbedField[]> Fields { get; set; } | |||||
| } | } | ||||
| } | } | ||||
| @@ -0,0 +1,16 @@ | |||||
| using Newtonsoft.Json; | |||||
| namespace Discord.API | |||||
| { | |||||
| public class EmbedAuthor | |||||
| { | |||||
| [JsonProperty("name")] | |||||
| public string Name { get; set; } | |||||
| [JsonProperty("url")] | |||||
| public string Url { get; set; } | |||||
| [JsonProperty("icon_url")] | |||||
| public string IconUrl { get; set; } | |||||
| [JsonProperty("proxy_icon_url")] | |||||
| public string ProxyIconUrl { get; set; } | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,14 @@ | |||||
| using Newtonsoft.Json; | |||||
| namespace Discord.API | |||||
| { | |||||
| public class EmbedField | |||||
| { | |||||
| [JsonProperty("name")] | |||||
| public string Name { get; set; } | |||||
| [JsonProperty("value")] | |||||
| public string Value { get; set; } | |||||
| [JsonProperty("inline")] | |||||
| public bool Inline { get; set; } | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,14 @@ | |||||
| using Newtonsoft.Json; | |||||
| namespace Discord.API | |||||
| { | |||||
| public class EmbedFooter | |||||
| { | |||||
| [JsonProperty("text")] | |||||
| public string Text { get; set; } | |||||
| [JsonProperty("icon_url")] | |||||
| public string IconUrl { get; set; } | |||||
| [JsonProperty("proxy_icon_url")] | |||||
| public string ProxyIconUrl { get; set; } | |||||
| } | |||||
| } | |||||
| @@ -439,7 +439,9 @@ namespace Discord.API | |||||
| { | { | ||||
| Preconditions.NotEqual(channelId, 0, nameof(channelId)); | Preconditions.NotEqual(channelId, 0, nameof(channelId)); | ||||
| Preconditions.NotNull(args, nameof(args)); | Preconditions.NotNull(args, nameof(args)); | ||||
| Preconditions.NotNullOrEmpty(args.Content, nameof(args.Content)); | |||||
| if (!args.Embed.IsSpecified || args.Embed.Value == null) | |||||
| Preconditions.NotNullOrEmpty(args.Content, nameof(args.Content)); | |||||
| if (args.Content.Length > DiscordConfig.MaxMessageSize) | if (args.Content.Length > DiscordConfig.MaxMessageSize) | ||||
| throw new ArgumentException($"Message content is too long, length must be less or equal to {DiscordConfig.MaxMessageSize}.", nameof(args.Content)); | throw new ArgumentException($"Message content is too long, length must be less or equal to {DiscordConfig.MaxMessageSize}.", nameof(args.Content)); | ||||
| options = RequestOptions.CreateOrClone(options); | options = RequestOptions.CreateOrClone(options); | ||||
| @@ -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 | |||||
| public interface IMessageChannel : IChannel | public interface IMessageChannel : IChannel | ||||
| { | { | ||||
| /// <summary> Sends a message to this message channel. </summary> | /// <summary> Sends a message to this message channel. </summary> | ||||
| Task<IUserMessage> SendMessageAsync(string text, bool isTTS = false, RequestOptions options = null); | |||||
| Task<IUserMessage> SendMessageAsync(string text, bool isTTS = false, API.Embed embed = null, RequestOptions options = null); | |||||
| /// <summary> Sends a file to this text channel, with an optional caption. </summary> | /// <summary> Sends a file to this text channel, with an optional caption. </summary> | ||||
| Task<IUserMessage> SendFileAsync(string filePath, string text = null, bool isTTS = false, RequestOptions options = null); | Task<IUserMessage> SendFileAsync(string filePath, string text = null, bool isTTS = false, RequestOptions options = null); | ||||
| /// <summary> Sends a file to this text channel, with an optional caption. </summary> | /// <summary> Sends a file to this text channel, with an optional caption. </summary> | ||||
| @@ -0,0 +1,29 @@ | |||||
| using System.Diagnostics; | |||||
| using Model = Discord.API.EmbedAuthor; | |||||
| namespace Discord | |||||
| { | |||||
| [DebuggerDisplay("{DebuggerDisplay,nq}")] | |||||
| public struct EmbedAuthor | |||||
| { | |||||
| public string Name { get; set; } | |||||
| public string Url { get; set; } | |||||
| public string IconUrl { get; set; } | |||||
| public string ProxyIconUrl { get; set; } | |||||
| private EmbedAuthor(string name, string url, string iconUrl, string proxyIconUrl) | |||||
| { | |||||
| Name = name; | |||||
| Url = url; | |||||
| IconUrl = iconUrl; | |||||
| ProxyIconUrl = proxyIconUrl; | |||||
| } | |||||
| internal static EmbedAuthor Create(Model model) | |||||
| { | |||||
| return new EmbedAuthor(model.Name, model.Url, model.IconUrl, model.ProxyIconUrl); | |||||
| } | |||||
| private string DebuggerDisplay => $"{Name} ({Url})"; | |||||
| public override string ToString() => Name; | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,27 @@ | |||||
| using System.Diagnostics; | |||||
| using Model = Discord.API.EmbedField; | |||||
| namespace Discord | |||||
| { | |||||
| [DebuggerDisplay("{DebuggerDisplay,nq}")] | |||||
| public struct EmbedField | |||||
| { | |||||
| public string Name { get; set; } | |||||
| public string Value { get; set; } | |||||
| public bool Inline { get; set; } | |||||
| private EmbedField(string name, string value, bool inline) | |||||
| { | |||||
| Name = name; | |||||
| Value = value; | |||||
| Inline = inline; | |||||
| } | |||||
| internal static EmbedField Create(Model model) | |||||
| { | |||||
| return new EmbedField(model.Name, model.Value, model.Inline); | |||||
| } | |||||
| private string DebuggerDisplay => $"{Name} ({Value}"; | |||||
| public override string ToString() => Name; | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,27 @@ | |||||
| using System.Diagnostics; | |||||
| using Model = Discord.API.EmbedFooter; | |||||
| namespace Discord | |||||
| { | |||||
| [DebuggerDisplay("{DebuggerDisplay,nq}")] | |||||
| public struct EmbedFooter | |||||
| { | |||||
| public string Text { get; set; } | |||||
| public string IconUrl { get; set; } | |||||
| public string ProxyUrl { get; set; } | |||||
| private EmbedFooter(string text, string iconUrl, string proxyUrl) | |||||
| { | |||||
| Text = text; | |||||
| IconUrl = iconUrl; | |||||
| ProxyUrl = proxyUrl; | |||||
| } | |||||
| internal static EmbedFooter Create(Model model) | |||||
| { | |||||
| return new EmbedFooter(model.Text, model.IconUrl, model.ProxyIconUrl); | |||||
| } | |||||
| private string DebuggerDisplay => $"{Text} ({IconUrl})"; | |||||
| public override string ToString() => Text; | |||||
| } | |||||
| } | |||||
| @@ -1,4 +1,6 @@ | |||||
| namespace Discord | |||||
| using System.Collections.Immutable; | |||||
| namespace Discord | |||||
| { | { | ||||
| public interface IEmbed | public interface IEmbed | ||||
| { | { | ||||
| @@ -6,7 +8,11 @@ | |||||
| string Type { get; } | string Type { get; } | ||||
| string Title { get; } | string Title { get; } | ||||
| string Description { get; } | string Description { get; } | ||||
| Color? Color { get; } | |||||
| EmbedAuthor? Author { get; } | |||||
| EmbedFooter? Footer { get; } | |||||
| EmbedProvider? Provider { get; } | EmbedProvider? Provider { get; } | ||||
| EmbedThumbnail? Thumbnail { get; } | EmbedThumbnail? Thumbnail { get; } | ||||
| ImmutableArray<EmbedField> Fields { 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; | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -110,9 +110,9 @@ namespace Discord.Rest | |||||
| } | } | ||||
| public static async Task<RestUserMessage> SendMessageAsync(IChannel channel, BaseDiscordClient client, | public static async Task<RestUserMessage> SendMessageAsync(IChannel channel, BaseDiscordClient client, | ||||
| string text, bool isTTS, IGuild guild, RequestOptions options) | |||||
| string text, bool isTTS, API.Embed embed, IGuild guild, RequestOptions options) | |||||
| { | { | ||||
| var args = new CreateMessageParams(text) { IsTTS = isTTS }; | |||||
| var args = new CreateMessageParams(text) { IsTTS = isTTS, Embed = embed }; | |||||
| 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); | ||||
| } | } | ||||
| @@ -7,7 +7,7 @@ namespace Discord.Rest | |||||
| public interface IRestMessageChannel : IMessageChannel | public interface IRestMessageChannel : IMessageChannel | ||||
| { | { | ||||
| /// <summary> Sends a message to this message channel. </summary> | /// <summary> Sends a message to this message channel. </summary> | ||||
| new Task<RestUserMessage> SendMessageAsync(string text, bool isTTS = false, RequestOptions options = null); | |||||
| new Task<RestUserMessage> SendMessageAsync(string text, bool isTTS = false, API.Embed embed = null, RequestOptions options = null); | |||||
| /// <summary> Sends a file to this text channel, with an optional caption. </summary> | /// <summary> Sends a file to this text channel, with an optional caption. </summary> | ||||
| new Task<RestUserMessage> SendFileAsync(string filePath, string text = null, bool isTTS = false, RequestOptions options = null); | new Task<RestUserMessage> SendFileAsync(string filePath, string text = null, bool isTTS = false, RequestOptions options = null); | ||||
| /// <summary> Sends a file to this text channel, with an optional caption. </summary> | /// <summary> Sends a file to this text channel, with an optional caption. </summary> | ||||
| @@ -63,8 +63,8 @@ namespace Discord.Rest | |||||
| public Task<IReadOnlyCollection<RestMessage>> GetPinnedMessagesAsync(RequestOptions options = null) | public Task<IReadOnlyCollection<RestMessage>> GetPinnedMessagesAsync(RequestOptions options = null) | ||||
| => ChannelHelper.GetPinnedMessagesAsync(this, Discord, null, options); | => ChannelHelper.GetPinnedMessagesAsync(this, Discord, null, options); | ||||
| public Task<RestUserMessage> SendMessageAsync(string text, bool isTTS = false, RequestOptions options = null) | |||||
| => ChannelHelper.SendMessageAsync(this, Discord, text, isTTS, null, options); | |||||
| public Task<RestUserMessage> SendMessageAsync(string text, bool isTTS = false, API.Embed embed = null, RequestOptions options = null) | |||||
| => ChannelHelper.SendMessageAsync(this, Discord, text, isTTS, embed, null, options); | |||||
| public Task<RestUserMessage> SendFileAsync(string filePath, string text, bool isTTS = false, RequestOptions options = null) | public Task<RestUserMessage> SendFileAsync(string filePath, string text, bool isTTS = false, RequestOptions options = null) | ||||
| => ChannelHelper.SendFileAsync(this, Discord, filePath, text, isTTS, null, options); | => ChannelHelper.SendFileAsync(this, Discord, filePath, text, isTTS, null, options); | ||||
| public Task<RestUserMessage> SendFileAsync(Stream stream, string filename, string text, bool isTTS = false, RequestOptions options = null) | public Task<RestUserMessage> SendFileAsync(Stream stream, string filename, string text, bool isTTS = false, RequestOptions options = null) | ||||
| @@ -126,8 +126,8 @@ namespace Discord.Rest | |||||
| => await SendFileAsync(filePath, text, isTTS, options).ConfigureAwait(false); | => await SendFileAsync(filePath, text, isTTS, options).ConfigureAwait(false); | ||||
| async Task<IUserMessage> IMessageChannel.SendFileAsync(Stream stream, string filename, string text, bool isTTS, RequestOptions options) | async Task<IUserMessage> IMessageChannel.SendFileAsync(Stream stream, string filename, string text, bool isTTS, RequestOptions options) | ||||
| => await SendFileAsync(stream, filename, text, isTTS, options).ConfigureAwait(false); | => await SendFileAsync(stream, filename, text, isTTS, options).ConfigureAwait(false); | ||||
| async Task<IUserMessage> IMessageChannel.SendMessageAsync(string text, bool isTTS, RequestOptions options) | |||||
| => await SendMessageAsync(text, isTTS, options).ConfigureAwait(false); | |||||
| async Task<IUserMessage> IMessageChannel.SendMessageAsync(string text, bool isTTS, API.Embed embed, RequestOptions options) | |||||
| => await SendMessageAsync(text, isTTS, embed, options).ConfigureAwait(false); | |||||
| IDisposable IMessageChannel.EnterTypingState(RequestOptions options) | IDisposable IMessageChannel.EnterTypingState(RequestOptions options) | ||||
| => EnterTypingState(options); | => EnterTypingState(options); | ||||
| @@ -76,8 +76,8 @@ namespace Discord.Rest | |||||
| public Task<IReadOnlyCollection<RestMessage>> GetPinnedMessagesAsync(RequestOptions options = null) | public Task<IReadOnlyCollection<RestMessage>> GetPinnedMessagesAsync(RequestOptions options = null) | ||||
| => ChannelHelper.GetPinnedMessagesAsync(this, Discord, null, options); | => ChannelHelper.GetPinnedMessagesAsync(this, Discord, null, options); | ||||
| public Task<RestUserMessage> SendMessageAsync(string text, bool isTTS = false, RequestOptions options = null) | |||||
| => ChannelHelper.SendMessageAsync(this, Discord, text, isTTS, null, options); | |||||
| public Task<RestUserMessage> SendMessageAsync(string text, bool isTTS = false, API.Embed embed = null, RequestOptions options = null) | |||||
| => ChannelHelper.SendMessageAsync(this, Discord, text, isTTS, embed, null, options); | |||||
| public Task<RestUserMessage> SendFileAsync(string filePath, string text, bool isTTS = false, RequestOptions options = null) | public Task<RestUserMessage> SendFileAsync(string filePath, string text, bool isTTS = false, RequestOptions options = null) | ||||
| => ChannelHelper.SendFileAsync(this, Discord, filePath, text, isTTS, null, options); | => ChannelHelper.SendFileAsync(this, Discord, filePath, text, isTTS, null, options); | ||||
| public Task<RestUserMessage> SendFileAsync(Stream stream, string filename, string text, bool isTTS = false, RequestOptions options = null) | public Task<RestUserMessage> SendFileAsync(Stream stream, string filename, string text, bool isTTS = false, RequestOptions options = null) | ||||
| @@ -136,8 +136,8 @@ namespace Discord.Rest | |||||
| => await SendFileAsync(filePath, text, isTTS, options).ConfigureAwait(false); | => await SendFileAsync(filePath, text, isTTS, options).ConfigureAwait(false); | ||||
| async Task<IUserMessage> IMessageChannel.SendFileAsync(Stream stream, string filename, string text, bool isTTS, RequestOptions options) | async Task<IUserMessage> IMessageChannel.SendFileAsync(Stream stream, string filename, string text, bool isTTS, RequestOptions options) | ||||
| => await SendFileAsync(stream, filename, text, isTTS, options).ConfigureAwait(false); | => await SendFileAsync(stream, filename, text, isTTS, options).ConfigureAwait(false); | ||||
| async Task<IUserMessage> IMessageChannel.SendMessageAsync(string text, bool isTTS, RequestOptions options) | |||||
| => await SendMessageAsync(text, isTTS, options).ConfigureAwait(false); | |||||
| async Task<IUserMessage> IMessageChannel.SendMessageAsync(string text, bool isTTS, API.Embed embed, RequestOptions options) | |||||
| => await SendMessageAsync(text, isTTS, embed, options).ConfigureAwait(false); | |||||
| IDisposable IMessageChannel.EnterTypingState(RequestOptions options) | IDisposable IMessageChannel.EnterTypingState(RequestOptions options) | ||||
| => EnterTypingState(options); | => EnterTypingState(options); | ||||
| @@ -55,8 +55,8 @@ namespace Discord.Rest | |||||
| public Task<IReadOnlyCollection<RestMessage>> GetPinnedMessagesAsync(RequestOptions options = null) | public Task<IReadOnlyCollection<RestMessage>> GetPinnedMessagesAsync(RequestOptions options = null) | ||||
| => ChannelHelper.GetPinnedMessagesAsync(this, Discord, null, options); | => ChannelHelper.GetPinnedMessagesAsync(this, Discord, null, options); | ||||
| public Task<RestUserMessage> SendMessageAsync(string text, bool isTTS = false, RequestOptions options = null) | |||||
| => ChannelHelper.SendMessageAsync(this, Discord, text, isTTS, null, options); | |||||
| public Task<RestUserMessage> SendMessageAsync(string text, bool isTTS = false, API.Embed embed = null, RequestOptions options = null) | |||||
| => ChannelHelper.SendMessageAsync(this, Discord, text, isTTS, embed, null, options); | |||||
| public Task<RestUserMessage> SendFileAsync(string filePath, string text, bool isTTS = false, RequestOptions options = null) | public Task<RestUserMessage> SendFileAsync(string filePath, string text, bool isTTS = false, RequestOptions options = null) | ||||
| => ChannelHelper.SendFileAsync(this, Discord, filePath, text, isTTS, null, options); | => ChannelHelper.SendFileAsync(this, Discord, filePath, text, isTTS, null, options); | ||||
| public Task<RestUserMessage> SendFileAsync(Stream stream, string filename, string text, bool isTTS = false, RequestOptions options = null) | public Task<RestUserMessage> SendFileAsync(Stream stream, string filename, string text, bool isTTS = false, RequestOptions options = null) | ||||
| @@ -108,8 +108,8 @@ namespace Discord.Rest | |||||
| => await SendFileAsync(filePath, text, isTTS, options).ConfigureAwait(false); | => await SendFileAsync(filePath, text, isTTS, options).ConfigureAwait(false); | ||||
| async Task<IUserMessage> IMessageChannel.SendFileAsync(Stream stream, string filename, string text, bool isTTS, RequestOptions options) | async Task<IUserMessage> IMessageChannel.SendFileAsync(Stream stream, string filename, string text, bool isTTS, RequestOptions options) | ||||
| => await SendFileAsync(stream, filename, text, isTTS, options).ConfigureAwait(false); | => await SendFileAsync(stream, filename, text, isTTS, options).ConfigureAwait(false); | ||||
| async Task<IUserMessage> IMessageChannel.SendMessageAsync(string text, bool isTTS, RequestOptions options) | |||||
| => await SendMessageAsync(text, isTTS, options).ConfigureAwait(false); | |||||
| async Task<IUserMessage> IMessageChannel.SendMessageAsync(string text, bool isTTS, API.Embed embed, RequestOptions options) | |||||
| => await SendMessageAsync(text, isTTS, embed, options).ConfigureAwait(false); | |||||
| IDisposable IMessageChannel.EnterTypingState(RequestOptions options) | IDisposable IMessageChannel.EnterTypingState(RequestOptions options) | ||||
| => EnterTypingState(options); | => EnterTypingState(options); | ||||
| @@ -33,8 +33,8 @@ namespace Discord.Rest | |||||
| public Task<IReadOnlyCollection<RestMessage>> GetPinnedMessagesAsync(RequestOptions options = null) | public Task<IReadOnlyCollection<RestMessage>> GetPinnedMessagesAsync(RequestOptions options = null) | ||||
| => ChannelHelper.GetPinnedMessagesAsync(this, Discord, null, options); | => ChannelHelper.GetPinnedMessagesAsync(this, Discord, null, options); | ||||
| public Task<RestUserMessage> SendMessageAsync(string text, bool isTTS, RequestOptions options = null) | |||||
| => ChannelHelper.SendMessageAsync(this, Discord, text, isTTS, null, options); | |||||
| public Task<RestUserMessage> SendMessageAsync(string text, bool isTTS, API.Embed embed = null, RequestOptions options = null) | |||||
| => ChannelHelper.SendMessageAsync(this, Discord, text, isTTS, embed, null, options); | |||||
| public Task<RestUserMessage> SendFileAsync(string filePath, string text, bool isTTS, RequestOptions options = null) | public Task<RestUserMessage> SendFileAsync(string filePath, string text, bool isTTS, RequestOptions options = null) | ||||
| => ChannelHelper.SendFileAsync(this, Discord, filePath, text, isTTS, null, options); | => ChannelHelper.SendFileAsync(this, Discord, filePath, text, isTTS, null, options); | ||||
| public Task<RestUserMessage> SendFileAsync(Stream stream, string filename, string text, bool isTTS, RequestOptions options = null) | public Task<RestUserMessage> SendFileAsync(Stream stream, string filename, string text, bool isTTS, RequestOptions options = null) | ||||
| @@ -86,8 +86,8 @@ namespace Discord.Rest | |||||
| => await SendFileAsync(filePath, text, isTTS, options); | => await SendFileAsync(filePath, text, isTTS, options); | ||||
| async Task<IUserMessage> IMessageChannel.SendFileAsync(Stream stream, string filename, string text, bool isTTS, RequestOptions options) | async Task<IUserMessage> IMessageChannel.SendFileAsync(Stream stream, string filename, string text, bool isTTS, RequestOptions options) | ||||
| => await SendFileAsync(stream, filename, text, isTTS, options); | => await SendFileAsync(stream, filename, text, isTTS, options); | ||||
| async Task<IUserMessage> IMessageChannel.SendMessageAsync(string text, bool isTTS, RequestOptions options) | |||||
| => await SendMessageAsync(text, isTTS, options); | |||||
| async Task<IUserMessage> IMessageChannel.SendMessageAsync(string text, bool isTTS, API.Embed embed, RequestOptions options) | |||||
| => await SendMessageAsync(text, isTTS, embed, options); | |||||
| IDisposable IMessageChannel.EnterTypingState(RequestOptions options) | IDisposable IMessageChannel.EnterTypingState(RequestOptions options) | ||||
| => EnterTypingState(options); | => EnterTypingState(options); | ||||
| @@ -1,4 +1,7 @@ | |||||
| using System.Diagnostics; | |||||
| using System; | |||||
| using System.Collections.Immutable; | |||||
| using System.Diagnostics; | |||||
| using System.Linq; | |||||
| using Model = Discord.API.Embed; | using Model = Discord.API.Embed; | ||||
| namespace Discord | namespace Discord | ||||
| @@ -10,23 +13,44 @@ 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 Color? Color { get; } | |||||
| public EmbedAuthor? Author { get; } | |||||
| public EmbedFooter? Footer { get; } | |||||
| public EmbedProvider? Provider { get; } | public EmbedProvider? Provider { get; } | ||||
| public EmbedThumbnail? Thumbnail { get; } | public EmbedThumbnail? Thumbnail { get; } | ||||
| public ImmutableArray<EmbedField> Fields { get; } | |||||
| internal Embed(string type, string title, string description, string url, EmbedProvider? provider, EmbedThumbnail? thumbnail) | |||||
| internal Embed(string type, | |||||
| string title, | |||||
| string description, | |||||
| string url, | |||||
| Color? color, | |||||
| EmbedAuthor? author, | |||||
| EmbedFooter? footer, | |||||
| EmbedProvider? provider, | |||||
| EmbedThumbnail? thumbnail, | |||||
| ImmutableArray<EmbedField> fields) | |||||
| { | { | ||||
| Type = type; | Type = type; | ||||
| 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, | 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, | model.Provider.IsSpecified ? EmbedProvider.Create(model.Provider.Value) : (EmbedProvider?)null, | ||||
| model.Thumbnail.IsSpecified ? EmbedThumbnail.Create(model.Thumbnail.Value) : (EmbedThumbnail?)null); | |||||
| model.Thumbnail.IsSpecified ? EmbedThumbnail.Create(model.Thumbnail.Value) : (EmbedThumbnail?)null, | |||||
| model.Fields.IsSpecified ? model.Fields.Value.Select(x => EmbedField.Create(x)).ToImmutableArray() : ImmutableArray.Create<EmbedField>()); | |||||
| } | } | ||||
| public override string ToString() => Title; | public override string ToString() => Title; | ||||
| @@ -44,8 +44,8 @@ namespace Discord.Rpc | |||||
| public Task<IReadOnlyCollection<RestMessage>> GetPinnedMessagesAsync(RequestOptions options = null) | public Task<IReadOnlyCollection<RestMessage>> GetPinnedMessagesAsync(RequestOptions options = null) | ||||
| => ChannelHelper.GetPinnedMessagesAsync(this, Discord, null, options); | => ChannelHelper.GetPinnedMessagesAsync(this, Discord, null, options); | ||||
| public Task<RestUserMessage> SendMessageAsync(string text, bool isTTS = false, RequestOptions options = null) | |||||
| => ChannelHelper.SendMessageAsync(this, Discord, text, isTTS, null, options); | |||||
| public Task<RestUserMessage> SendMessageAsync(string text, bool isTTS = false, API.Embed embed = null, RequestOptions options = null) | |||||
| => ChannelHelper.SendMessageAsync(this, Discord, text, isTTS, embed, null, options); | |||||
| public Task<RestUserMessage> SendFileAsync(string filePath, string text, bool isTTS = false, RequestOptions options = null) | public Task<RestUserMessage> SendFileAsync(string filePath, string text, bool isTTS = false, RequestOptions options = null) | ||||
| => ChannelHelper.SendFileAsync(this, Discord, filePath, text, isTTS, null, options); | => ChannelHelper.SendFileAsync(this, Discord, filePath, text, isTTS, null, options); | ||||
| public Task<RestUserMessage> SendFileAsync(Stream stream, string filename, string text, bool isTTS = false, RequestOptions options = null) | public Task<RestUserMessage> SendFileAsync(Stream stream, string filename, string text, bool isTTS = false, RequestOptions options = null) | ||||
| @@ -104,8 +104,8 @@ namespace Discord.Rpc | |||||
| => await SendFileAsync(filePath, text, isTTS, options).ConfigureAwait(false); | => await SendFileAsync(filePath, text, isTTS, options).ConfigureAwait(false); | ||||
| async Task<IUserMessage> IMessageChannel.SendFileAsync(Stream stream, string filename, string text, bool isTTS, RequestOptions options) | async Task<IUserMessage> IMessageChannel.SendFileAsync(Stream stream, string filename, string text, bool isTTS, RequestOptions options) | ||||
| => await SendFileAsync(stream, filename, text, isTTS, options).ConfigureAwait(false); | => await SendFileAsync(stream, filename, text, isTTS, options).ConfigureAwait(false); | ||||
| async Task<IUserMessage> IMessageChannel.SendMessageAsync(string text, bool isTTS, RequestOptions options) | |||||
| => await SendMessageAsync(text, isTTS, options).ConfigureAwait(false); | |||||
| async Task<IUserMessage> IMessageChannel.SendMessageAsync(string text, bool isTTS, API.Embed embed, RequestOptions options) | |||||
| => await SendMessageAsync(text, isTTS, embed, options).ConfigureAwait(false); | |||||
| IDisposable IMessageChannel.EnterTypingState(RequestOptions options) | IDisposable IMessageChannel.EnterTypingState(RequestOptions options) | ||||
| => EnterTypingState(options); | => EnterTypingState(options); | ||||
| @@ -46,8 +46,8 @@ namespace Discord.Rpc | |||||
| public Task<IReadOnlyCollection<RestMessage>> GetPinnedMessagesAsync(RequestOptions options = null) | public Task<IReadOnlyCollection<RestMessage>> GetPinnedMessagesAsync(RequestOptions options = null) | ||||
| => ChannelHelper.GetPinnedMessagesAsync(this, Discord, null, options); | => ChannelHelper.GetPinnedMessagesAsync(this, Discord, null, options); | ||||
| public Task<RestUserMessage> SendMessageAsync(string text, bool isTTS = false, RequestOptions options = null) | |||||
| => ChannelHelper.SendMessageAsync(this, Discord, text, isTTS, null, options); | |||||
| public Task<RestUserMessage> SendMessageAsync(string text, bool isTTS = false, API.Embed embed = null, RequestOptions options = null) | |||||
| => ChannelHelper.SendMessageAsync(this, Discord, text, isTTS, embed, null, options); | |||||
| public Task<RestUserMessage> SendFileAsync(string filePath, string text, bool isTTS = false, RequestOptions options = null) | public Task<RestUserMessage> SendFileAsync(string filePath, string text, bool isTTS = false, RequestOptions options = null) | ||||
| => ChannelHelper.SendFileAsync(this, Discord, filePath, text, isTTS, null, options); | => ChannelHelper.SendFileAsync(this, Discord, filePath, text, isTTS, null, options); | ||||
| public Task<RestUserMessage> SendFileAsync(Stream stream, string filename, string text, bool isTTS = false, RequestOptions options = null) | public Task<RestUserMessage> SendFileAsync(Stream stream, string filename, string text, bool isTTS = false, RequestOptions options = null) | ||||
| @@ -103,8 +103,8 @@ namespace Discord.Rpc | |||||
| => await SendFileAsync(filePath, text, isTTS, options).ConfigureAwait(false); | => await SendFileAsync(filePath, text, isTTS, options).ConfigureAwait(false); | ||||
| async Task<IUserMessage> IMessageChannel.SendFileAsync(Stream stream, string filename, string text, bool isTTS, RequestOptions options) | async Task<IUserMessage> IMessageChannel.SendFileAsync(Stream stream, string filename, string text, bool isTTS, RequestOptions options) | ||||
| => await SendFileAsync(stream, filename, text, isTTS, options).ConfigureAwait(false); | => await SendFileAsync(stream, filename, text, isTTS, options).ConfigureAwait(false); | ||||
| async Task<IUserMessage> IMessageChannel.SendMessageAsync(string text, bool isTTS, RequestOptions options) | |||||
| => await SendMessageAsync(text, isTTS, options).ConfigureAwait(false); | |||||
| async Task<IUserMessage> IMessageChannel.SendMessageAsync(string text, bool isTTS, API.Embed embed, RequestOptions options) | |||||
| => await SendMessageAsync(text, isTTS, embed, options).ConfigureAwait(false); | |||||
| IDisposable IMessageChannel.EnterTypingState(RequestOptions options) | IDisposable IMessageChannel.EnterTypingState(RequestOptions options) | ||||
| => EnterTypingState(options); | => EnterTypingState(options); | ||||
| @@ -49,8 +49,8 @@ namespace Discord.Rpc | |||||
| public Task<IReadOnlyCollection<RestMessage>> GetPinnedMessagesAsync(RequestOptions options = null) | public Task<IReadOnlyCollection<RestMessage>> GetPinnedMessagesAsync(RequestOptions options = null) | ||||
| => ChannelHelper.GetPinnedMessagesAsync(this, Discord, null, options); | => ChannelHelper.GetPinnedMessagesAsync(this, Discord, null, options); | ||||
| public Task<RestUserMessage> SendMessageAsync(string text, bool isTTS = false, RequestOptions options = null) | |||||
| => ChannelHelper.SendMessageAsync(this, Discord, text, isTTS, null, options); | |||||
| public Task<RestUserMessage> SendMessageAsync(string text, bool isTTS = false, API.Embed embed = null, RequestOptions options = null) | |||||
| => ChannelHelper.SendMessageAsync(this, Discord, text, isTTS, embed, null, options); | |||||
| public Task<RestUserMessage> SendFileAsync(string filePath, string text, bool isTTS = false, RequestOptions options = null) | public Task<RestUserMessage> SendFileAsync(string filePath, string text, bool isTTS = false, RequestOptions options = null) | ||||
| => ChannelHelper.SendFileAsync(this, Discord, filePath, text, isTTS, null, options); | => ChannelHelper.SendFileAsync(this, Discord, filePath, text, isTTS, null, options); | ||||
| public Task<RestUserMessage> SendFileAsync(Stream stream, string filename, string text, bool isTTS = false, RequestOptions options = null) | public Task<RestUserMessage> SendFileAsync(Stream stream, string filename, string text, bool isTTS = false, RequestOptions options = null) | ||||
| @@ -105,8 +105,8 @@ namespace Discord.Rpc | |||||
| => await SendFileAsync(filePath, text, isTTS, options).ConfigureAwait(false); | => await SendFileAsync(filePath, text, isTTS, options).ConfigureAwait(false); | ||||
| async Task<IUserMessage> IMessageChannel.SendFileAsync(Stream stream, string filename, string text, bool isTTS, RequestOptions options) | async Task<IUserMessage> IMessageChannel.SendFileAsync(Stream stream, string filename, string text, bool isTTS, RequestOptions options) | ||||
| => await SendFileAsync(stream, filename, text, isTTS, options).ConfigureAwait(false); | => await SendFileAsync(stream, filename, text, isTTS, options).ConfigureAwait(false); | ||||
| async Task<IUserMessage> IMessageChannel.SendMessageAsync(string text, bool isTTS, RequestOptions options) | |||||
| => await SendMessageAsync(text, isTTS, options).ConfigureAwait(false); | |||||
| async Task<IUserMessage> IMessageChannel.SendMessageAsync(string text, bool isTTS, API.Embed embed, RequestOptions options) | |||||
| => await SendMessageAsync(text, isTTS, embed, options).ConfigureAwait(false); | |||||
| IDisposable IMessageChannel.EnterTypingState(RequestOptions options) | IDisposable IMessageChannel.EnterTypingState(RequestOptions options) | ||||
| => EnterTypingState(options); | => EnterTypingState(options); | ||||
| } | } | ||||
| @@ -11,7 +11,7 @@ namespace Discord.WebSocket | |||||
| IReadOnlyCollection<SocketMessage> CachedMessages { get; } | IReadOnlyCollection<SocketMessage> CachedMessages { get; } | ||||
| /// <summary> Sends a message to this message channel. </summary> | /// <summary> Sends a message to this message channel. </summary> | ||||
| new Task<RestUserMessage> SendMessageAsync(string text, bool isTTS = false, RequestOptions options = null); | |||||
| new Task<RestUserMessage> SendMessageAsync(string text, bool isTTS = false, API.Embed embed = null, RequestOptions options = null); | |||||
| /// <summary> Sends a file to this text channel, with an optional caption. </summary> | /// <summary> Sends a file to this text channel, with an optional caption. </summary> | ||||
| new Task<RestUserMessage> SendFileAsync(string filePath, string text = null, bool isTTS = false, RequestOptions options = null); | new Task<RestUserMessage> SendFileAsync(string filePath, string text = null, bool isTTS = false, RequestOptions options = null); | ||||
| /// <summary> Sends a file to this text channel, with an optional caption. </summary> | /// <summary> Sends a file to this text channel, with an optional caption. </summary> | ||||
| @@ -66,8 +66,8 @@ namespace Discord.WebSocket | |||||
| public Task<IReadOnlyCollection<RestMessage>> GetPinnedMessagesAsync(RequestOptions options = null) | public Task<IReadOnlyCollection<RestMessage>> GetPinnedMessagesAsync(RequestOptions options = null) | ||||
| => ChannelHelper.GetPinnedMessagesAsync(this, Discord, null, options); | => ChannelHelper.GetPinnedMessagesAsync(this, Discord, null, options); | ||||
| public Task<RestUserMessage> SendMessageAsync(string text, bool isTTS = false, RequestOptions options = null) | |||||
| => ChannelHelper.SendMessageAsync(this, Discord, text, isTTS, null, options); | |||||
| public Task<RestUserMessage> SendMessageAsync(string text, bool isTTS = false, API.Embed embed = null, RequestOptions options = null) | |||||
| => ChannelHelper.SendMessageAsync(this, Discord, text, isTTS, embed, null, options); | |||||
| public Task<RestUserMessage> SendFileAsync(string filePath, string text, bool isTTS = false, RequestOptions options = null) | public Task<RestUserMessage> SendFileAsync(string filePath, string text, bool isTTS = false, RequestOptions options = null) | ||||
| => ChannelHelper.SendFileAsync(this, Discord, filePath, text, isTTS, null, options); | => ChannelHelper.SendFileAsync(this, Discord, filePath, text, isTTS, null, options); | ||||
| public Task<RestUserMessage> SendFileAsync(Stream stream, string filename, string text, bool isTTS = false, RequestOptions options = null) | public Task<RestUserMessage> SendFileAsync(Stream stream, string filename, string text, bool isTTS = false, RequestOptions options = null) | ||||
| @@ -134,8 +134,8 @@ namespace Discord.WebSocket | |||||
| => await SendFileAsync(filePath, text, isTTS, options).ConfigureAwait(false); | => await SendFileAsync(filePath, text, isTTS, options).ConfigureAwait(false); | ||||
| async Task<IUserMessage> IMessageChannel.SendFileAsync(Stream stream, string filename, string text, bool isTTS, RequestOptions options) | async Task<IUserMessage> IMessageChannel.SendFileAsync(Stream stream, string filename, string text, bool isTTS, RequestOptions options) | ||||
| => await SendFileAsync(stream, filename, text, isTTS, options).ConfigureAwait(false); | => await SendFileAsync(stream, filename, text, isTTS, options).ConfigureAwait(false); | ||||
| async Task<IUserMessage> IMessageChannel.SendMessageAsync(string text, bool isTTS, RequestOptions options) | |||||
| => await SendMessageAsync(text, isTTS, options).ConfigureAwait(false); | |||||
| async Task<IUserMessage> IMessageChannel.SendMessageAsync(string text, bool isTTS, API.Embed embed, RequestOptions options) | |||||
| => await SendMessageAsync(text, isTTS, embed, options).ConfigureAwait(false); | |||||
| IDisposable IMessageChannel.EnterTypingState(RequestOptions options) | IDisposable IMessageChannel.EnterTypingState(RequestOptions options) | ||||
| => EnterTypingState(options); | => EnterTypingState(options); | ||||
| @@ -89,8 +89,8 @@ namespace Discord.WebSocket | |||||
| public Task<IReadOnlyCollection<RestMessage>> GetPinnedMessagesAsync(RequestOptions options = null) | public Task<IReadOnlyCollection<RestMessage>> GetPinnedMessagesAsync(RequestOptions options = null) | ||||
| => ChannelHelper.GetPinnedMessagesAsync(this, Discord, null, options); | => ChannelHelper.GetPinnedMessagesAsync(this, Discord, null, options); | ||||
| public Task<RestUserMessage> SendMessageAsync(string text, bool isTTS = false, RequestOptions options = null) | |||||
| => ChannelHelper.SendMessageAsync(this, Discord, text, isTTS, null, options); | |||||
| public Task<RestUserMessage> SendMessageAsync(string text, bool isTTS = false, API.Embed embed = null, RequestOptions options = null) | |||||
| => ChannelHelper.SendMessageAsync(this, Discord, text, isTTS, embed, null, options); | |||||
| public Task<RestUserMessage> SendFileAsync(string filePath, string text, bool isTTS = false, RequestOptions options = null) | public Task<RestUserMessage> SendFileAsync(string filePath, string text, bool isTTS = false, RequestOptions options = null) | ||||
| => ChannelHelper.SendFileAsync(this, Discord, filePath, text, isTTS, null, options); | => ChannelHelper.SendFileAsync(this, Discord, filePath, text, isTTS, null, options); | ||||
| public Task<RestUserMessage> SendFileAsync(Stream stream, string filename, string text, bool isTTS = false, RequestOptions options = null) | public Task<RestUserMessage> SendFileAsync(Stream stream, string filename, string text, bool isTTS = false, RequestOptions options = null) | ||||
| @@ -197,8 +197,8 @@ namespace Discord.WebSocket | |||||
| => await SendFileAsync(filePath, text, isTTS, options).ConfigureAwait(false); | => await SendFileAsync(filePath, text, isTTS, options).ConfigureAwait(false); | ||||
| async Task<IUserMessage> IMessageChannel.SendFileAsync(Stream stream, string filename, string text, bool isTTS, RequestOptions options) | async Task<IUserMessage> IMessageChannel.SendFileAsync(Stream stream, string filename, string text, bool isTTS, RequestOptions options) | ||||
| => await SendFileAsync(stream, filename, text, isTTS, options).ConfigureAwait(false); | => await SendFileAsync(stream, filename, text, isTTS, options).ConfigureAwait(false); | ||||
| async Task<IUserMessage> IMessageChannel.SendMessageAsync(string text, bool isTTS, RequestOptions options) | |||||
| => await SendMessageAsync(text, isTTS, options).ConfigureAwait(false); | |||||
| async Task<IUserMessage> IMessageChannel.SendMessageAsync(string text, bool isTTS, API.Embed embed, RequestOptions options) | |||||
| => await SendMessageAsync(text, isTTS, embed, options).ConfigureAwait(false); | |||||
| IDisposable IMessageChannel.EnterTypingState(RequestOptions options) | IDisposable IMessageChannel.EnterTypingState(RequestOptions options) | ||||
| => EnterTypingState(options); | => EnterTypingState(options); | ||||
| @@ -72,8 +72,8 @@ namespace Discord.WebSocket | |||||
| public Task<IReadOnlyCollection<RestMessage>> GetPinnedMessagesAsync(RequestOptions options = null) | public Task<IReadOnlyCollection<RestMessage>> GetPinnedMessagesAsync(RequestOptions options = null) | ||||
| => ChannelHelper.GetPinnedMessagesAsync(this, Discord, Guild, options); | => ChannelHelper.GetPinnedMessagesAsync(this, Discord, Guild, options); | ||||
| public Task<RestUserMessage> SendMessageAsync(string text, bool isTTS = false, RequestOptions options = null) | |||||
| => ChannelHelper.SendMessageAsync(this, Discord, text, isTTS, Guild, options); | |||||
| public Task<RestUserMessage> SendMessageAsync(string text, bool isTTS = false, API.Embed embed = null, RequestOptions options = null) | |||||
| => ChannelHelper.SendMessageAsync(this, Discord, text, isTTS, embed, Guild, options); | |||||
| public Task<RestUserMessage> SendFileAsync(string filePath, string text, bool isTTS = false, RequestOptions options = null) | public Task<RestUserMessage> SendFileAsync(string filePath, string text, bool isTTS = false, RequestOptions options = null) | ||||
| => ChannelHelper.SendFileAsync(this, Discord, filePath, text, isTTS, Guild, options); | => ChannelHelper.SendFileAsync(this, Discord, filePath, text, isTTS, Guild, options); | ||||
| public Task<RestUserMessage> SendFileAsync(Stream stream, string filename, string text, bool isTTS = false, RequestOptions options = null) | public Task<RestUserMessage> SendFileAsync(Stream stream, string filename, string text, bool isTTS = false, RequestOptions options = null) | ||||
| @@ -135,8 +135,8 @@ namespace Discord.WebSocket | |||||
| => await SendFileAsync(filePath, text, isTTS, options).ConfigureAwait(false); | => await SendFileAsync(filePath, text, isTTS, options).ConfigureAwait(false); | ||||
| async Task<IUserMessage> IMessageChannel.SendFileAsync(Stream stream, string filename, string text, bool isTTS, RequestOptions options) | async Task<IUserMessage> IMessageChannel.SendFileAsync(Stream stream, string filename, string text, bool isTTS, RequestOptions options) | ||||
| => await SendFileAsync(stream, filename, text, isTTS, options).ConfigureAwait(false); | => await SendFileAsync(stream, filename, text, isTTS, options).ConfigureAwait(false); | ||||
| async Task<IUserMessage> IMessageChannel.SendMessageAsync(string text, bool isTTS, RequestOptions options) | |||||
| => await SendMessageAsync(text, isTTS, options).ConfigureAwait(false); | |||||
| async Task<IUserMessage> IMessageChannel.SendMessageAsync(string text, bool isTTS, API.Embed embed, RequestOptions options) | |||||
| => await SendMessageAsync(text, isTTS, embed, options).ConfigureAwait(false); | |||||
| IDisposable IMessageChannel.EnterTypingState(RequestOptions options) | IDisposable IMessageChannel.EnterTypingState(RequestOptions options) | ||||
| => EnterTypingState(options); | => EnterTypingState(options); | ||||
| } | } | ||||