From 7b24926310f1cf5d4b313a98386e279f51a2dec3 Mon Sep 17 00:00:00 2001 From: Brandon Smith Date: Tue, 18 Aug 2015 20:10:19 -0300 Subject: [PATCH] Added HttpException so we can actually catch server errors again! --- .../Discord.Net.Commands.xproj | 2 +- src/Discord.Net.Net45/Discord.Net.csproj | 3 +++ src/Discord.Net/Discord.Net.xproj | 2 +- src/Discord.Net/DiscordClient.cs | 12 ++++++------ src/Discord.Net/Helpers/Http.cs | 4 ++-- src/Discord.Net/Helpers/HttpException.cs | 16 ++++++++++++++++ src/Discord.Net/project.json | 17 ++++++++++++----- 7 files changed, 41 insertions(+), 15 deletions(-) create mode 100644 src/Discord.Net/Helpers/HttpException.cs diff --git a/src/Discord.Net.Commands/Discord.Net.Commands.xproj b/src/Discord.Net.Commands/Discord.Net.Commands.xproj index e6d1163ef..1c104ae22 100644 --- a/src/Discord.Net.Commands/Discord.Net.Commands.xproj +++ b/src/Discord.Net.Commands/Discord.Net.Commands.xproj @@ -7,7 +7,7 @@ 19793545-ef89-48f4-8100-3ebaad0a9141 - Discord.Net.Commands + Discord ..\..\artifacts\obj\$(MSBuildProjectName) ..\..\artifacts\bin\$(MSBuildProjectName)\ diff --git a/src/Discord.Net.Net45/Discord.Net.csproj b/src/Discord.Net.Net45/Discord.Net.csproj index 51f118503..a8336b3fd 100644 --- a/src/Discord.Net.Net45/Discord.Net.csproj +++ b/src/Discord.Net.Net45/Discord.Net.csproj @@ -88,6 +88,9 @@ Helpers\Http.cs + + Helpers\HttpException.cs + Invite.cs diff --git a/src/Discord.Net/Discord.Net.xproj b/src/Discord.Net/Discord.Net.xproj index 5518fc017..be1dbc400 100644 --- a/src/Discord.Net/Discord.Net.xproj +++ b/src/Discord.Net/Discord.Net.xproj @@ -7,7 +7,7 @@ acfb060b-ec8a-4926-b293-04c01e17ee23 - Discord.Net + Discord ..\..\artifacts\obj\$(MSBuildProjectName) ..\..\artifacts\bin\$(MSBuildProjectName)\ diff --git a/src/Discord.Net/DiscordClient.cs b/src/Discord.Net/DiscordClient.cs index 4c7df69df..04f11ca15 100644 --- a/src/Discord.Net/DiscordClient.cs +++ b/src/Discord.Net/DiscordClient.cs @@ -596,7 +596,7 @@ namespace Discord { await DiscordAPI.LeaveServer(serverId); } - catch (WebException ex) when ((ex.Response as HttpWebResponse)?.StatusCode == HttpStatusCode.NotFound) {} + catch (HttpException ex) when (ex.StatusCode == HttpStatusCode.NotFound) {} return _servers.Remove(serverId); } @@ -626,7 +626,7 @@ namespace Discord { var response = await DiscordAPI.DestroyChannel(channelId); } - catch (WebException ex) when ((ex.Response as HttpWebResponse)?.StatusCode == HttpStatusCode.NotFound) { } + catch (HttpException ex) when (ex.StatusCode == HttpStatusCode.NotFound) { } return _channels.Remove(channelId); } @@ -655,7 +655,7 @@ namespace Discord { await DiscordAPI.Unban(serverId, userId); } - catch (WebException ex) when ((ex.Response as HttpWebResponse)?.StatusCode == HttpStatusCode.NotFound) { } + catch (HttpException ex) when (ex.StatusCode == HttpStatusCode.NotFound) { } } //Invites @@ -718,7 +718,7 @@ namespace Discord var response = await DiscordAPI.GetInvite(id); await DiscordAPI.DeleteInvite(response.Code); } - catch (WebException ex) when ((ex.Response as HttpWebResponse)?.StatusCode == HttpStatusCode.NotFound) { } + catch (HttpException ex) when (ex.StatusCode == HttpStatusCode.NotFound) { } } //Chat @@ -781,8 +781,8 @@ namespace Discord await DiscordAPI.DeleteMessage(channelId, msgId); return _messages.Remove(msgId); } - catch (WebException ex) when ((ex.Response as HttpWebResponse)?.StatusCode == HttpStatusCode.NotFound) { } - catch (WebException ex) when ((ex.Response as HttpWebResponse)?.StatusCode == HttpStatusCode.InternalServerError) { } //TODO: Remove me - temporary fix for deleting nonexisting messages + catch (HttpException ex) when (ex.StatusCode == HttpStatusCode.NotFound) { } + catch (HttpException ex) when (ex.StatusCode == HttpStatusCode.InternalServerError) { } //TODO: Remove me - temporary fix for deleting nonexisting messages return null; } diff --git a/src/Discord.Net/Helpers/Http.cs b/src/Discord.Net/Helpers/Http.cs index 676b58757..cc96bd25d 100644 --- a/src/Discord.Net/Helpers/Http.cs +++ b/src/Discord.Net/Helpers/Http.cs @@ -134,14 +134,14 @@ namespace Discord.Helpers { response = await _client.SendAsync(msg, HttpCompletionOption.ResponseContentRead); if (!response.IsSuccessStatusCode) - throw new InvalidOperationException($"The server responded with error {(int)response.StatusCode}."); + throw new HttpException(response.StatusCode); result = await response.Content.ReadAsStringAsync(); } else { response = await _client.SendAsync(msg, HttpCompletionOption.ResponseHeadersRead); if (!response.IsSuccessStatusCode) - throw new InvalidOperationException($"The server responded with error {(int)response.StatusCode}."); + throw new HttpException(response.StatusCode); result = null; } diff --git a/src/Discord.Net/Helpers/HttpException.cs b/src/Discord.Net/Helpers/HttpException.cs new file mode 100644 index 000000000..2a6292551 --- /dev/null +++ b/src/Discord.Net/Helpers/HttpException.cs @@ -0,0 +1,16 @@ +using System; +using System.Net; + +namespace Discord.Helpers +{ + public class HttpException : Exception + { + public HttpStatusCode StatusCode { get; } + + public HttpException(HttpStatusCode statusCode) + : base($"The server responded with error {statusCode}") + { + StatusCode = statusCode; + } + } +} diff --git a/src/Discord.Net/project.json b/src/Discord.Net/project.json index 3766a72bf..d3e7a20b3 100644 --- a/src/Discord.Net/project.json +++ b/src/Discord.Net/project.json @@ -14,13 +14,20 @@ }, "dependencies": { - "Newtonsoft.Json": "7.0.1", - "Microsoft.Net.Http": "2.2.22" + "Newtonsoft.Json": "7.0.1" }, "frameworks": { - "net45": { }, - "dnx451": { }, + "net45": { + "dependencies": { + "Microsoft.Net.Http": "2.2.22" + } + }, + "dnx451": { + "dependencies": { + "Microsoft.Net.Http": "2.2.22" + } + }, "dnxcore50": { "dependencies": { "System.Collections.Concurrent": "4.0.10", @@ -33,4 +40,4 @@ } } } -} + }