Added Channel.Members
This commit is contained in:
@@ -46,6 +46,50 @@ namespace Discord
|
||||
[JsonIgnore]
|
||||
public User Recipient => _client.Users[RecipientId];
|
||||
|
||||
public IEnumerable<string> UserIds
|
||||
{
|
||||
get
|
||||
{
|
||||
if (IsPrivate)
|
||||
return new string[] { RecipientId };
|
||||
|
||||
var server = Server;
|
||||
string everyoneId = server.EveryoneRoleId;
|
||||
|
||||
//Is this channel Opt-In or Opt-Out?
|
||||
IEnumerable<PermissionOverwrite> everyones = PermissionOverwrites.Where(x => x.Type == PermissionTarget.Role && x.Id == server.EveryoneRoleId);
|
||||
bool isOptIn = everyones.Any(x => x.Deny.Text_ReadMessages) && !everyones.Any(x => x.Allow.Text_ReadMessages);
|
||||
|
||||
var denyMembers = PermissionOverwrites
|
||||
.Where(x => x.Deny.Text_ReadMessages && x.Type == PermissionTarget.Member)
|
||||
.Select(x => x.Id);
|
||||
var allowRoles = PermissionOverwrites
|
||||
.Where(x => x.Allow.Text_ReadMessages && x.Type == PermissionTarget.Role && x.Id != server.EveryoneRoleId)
|
||||
.SelectMany(x => _client.Roles[x.Id].MemberIds);
|
||||
var allowMembers = PermissionOverwrites
|
||||
.Where(x => x.Allow.Text_ReadMessages && x.Type == PermissionTarget.Member)
|
||||
.Select(x => x.Id);
|
||||
|
||||
if (isOptIn)
|
||||
{
|
||||
//AllowRole -> DenyMember -> AllowMember -> AllowOwner
|
||||
return allowRoles.Except(denyMembers).Concat(allowMembers).Concat(new string[] { server.OwnerId }).Distinct();
|
||||
}
|
||||
else
|
||||
{
|
||||
var denyRoles = PermissionOverwrites
|
||||
.Where(x => x.Deny.Text_ReadMessages && x.Type == PermissionTarget.Role && x.Id != server.EveryoneRoleId)
|
||||
.SelectMany(x => _client.Roles[x.Id].MemberIds);
|
||||
|
||||
//DenyRole -> AllowRole -> DenyMember -> AllowMember -> AllowOwner
|
||||
var optOut = denyRoles.Except(allowRoles).Concat(denyMembers).Except(allowMembers).Except(new string[] { server.OwnerId });
|
||||
return Server.UserIds.Except(optOut);
|
||||
}
|
||||
}
|
||||
}
|
||||
public IEnumerable<Member> Members => UserIds.Select(x => _client.Members[x, ServerId]);
|
||||
public IEnumerable<User> Users => UserIds.Select(x => _client.Users[x]);
|
||||
|
||||
/// <summary> Returns a collection of the ids of all messages the client has seen posted in this channel. This collection does not guarantee any ordering. </summary>
|
||||
[JsonIgnore]
|
||||
public IEnumerable<string> MessageIds => _messages.Select(x => x.Key);
|
||||
|
||||
Reference in New Issue
Block a user