Fix cache errors on server delete
This commit is contained in:
@@ -28,16 +28,23 @@ namespace Discord.Collections
|
|||||||
protected override void OnRemoved(Channel item)
|
protected override void OnRemoved(Channel item)
|
||||||
{
|
{
|
||||||
if (!item.IsPrivate)
|
if (!item.IsPrivate)
|
||||||
|
{
|
||||||
|
var server = item.Server;
|
||||||
|
if (server != null)
|
||||||
item.Server.RemoveChannel(item.Id);
|
item.Server.RemoveChannel(item.Id);
|
||||||
|
}
|
||||||
if (item.RecipientId != null)
|
if (item.RecipientId != null)
|
||||||
{
|
{
|
||||||
var user = item.Recipient;
|
var user = item.Recipient;
|
||||||
|
if (user != null)
|
||||||
|
{
|
||||||
if (user.PrivateChannelId != item.Id)
|
if (user.PrivateChannelId != item.Id)
|
||||||
throw new Exception("User has a different private channel.");
|
throw new Exception("User has a different private channel.");
|
||||||
user.PrivateChannelId = null;
|
user.PrivateChannelId = null;
|
||||||
user.RemoveRef();
|
user.RemoveRef();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
internal Channel this[string id] => Get(id);
|
internal Channel this[string id] => Get(id);
|
||||||
|
|
||||||
|
|||||||
@@ -24,11 +24,19 @@ namespace Discord.Collections
|
|||||||
}
|
}
|
||||||
protected override void OnRemoved(Member item)
|
protected override void OnRemoved(Member item)
|
||||||
{
|
{
|
||||||
item.Server.RemoveMember(item);
|
var server = item.Server;
|
||||||
item.User.RemoveServer(item.ServerId);
|
if (server != null)
|
||||||
item.User.RemoveRef();
|
{
|
||||||
|
server.RemoveMember(item);
|
||||||
if (item.UserId == _client.CurrentUserId)
|
if (item.UserId == _client.CurrentUserId)
|
||||||
item.Server.CurrentMember = null;
|
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);
|
var channel = item.Channel;
|
||||||
item.User.RemoveRef();
|
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,6 +18,8 @@ namespace Discord.Collections
|
|||||||
}
|
}
|
||||||
protected override void OnRemoved(Role item)
|
protected override void OnRemoved(Role item)
|
||||||
{
|
{
|
||||||
|
var server = item.Server;
|
||||||
|
if (server != null)
|
||||||
item.Server.RemoveRole(item.Id);
|
item.Server.RemoveRole(item.Id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user