@@ -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); | ||||