diff --git a/DisCatSharp.Tests/DisCatSharp.Tests.csproj b/DisCatSharp.Tests/DisCatSharp.Tests.csproj deleted file mode 100644 index 9b4d7d0b5..000000000 --- a/DisCatSharp.Tests/DisCatSharp.Tests.csproj +++ /dev/null @@ -1,28 +0,0 @@ - - - - net6.0 - enable - - false - - - - - - - - runtime; build; native; contentfiles; analyzers; buildtransitive - all - - - runtime; build; native; contentfiles; analyzers; buildtransitive - all - - - - - - - - diff --git a/DisCatSharp.Tests/EntityRegexTests/EventTests.cs b/DisCatSharp.Tests/EntityRegexTests/EventTests.cs deleted file mode 100644 index 7bc73ea33..000000000 --- a/DisCatSharp.Tests/EntityRegexTests/EventTests.cs +++ /dev/null @@ -1,80 +0,0 @@ -// This file is part of the DisCatSharp project, based off DSharpPlus. -// -// Copyright (c) 2021-2022 AITSYS -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. - -using DisCatSharp.Common.RegularExpressions; - -using Xunit; -using Xunit.Abstractions; - -namespace DisCatSharp.Tests.EntityRegexTests; - -public class EventTests -{ - private readonly ITestOutputHelper _output; - public EventTests(ITestOutputHelper output) - { - this._output = output; - } - - [Theory, ClassData(typeof(WebsiteGenerator))] - void TestEventMatch(string website) - { - var evtn = $"{website}events/123/456"; - this._output.WriteLine($"Testing \"{evtn}\"."); - var match = DiscordRegEx.Event.Match(evtn); - Assert.True(match.Success); - Assert.Equal("123", match.Groups["guild"].Value); - Assert.Equal("456", match.Groups["event"].Value); - } - - private const string VALID_EVENT = "https://discord.com/events/123/456"; - - [Fact] - void TestValidEvent() => Assert.Matches(DiscordRegEx.Event, VALID_EVENT); - - [Theory, CombinatorialData] - void TestInvalidEvents([CombinatorialValues( - "", - "_", - "asd", - $".{VALID_EVENT}", - $"a{VALID_EVENT}", - $"{VALID_EVENT}b", - $"{VALID_EVENT}_", - "https://discord.com/events/123/", - "https://discord.com/events/123", - "iscord.com/events/123/456", - "https://discord.ru/events/123/456", - "ftp://discord.com/events/123/456", - "https://discord.com/stneve/123/456", - "https://discord.com/events/1x23/456", - "https://discord.com/events/123/4z56", - "https://discord.com/events/12_3/456", - "https://discord.com/events/123/45%6", - "https://discord.comevents/123/456", - "https:/discord.comevents/123/456", - "https:/discord.com/events/123/456", - "https//discord.com/events/123/456", - "/discord.com/events/123/456" - )] string evtn) => - Assert.DoesNotMatch(DiscordRegEx.Event, evtn); -} diff --git a/DisCatSharp.Tests/EntityRegexTests/WebsiteGenerator.cs b/DisCatSharp.Tests/EntityRegexTests/WebsiteGenerator.cs deleted file mode 100644 index 817464170..000000000 --- a/DisCatSharp.Tests/EntityRegexTests/WebsiteGenerator.cs +++ /dev/null @@ -1,44 +0,0 @@ -// This file is part of the DisCatSharp project, based off DSharpPlus. -// -// Copyright (c) 2021-2022 AITSYS -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. - -using System.Collections; -using System.Collections.Generic; -using System.Collections.Immutable; - -namespace DisCatSharp.Tests.EntityRegexTests; - -class WebsiteGenerator : IEnumerable -{ - private static readonly ImmutableArray s_protocols = new[] { "", "http://", "https://" }.ToImmutableArray(); - private static readonly ImmutableArray s_subdomains = new[] { "", "www.", "ptb.", "canary." }.ToImmutableArray(); - private static readonly ImmutableArray s_domains = new[] { "discord", "discordapp" }.ToImmutableArray(); - - public IEnumerator GetEnumerator() - { - foreach (var protocol in s_protocols) - foreach (var subdomain in s_subdomains) - foreach (var domain in s_domains) - yield return new object[] { $"{protocol}{subdomain}{domain}.com/" }; - } - - IEnumerator IEnumerable.GetEnumerator() => this.GetEnumerator(); -} diff --git a/DisCatSharp.Tests/EventHandlerTests/BasicEventHandlerTests.cs b/DisCatSharp.Tests/EventHandlerTests/BasicEventHandlerTests.cs deleted file mode 100644 index 0550c5657..000000000 --- a/DisCatSharp.Tests/EventHandlerTests/BasicEventHandlerTests.cs +++ /dev/null @@ -1,142 +0,0 @@ -// This file is part of the DisCatSharp project, based off DSharpPlus. -// -// Copyright (c) 2021-2022 AITSYS -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. - -using System; -using System.Reflection; -using System.Threading.Tasks; - -using DisCatSharp.EventArgs; - -using Xunit; - -namespace DisCatSharp.Tests.EventHandlerTests; - -public class BasicEventHandlerTests -{ - [EventHandler] - private class HandlerA { } - - [EventHandler] - private class HandlerB - { - [Event] - public Task MessageCreated(DiscordClient sender, MessageCreateEventArgs args) => Task.CompletedTask; - - [Event(DiscordEvent.MessageDeleted)] - private static Task SomeEvent(DiscordClient sender, MessageDeleteEventArgs args) => Task.CompletedTask; - } - - [EventHandler] - private static class HandlerC - { - [Event] - public static Task MessageCreated(DiscordClient sender, MessageCreateEventArgs args) => Task.CompletedTask; - } - - public abstract class HandlerD - { - [Event] - public Task ChannelCreated(DiscordClient sender, ChannelCreateEventArgs args) => Task.CompletedTask; - - [Event] - public static Task ChannelDeleted(DiscordClient sender, ChannelDeleteEventArgs args) => Task.CompletedTask; - } - - private class BadHandlerA - { - [Event] - public int MessageCreated(object? obj, dynamic dynamic) => 1; - } - - private abstract class BadHandlerB - { - [Event] - private static Task ThisEventDoesNotExist() => Task.CompletedTask; - } - - private readonly DiscordClient _client = new(new() { Token = "1" }); - - [Fact] - public void TestUtility() - { - Assert.False(this.IsEventRegistered(nameof(this._client.MessageCreated))); - this._client.MessageCreated += (_, _) => Task.CompletedTask; - Assert.True(this.IsEventRegistered(nameof(this._client.MessageCreated))); - Assert.Throws(() => this.IsEventRegistered("")); - Assert.Throws(() => this.IsEventRegistered("ThisEventDoesNotExist")); - } - - [Fact] - public void TestUnregistrationWithoutRegistration() - { - this._client.UnregisterEventHandler(); - this._client.UnregisterEventHandlers(Assembly.GetExecutingAssembly()); - Assert.False(this.IsEventRegistered(nameof(this._client.MessageCreated))); - Assert.False(this.IsEventRegistered(nameof(this._client.MessageDeleted))); - } - - [Fact] - public void TestSimpleRegistration() - { - this._client.RegisterEventHandler(); - Assert.True(this.IsEventRegistered(nameof(this._client.MessageCreated))); - Assert.True(this.IsEventRegistered(nameof(this._client.MessageDeleted))); - this._client.UnregisterEventHandler(); - Assert.False(this.IsEventRegistered(nameof(this._client.MessageCreated))); - Assert.False(this.IsEventRegistered(nameof(this._client.MessageDeleted))); - - this._client.RegisterEventHandler(); - Assert.False(this.IsEventRegistered(nameof(this._client.ChannelCreated))); - Assert.True(this.IsEventRegistered(nameof(this._client.ChannelDeleted))); - this._client.UnregisterEventHandler(); - Assert.False(this.IsEventRegistered(nameof(this._client.ChannelDeleted))); - } - - [Fact] - public void TestAssemblyRegistration() - { - this._client.RegisterEventHandlers(Assembly.GetExecutingAssembly()); - Assert.True(this.IsEventRegistered(nameof(this._client.MessageCreated))); - Assert.True(this.IsEventRegistered(nameof(this._client.MessageDeleted))); - this._client.UnregisterEventHandlers(Assembly.GetExecutingAssembly()); - Assert.False(this.IsEventRegistered(nameof(this._client.MessageCreated))); - Assert.False(this.IsEventRegistered(nameof(this._client.MessageDeleted))); - } - - [Fact] - public void TestInvalidHandlers() - { - Assert.Throws(() => this._client.RegisterEventHandler()); - Assert.Throws(() => this._client.RegisterEventHandler()); - } - - private bool IsEventRegistered(string name) { - // This is super hacky, but I think it should be good enough. - if (name.Length == 0) { throw new ArgumentException("name mustn't be empty"); } - name = "_" + char.ToLower(name[0]) + name.Substring(1); - var asyncEvent = typeof(DiscordClient).GetField(name, BindingFlags.NonPublic | BindingFlags.Instance)?.GetValue(this._client); - dynamic handlers = asyncEvent?.GetType().GetField("_handlers", BindingFlags.NonPublic | BindingFlags.Instance)?.GetValue(asyncEvent) - ?? throw new ArgumentException($"Unknown event \"{name}\""); - return handlers.Length != 0; - } - -} diff --git a/DisCatSharp.Tests/EventHandlerTests/EventsEnumIntegrityTests.cs b/DisCatSharp.Tests/EventHandlerTests/EventsEnumIntegrityTests.cs deleted file mode 100644 index ca4ef9101..000000000 --- a/DisCatSharp.Tests/EventHandlerTests/EventsEnumIntegrityTests.cs +++ /dev/null @@ -1,49 +0,0 @@ -// This file is part of the DisCatSharp project, based off DSharpPlus. -// -// Copyright (c) 2021-2022 AITSYS -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. - -using System.Linq; - -using Xunit; - -namespace DisCatSharp.Tests.EventHandlerTests; - -public class EventsEnumIntegrityTests -{ - [Fact] - void TestEnumToEvent() - { - foreach (var value in typeof(DiscordEvent).GetEnumValues()) - { - Assert.NotNull(typeof(DiscordClient).GetEvent(value.ToString()!)); - } - } - - [Fact] - void TestEventToEnum() - { - var enumNames = typeof(DiscordEvent).GetEnumNames().ToHashSet(); - foreach (var evtn in typeof(DiscordClient).GetEvents()) - { - Assert.Contains(evtn.Name, enumNames); - } - } -} diff --git a/DisCatSharp.Tests/EventHandlerTests/ServiceProviderTests.cs b/DisCatSharp.Tests/EventHandlerTests/ServiceProviderTests.cs deleted file mode 100644 index 4f1ecc47b..000000000 --- a/DisCatSharp.Tests/EventHandlerTests/ServiceProviderTests.cs +++ /dev/null @@ -1,53 +0,0 @@ -// This file is part of the DisCatSharp project, based off DSharpPlus. -// -// Copyright (c) 2021-2022 AITSYS -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. - -using System; - -using Microsoft.Extensions.DependencyInjection; - -using Xunit; - -namespace DisCatSharp.Tests.EventHandlerTests; - -public class ServiceProviderTests -{ - private class Resource { } - - private class Handler - { - public Handler(Resource res) { } - } - - [Fact] - public void Test() - { - var poorClient = new DiscordClient(new() { Token = "1" }); - Assert.ThrowsAny(() => poorClient.RegisterEventHandler()); - - var richClient = new DiscordClient(new() - { - Token = "2", - ServiceProvider = new ServiceCollection().AddSingleton().BuildServiceProvider(), - }); - richClient.RegisterEventHandler(); // May not throw. - } -} diff --git a/DisCatSharp.Tests/OptionalTests.cs b/DisCatSharp.Tests/OptionalTests.cs deleted file mode 100644 index f50ddcf72..000000000 --- a/DisCatSharp.Tests/OptionalTests.cs +++ /dev/null @@ -1,107 +0,0 @@ -// This file is part of the DisCatSharp project, based off DSharpPlus. -// -// Copyright (c) 2021-2022 AITSYS -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. - -using DisCatSharp.Entities; - -using Xunit; - -namespace DisCatSharp.Tests; - -public class OptionalTests -{ - class TestClass { } - - struct TestStruct { } - - [Fact] - public void EqualityTests() - { - var c = new TestClass(); - - var c1 = Optional.None; - var c2 = Optional.Some(c); - Assert.NotEqual(c1, c2); - - var c3 = Optional.Some(c); - Assert.Equal(c2, c3); - - var c4 = Optional.Some(new TestClass()); - Assert.NotEqual(c3, c4); - - var s1 = Optional.None; - var s2 = Optional.Some(new TestStruct()); - Assert.NotEqual(s1, s2); - - var s3 = Optional.Some(new TestStruct()); - Assert.Equal(s2, s3); - - var s4 = (Optional)Optional.None; - Assert.Equal(s1, s4); - } - - [Fact] - public void FromNullableTests() - { - var c1 = Optional.Some(null); - Assert.True(c1.HasValue); - Assert.Null(c1.Value); - - var c2 = Optional.FromNullable(null); - Assert.False(c2.HasValue); - - var c3 = Optional.FromNullable(new TestClass()); - Assert.True(c3.HasValue); - Assert.NotNull(c3.Value); - } - - [Fact] - public void MapTests() - { - var c1 = Optional.None; - var s1 = c1.Map(x => new TestStruct()); - Assert.False(s1.HasValue); - - c1 = Optional.Some(new TestClass()); - s1 = c1.Map(x => new TestStruct()); - Assert.True(s1.HasValue); - - var mapped = false; - T Map(T o) - { - mapped = true; - return o; - } - - c1 = null; - var c2 = c1.MapOrNull(Map); - Assert.False(mapped); - Assert.True(c2.HasValue); - Assert.Null((TestClass)c2); - - c1 = new TestClass(); - c2 = c1.MapOrNull(Map); - Assert.True(mapped); - Assert.True(c2.HasValue); - Assert.Equal(c1, c2); - Assert.Equal(c1.Value, c2.Value); - } -} diff --git a/DisCatSharp.sln b/DisCatSharp.sln index 683357d42..0aba3f024 100644 --- a/DisCatSharp.sln +++ b/DisCatSharp.sln @@ -1,161 +1,151 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.1.31911.260 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DisCatSharp", "DisCatSharp\DisCatSharp.csproj", "{EB3D8310-DFAD-4295-97F9-82E253647583}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DisCatSharp.VoiceNext", "DisCatSharp.VoiceNext\DisCatSharp.VoiceNext.csproj", "{FB6B9EE9-65FB-4DFB-8D51-06F0BE6C1BA5}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{4255B64D-92EC-46B3-BC3B-ED2C3A8073EE}" ProjectSection(SolutionItems) = preProject .editorconfig = .editorconfig .gitattributes = .gitattributes .gitignore = .gitignore BUILDING.md = BUILDING.md CODE_OF_CONDUCT.md = CODE_OF_CONDUCT.md CONTRIBUTING.md = CONTRIBUTING.md LICENSE.md = LICENSE.md README.md = README.md SECURITY.md = SECURITY.md EndProjectSection EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DisCatSharp.CommandsNext", "DisCatSharp.CommandsNext\DisCatSharp.CommandsNext.csproj", "{C8ED55FB-E028-468D-955F-1534C20274EF}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DisCatSharp.Interactivity", "DisCatSharp.Interactivity\DisCatSharp.Interactivity.csproj", "{DD32BEC3-0189-479F-86DC-CCF95E5634A9}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{F953F5D0-F0C9-41E6-ADBF-60A76D295899}" ProjectSection(SolutionItems) = preProject .nuget\NuGet.config = .nuget\NuGet.config EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build Items", "Build Items", "{84464D70-687B-40A8-836D-C4F737698969}" ProjectSection(SolutionItems) = preProject appveyor.yml = appveyor.yml .github\workflows\codeql-analysis.yml = .github\workflows\codeql-analysis.yml .github\dependabot.yml = .github\dependabot.yml DisCatSharp.targets = DisCatSharp.targets docs-oneclick-rebuild.ps1 = docs-oneclick-rebuild.ps1 .github\workflows\docs.yml = .github\workflows\docs.yml .github\workflows\dotnet.yml = .github\workflows\dotnet.yml Library.targets = Library.targets NuGet.targets = NuGet.targets oneclick-rebuild.ps1 = oneclick-rebuild.ps1 Package.targets = Package.targets rebuild-all.ps1 = rebuild-all.ps1 rebuild-docs.ps1 = rebuild-docs.ps1 rebuild-lib.ps1 = rebuild-lib.ps1 Version.targets = Version.targets EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".github", ".github", "{430C28D8-5F85-4D6E-AA68-211549435245}" ProjectSection(SolutionItems) = preProject .github\ISSUE_TEMPLATE\bug_report.md = .github\ISSUE_TEMPLATE\bug_report.md .github\CODEOWNERS = .github\CODEOWNERS .github\workflows\codeql-analysis.yml = .github\workflows\codeql-analysis.yml .github\workflows\docs-preview.yml = .github\workflows\docs-preview.yml .github\workflows\docs.yml = .github\workflows\docs.yml .github\workflows\dotnet.yml = .github\workflows\dotnet.yml .github\ISSUE_TEMPLATE\feature_request.md = .github\ISSUE_TEMPLATE\feature_request.md .github\FUNDING.yml = .github\FUNDING.yml .github\pull_request_template.md = .github\pull_request_template.md EndProjectSection EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DisCatSharp.Lavalink", "DisCatSharp.Lavalink\DisCatSharp.Lavalink.csproj", "{A8B8FB09-C6AF-4F28-89B8-B53EE0DCE6E5}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DisCatSharp.VoiceNext.Natives", "DisCatSharp.VoiceNext.Natives\DisCatSharp.VoiceNext.Natives.csproj", "{BEC47B41-71E4-41D1-A4F9-BB7C56A1B82B}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DisCatSharp.Common", "DisCatSharp.Common\DisCatSharp.Common.csproj", "{CD84A5C7-C7FF-48CA-B23D-FA726CF80E09}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DisCatSharp.ApplicationCommands", "DisCatSharp.ApplicationCommands\DisCatSharp.ApplicationCommands.csproj", "{AD530FD0-523C-4DE7-9AF6-B9A3785492C2}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DisCatSharp.Configuration", "DisCatSharp.Configuration\DisCatSharp.Configuration.csproj", "{603287D3-1EF2-47F1-A611-C7F25869DE14}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DisCatSharp.Configuration.Tests", "DisCatSharp.Configuration.Tests\DisCatSharp.Configuration.Tests.csproj", "{E15E88B4-63AD-42DE-B685-D31697C62194}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DisCatSharp.Hosting", "DisCatSharp.Hosting\DisCatSharp.Hosting.csproj", "{72CCE5D5-926B-432A-876A-065FA2BC9B7B}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DisCatSharp.Hosting.Tests", "DisCatSharp.Hosting.Tests\DisCatSharp.Hosting.Tests.csproj", "{D02B598A-F0C9-4A8C-B8DE-7C0BAC8C9B94}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DisCatSharp.Hosting.DependencyInjection", "DisCatSharp.Hosting.DependencyInjection\DisCatSharp.Hosting.DependencyInjection.csproj", "{2D67D1DD-E5B2-40C7-80E2-54D63730E7F0}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{B15E40E0-03FD-4852-B19B-2C50BCC67704}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DisCatSharp.Tests", "DisCatSharp.Tests\DisCatSharp.Tests.csproj", "{1407FAE8-DAC1-4E89-AA15-4E4592CCC8A0}" -EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {EB3D8310-DFAD-4295-97F9-82E253647583}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {EB3D8310-DFAD-4295-97F9-82E253647583}.Debug|Any CPU.Build.0 = Debug|Any CPU {EB3D8310-DFAD-4295-97F9-82E253647583}.Release|Any CPU.ActiveCfg = Release|Any CPU {EB3D8310-DFAD-4295-97F9-82E253647583}.Release|Any CPU.Build.0 = Release|Any CPU {FB6B9EE9-65FB-4DFB-8D51-06F0BE6C1BA5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {FB6B9EE9-65FB-4DFB-8D51-06F0BE6C1BA5}.Debug|Any CPU.Build.0 = Debug|Any CPU {FB6B9EE9-65FB-4DFB-8D51-06F0BE6C1BA5}.Release|Any CPU.ActiveCfg = Release|Any CPU {FB6B9EE9-65FB-4DFB-8D51-06F0BE6C1BA5}.Release|Any CPU.Build.0 = Release|Any CPU {C8ED55FB-E028-468D-955F-1534C20274EF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C8ED55FB-E028-468D-955F-1534C20274EF}.Debug|Any CPU.Build.0 = Debug|Any CPU {C8ED55FB-E028-468D-955F-1534C20274EF}.Release|Any CPU.ActiveCfg = Release|Any CPU {C8ED55FB-E028-468D-955F-1534C20274EF}.Release|Any CPU.Build.0 = Release|Any CPU {DD32BEC3-0189-479F-86DC-CCF95E5634A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DD32BEC3-0189-479F-86DC-CCF95E5634A9}.Debug|Any CPU.Build.0 = Debug|Any CPU {DD32BEC3-0189-479F-86DC-CCF95E5634A9}.Release|Any CPU.ActiveCfg = Release|Any CPU {DD32BEC3-0189-479F-86DC-CCF95E5634A9}.Release|Any CPU.Build.0 = Release|Any CPU {A8B8FB09-C6AF-4F28-89B8-B53EE0DCE6E5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A8B8FB09-C6AF-4F28-89B8-B53EE0DCE6E5}.Debug|Any CPU.Build.0 = Debug|Any CPU {A8B8FB09-C6AF-4F28-89B8-B53EE0DCE6E5}.Release|Any CPU.ActiveCfg = Release|Any CPU {A8B8FB09-C6AF-4F28-89B8-B53EE0DCE6E5}.Release|Any CPU.Build.0 = Release|Any CPU {BEC47B41-71E4-41D1-A4F9-BB7C56A1B82B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BEC47B41-71E4-41D1-A4F9-BB7C56A1B82B}.Debug|Any CPU.Build.0 = Debug|Any CPU {BEC47B41-71E4-41D1-A4F9-BB7C56A1B82B}.Release|Any CPU.ActiveCfg = Release|Any CPU {BEC47B41-71E4-41D1-A4F9-BB7C56A1B82B}.Release|Any CPU.Build.0 = Release|Any CPU {CD84A5C7-C7FF-48CA-B23D-FA726CF80E09}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {CD84A5C7-C7FF-48CA-B23D-FA726CF80E09}.Debug|Any CPU.Build.0 = Debug|Any CPU {CD84A5C7-C7FF-48CA-B23D-FA726CF80E09}.Release|Any CPU.ActiveCfg = Release|Any CPU {CD84A5C7-C7FF-48CA-B23D-FA726CF80E09}.Release|Any CPU.Build.0 = Release|Any CPU {AD530FD0-523C-4DE7-9AF6-B9A3785492C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {AD530FD0-523C-4DE7-9AF6-B9A3785492C2}.Debug|Any CPU.Build.0 = Debug|Any CPU {AD530FD0-523C-4DE7-9AF6-B9A3785492C2}.Release|Any CPU.ActiveCfg = Release|Any CPU {AD530FD0-523C-4DE7-9AF6-B9A3785492C2}.Release|Any CPU.Build.0 = Release|Any CPU {603287D3-1EF2-47F1-A611-C7F25869DE14}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {603287D3-1EF2-47F1-A611-C7F25869DE14}.Debug|Any CPU.Build.0 = Debug|Any CPU {603287D3-1EF2-47F1-A611-C7F25869DE14}.Release|Any CPU.ActiveCfg = Release|Any CPU {603287D3-1EF2-47F1-A611-C7F25869DE14}.Release|Any CPU.Build.0 = Release|Any CPU {E15E88B4-63AD-42DE-B685-D31697C62194}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E15E88B4-63AD-42DE-B685-D31697C62194}.Debug|Any CPU.Build.0 = Debug|Any CPU {E15E88B4-63AD-42DE-B685-D31697C62194}.Release|Any CPU.ActiveCfg = Release|Any CPU {E15E88B4-63AD-42DE-B685-D31697C62194}.Release|Any CPU.Build.0 = Release|Any CPU {72CCE5D5-926B-432A-876A-065FA2BC9B7B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {72CCE5D5-926B-432A-876A-065FA2BC9B7B}.Debug|Any CPU.Build.0 = Debug|Any CPU {72CCE5D5-926B-432A-876A-065FA2BC9B7B}.Release|Any CPU.ActiveCfg = Release|Any CPU {72CCE5D5-926B-432A-876A-065FA2BC9B7B}.Release|Any CPU.Build.0 = Release|Any CPU {D02B598A-F0C9-4A8C-B8DE-7C0BAC8C9B94}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D02B598A-F0C9-4A8C-B8DE-7C0BAC8C9B94}.Debug|Any CPU.Build.0 = Debug|Any CPU {D02B598A-F0C9-4A8C-B8DE-7C0BAC8C9B94}.Release|Any CPU.ActiveCfg = Release|Any CPU {D02B598A-F0C9-4A8C-B8DE-7C0BAC8C9B94}.Release|Any CPU.Build.0 = Release|Any CPU {2D67D1DD-E5B2-40C7-80E2-54D63730E7F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2D67D1DD-E5B2-40C7-80E2-54D63730E7F0}.Debug|Any CPU.Build.0 = Debug|Any CPU {2D67D1DD-E5B2-40C7-80E2-54D63730E7F0}.Release|Any CPU.ActiveCfg = Release|Any CPU {2D67D1DD-E5B2-40C7-80E2-54D63730E7F0}.Release|Any CPU.Build.0 = Release|Any CPU {1407FAE8-DAC1-4E89-AA15-4E4592CCC8A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1407FAE8-DAC1-4E89-AA15-4E4592CCC8A0}.Debug|Any CPU.Build.0 = Debug|Any CPU {1407FAE8-DAC1-4E89-AA15-4E4592CCC8A0}.Release|Any CPU.ActiveCfg = Release|Any CPU {1407FAE8-DAC1-4E89-AA15-4E4592CCC8A0}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {430C28D8-5F85-4D6E-AA68-211549435245} = {4255B64D-92EC-46B3-BC3B-ED2C3A8073EE} - {E15E88B4-63AD-42DE-B685-D31697C62194} = {B15E40E0-03FD-4852-B19B-2C50BCC67704} - {D02B598A-F0C9-4A8C-B8DE-7C0BAC8C9B94} = {B15E40E0-03FD-4852-B19B-2C50BCC67704} - {1407FAE8-DAC1-4E89-AA15-4E4592CCC8A0} = {B15E40E0-03FD-4852-B19B-2C50BCC67704} - EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {23F3A981-51B8-4285-A38C-3267F1D25FE7} EndGlobalSection EndGlobal