| @@ -96,7 +96,6 @@ namespace Discord | |||||
| var server = _client.Servers[_serverId]; | var server = _client.Servers[_serverId]; | ||||
| server.AddChannel(this); | server.AddChannel(this); | ||||
| Server = server; | Server = server; | ||||
| Recipient = null; | |||||
| } | } | ||||
| } | } | ||||
| internal override void OnUncached() | internal override void OnUncached() | ||||
| @@ -104,13 +103,17 @@ namespace Discord | |||||
| var server = Server; | var server = Server; | ||||
| if (server != null) | if (server != null) | ||||
| server.RemoveChannel(this); | server.RemoveChannel(this); | ||||
| Server = null; | |||||
| var recipient = Recipient; | var recipient = Recipient; | ||||
| if (recipient != null) | if (recipient != null) | ||||
| recipient.GlobalUser.PrivateChannel = 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) | internal void Update(ChannelReference model) | ||||
| { | { | ||||
| @@ -148,7 +151,10 @@ namespace Discord | |||||
| { | { | ||||
| var oldest = _messages.Select(x => x.Value.Id).OrderBy(x => x).FirstOrDefault(); | var oldest = _messages.Select(x => x.Value.Id).OrderBy(x => x).FirstOrDefault(); | ||||
| if (oldest != null) | if (oldest != null) | ||||
| _client.Messages.TryRemove(oldest); | |||||
| { | |||||
| if (_messages.TryRemove(oldest, out message)) | |||||
| _client.Messages.TryRemove(oldest); | |||||
| } | |||||
| } | } | ||||
| _messages.TryAdd(message.Id, message); | _messages.TryAdd(message.Id, message); | ||||
| } | } | ||||
| @@ -72,12 +72,7 @@ namespace Discord | |||||
| Channel = channel; | Channel = channel; | ||||
| } | } | ||||
| } | } | ||||
| internal override void OnUncached() | |||||
| { | |||||
| Server = null; | |||||
| Inviter = null; | |||||
| Channel = null; | |||||
| } | |||||
| internal override void OnUncached() { } | |||||
| public override string ToString() => XkcdCode ?? Id; | public override string ToString() => XkcdCode ?? Id; | ||||
| @@ -167,12 +167,10 @@ namespace Discord | |||||
| var channel = Channel; | var channel = Channel; | ||||
| if (channel != null) | if (channel != null) | ||||
| channel.RemoveMessage(this); | channel.RemoveMessage(this); | ||||
| Channel = null; | |||||
| var user = User; | |||||
| /*if (user != null) | |||||
| /*var user = User; | |||||
| if (user != null) | |||||
| user.RemoveMessage(this);*/ | user.RemoveMessage(this);*/ | ||||
| User = null; | |||||
| } | } | ||||
| internal void Update(MessageInfo model) | internal void Update(MessageInfo model) | ||||
| @@ -56,7 +56,6 @@ namespace Discord | |||||
| var server = Server; | var server = Server; | ||||
| if (server != null) | if (server != null) | ||||
| server.RemoveRole(this); | server.RemoveRole(this); | ||||
| Server = null; | |||||
| } | } | ||||
| internal void Update(RoleInfo model) | internal void Update(RoleInfo model) | ||||
| @@ -82,14 +82,16 @@ namespace Discord | |||||
| } | } | ||||
| internal override void OnCached() | internal override void OnCached() | ||||
| { | { | ||||
| var server = _client.Servers[_serverId]; | |||||
| if (server != null) | |||||
| if (_serverId != null) | |||||
| { | { | ||||
| var server = _client.Servers[_serverId]; | |||||
| server.AddMember(this); | server.AddMember(this); | ||||
| if (Id == _client.CurrentUserId) | if (Id == _client.CurrentUserId) | ||||
| server.CurrentMember = this; | server.CurrentMember = this; | ||||
| Server = server; | Server = server; | ||||
| } | } | ||||
| else | |||||
| UpdateRoles(null); | |||||
| var user = _client.GlobalUsers.GetOrAdd(Id); | var user = _client.GlobalUsers.GetOrAdd(Id); | ||||
| user.AddUser(this); | user.AddUser(this); | ||||
| @@ -105,12 +107,10 @@ namespace Discord | |||||
| if (Id == _client.CurrentUserId) | if (Id == _client.CurrentUserId) | ||||
| server.CurrentMember = null; | server.CurrentMember = null; | ||||
| } | } | ||||
| Server = null; | |||||
| var globalUser = GlobalUser; | var globalUser = GlobalUser; | ||||
| if (globalUser != null) | if (globalUser != null) | ||||
| globalUser.RemoveUser(this); | globalUser.RemoveUser(this); | ||||
| GlobalUser = null; | |||||
| } | } | ||||
| public override string ToString() => Id; | public override string ToString() => Id; | ||||
| @@ -182,7 +182,11 @@ namespace Discord | |||||
| } | } | ||||
| private void UpdateRoles(IEnumerable<Role> roles) | private void UpdateRoles(IEnumerable<Role> roles) | ||||
| { | { | ||||
| var newRoles = roles.ToDictionary(x => x.Id, x => x); | |||||
| Dictionary<string, Role> newRoles; | |||||
| if (roles != null) | |||||
| newRoles = roles.ToDictionary(x => x.Id, x => x); | |||||
| else | |||||
| newRoles = new Dictionary<string, Role>(); | |||||
| Role everyone; | Role everyone; | ||||
| if (_serverId != null) | if (_serverId != null) | ||||
| everyone = Server.EveryoneRole; | everyone = Server.EveryoneRole; | ||||