diff --git a/src/Discord.Net/Models/Channel.cs b/src/Discord.Net/Models/Channel.cs index e741476cb..2c4a19b9c 100644 --- a/src/Discord.Net/Models/Channel.cs +++ b/src/Discord.Net/Models/Channel.cs @@ -96,7 +96,6 @@ namespace Discord var server = _client.Servers[_serverId]; server.AddChannel(this); Server = server; - Recipient = null; } } internal override void OnUncached() @@ -104,13 +103,17 @@ namespace Discord var server = Server; if (server != null) server.RemoveChannel(this); - Server = null; var recipient = Recipient; if (recipient != null) recipient.GlobalUser.PrivateChannel = null; - Recipient = recipient; - } + + var globalMessages = _client.Messages; + var messages = _messages; + foreach (var message in messages) + globalMessages.TryRemove(message.Key); + _messages.Clear(); + } internal void Update(ChannelReference model) { @@ -148,7 +151,10 @@ namespace Discord { var oldest = _messages.Select(x => x.Value.Id).OrderBy(x => x).FirstOrDefault(); if (oldest != null) - _client.Messages.TryRemove(oldest); + { + if (_messages.TryRemove(oldest, out message)) + _client.Messages.TryRemove(oldest); + } } _messages.TryAdd(message.Id, message); } diff --git a/src/Discord.Net/Models/Invite.cs b/src/Discord.Net/Models/Invite.cs index 8a8fec544..e735b99af 100644 --- a/src/Discord.Net/Models/Invite.cs +++ b/src/Discord.Net/Models/Invite.cs @@ -72,12 +72,7 @@ namespace Discord Channel = channel; } } - internal override void OnUncached() - { - Server = null; - Inviter = null; - Channel = null; - } + internal override void OnUncached() { } public override string ToString() => XkcdCode ?? Id; diff --git a/src/Discord.Net/Models/Message.cs b/src/Discord.Net/Models/Message.cs index 0634499da..e73bf803b 100644 --- a/src/Discord.Net/Models/Message.cs +++ b/src/Discord.Net/Models/Message.cs @@ -167,12 +167,10 @@ namespace Discord var channel = Channel; if (channel != null) channel.RemoveMessage(this); - Channel = null; - var user = User; - /*if (user != null) + /*var user = User; + if (user != null) user.RemoveMessage(this);*/ - User = null; } internal void Update(MessageInfo model) diff --git a/src/Discord.Net/Models/Role.cs b/src/Discord.Net/Models/Role.cs index 2473e8448..83c8ba620 100644 --- a/src/Discord.Net/Models/Role.cs +++ b/src/Discord.Net/Models/Role.cs @@ -56,7 +56,6 @@ namespace Discord var server = Server; if (server != null) server.RemoveRole(this); - Server = null; } internal void Update(RoleInfo model) diff --git a/src/Discord.Net/Models/User.cs b/src/Discord.Net/Models/User.cs index 6ea6f5d2e..52dfe0503 100644 --- a/src/Discord.Net/Models/User.cs +++ b/src/Discord.Net/Models/User.cs @@ -82,14 +82,16 @@ namespace Discord } internal override void OnCached() { - var server = _client.Servers[_serverId]; - if (server != null) + if (_serverId != null) { + var server = _client.Servers[_serverId]; server.AddMember(this); if (Id == _client.CurrentUserId) server.CurrentMember = this; Server = server; } + else + UpdateRoles(null); var user = _client.GlobalUsers.GetOrAdd(Id); user.AddUser(this); @@ -105,12 +107,10 @@ namespace Discord if (Id == _client.CurrentUserId) server.CurrentMember = null; } - Server = null; var globalUser = GlobalUser; if (globalUser != null) globalUser.RemoveUser(this); - GlobalUser = null; } public override string ToString() => Id; @@ -182,7 +182,11 @@ namespace Discord } private void UpdateRoles(IEnumerable roles) { - var newRoles = roles.ToDictionary(x => x.Id, x => x); + Dictionary newRoles; + if (roles != null) + newRoles = roles.ToDictionary(x => x.Id, x => x); + else + newRoles = new Dictionary(); Role everyone; if (_serverId != null) everyone = Server.EveryoneRole;