@@ -4,7 +4,7 @@ | |||||
<AssemblyName>Discord.Net.Analyzers</AssemblyName> | <AssemblyName>Discord.Net.Analyzers</AssemblyName> | ||||
<RootNamespace>Discord.Analyzers</RootNamespace> | <RootNamespace>Discord.Analyzers</RootNamespace> | ||||
<Description>A Discord.Net extension adding support for design-time analysis of the API usage.</Description> | <Description>A Discord.Net extension adding support for design-time analysis of the API usage.</Description> | ||||
<TargetFramework>netstandard2.0</TargetFramework> | |||||
<TargetFramework>netstandard2.0;netstandard2.1</TargetFramework> | |||||
</PropertyGroup> | </PropertyGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
<PackageReference Include="Microsoft.CodeAnalysis" Version="3.3.1" /> | <PackageReference Include="Microsoft.CodeAnalysis" Version="3.3.1" /> | ||||
@@ -4,8 +4,8 @@ | |||||
<AssemblyName>Discord.Net.Commands</AssemblyName> | <AssemblyName>Discord.Net.Commands</AssemblyName> | ||||
<RootNamespace>Discord.Commands</RootNamespace> | <RootNamespace>Discord.Commands</RootNamespace> | ||||
<Description>A Discord.Net extension adding support for bot commands.</Description> | <Description>A Discord.Net extension adding support for bot commands.</Description> | ||||
<TargetFrameworks Condition=" '$(OS)' == 'Windows_NT' ">net461;netstandard2.0</TargetFrameworks> | |||||
<TargetFrameworks Condition=" '$(OS)' != 'Windows_NT' ">netstandard2.0</TargetFrameworks> | |||||
<TargetFrameworks Condition=" '$(OS)' == 'Windows_NT' ">net461;netstandard2.0;netstandard2.1</TargetFrameworks> | |||||
<TargetFrameworks Condition=" '$(OS)' != 'Windows_NT' ">netstandard2.0;netstandard2.1</TargetFrameworks> | |||||
</PropertyGroup> | </PropertyGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
<ProjectReference Include="..\Discord.Net.Core\Discord.Net.Core.csproj" /> | <ProjectReference Include="..\Discord.Net.Core\Discord.Net.Core.csproj" /> | ||||
@@ -49,7 +49,7 @@ namespace Discord.Commands | |||||
string username = input.Substring(0, index); | string username = input.Substring(0, index); | ||||
if (ushort.TryParse(input.Substring(index + 1), out ushort discriminator)) | if (ushort.TryParse(input.Substring(index + 1), out ushort discriminator)) | ||||
{ | { | ||||
var channelUser = await channelUsers.FirstOrDefault(x => x.DiscriminatorValue == discriminator && | |||||
var channelUser = await channelUsers.FirstOrDefaultAsync(x => x.DiscriminatorValue == discriminator && | |||||
string.Equals(username, x.Username, StringComparison.OrdinalIgnoreCase)).ConfigureAwait(false); | string.Equals(username, x.Username, StringComparison.OrdinalIgnoreCase)).ConfigureAwait(false); | ||||
AddResult(results, channelUser as T, channelUser?.Username == username ? 0.85f : 0.75f); | AddResult(results, channelUser as T, channelUser?.Username == username ? 0.85f : 0.75f); | ||||
@@ -4,13 +4,13 @@ | |||||
<AssemblyName>Discord.Net.Core</AssemblyName> | <AssemblyName>Discord.Net.Core</AssemblyName> | ||||
<RootNamespace>Discord</RootNamespace> | <RootNamespace>Discord</RootNamespace> | ||||
<Description>The core components for the Discord.Net library.</Description> | <Description>The core components for the Discord.Net library.</Description> | ||||
<TargetFrameworks Condition=" '$(OS)' == 'Windows_NT' ">net461;netstandard2.0</TargetFrameworks> | |||||
<TargetFrameworks Condition=" '$(OS)' != 'Windows_NT' ">netstandard2.0</TargetFrameworks> | |||||
<TargetFrameworks Condition=" '$(OS)' == 'Windows_NT' ">net461;netstandard2.0;netstandard2.1</TargetFrameworks> | |||||
<TargetFrameworks Condition=" '$(OS)' != 'Windows_NT' ">netstandard2.0;netstandard2.1</TargetFrameworks> | |||||
</PropertyGroup> | </PropertyGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
<PackageReference Include="Newtonsoft.Json" Version="12.0.2" /> | <PackageReference Include="Newtonsoft.Json" Version="12.0.2" /> | ||||
<PackageReference Include="System.Collections.Immutable" Version="1.3.1" /> | <PackageReference Include="System.Collections.Immutable" Version="1.3.1" /> | ||||
<PackageReference Include="System.Interactive.Async" Version="3.2.0" /> | |||||
<PackageReference Include="System.Interactive.Async" Version="4.0.0" /> | |||||
<PackageReference Include="IDisposableAnalyzers" Version="2.1.2"> | <PackageReference Include="IDisposableAnalyzers" Version="2.1.2"> | ||||
<PrivateAssets>all</PrivateAssets> | <PrivateAssets>all</PrivateAssets> | ||||
</PackageReference> | </PackageReference> | ||||
@@ -15,7 +15,7 @@ namespace Discord | |||||
/// <summary> Flattens the specified pages into one <see cref="IEnumerable{T}"/> asynchronously. </summary> | /// <summary> Flattens the specified pages into one <see cref="IEnumerable{T}"/> asynchronously. </summary> | ||||
public static async Task<IEnumerable<T>> FlattenAsync<T>(this IAsyncEnumerable<IEnumerable<T>> source) | public static async Task<IEnumerable<T>> FlattenAsync<T>(this IAsyncEnumerable<IEnumerable<T>> source) | ||||
{ | { | ||||
return await source.Flatten().ToArray().ConfigureAwait(false); | |||||
return await source.Flatten().ToArrayAsync().ConfigureAwait(false); | |||||
} | } | ||||
/// <summary> Flattens the specified pages into one <see cref="IAsyncEnumerable{T}"/>. </summary> | /// <summary> Flattens the specified pages into one <see cref="IAsyncEnumerable{T}"/>. </summary> | ||||
public static IAsyncEnumerable<T> Flatten<T>(this IAsyncEnumerable<IEnumerable<T>> source) | public static IAsyncEnumerable<T> Flatten<T>(this IAsyncEnumerable<IEnumerable<T>> source) | ||||
@@ -25,26 +25,28 @@ namespace Discord | |||||
_nextPage = nextPage; | _nextPage = nextPage; | ||||
} | } | ||||
public IAsyncEnumerator<IReadOnlyCollection<T>> GetEnumerator() => new Enumerator(this); | |||||
public IAsyncEnumerator<IReadOnlyCollection<T>> GetAsyncEnumerator(CancellationToken cancellationToken = new CancellationToken()) => new Enumerator(this, cancellationToken); | |||||
internal class Enumerator : IAsyncEnumerator<IReadOnlyCollection<T>> | internal class Enumerator : IAsyncEnumerator<IReadOnlyCollection<T>> | ||||
{ | { | ||||
private readonly PagedAsyncEnumerable<T> _source; | private readonly PagedAsyncEnumerable<T> _source; | ||||
private readonly CancellationToken _token; | |||||
private readonly PageInfo _info; | private readonly PageInfo _info; | ||||
public IReadOnlyCollection<T> Current { get; private set; } | public IReadOnlyCollection<T> Current { get; private set; } | ||||
public Enumerator(PagedAsyncEnumerable<T> source) | |||||
public Enumerator(PagedAsyncEnumerable<T> source, CancellationToken token) | |||||
{ | { | ||||
_source = source; | _source = source; | ||||
_token = token; | |||||
_info = new PageInfo(source._start, source._count, source.PageSize); | _info = new PageInfo(source._start, source._count, source.PageSize); | ||||
} | } | ||||
public async Task<bool> MoveNext(CancellationToken cancelToken) | |||||
public async ValueTask<bool> MoveNextAsync() | |||||
{ | { | ||||
if (_info.Remaining == 0) | if (_info.Remaining == 0) | ||||
return false; | return false; | ||||
var data = await _source._getPage(_info, cancelToken).ConfigureAwait(false); | |||||
var data = await _source._getPage(_info, _token).ConfigureAwait(false); | |||||
Current = new Page<T>(_info, data); | Current = new Page<T>(_info, data); | ||||
_info.Page++; | _info.Page++; | ||||
@@ -71,7 +73,11 @@ namespace Discord | |||||
return true; | return true; | ||||
} | } | ||||
public void Dispose() { Current = null; } | |||||
public ValueTask DisposeAsync() | |||||
{ | |||||
Current = null; | |||||
return default; | |||||
} | |||||
} | } | ||||
} | } | ||||
} | } |
@@ -4,8 +4,8 @@ | |||||
<AssemblyName>Discord.Net.Rest</AssemblyName> | <AssemblyName>Discord.Net.Rest</AssemblyName> | ||||
<RootNamespace>Discord.Rest</RootNamespace> | <RootNamespace>Discord.Rest</RootNamespace> | ||||
<Description>A core Discord.Net library containing the REST client and models.</Description> | <Description>A core Discord.Net library containing the REST client and models.</Description> | ||||
<TargetFrameworks Condition=" '$(OS)' == 'Windows_NT' ">net461;netstandard2.0</TargetFrameworks> | |||||
<TargetFrameworks Condition=" '$(OS)' != 'Windows_NT' ">netstandard2.0</TargetFrameworks> | |||||
<TargetFrameworks Condition=" '$(OS)' == 'Windows_NT' ">net461;netstandard2.0;netstandard2.1</TargetFrameworks> | |||||
<TargetFrameworks Condition=" '$(OS)' != 'Windows_NT' ">netstandard2.0;netstandard2.1</TargetFrameworks> | |||||
</PropertyGroup> | </PropertyGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
<ProjectReference Include="..\Discord.Net.Core\Discord.Net.Core.csproj" /> | <ProjectReference Include="..\Discord.Net.Core\Discord.Net.Core.csproj" /> | ||||
@@ -4,8 +4,8 @@ | |||||
<AssemblyName>Discord.Net.WebSocket</AssemblyName> | <AssemblyName>Discord.Net.WebSocket</AssemblyName> | ||||
<RootNamespace>Discord.WebSocket</RootNamespace> | <RootNamespace>Discord.WebSocket</RootNamespace> | ||||
<Description>A core Discord.Net library containing the WebSocket client and models.</Description> | <Description>A core Discord.Net library containing the WebSocket client and models.</Description> | ||||
<TargetFrameworks Condition=" '$(OS)' == 'Windows_NT' ">net461;netstandard2.0</TargetFrameworks> | |||||
<TargetFrameworks Condition=" '$(OS)' != 'Windows_NT' ">netstandard2.0</TargetFrameworks> | |||||
<TargetFrameworks Condition=" '$(OS)' == 'Windows_NT' ">net461;netstandard2.0;netstandard2.1</TargetFrameworks> | |||||
<TargetFrameworks Condition=" '$(OS)' != 'Windows_NT' ">netstandard2.0;netstandard2.1</TargetFrameworks> | |||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks> | <AllowUnsafeBlocks>true</AllowUnsafeBlocks> | ||||
</PropertyGroup> | </PropertyGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
@@ -4,7 +4,7 @@ | |||||
<AssemblyName>Discord.Net.Webhook</AssemblyName> | <AssemblyName>Discord.Net.Webhook</AssemblyName> | ||||
<RootNamespace>Discord.Webhook</RootNamespace> | <RootNamespace>Discord.Webhook</RootNamespace> | ||||
<Description>A core Discord.Net library containing the Webhook client and models.</Description> | <Description>A core Discord.Net library containing the Webhook client and models.</Description> | ||||
<TargetFrameworks>netstandard2.0</TargetFrameworks> | |||||
<TargetFrameworks>netstandard2.0;netstandard2.1</TargetFrameworks> | |||||
</PropertyGroup> | </PropertyGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
<ProjectReference Include="..\Discord.Net.Core\Discord.Net.Core.csproj" /> | <ProjectReference Include="..\Discord.Net.Core\Discord.Net.Core.csproj" /> | ||||
@@ -13,21 +13,21 @@ | |||||
<requireLicenseAcceptance>false</requireLicenseAcceptance> | <requireLicenseAcceptance>false</requireLicenseAcceptance> | ||||
<iconUrl>https://github.com/RogueException/Discord.Net/raw/dev/docs/marketing/logo/PackageLogo.png</iconUrl> | <iconUrl>https://github.com/RogueException/Discord.Net/raw/dev/docs/marketing/logo/PackageLogo.png</iconUrl> | ||||
<dependencies> | <dependencies> | ||||
<group targetFramework="net46"> | |||||
<group targetFramework="net461"> | |||||
<dependency id="Discord.Net.Core" version="2.2.0-dev$suffix$" /> | <dependency id="Discord.Net.Core" version="2.2.0-dev$suffix$" /> | ||||
<dependency id="Discord.Net.Rest" version="2.2.0-dev$suffix$" /> | <dependency id="Discord.Net.Rest" version="2.2.0-dev$suffix$" /> | ||||
<dependency id="Discord.Net.WebSocket" version="2.2.0-dev$suffix$" /> | <dependency id="Discord.Net.WebSocket" version="2.2.0-dev$suffix$" /> | ||||
<dependency id="Discord.Net.Commands" version="2.2.0-dev$suffix$" /> | <dependency id="Discord.Net.Commands" version="2.2.0-dev$suffix$" /> | ||||
<dependency id="Discord.Net.Webhook" version="2.2.0-dev$suffix$" /> | <dependency id="Discord.Net.Webhook" version="2.2.0-dev$suffix$" /> | ||||
</group> | |||||
<group targetFramework="netstandard1.3"> | |||||
</group> | |||||
<group targetFramework="netstandard2.0"> | |||||
<dependency id="Discord.Net.Core" version="2.2.0-dev$suffix$" /> | <dependency id="Discord.Net.Core" version="2.2.0-dev$suffix$" /> | ||||
<dependency id="Discord.Net.Rest" version="2.2.0-dev$suffix$" /> | <dependency id="Discord.Net.Rest" version="2.2.0-dev$suffix$" /> | ||||
<dependency id="Discord.Net.WebSocket" version="2.2.0-dev$suffix$" /> | <dependency id="Discord.Net.WebSocket" version="2.2.0-dev$suffix$" /> | ||||
<dependency id="Discord.Net.Commands" version="2.2.0-dev$suffix$" /> | <dependency id="Discord.Net.Commands" version="2.2.0-dev$suffix$" /> | ||||
<dependency id="Discord.Net.Webhook" version="2.2.0-dev$suffix$" /> | <dependency id="Discord.Net.Webhook" version="2.2.0-dev$suffix$" /> | ||||
</group> | </group> | ||||
<group targetFramework="netstandard2.0"> | |||||
<group targetFramework="netstandard2.1"> | |||||
<dependency id="Discord.Net.Core" version="2.2.0-dev$suffix$" /> | <dependency id="Discord.Net.Core" version="2.2.0-dev$suffix$" /> | ||||
<dependency id="Discord.Net.Rest" version="2.2.0-dev$suffix$" /> | <dependency id="Discord.Net.Rest" version="2.2.0-dev$suffix$" /> | ||||
<dependency id="Discord.Net.WebSocket" version="2.2.0-dev$suffix$" /> | <dependency id="Discord.Net.WebSocket" version="2.2.0-dev$suffix$" /> | ||||
@@ -1,4 +1,4 @@ | |||||
<Project Sdk="Microsoft.NET.Sdk"> | |||||
<Project Sdk="Microsoft.NET.Sdk"> | |||||
<PropertyGroup> | <PropertyGroup> | ||||
<TargetFramework>netcoreapp2.1</TargetFramework> | <TargetFramework>netcoreapp2.1</TargetFramework> | ||||
@@ -250,7 +250,7 @@ namespace Discord | |||||
.WithFooter("This is the footer", url) | .WithFooter("This is the footer", url) | ||||
.WithImageUrl(url) | .WithImageUrl(url) | ||||
.WithThumbnailUrl(url) | .WithThumbnailUrl(url) | ||||
.WithTimestamp(DateTime.MinValue) | |||||
.WithTimestamp(DateTimeOffset.MinValue) | |||||
.WithTitle("This is the title") | .WithTitle("This is the title") | ||||
.WithUrl(url) | .WithUrl(url) | ||||
.AddField("Field 1", "Inline", true) | .AddField("Field 1", "Inline", true) | ||||
@@ -1,7 +1,6 @@ | |||||
using System; | using System; | ||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.IO; | using System.IO; | ||||
using System.Text; | |||||
using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
using Discord.Audio; | using Discord.Audio; | ||||