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)