Browse Source

Added Channel.Members

tags/docs-0.9
RogueException 9 years ago
parent
commit
fd1141bc0f
1 changed files with 44 additions and 0 deletions
  1. +44
    -0
      src/Discord.Net/Models/Channel.cs

+ 44
- 0
src/Discord.Net/Models/Channel.cs View File

@@ -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);


Loading…
Cancel
Save