| @@ -28,14 +28,21 @@ namespace Discord.Collections | |||||
| protected override void OnRemoved(Channel item) | protected override void OnRemoved(Channel item) | ||||
| { | { | ||||
| if (!item.IsPrivate) | if (!item.IsPrivate) | ||||
| item.Server.RemoveChannel(item.Id); | |||||
| { | |||||
| var server = item.Server; | |||||
| if (server != null) | |||||
| item.Server.RemoveChannel(item.Id); | |||||
| } | |||||
| if (item.RecipientId != null) | if (item.RecipientId != null) | ||||
| { | { | ||||
| var user = item.Recipient; | 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(); | |||||
| } | |||||
| } | } | ||||
| } | } | ||||
| @@ -24,11 +24,19 @@ namespace Discord.Collections | |||||
| } | } | ||||
| protected override void OnRemoved(Member item) | 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] | internal Member this[string userId, string serverId] | ||||
| @@ -22,8 +22,12 @@ namespace Discord.Collections | |||||
| } | } | ||||
| protected override void OnRemoved(Message item) | 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); | internal Message this[string id] => Get(id); | ||||
| @@ -18,7 +18,9 @@ namespace Discord.Collections | |||||
| } | } | ||||
| protected override void OnRemoved(Role item) | 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); | internal Role this[string id] => Get(id); | ||||