@@ -7,6 +7,8 @@ namespace Discord | |||||
{ | { | ||||
/// <summary> Gets a collection of all users in this channel. </summary> | /// <summary> Gets a collection of all users in this channel. </summary> | ||||
Task<IEnumerable<IUser>> GetUsers(); | Task<IEnumerable<IUser>> GetUsers(); | ||||
/// <summary> Gets a paginated collection of all users in this channel. </summary> | |||||
Task<IEnumerable<IUser>> GetUsers(int limit, int offset = 0); | |||||
/// <summary> Gets a user in this channel with the provided id.</summary> | /// <summary> Gets a user in this channel with the provided id.</summary> | ||||
Task<IUser> GetUser(ulong id); | Task<IUser> GetUser(ulong id); | ||||
} | } | ||||
@@ -26,7 +26,7 @@ | |||||
<DebugType>pdbonly</DebugType> | <DebugType>pdbonly</DebugType> | ||||
<Optimize>true</Optimize> | <Optimize>true</Optimize> | ||||
<OutputPath>bin\Release\</OutputPath> | <OutputPath>bin\Release\</OutputPath> | ||||
<DefineConstants>TRACE</DefineConstants> | |||||
<DefineConstants>TRACE;__DEMO__,__DEMO_EXPERIMENTAL__</DefineConstants> | |||||
<ErrorReport>prompt</ErrorReport> | <ErrorReport>prompt</ErrorReport> | ||||
<WarningLevel>4</WarningLevel> | <WarningLevel>4</WarningLevel> | ||||
</PropertyGroup> | </PropertyGroup> | ||||
@@ -131,6 +131,8 @@ namespace Discord.Rest | |||||
async Task<IEnumerable<IUser>> IChannel.GetUsers() | async Task<IEnumerable<IUser>> IChannel.GetUsers() | ||||
=> await GetUsers().ConfigureAwait(false); | => await GetUsers().ConfigureAwait(false); | ||||
async Task<IEnumerable<IUser>> IChannel.GetUsers(int limit, int offset) | |||||
=> (await GetUsers().ConfigureAwait(false)).Skip(offset).Take(limit); | |||||
async Task<IUser> IChannel.GetUser(ulong id) | async Task<IUser> IChannel.GetUser(ulong id) | ||||
=> await GetUser(id).ConfigureAwait(false); | => await GetUser(id).ConfigureAwait(false); | ||||
Task<IMessage> IMessageChannel.GetCachedMessage(ulong id) | Task<IMessage> IMessageChannel.GetCachedMessage(ulong id) | ||||
@@ -58,12 +58,7 @@ namespace Discord.Rest | |||||
var model = await Discord.BaseClient.ModifyGuildChannel(Id, args).ConfigureAwait(false); | var model = await Discord.BaseClient.ModifyGuildChannel(Id, args).ConfigureAwait(false); | ||||
Update(model); | Update(model); | ||||
} | } | ||||
/// <summary> Gets a user in this channel with the given id. </summary> | |||||
public abstract Task<GuildUser> GetUser(ulong id); | |||||
/// <summary> Gets all users in this channel. </summary> | |||||
public abstract Task<IEnumerable<GuildUser>> GetUsers(); | |||||
/// <inheritdoc /> | /// <inheritdoc /> | ||||
public OverwritePermissions? GetPermissionOverwrite(IUser user) | public OverwritePermissions? GetPermissionOverwrite(IUser user) | ||||
{ | { | ||||
@@ -151,18 +146,24 @@ namespace Discord.Rest | |||||
/// <inheritdoc /> | /// <inheritdoc /> | ||||
public override string ToString() => Name; | public override string ToString() => Name; | ||||
protected abstract Task<GuildUser> GetUserInternal(ulong id); | |||||
protected abstract Task<IEnumerable<GuildUser>> GetUsersInternal(); | |||||
protected abstract Task<IEnumerable<GuildUser>> GetUsersInternal(int limit, int offset); | |||||
IGuild IGuildChannel.Guild => Guild; | IGuild IGuildChannel.Guild => Guild; | ||||
async Task<IInviteMetadata> IGuildChannel.CreateInvite(int? maxAge, int? maxUses, bool isTemporary, bool withXkcd) | async Task<IInviteMetadata> IGuildChannel.CreateInvite(int? maxAge, int? maxUses, bool isTemporary, bool withXkcd) | ||||
=> await CreateInvite(maxAge, maxUses, isTemporary, withXkcd).ConfigureAwait(false); | => await CreateInvite(maxAge, maxUses, isTemporary, withXkcd).ConfigureAwait(false); | ||||
async Task<IEnumerable<IInviteMetadata>> IGuildChannel.GetInvites() | async Task<IEnumerable<IInviteMetadata>> IGuildChannel.GetInvites() | ||||
=> await GetInvites().ConfigureAwait(false); | => await GetInvites().ConfigureAwait(false); | ||||
async Task<IEnumerable<IGuildUser>> IGuildChannel.GetUsers() | async Task<IEnumerable<IGuildUser>> IGuildChannel.GetUsers() | ||||
=> await GetUsers().ConfigureAwait(false); | |||||
async Task<IGuildUser> IGuildChannel.GetUser(ulong id) | |||||
=> await GetUser(id).ConfigureAwait(false); | |||||
=> await GetUsersInternal().ConfigureAwait(false); | |||||
async Task<IEnumerable<IUser>> IChannel.GetUsers() | async Task<IEnumerable<IUser>> IChannel.GetUsers() | ||||
=> await GetUsers().ConfigureAwait(false); | |||||
=> await GetUsersInternal().ConfigureAwait(false); | |||||
async Task<IEnumerable<IUser>> IChannel.GetUsers(int limit, int offset) | |||||
=> await GetUsersInternal(limit, offset).ConfigureAwait(false); | |||||
async Task<IGuildUser> IGuildChannel.GetUser(ulong id) | |||||
=> await GetUserInternal(id).ConfigureAwait(false); | |||||
async Task<IUser> IChannel.GetUser(ulong id) | async Task<IUser> IChannel.GetUser(ulong id) | ||||
=> await GetUser(id).ConfigureAwait(false); | |||||
=> await GetUserInternal(id).ConfigureAwait(false); | |||||
} | } | ||||
} | } |
@@ -39,19 +39,27 @@ namespace Discord.Rest | |||||
Update(model); | Update(model); | ||||
} | } | ||||
public override async Task<GuildUser> GetUser(ulong id) | |||||
/// <summary> Gets a user in this channel with the given id. </summary> | |||||
public async Task<GuildUser> GetUser(ulong id) | |||||
{ | { | ||||
var user = await Guild.GetUser(id).ConfigureAwait(false); | var user = await Guild.GetUser(id).ConfigureAwait(false); | ||||
if (user != null && Permissions.GetValue(Permissions.ResolveChannel(user, this, user.GuildPermissions.RawValue), ChannelPermission.ReadMessages)) | if (user != null && Permissions.GetValue(Permissions.ResolveChannel(user, this, user.GuildPermissions.RawValue), ChannelPermission.ReadMessages)) | ||||
return user; | return user; | ||||
return null; | return null; | ||||
} | } | ||||
public override async Task<IEnumerable<GuildUser>> GetUsers() | |||||
/// <summary> Gets all users in this channel. </summary> | |||||
public async Task<IEnumerable<GuildUser>> GetUsers() | |||||
{ | { | ||||
var users = await Guild.GetUsers().ConfigureAwait(false); | var users = await Guild.GetUsers().ConfigureAwait(false); | ||||
return users.Where(x => Permissions.GetValue(Permissions.ResolveChannel(x, this, x.GuildPermissions.RawValue), ChannelPermission.ReadMessages)); | return users.Where(x => Permissions.GetValue(Permissions.ResolveChannel(x, this, x.GuildPermissions.RawValue), ChannelPermission.ReadMessages)); | ||||
} | } | ||||
/// <summary> Gets a paginated collection of users in this channel. </summary> | |||||
public async Task<IEnumerable<GuildUser>> GetUsers(int limit, int offset) | |||||
{ | |||||
var users = await Guild.GetUsers(limit, offset).ConfigureAwait(false); | |||||
return users.Where(x => Permissions.GetValue(Permissions.ResolveChannel(x, this, x.GuildPermissions.RawValue), ChannelPermission.ReadMessages)); | |||||
} | |||||
/// <inheritdoc /> | /// <inheritdoc /> | ||||
public async Task<IEnumerable<Message>> GetMessages(int limit = DiscordConfig.MaxMessagesPerBatch) | public async Task<IEnumerable<Message>> GetMessages(int limit = DiscordConfig.MaxMessagesPerBatch) | ||||
{ | { | ||||
@@ -107,6 +115,11 @@ namespace Discord.Rest | |||||
private string DebuggerDisplay => $"{Name} ({Id}, Text)"; | private string DebuggerDisplay => $"{Name} ({Id}, Text)"; | ||||
protected override Task<GuildUser> GetUserInternal(ulong id) => GetUser(id); | |||||
protected override Task<IEnumerable<GuildUser>> GetUsersInternal() => GetUsers(); | |||||
protected override Task<IEnumerable<GuildUser>> GetUsersInternal(int limit, int offset) => GetUsers(limit, offset); | |||||
IEnumerable<IMessage> IMessageChannel.CachedMessages => Array.Empty<Message>(); | IEnumerable<IMessage> IMessageChannel.CachedMessages => Array.Empty<Message>(); | ||||
Task<IMessage> IMessageChannel.GetCachedMessage(ulong id) | Task<IMessage> IMessageChannel.GetCachedMessage(ulong id) | ||||
@@ -34,8 +34,9 @@ namespace Discord.Rest | |||||
Update(model); | Update(model); | ||||
} | } | ||||
public override Task<GuildUser> GetUser(ulong id) { throw new NotSupportedException(); } | |||||
public override Task<IEnumerable<GuildUser>> GetUsers() { throw new NotSupportedException(); } | |||||
protected override Task<GuildUser> GetUserInternal(ulong id) { throw new NotSupportedException(); } | |||||
protected override Task<IEnumerable<GuildUser>> GetUsersInternal() { throw new NotSupportedException(); } | |||||
protected override Task<IEnumerable<GuildUser>> GetUsersInternal(int limit, int offset) { throw new NotSupportedException(); } | |||||
private string DebuggerDisplay => $"{Name} ({Id}, Voice)"; | private string DebuggerDisplay => $"{Name} ({Id}, Voice)"; | ||||
} | } | ||||
@@ -124,6 +124,8 @@ namespace Discord.WebSocket | |||||
Task<IEnumerable<IUser>> IChannel.GetUsers() | Task<IEnumerable<IUser>> IChannel.GetUsers() | ||||
=> Task.FromResult(Users); | => Task.FromResult(Users); | ||||
Task<IEnumerable<IUser>> IChannel.GetUsers(int limit, int offset) | |||||
=> Task.FromResult(Users.Skip(offset).Take(limit)); | |||||
Task<IUser> IChannel.GetUser(ulong id) | Task<IUser> IChannel.GetUser(ulong id) | ||||
=> Task.FromResult(GetUser(id)); | => Task.FromResult(GetUser(id)); | ||||
Task<IMessage> IMessageChannel.GetCachedMessage(ulong id) | Task<IMessage> IMessageChannel.GetCachedMessage(ulong id) | ||||
@@ -147,6 +147,8 @@ namespace Discord.WebSocket | |||||
=> Task.FromResult<IGuildUser>(GetUser(id)); | => Task.FromResult<IGuildUser>(GetUser(id)); | ||||
Task<IEnumerable<IUser>> IChannel.GetUsers() | Task<IEnumerable<IUser>> IChannel.GetUsers() | ||||
=> Task.FromResult<IEnumerable<IUser>>(Users); | => Task.FromResult<IEnumerable<IUser>>(Users); | ||||
Task<IEnumerable<IUser>> IChannel.GetUsers(int limit, int offset) | |||||
=> Task.FromResult<IEnumerable<IUser>>(Users.Skip(offset).Take(limit)); | |||||
Task<IUser> IChannel.GetUser(ulong id) | Task<IUser> IChannel.GetUser(ulong id) | ||||
=> Task.FromResult<IUser>(GetUser(id)); | => Task.FromResult<IUser>(GetUser(id)); | ||||
Task IUpdateable.Update() | Task IUpdateable.Update() | ||||