From 4abedbe2b932f42b44445a32bd0dc96290cd5be7 Mon Sep 17 00:00:00 2001 From: RogueException Date: Sun, 25 Oct 2015 05:44:33 -0300 Subject: [PATCH] Fixed User.Channels --- src/Discord.Net/Models/User.cs | 49 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 40 insertions(+), 9 deletions(-) diff --git a/src/Discord.Net/Models/User.cs b/src/Discord.Net/Models/User.cs index 935fd4fdc..1da6990e3 100644 --- a/src/Discord.Net/Models/User.cs +++ b/src/Discord.Net/Models/User.cs @@ -82,7 +82,32 @@ namespace Discord /// Returns a collection of all channels this user is a member of. [JsonIgnore] - public IEnumerable Channels => _channels.Select(x => x.Value); + public IEnumerable Channels + { + get + { + if (_server.Id != null) + { + return _permissions + .Where(x => x.Value.ReadMessages) + .Select(x => + { + Channel channel = null; + _channels.TryGetValue(x.Key, out channel); + return channel; + }) + .Where(x => x != null); + } + else + { + var privateChannel = PrivateChannel; + if (privateChannel != null) + return new Channel[] { privateChannel }; + else + return new Channel[0]; + } + } + } internal User(DiscordClient client, string id, string serverId) : base(client, id) @@ -309,17 +334,23 @@ namespace Discord internal void AddChannel(Channel channel) { - var perms = new ChannelPermissions(); - perms.Lock(); - _channels.TryAdd(channel.Id, channel); - _permissions.TryAdd(channel.Id, perms); - UpdateChannelPermissions(channel); + if (_server.Id != null) + { + var perms = new ChannelPermissions(); + perms.Lock(); + _channels.TryAdd(channel.Id, channel); + _permissions.TryAdd(channel.Id, perms); + UpdateChannelPermissions(channel); + } } internal void RemoveChannel(Channel channel) { - ChannelPermissions ignored; - _channels.TryRemove(channel.Id, out channel); - _permissions.TryRemove(channel.Id, out ignored); + if (_server.Id != null) + { + ChannelPermissions ignored; + _channels.TryRemove(channel.Id, out channel); + _permissions.TryRemove(channel.Id, out ignored); + } } public bool HasRole(Role role)