Voice channel members now only list members connected to that channel, and private channels actually populates members.
This commit is contained in:
@@ -168,10 +168,26 @@ namespace Discord
|
|||||||
}
|
}
|
||||||
private void UpdateMembersCache()
|
private void UpdateMembersCache()
|
||||||
{
|
{
|
||||||
if (_server.Id != null)
|
if (IsPrivate)
|
||||||
_members = Server.Members.Where(x => x.GetPermissions(this)?.ReadMessages ?? false).ToDictionary(x => x.Id, x => x);
|
{
|
||||||
else
|
_members = new Dictionary<string, User>()
|
||||||
_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;
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user