| @@ -3945,6 +3945,33 @@ | |||||
| A task that represents the asynchronous creation operation. The task result contains the created sticker. | A task that represents the asynchronous creation operation. The task result contains the created sticker. | ||||
| </returns> | </returns> | ||||
| </member> | </member> | ||||
| <member name="M:Discord.IGuild.CreateStickerAsync(System.String,System.String,System.Collections.Generic.IEnumerable{System.String},System.String,Discord.RequestOptions)"> | |||||
| <summary> | |||||
| Creates a new sticker in this guild | |||||
| </summary> | |||||
| <param name="name">The name of the sticker.</param> | |||||
| <param name="description">The description of the sticker.</param> | |||||
| <param name="tags">The tags of the sticker.</param> | |||||
| <param name="path">The path of the file to upload.</param> | |||||
| <param name="options">The options to be used when sending the request.</param> | |||||
| <returns> | |||||
| A task that represents the asynchronous creation operation. The task result contains the created sticker. | |||||
| </returns> | |||||
| </member> | |||||
| <member name="M:Discord.IGuild.CreateStickerAsync(System.String,System.String,System.Collections.Generic.IEnumerable{System.String},System.IO.Stream,System.String,Discord.RequestOptions)"> | |||||
| <summary> | |||||
| Creates a new sticker in this guild | |||||
| </summary> | |||||
| <param name="name">The name of the sticker.</param> | |||||
| <param name="description">The description of the sticker.</param> | |||||
| <param name="tags">The tags of the sticker.</param> | |||||
| <param name="stream">The stream containing the file data.</param> | |||||
| <param name="filename">The name of the file <b>with</b> the extension, ex: image.png</param> | |||||
| <param name="options">The options to be used when sending the request.</param> | |||||
| <returns> | |||||
| A task that represents the asynchronous creation operation. The task result contains the created sticker. | |||||
| </returns> | |||||
| </member> | |||||
| <member name="M:Discord.IGuild.GetStickerAsync(System.UInt64,Discord.CacheMode,Discord.RequestOptions)"> | <member name="M:Discord.IGuild.GetStickerAsync(System.UInt64,Discord.CacheMode,Discord.RequestOptions)"> | ||||
| <summary> | <summary> | ||||
| Gets a specific sticker within this guild. | Gets a specific sticker within this guild. | ||||
| @@ -2,6 +2,7 @@ using Discord.Audio; | |||||
| using System; | using System; | ||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||
| using System.Globalization; | using System.Globalization; | ||||
| using System.IO; | |||||
| using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
| namespace Discord | namespace Discord | ||||
| @@ -962,6 +963,33 @@ namespace Discord | |||||
| /// </returns> | /// </returns> | ||||
| Task<ICustomSticker> CreateStickerAsync(string name, string description, IEnumerable<string> tags, Image image, RequestOptions options = null); | Task<ICustomSticker> CreateStickerAsync(string name, string description, IEnumerable<string> tags, Image image, RequestOptions options = null); | ||||
| /// <summary> | |||||
| /// Creates a new sticker in this guild | |||||
| /// </summary> | |||||
| /// <param name="name">The name of the sticker.</param> | |||||
| /// <param name="description">The description of the sticker.</param> | |||||
| /// <param name="tags">The tags of the sticker.</param> | |||||
| /// <param name="path">The path of the file to upload.</param> | |||||
| /// <param name="options">The options to be used when sending the request.</param> | |||||
| /// <returns> | |||||
| /// A task that represents the asynchronous creation operation. The task result contains the created sticker. | |||||
| /// </returns> | |||||
| Task<ICustomSticker> CreateStickerAsync(string name, string description, IEnumerable<string> tags, string path, RequestOptions options = null); | |||||
| /// <summary> | |||||
| /// Creates a new sticker in this guild | |||||
| /// </summary> | |||||
| /// <param name="name">The name of the sticker.</param> | |||||
| /// <param name="description">The description of the sticker.</param> | |||||
| /// <param name="tags">The tags of the sticker.</param> | |||||
| /// <param name="stream">The stream containing the file data.</param> | |||||
| /// <param name="filename">The name of the file <b>with</b> the extension, ex: image.png</param> | |||||
| /// <param name="options">The options to be used when sending the request.</param> | |||||
| /// <returns> | |||||
| /// A task that represents the asynchronous creation operation. The task result contains the created sticker. | |||||
| /// </returns> | |||||
| Task<ICustomSticker> CreateStickerAsync(string name, string description, IEnumerable<string> tags, Stream stream, string filename, RequestOptions options = null); | |||||
| /// <summary> | /// <summary> | ||||
| /// Gets a specific sticker within this guild. | /// Gets a specific sticker within this guild. | ||||
| /// </summary> | /// </summary> | ||||
| @@ -1,4 +1,4 @@ | |||||
| using System.IO; | |||||
| using System.IO; | |||||
| namespace Discord.Net.Rest | namespace Discord.Net.Rest | ||||
| { | { | ||||
| @@ -6,11 +6,13 @@ namespace Discord.Net.Rest | |||||
| { | { | ||||
| public Stream Stream { get; } | public Stream Stream { get; } | ||||
| public string Filename { get; } | public string Filename { get; } | ||||
| public string ContentType { get; } | |||||
| public MultipartFile(Stream stream, string filename) | |||||
| public MultipartFile(Stream stream, string filename, string contentType = null) | |||||
| { | { | ||||
| Stream = stream; | Stream = stream; | ||||
| Filename = filename; | Filename = filename; | ||||
| this.ContentType = contentType; | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| @@ -15,17 +15,25 @@ namespace Discord.API.Rest | |||||
| public string Name { get; set; } | public string Name { get; set; } | ||||
| public string Description { get; set; } | public string Description { get; set; } | ||||
| public string Tags { get; set; } | public string Tags { get; set; } | ||||
| public string FileName { get; set; } | |||||
| public IReadOnlyDictionary<string, object> ToDictionary() | public IReadOnlyDictionary<string, object> ToDictionary() | ||||
| { | { | ||||
| var d = new Dictionary<string, object>(); | var d = new Dictionary<string, object>(); | ||||
| d["file"] = new MultipartFile(File, Name + ".dat"); | |||||
| d["name"] = Name; | |||||
| d["name"] = $"{Name}"; | |||||
| d["description"] = Description; | d["description"] = Description; | ||||
| d["tags"] = Tags; | d["tags"] = Tags; | ||||
| string contentType = "image/png"; | |||||
| if (File is FileStream fileStream) | |||||
| contentType = $"image/{Path.GetExtension(fileStream.Name)}"; | |||||
| else if(FileName != null) | |||||
| contentType = $"image/{Path.GetExtension(FileName)}"; | |||||
| d["file"] = new MultipartFile(File, FileName ?? "image", contentType.Replace(".", "")); | |||||
| return d; | return d; | ||||
| } | } | ||||
| } | } | ||||
| @@ -3540,6 +3540,33 @@ | |||||
| A task that represents the asynchronous creation operation. The task result contains the created sticker. | A task that represents the asynchronous creation operation. The task result contains the created sticker. | ||||
| </returns> | </returns> | ||||
| </member> | </member> | ||||
| <member name="M:Discord.Rest.RestGuild.CreateStickerAsync(System.String,System.String,System.Collections.Generic.IEnumerable{System.String},System.String,Discord.RequestOptions)"> | |||||
| <summary> | |||||
| Creates a new sticker in this guild | |||||
| </summary> | |||||
| <param name="name">The name of the sticker.</param> | |||||
| <param name="description">The description of the sticker.</param> | |||||
| <param name="tags">The tags of the sticker.</param> | |||||
| <param name="path">The path of the file to upload.</param> | |||||
| <param name="options">The options to be used when sending the request.</param> | |||||
| <returns> | |||||
| A task that represents the asynchronous creation operation. The task result contains the created sticker. | |||||
| </returns> | |||||
| </member> | |||||
| <member name="M:Discord.Rest.RestGuild.CreateStickerAsync(System.String,System.String,System.Collections.Generic.IEnumerable{System.String},System.IO.Stream,System.String,Discord.RequestOptions)"> | |||||
| <summary> | |||||
| Creates a new sticker in this guild | |||||
| </summary> | |||||
| <param name="name">The name of the sticker.</param> | |||||
| <param name="description">The description of the sticker.</param> | |||||
| <param name="tags">The tags of the sticker.</param> | |||||
| <param name="stream">The stream containing the file data.</param> | |||||
| <param name="filename">The name of the file <b>with</b> the extension, ex: image.png</param> | |||||
| <param name="options">The options to be used when sending the request.</param> | |||||
| <returns> | |||||
| A task that represents the asynchronous creation operation. The task result contains the created sticker. | |||||
| </returns> | |||||
| </member> | |||||
| <member name="M:Discord.Rest.RestGuild.GetStickerAsync(System.UInt64,Discord.RequestOptions)"> | <member name="M:Discord.Rest.RestGuild.GetStickerAsync(System.UInt64,Discord.RequestOptions)"> | ||||
| <summary> | <summary> | ||||
| Gets a specific sticker within this guild. | Gets a specific sticker within this guild. | ||||
| @@ -3707,6 +3734,24 @@ | |||||
| <member name="M:Discord.Rest.RestGuild.Discord#IGuild#GetApplicationCommandsAsync(Discord.RequestOptions)"> | <member name="M:Discord.Rest.RestGuild.Discord#IGuild#GetApplicationCommandsAsync(Discord.RequestOptions)"> | ||||
| <inheritdoc /> | <inheritdoc /> | ||||
| </member> | </member> | ||||
| <member name="M:Discord.Rest.RestGuild.Discord#IGuild#CreateStickerAsync(System.String,System.String,System.Collections.Generic.IEnumerable{System.String},Discord.Image,Discord.RequestOptions)"> | |||||
| <inheritdoc /> | |||||
| </member> | |||||
| <member name="M:Discord.Rest.RestGuild.Discord#IGuild#CreateStickerAsync(System.String,System.String,System.Collections.Generic.IEnumerable{System.String},System.IO.Stream,System.String,Discord.RequestOptions)"> | |||||
| <inheritdoc /> | |||||
| </member> | |||||
| <member name="M:Discord.Rest.RestGuild.Discord#IGuild#CreateStickerAsync(System.String,System.String,System.Collections.Generic.IEnumerable{System.String},System.String,Discord.RequestOptions)"> | |||||
| <inheritdoc /> | |||||
| </member> | |||||
| <member name="M:Discord.Rest.RestGuild.Discord#IGuild#GetStickerAsync(System.UInt64,Discord.CacheMode,Discord.RequestOptions)"> | |||||
| <inheritdoc /> | |||||
| </member> | |||||
| <member name="M:Discord.Rest.RestGuild.Discord#IGuild#GetStickersAsync(Discord.CacheMode,Discord.RequestOptions)"> | |||||
| <inheritdoc /> | |||||
| </member> | |||||
| <member name="M:Discord.Rest.RestGuild.Discord#IGuild#DeleteStickerAsync(Discord.ICustomSticker,Discord.RequestOptions)"> | |||||
| <inheritdoc /> | |||||
| </member> | |||||
| <member name="P:Discord.Rest.RestGuildIntegration.Name"> | <member name="P:Discord.Rest.RestGuildIntegration.Name"> | ||||
| <inheritdoc /> | <inheritdoc /> | ||||
| </member> | </member> | ||||
| @@ -8,6 +8,7 @@ using WidgetModel = Discord.API.GuildWidget; | |||||
| using Model = Discord.API.Guild; | using Model = Discord.API.Guild; | ||||
| using RoleModel = Discord.API.Role; | using RoleModel = Discord.API.Role; | ||||
| using ImageModel = Discord.API.Image; | using ImageModel = Discord.API.Image; | ||||
| using System.IO; | |||||
| namespace Discord.Rest | namespace Discord.Rest | ||||
| { | { | ||||
| @@ -559,6 +560,32 @@ namespace Discord.Rest | |||||
| return await client.ApiClient.CreateGuildStickerAsync(apiArgs, guild.Id, options).ConfigureAwait(false); | return await client.ApiClient.CreateGuildStickerAsync(apiArgs, guild.Id, options).ConfigureAwait(false); | ||||
| } | } | ||||
| public static async Task<API.Sticker> CreateStickerAsync(BaseDiscordClient client, IGuild guild, string name, string description, IEnumerable<string> tags, | |||||
| Stream file, string filename, RequestOptions options = null) | |||||
| { | |||||
| Preconditions.NotNull(name, nameof(name)); | |||||
| Preconditions.NotNull(description, nameof(description)); | |||||
| Preconditions.NotNull(file, nameof(file)); | |||||
| Preconditions.NotNull(filename, nameof(filename)); | |||||
| Preconditions.AtLeast(name.Length, 2, nameof(name)); | |||||
| Preconditions.AtLeast(description.Length, 2, nameof(description)); | |||||
| Preconditions.AtMost(name.Length, 30, nameof(name)); | |||||
| Preconditions.AtMost(description.Length, 100, nameof(name)); | |||||
| var apiArgs = new CreateStickerParams() | |||||
| { | |||||
| Name = name, | |||||
| Description = description, | |||||
| File = file, | |||||
| Tags = string.Join(", ", tags), | |||||
| FileName = filename | |||||
| }; | |||||
| return await client.ApiClient.CreateGuildStickerAsync(apiArgs, guild.Id, options).ConfigureAwait(false); | |||||
| } | |||||
| public static async Task<API.Sticker> ModifyStickerAsync(BaseDiscordClient client, ulong guildId, ISticker sticker, Action<StickerProperties> func, | public static async Task<API.Sticker> ModifyStickerAsync(BaseDiscordClient client, ulong guildId, ISticker sticker, Action<StickerProperties> func, | ||||
| RequestOptions options = null) | RequestOptions options = null) | ||||
| { | { | ||||
| @@ -8,6 +8,7 @@ using System.Linq; | |||||
| using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
| using WidgetModel = Discord.API.GuildWidget; | using WidgetModel = Discord.API.GuildWidget; | ||||
| using Model = Discord.API.Guild; | using Model = Discord.API.Guild; | ||||
| using System.IO; | |||||
| namespace Discord.Rest | namespace Discord.Rest | ||||
| { | { | ||||
| @@ -946,6 +947,42 @@ namespace Discord.Rest | |||||
| return CustomSticker.Create(Discord, model, this, model.User.IsSpecified ? model.User.Value.Id : null); | return CustomSticker.Create(Discord, model, this, model.User.IsSpecified ? model.User.Value.Id : null); | ||||
| } | } | ||||
| /// <summary> | /// <summary> | ||||
| /// Creates a new sticker in this guild | |||||
| /// </summary> | |||||
| /// <param name="name">The name of the sticker.</param> | |||||
| /// <param name="description">The description of the sticker.</param> | |||||
| /// <param name="tags">The tags of the sticker.</param> | |||||
| /// <param name="path">The path of the file to upload.</param> | |||||
| /// <param name="options">The options to be used when sending the request.</param> | |||||
| /// <returns> | |||||
| /// A task that represents the asynchronous creation operation. The task result contains the created sticker. | |||||
| /// </returns> | |||||
| public Task<CustomSticker> CreateStickerAsync(string name, string description, IEnumerable<string> tags, string path, | |||||
| RequestOptions options = null) | |||||
| { | |||||
| var fs = File.OpenRead(path); | |||||
| return CreateStickerAsync(name, description, tags, fs, Path.GetFileName(fs.Name), options); | |||||
| } | |||||
| /// <summary> | |||||
| /// Creates a new sticker in this guild | |||||
| /// </summary> | |||||
| /// <param name="name">The name of the sticker.</param> | |||||
| /// <param name="description">The description of the sticker.</param> | |||||
| /// <param name="tags">The tags of the sticker.</param> | |||||
| /// <param name="stream">The stream containing the file data.</param> | |||||
| /// <param name="filename">The name of the file <b>with</b> the extension, ex: image.png</param> | |||||
| /// <param name="options">The options to be used when sending the request.</param> | |||||
| /// <returns> | |||||
| /// A task that represents the asynchronous creation operation. The task result contains the created sticker. | |||||
| /// </returns> | |||||
| public async Task<CustomSticker> CreateStickerAsync(string name, string description, IEnumerable<string> tags, Stream stream, | |||||
| string filename, RequestOptions options = null) | |||||
| { | |||||
| var model = await GuildHelper.CreateStickerAsync(Discord, this, name, description, tags, stream, filename, options).ConfigureAwait(false); | |||||
| return CustomSticker.Create(Discord, model, this, model.User.IsSpecified ? model.User.Value.Id : null); | |||||
| } | |||||
| /// <summary> | |||||
| /// Gets a specific sticker within this guild. | /// Gets a specific sticker within this guild. | ||||
| /// </summary> | /// </summary> | ||||
| /// <param name="id">The id of the sticker to get.</param> | /// <param name="id">The id of the sticker to get.</param> | ||||
| @@ -1262,8 +1299,16 @@ namespace Discord.Rest | |||||
| /// <inheritdoc /> | /// <inheritdoc /> | ||||
| async Task<IReadOnlyCollection<IApplicationCommand>> IGuild.GetApplicationCommandsAsync (RequestOptions options) | async Task<IReadOnlyCollection<IApplicationCommand>> IGuild.GetApplicationCommandsAsync (RequestOptions options) | ||||
| => await GetApplicationCommandsAsync(options).ConfigureAwait(false); | => await GetApplicationCommandsAsync(options).ConfigureAwait(false); | ||||
| /// <inheritdoc /> | |||||
| async Task<ICustomSticker> IGuild.CreateStickerAsync(string name, string description, IEnumerable<string> tags, Image image, RequestOptions options) | async Task<ICustomSticker> IGuild.CreateStickerAsync(string name, string description, IEnumerable<string> tags, Image image, RequestOptions options) | ||||
| => await CreateStickerAsync(name, description, tags, image, options); | => await CreateStickerAsync(name, description, tags, image, options); | ||||
| /// <inheritdoc /> | |||||
| async Task<ICustomSticker> IGuild.CreateStickerAsync(string name, string description, IEnumerable<string> tags, Stream stream, string filename, RequestOptions options) | |||||
| => await CreateStickerAsync(name, description, tags, stream, filename, options); | |||||
| /// <inheritdoc /> | |||||
| async Task<ICustomSticker> IGuild.CreateStickerAsync(string name, string description, IEnumerable<string> tags, string path, RequestOptions options) | |||||
| => await CreateStickerAsync(name, description, tags, path, options); | |||||
| /// <inheritdoc /> | |||||
| async Task<ICustomSticker> IGuild.GetStickerAsync(ulong id, CacheMode mode, RequestOptions options) | async Task<ICustomSticker> IGuild.GetStickerAsync(ulong id, CacheMode mode, RequestOptions options) | ||||
| { | { | ||||
| if (mode != CacheMode.AllowDownload) | if (mode != CacheMode.AllowDownload) | ||||
| @@ -1271,6 +1316,7 @@ namespace Discord.Rest | |||||
| return await GetStickerAsync(id, options); | return await GetStickerAsync(id, options); | ||||
| } | } | ||||
| /// <inheritdoc /> | |||||
| async Task<IReadOnlyCollection<ICustomSticker>> IGuild.GetStickersAsync(CacheMode mode, RequestOptions options) | async Task<IReadOnlyCollection<ICustomSticker>> IGuild.GetStickersAsync(CacheMode mode, RequestOptions options) | ||||
| { | { | ||||
| if (mode != CacheMode.AllowDownload) | if (mode != CacheMode.AllowDownload) | ||||
| @@ -1278,6 +1324,7 @@ namespace Discord.Rest | |||||
| return await GetStickersAsync(options); | return await GetStickersAsync(options); | ||||
| } | } | ||||
| /// <inheritdoc /> | |||||
| Task IGuild.DeleteStickerAsync(ICustomSticker sticker, RequestOptions options) | Task IGuild.DeleteStickerAsync(ICustomSticker sticker, RequestOptions options) | ||||
| => sticker.DeleteAsync(); | => sticker.DeleteAsync(); | ||||
| } | } | ||||
| @@ -7,6 +7,7 @@ using System.IO; | |||||
| using System.Linq; | using System.Linq; | ||||
| using System.Net; | using System.Net; | ||||
| using System.Net.Http; | using System.Net.Http; | ||||
| using System.Net.Http.Headers; | |||||
| using System.Text; | using System.Text; | ||||
| using System.Threading; | using System.Threading; | ||||
| using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
| @@ -101,7 +102,7 @@ namespace Discord.Net.Rest | |||||
| switch (p.Value) | switch (p.Value) | ||||
| { | { | ||||
| #pragma warning disable IDISP004 | #pragma warning disable IDISP004 | ||||
| case string stringValue: { content.Add(new StringContent(stringValue), p.Key); continue; } | |||||
| case string stringValue: { content.Add(new StringContent(stringValue, Encoding.UTF8, "text/plain"), p.Key); continue; } | |||||
| case byte[] byteArrayValue: { content.Add(new ByteArrayContent(byteArrayValue), p.Key); continue; } | case byte[] byteArrayValue: { content.Add(new ByteArrayContent(byteArrayValue), p.Key); continue; } | ||||
| case Stream streamValue: { content.Add(new StreamContent(streamValue), p.Key); continue; } | case Stream streamValue: { content.Add(new StreamContent(streamValue), p.Key); continue; } | ||||
| case MultipartFile fileValue: | case MultipartFile fileValue: | ||||
| @@ -116,8 +117,16 @@ namespace Discord.Net.Rest | |||||
| stream = memoryStream; | stream = memoryStream; | ||||
| #pragma warning restore IDISP001 | #pragma warning restore IDISP001 | ||||
| } | } | ||||
| content.Add(new StreamContent(stream), p.Key, fileValue.Filename); | |||||
| var streamContent = new StreamContent(stream); | |||||
| var extension = fileValue.Filename.Split('.').Last(); | |||||
| if(fileValue.ContentType != null) | |||||
| streamContent.Headers.ContentType = new MediaTypeHeaderValue(fileValue.ContentType); | |||||
| content.Add(streamContent, p.Key, fileValue.Filename); | |||||
| #pragma warning restore IDISP004 | #pragma warning restore IDISP004 | ||||
| continue; | continue; | ||||
| } | } | ||||
| default: throw new InvalidOperationException($"Unsupported param type \"{p.Value.GetType().Name}\"."); | default: throw new InvalidOperationException($"Unsupported param type \"{p.Value.GetType().Name}\"."); | ||||
| @@ -20,6 +20,7 @@ using RoleModel = Discord.API.Role; | |||||
| using UserModel = Discord.API.User; | using UserModel = Discord.API.User; | ||||
| using VoiceStateModel = Discord.API.VoiceState; | using VoiceStateModel = Discord.API.VoiceState; | ||||
| using StickerModel = Discord.API.Sticker; | using StickerModel = Discord.API.Sticker; | ||||
| using System.IO; | |||||
| namespace Discord.WebSocket | namespace Discord.WebSocket | ||||
| { | { | ||||
| @@ -1248,6 +1249,42 @@ namespace Discord.WebSocket | |||||
| return AddOrUpdateSticker(model); | return AddOrUpdateSticker(model); | ||||
| } | } | ||||
| /// <summary> | /// <summary> | ||||
| /// Creates a new sticker in this guild | |||||
| /// </summary> | |||||
| /// <param name="name">The name of the sticker.</param> | |||||
| /// <param name="description">The description of the sticker.</param> | |||||
| /// <param name="tags">The tags of the sticker.</param> | |||||
| /// <param name="path">The path of the file to upload.</param> | |||||
| /// <param name="options">The options to be used when sending the request.</param> | |||||
| /// <returns> | |||||
| /// A task that represents the asynchronous creation operation. The task result contains the created sticker. | |||||
| /// </returns> | |||||
| public Task<SocketCustomSticker> CreateStickerAsync(string name, string description, IEnumerable<string> tags, string path, | |||||
| RequestOptions options = null) | |||||
| { | |||||
| var fs = File.OpenRead(path); | |||||
| return CreateStickerAsync(name, description, tags, fs, Path.GetFileName(fs.Name), options); | |||||
| } | |||||
| /// <summary> | |||||
| /// Creates a new sticker in this guild | |||||
| /// </summary> | |||||
| /// <param name="name">The name of the sticker.</param> | |||||
| /// <param name="description">The description of the sticker.</param> | |||||
| /// <param name="tags">The tags of the sticker.</param> | |||||
| /// <param name="stream">The stream containing the file data.</param> | |||||
| /// <param name="filename">The name of the file <b>with</b> the extension, ex: image.png</param> | |||||
| /// <param name="options">The options to be used when sending the request.</param> | |||||
| /// <returns> | |||||
| /// A task that represents the asynchronous creation operation. The task result contains the created sticker. | |||||
| /// </returns> | |||||
| public async Task<SocketCustomSticker> CreateStickerAsync(string name, string description, IEnumerable<string> tags, Stream stream, | |||||
| string filename, RequestOptions options = null) | |||||
| { | |||||
| var model = await GuildHelper.CreateStickerAsync(Discord, this, name, description, tags, stream, filename, options).ConfigureAwait(false); | |||||
| return AddOrUpdateSticker(model); | |||||
| } | |||||
| /// <summary> | |||||
| /// Deletes a sticker within this guild. | /// Deletes a sticker within this guild. | ||||
| /// </summary> | /// </summary> | ||||
| /// <param name="sticker">The sticker to delete.</param> | /// <param name="sticker">The sticker to delete.</param> | ||||
| @@ -1632,12 +1669,22 @@ namespace Discord.WebSocket | |||||
| /// <inheritdoc /> | /// <inheritdoc /> | ||||
| async Task<IReadOnlyCollection<IApplicationCommand>> IGuild.GetApplicationCommandsAsync (RequestOptions options) | async Task<IReadOnlyCollection<IApplicationCommand>> IGuild.GetApplicationCommandsAsync (RequestOptions options) | ||||
| => await GetApplicationCommandsAsync(options).ConfigureAwait(false); | => await GetApplicationCommandsAsync(options).ConfigureAwait(false); | ||||
| /// <inheritdoc /> | |||||
| async Task<ICustomSticker> IGuild.CreateStickerAsync(string name, string description, IEnumerable<string> tags, Image image, RequestOptions options) | async Task<ICustomSticker> IGuild.CreateStickerAsync(string name, string description, IEnumerable<string> tags, Image image, RequestOptions options) | ||||
| => await CreateStickerAsync(name, description, tags, image, options); | => await CreateStickerAsync(name, description, tags, image, options); | ||||
| /// <inheritdoc /> | |||||
| async Task<ICustomSticker> IGuild.CreateStickerAsync(string name, string description, IEnumerable<string> tags, Stream stream, string filename, RequestOptions options) | |||||
| => await CreateStickerAsync(name, description, tags, stream, filename, options); | |||||
| /// <inheritdoc /> | |||||
| async Task<ICustomSticker> IGuild.CreateStickerAsync(string name, string description, IEnumerable<string> tags, string path, RequestOptions options) | |||||
| => await CreateStickerAsync(name, description, tags, path, options); | |||||
| /// <inheritdoc /> | |||||
| async Task<ICustomSticker> IGuild.GetStickerAsync(ulong id, CacheMode mode, RequestOptions options) | async Task<ICustomSticker> IGuild.GetStickerAsync(ulong id, CacheMode mode, RequestOptions options) | ||||
| => await GetStickerAsync(id, mode, options); | => await GetStickerAsync(id, mode, options); | ||||
| /// <inheritdoc /> | |||||
| async Task<IReadOnlyCollection<ICustomSticker>> IGuild.GetStickersAsync(CacheMode mode, RequestOptions options) | async Task<IReadOnlyCollection<ICustomSticker>> IGuild.GetStickersAsync(CacheMode mode, RequestOptions options) | ||||
| => await GetStickersAsync(mode, options); | => await GetStickersAsync(mode, options); | ||||
| /// <inheritdoc /> | |||||
| Task IGuild.DeleteStickerAsync(ICustomSticker sticker, RequestOptions options) | Task IGuild.DeleteStickerAsync(ICustomSticker sticker, RequestOptions options) | ||||
| => DeleteStickerAsync(_stickers[sticker.Id], options); | => DeleteStickerAsync(_stickers[sticker.Id], options); | ||||