Browse Source

Voice channel members now only list members connected to that channel, and private channels actually populates members.

tags/docs-0.9
RogueException 9 years ago
parent
commit
5d03b38afa
3 changed files with 35 additions and 8 deletions
  1. +22
    -6
      src/Discord.Net/Models/Channel.cs
  2. +1
    -1
      src/Discord.Net/Models/Server.cs
  3. +12
    -1
      src/Discord.Net/Models/User.cs

+ 22
- 6
src/Discord.Net/Models/Channel.cs View File

@@ -168,10 +168,26 @@ namespace Discord
} }
private void UpdateMembersCache() private void UpdateMembersCache()
{ {
if (_server.Id != null)
_members = Server.Members.Where(x => x.GetPermissions(this)?.ReadMessages ?? false).ToDictionary(x => x.Id, x => x);
else
_members = new Dictionary<string, User>();
if (IsPrivate)
{
_members = new Dictionary<string, User>()
{
{ _client.CurrentUserId, _client.CurrentUser },
{ _recipient.Id, _recipient.Value }
};
}
else if (Type == ChannelType.Text)
{
_members = Server.Members
.Where(x => x.GetPermissions(this)?.ReadMessages ?? false)
.ToDictionary(x => x.Id, x => x);
}
else if (Type == ChannelType.Voice)
{
_members = Server.Members
.Where(x => x.VoiceChannel == this)
.ToDictionary(x => x.Id, x => x);
}
_areMembersStale = false; _areMembersStale = false;
} }


@@ -181,12 +197,12 @@ namespace Discord
foreach (var member in _members) foreach (var member in _members)
member.Value.UpdateChannelPermissions(this); member.Value.UpdateChannelPermissions(this);
} }
internal void InvalidatePermissionsCache(Role role)
/*internal void InvalidatePermissionsCache(Role role)
{ {
_areMembersStale = true; _areMembersStale = true;
foreach (var member in role.Members) foreach (var member in role.Members)
member.UpdateChannelPermissions(this); member.UpdateChannelPermissions(this);
}
}*/
internal void InvalidatePermissionsCache(User user) internal void InvalidatePermissionsCache(User user)
{ {
_areMembersStale = true; _areMembersStale = true;


+ 1
- 1
src/Discord.Net/Models/Server.cs View File

@@ -214,7 +214,7 @@ namespace Discord
if (user.Id == _ownerId) if (user.Id == _ownerId)
Owner = user; Owner = user;


foreach (var channel in Channels)
foreach (var channel in TextChannels)
{ {
user.AddChannel(channel); user.AddChannel(channel);
channel.InvalidatePermissionsCache(user); channel.InvalidatePermissionsCache(user);


+ 12
- 1
src/Discord.Net/Models/User.cs View File

@@ -221,7 +221,18 @@ namespace Discord
if (model.IsServerSuppressed != null) if (model.IsServerSuppressed != null)
IsServerSuppressed = model.IsServerSuppressed.Value; IsServerSuppressed = model.IsServerSuppressed.Value;


_voiceChannel.Id = model.ChannelId; //Can be null
if (_voiceChannel.Id != model.ChannelId)
{
var oldChannel = _voiceChannel.Value;
if (oldChannel != null)
oldChannel.InvalidateMembersCache();

_voiceChannel.Id = model.ChannelId; //Can be null

var newChannel = _voiceChannel.Value;
if (newChannel != null)
newChannel.InvalidateMembersCache();
}
} }
private void UpdateRoles(IEnumerable<Role> roles) private void UpdateRoles(IEnumerable<Role> roles)
{ {


Loading…
Cancel
Save