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