@@ -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) | ||||
{ | { | ||||