From d79b37a44ef7cda365d01a4bb2c4ed9ea4d5e13f Mon Sep 17 00:00:00 2001 From: AntiTcb Date: Tue, 25 Jul 2017 21:52:41 -0400 Subject: [PATCH] Fix CreateGuildAsync not doing anything with the input stream for the guild icon. Also fixes an issue with potential stream types that throw a NotSupportedException when checking its properties. [Apparently, they exist.](https://github.com/dotnet/corefx/blob/master/src/System.Net.Http.WinHttpHandler/src/System/Net/Http/WinHttpResponseStream.cs) --- src/Discord.Net.Rest/ClientHelper.cs | 3 +++ .../Net/Converters/ImageConverter.cs | 13 +++++++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/Discord.Net.Rest/ClientHelper.cs b/src/Discord.Net.Rest/ClientHelper.cs index 8bc800a7d..2f05d5d36 100644 --- a/src/Discord.Net.Rest/ClientHelper.cs +++ b/src/Discord.Net.Rest/ClientHelper.cs @@ -120,6 +120,9 @@ namespace Discord.Rest string name, IVoiceRegion region, Stream jpegIcon, RequestOptions options) { var args = new CreateGuildParams(name, region.Id); + if (jpegIcon != null) + args.Icon = new API.Image(jpegIcon); + var model = await client.ApiClient.CreateGuildAsync(args, options).ConfigureAwait(false); return RestGuild.Create(client, model); } diff --git a/src/Discord.Net.Rest/Net/Converters/ImageConverter.cs b/src/Discord.Net.Rest/Net/Converters/ImageConverter.cs index f4d591d7e..583180d95 100644 --- a/src/Discord.Net.Rest/Net/Converters/ImageConverter.cs +++ b/src/Discord.Net.Rest/Net/Converters/ImageConverter.cs @@ -1,5 +1,6 @@ -using Newtonsoft.Json; -using System; +using System; +using System.IO; +using Newtonsoft.Json; using Model = Discord.API.Image; namespace Discord.Net.Converters @@ -23,8 +24,12 @@ namespace Discord.Net.Converters if (image.Stream != null) { - byte[] bytes = new byte[image.Stream.Length - image.Stream.Position]; - image.Stream.Read(bytes, 0, bytes.Length); + Stream cloneStream = new MemoryStream(); + image.Stream.CopyTo(cloneStream); + + byte[] bytes = new byte[cloneStream.Length]; + cloneStream.Seek(0, SeekOrigin.Begin); + cloneStream.Read(bytes, 0, bytes.Length); string base64 = Convert.ToBase64String(bytes); writer.WriteValue($"data:image/jpeg;base64,{base64}");