| @@ -16,7 +16,7 @@ namespace Discord.Collections | |||||
| protected override void OnCreated(Member item) | protected override void OnCreated(Member item) | ||||
| { | { | ||||
| item.Server.AddMember(item.UserId); | |||||
| item.Server.AddMember(item); | |||||
| item.User.AddServer(item.ServerId); | item.User.AddServer(item.ServerId); | ||||
| item.User.AddRef(); | item.User.AddRef(); | ||||
| if (item.UserId == _client.CurrentUserId) | if (item.UserId == _client.CurrentUserId) | ||||
| @@ -24,7 +24,7 @@ namespace Discord.Collections | |||||
| } | } | ||||
| protected override void OnRemoved(Member item) | protected override void OnRemoved(Member item) | ||||
| { | { | ||||
| item.Server.RemoveMember(item.UserId); | |||||
| item.Server.RemoveMember(item); | |||||
| item.User.RemoveServer(item.ServerId); | item.User.RemoveServer(item.ServerId); | ||||
| item.User.RemoveRef(); | item.User.RemoveRef(); | ||||
| if (item.UserId == _client.CurrentUserId) | if (item.UserId == _client.CurrentUserId) | ||||
| @@ -55,7 +55,7 @@ namespace Discord | |||||
| if (!_areMembersStale) | if (!_areMembersStale) | ||||
| return _userIds; | return _userIds; | ||||
| _userIds = Server.Members.Where(x => x.GetPermissions(Id).Text_ReadMessages).Select(x => x.UserId).ToArray(); | |||||
| _userIds = Server.Members.Where(x => x.GetPermissions(Id)?.Text_ReadMessages ?? false).Select(x => x.UserId).ToArray(); | |||||
| _areMembersStale = false; | _areMembersStale = false; | ||||
| return _userIds; | return _userIds; | ||||
| } | } | ||||
| @@ -152,7 +152,9 @@ namespace Discord | |||||
| } | } | ||||
| internal void UpdatePermissions(string channelId) | internal void UpdatePermissions(string channelId) | ||||
| { | { | ||||
| var server = Server; | |||||
| if (RoleIds == null) return; // We don't have all our data processed yet, this will be called again soon | |||||
| var server = Server; | |||||
| if (server == null) return; | if (server == null) return; | ||||
| var channel = _client.Channels[channelId]; | var channel = _client.Channels[channelId]; | ||||
| if (channel == null) return; | if (channel == null) return; | ||||
| @@ -194,18 +194,24 @@ namespace Discord | |||||
| return _invites.TryRemove(inviteId, out ignored); | return _invites.TryRemove(inviteId, out ignored); | ||||
| } | } | ||||
| internal void AddMember(string userId) | |||||
| internal void AddMember(Member member) | |||||
| { | { | ||||
| _members.TryAdd(userId, true); | |||||
| _members.TryAdd(member.UserId, true); | |||||
| foreach (var channel in Channels) | foreach (var channel in Channels) | ||||
| channel._areMembersStale = true; | |||||
| { | |||||
| member.AddChannel(channel.Id); | |||||
| channel._areMembersStale = true; | |||||
| } | |||||
| } | } | ||||
| internal bool RemoveMember(string userId) | |||||
| internal bool RemoveMember(Member member) | |||||
| { | { | ||||
| bool ignored; | bool ignored; | ||||
| foreach (var channel in Channels) | foreach (var channel in Channels) | ||||
| { | |||||
| member.RemoveChannel(channel.Id); | |||||
| channel._areMembersStale = true; | channel._areMembersStale = true; | ||||
| return _members.TryRemove(userId, out ignored); | |||||
| } | |||||
| return _members.TryRemove(member.UserId, out ignored); | |||||
| } | } | ||||
| internal bool HasMember(string userId) | internal bool HasMember(string userId) | ||||
| { | { | ||||