Browse Source

Fixed member permission resolving

tags/docs-0.9
RogueException 9 years ago
parent
commit
31dee6f828
4 changed files with 17 additions and 9 deletions
  1. +2
    -2
      src/Discord.Net/Collections/Members.cs
  2. +1
    -1
      src/Discord.Net/Models/Channel.cs
  3. +3
    -1
      src/Discord.Net/Models/Member.cs
  4. +11
    -5
      src/Discord.Net/Models/Server.cs

+ 2
- 2
src/Discord.Net/Collections/Members.cs 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)


+ 1
- 1
src/Discord.Net/Models/Channel.cs 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;
}


+ 3
- 1
src/Discord.Net/Models/Member.cs 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;


+ 11
- 5
src/Discord.Net/Models/Server.cs 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)
{


Loading…
Cancel
Save