From 1ca4bd50d4153c1fa32bf9ad3d2f1100f1b2dff9 Mon Sep 17 00:00:00 2001 From: RogueException Date: Thu, 15 Oct 2015 16:18:27 -0300 Subject: [PATCH] Fix cache errors on server delete --- src/Discord.Net/Collections/Channels.cs | 17 ++++++++++++----- src/Discord.Net/Collections/Members.cs | 18 +++++++++++++----- src/Discord.Net/Collections/Messages.cs | 8 ++++++-- src/Discord.Net/Collections/Roles.cs | 4 +++- 4 files changed, 34 insertions(+), 13 deletions(-) diff --git a/src/Discord.Net/Collections/Channels.cs b/src/Discord.Net/Collections/Channels.cs index 5207abb36..4b9a88cff 100644 --- a/src/Discord.Net/Collections/Channels.cs +++ b/src/Discord.Net/Collections/Channels.cs @@ -28,14 +28,21 @@ namespace Discord.Collections protected override void OnRemoved(Channel item) { if (!item.IsPrivate) - item.Server.RemoveChannel(item.Id); + { + var server = item.Server; + if (server != null) + item.Server.RemoveChannel(item.Id); + } if (item.RecipientId != null) { var user = item.Recipient; - if (user.PrivateChannelId != item.Id) - throw new Exception("User has a different private channel."); - user.PrivateChannelId = null; - user.RemoveRef(); + if (user != null) + { + if (user.PrivateChannelId != item.Id) + throw new Exception("User has a different private channel."); + user.PrivateChannelId = null; + user.RemoveRef(); + } } } diff --git a/src/Discord.Net/Collections/Members.cs b/src/Discord.Net/Collections/Members.cs index fcd69555f..c8c4deae1 100644 --- a/src/Discord.Net/Collections/Members.cs +++ b/src/Discord.Net/Collections/Members.cs @@ -24,11 +24,19 @@ namespace Discord.Collections } protected override void OnRemoved(Member item) { - item.Server.RemoveMember(item); - item.User.RemoveServer(item.ServerId); - item.User.RemoveRef(); - if (item.UserId == _client.CurrentUserId) - item.Server.CurrentMember = null; + var server = item.Server; + if (server != null) + { + server.RemoveMember(item); + if (item.UserId == _client.CurrentUserId) + server.CurrentMember = null; + } + var user = item.User; + if (user != null) + { + user.RemoveServer(item.ServerId); + user.RemoveRef(); + } } internal Member this[string userId, string serverId] diff --git a/src/Discord.Net/Collections/Messages.cs b/src/Discord.Net/Collections/Messages.cs index 2c353322b..1d3011f4f 100644 --- a/src/Discord.Net/Collections/Messages.cs +++ b/src/Discord.Net/Collections/Messages.cs @@ -22,8 +22,12 @@ namespace Discord.Collections } protected override void OnRemoved(Message item) { - item.Channel.RemoveMessage(item.Id); - item.User.RemoveRef(); + var channel = item.Channel; + if (channel != null) + channel.RemoveMessage(item.Id); + var user = item.User; + if (user != null) + user.RemoveRef(); } internal Message this[string id] => Get(id); diff --git a/src/Discord.Net/Collections/Roles.cs b/src/Discord.Net/Collections/Roles.cs index 8dd47b7f5..5a3d1d41b 100644 --- a/src/Discord.Net/Collections/Roles.cs +++ b/src/Discord.Net/Collections/Roles.cs @@ -18,7 +18,9 @@ namespace Discord.Collections } protected override void OnRemoved(Role item) { - item.Server.RemoveRole(item.Id); + var server = item.Server; + if (server != null) + item.Server.RemoveRole(item.Id); } internal Role this[string id] => Get(id);