Fixed member permission resolving

This commit is contained in:
RogueException
2015-10-01 19:05:16 -03:00
parent c2acc2c28e
commit 31dee6f828
4 changed files with 17 additions and 9 deletions

View File

@@ -16,7 +16,7 @@ namespace Discord.Collections
protected override void OnCreated(Member item)
{
item.Server.AddMember(item.UserId);
item.Server.AddMember(item);
item.User.AddServer(item.ServerId);
item.User.AddRef();
if (item.UserId == _client.CurrentUserId)
@@ -24,7 +24,7 @@ namespace Discord.Collections
}
protected override void OnRemoved(Member item)
{
item.Server.RemoveMember(item.UserId);
item.Server.RemoveMember(item);
item.User.RemoveServer(item.ServerId);
item.User.RemoveRef();
if (item.UserId == _client.CurrentUserId)

View File

@@ -55,7 +55,7 @@ namespace Discord
if (!_areMembersStale)
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;
return _userIds;
}

View File

@@ -152,7 +152,9 @@ namespace Discord
}
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;
var channel = _client.Channels[channelId];
if (channel == null) return;

View File

@@ -194,18 +194,24 @@ namespace Discord
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)
channel._areMembersStale = true;
{
member.AddChannel(channel.Id);
channel._areMembersStale = true;
}
}
internal bool RemoveMember(string userId)
internal bool RemoveMember(Member member)
{
bool ignored;
foreach (var channel in Channels)
{
member.RemoveChannel(channel.Id);
channel._areMembersStale = true;
return _members.TryRemove(userId, out ignored);
}
return _members.TryRemove(member.UserId, out ignored);
}
internal bool HasMember(string userId)
{