Fix cache errors on server delete
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user