From 31dee6f82832e7c94c91bc5e3a22b15eaaac8ed1 Mon Sep 17 00:00:00 2001 From: RogueException Date: Thu, 1 Oct 2015 19:05:16 -0300 Subject: [PATCH] Fixed member permission resolving --- src/Discord.Net/Collections/Members.cs | 4 ++-- src/Discord.Net/Models/Channel.cs | 2 +- src/Discord.Net/Models/Member.cs | 4 +++- src/Discord.Net/Models/Server.cs | 16 +++++++++++----- 4 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/Discord.Net/Collections/Members.cs b/src/Discord.Net/Collections/Members.cs index 282915353..fcd69555f 100644 --- a/src/Discord.Net/Collections/Members.cs +++ b/src/Discord.Net/Collections/Members.cs @@ -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) diff --git a/src/Discord.Net/Models/Channel.cs b/src/Discord.Net/Models/Channel.cs index 1d656db7b..c6bc1aa91 100644 --- a/src/Discord.Net/Models/Channel.cs +++ b/src/Discord.Net/Models/Channel.cs @@ -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; } diff --git a/src/Discord.Net/Models/Member.cs b/src/Discord.Net/Models/Member.cs index 1e2a5f3ca..c6e2941cf 100644 --- a/src/Discord.Net/Models/Member.cs +++ b/src/Discord.Net/Models/Member.cs @@ -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; diff --git a/src/Discord.Net/Models/Server.cs b/src/Discord.Net/Models/Server.cs index 636d813ed..d0f60313b 100644 --- a/src/Discord.Net/Models/Server.cs +++ b/src/Discord.Net/Models/Server.cs @@ -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) {