diff --git a/DisCatSharp.ThirdPartyLookups/DisCatSharp.ThirdPartyLookups.csproj b/DisCatSharp.ThirdPartyLookups/DisCatSharp.ThirdPartyLookups.csproj
new file mode 100644
index 000000000..bbfbcff33
--- /dev/null
+++ b/DisCatSharp.ThirdPartyLookups/DisCatSharp.ThirdPartyLookups.csproj
@@ -0,0 +1,17 @@
+
+
+
+ net6.0
+ disable
+ enable
+ DisCatSharp.ThirdPartyLookups
+ DisCatSharp.ThirdPartyLookups
+ True
+ True
+
+
+
+
+
+
+
diff --git a/DisCatSharp.ThirdPartyLookups/DiscordClientExtensions.cs b/DisCatSharp.ThirdPartyLookups/DiscordClientExtensions.cs
new file mode 100644
index 000000000..9879b5b51
--- /dev/null
+++ b/DisCatSharp.ThirdPartyLookups/DiscordClientExtensions.cs
@@ -0,0 +1,46 @@
+// 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;
+
+namespace DisCatSharp.ThirdPartyLookups;
+
+///
+/// The discord client extensions.
+///
+public static class DiscordClientExtensions
+{
+ ///
+ /// Creates a new Third Party Lookup client with specified settings.
+ ///
+ /// Discord client to create Lavalink instance for.
+ /// Lavalink client instance.
+ public static ThirdPartyLookupExtension UseThirdPartyLookup(this DiscordClient client)
+ {
+ if (client.GetExtension() != null)
+ throw new InvalidOperationException("Third Party Lookup is already enabled for that client.");
+
+ var tp = new ThirdPartyLookupExtension();
+ client.AddExtension(tp);
+ return tp;
+ }
+}
diff --git a/DisCatSharp.ThirdPartyLookups/Entities/Mee6 Leaderboard/Mee6Guild.cs b/DisCatSharp.ThirdPartyLookups/Entities/Mee6 Leaderboard/Mee6Guild.cs
new file mode 100644
index 000000000..c4ba100a6
--- /dev/null
+++ b/DisCatSharp.ThirdPartyLookups/Entities/Mee6 Leaderboard/Mee6Guild.cs
@@ -0,0 +1,98 @@
+// 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.Collections.Generic;
+using System.Globalization;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+using DisCatSharp.Enums;
+using DisCatSharp.Net;
+
+using Newtonsoft.Json;
+
+namespace DisCatSharp.ThirdPartyLookups.Entities;
+
+///
+/// A guild represented by Mee6.
+///
+public class Mee6Guild
+{
+ ///
+ /// The id of this guild.
+ ///
+ [JsonProperty("id")]
+ internal string? _Id { get; set; }
+
+ ///
+ /// The id of this guild.
+ ///
+ [JsonIgnore]
+ public ulong Id => Convert.ToUInt64(this._Id);
+
+ ///
+ /// The name of this guild.
+ ///
+ [JsonProperty("name")]
+ public string? Name { get; internal set; }
+
+ ///
+ /// The icon hash of this guild.
+ ///
+ [JsonProperty("icon")]
+ public string? IconHash { get; internal set; }
+
+ ///
+ /// The url of the icon of this guild.
+ ///
+ [JsonIgnore]
+ public string? IconUrl
+ => !string.IsNullOrWhiteSpace(this.IconHash) ? $"{DiscordDomain.GetDomain(CoreDomain.DiscordCdn).Url}{Endpoints.ICONS}/{this.Id.ToString(CultureInfo.InvariantCulture)}/{this.IconHash}.{(this.IconHash.StartsWith("a_") ? "gif" : "png")}?size=1024" : null;
+
+ ///
+ /// Whether this guild allows people to join through the mee6 leaderboard.
+ ///
+ [JsonProperty("invite_leaderboard")]
+ public bool InviteLeaderboad { get; internal set; }
+
+ ///
+ /// An url to the guild's public leaderboard.
+ ///
+ [JsonProperty("leaderboard_url")]
+ public string? LeaderboardUrl { get; internal set; }
+
+ ///
+ /// Whether the guild has access to premium features of Mee6.
+ ///
+ [JsonProperty("premium")]
+ public bool IsPremium { get; internal set; }
+
+ ///
+ /// Unknown, for now. Might be unused.
+ ///
+ [JsonProperty("allow_join")]
+ public bool AllowJoin { get; internal set; }
+
+ internal Mee6Guild() { }
+}
diff --git a/DisCatSharp.ThirdPartyLookups/Entities/Mee6 Leaderboard/Mee6Leaderboard.cs b/DisCatSharp.ThirdPartyLookups/Entities/Mee6 Leaderboard/Mee6Leaderboard.cs
new file mode 100644
index 000000000..8427b5ee8
--- /dev/null
+++ b/DisCatSharp.ThirdPartyLookups/Entities/Mee6 Leaderboard/Mee6Leaderboard.cs
@@ -0,0 +1,111 @@
+// 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.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+using Newtonsoft.Json;
+
+namespace DisCatSharp.ThirdPartyLookups.Entities;
+
+///
+/// A Mee6 Leaderboard.
+///
+public class Mee6Leaderboard
+{
+ ///
+ /// Gets the guild.
+ ///
+ [JsonProperty("guild")]
+ public Mee6Guild? Guild { get; internal set; }
+
+ ///
+ /// Gets the country this guild is set to.
+ ///
+ [JsonProperty("country")]
+ public string? Country { get; internal set; }
+
+ ///
+ /// Whether Mee6 is an Administrator on this guild.
+ ///
+ [JsonProperty("admin")]
+ public bool? IsAdmin { get; internal set; }
+
+ ///
+ /// Gets a list of users.
+ ///
+ [JsonProperty("players")]
+ public Mee6User[]? Users { get; internal set; }
+
+ ///
+ /// Gets the role rewards you can achieve on this server.
+ ///
+ [JsonProperty("role_rewards")]
+ public object[]? RoleRewards { get; internal set; }
+
+ ///
+ /// Gets how much experience you get per message on this guild.
+ ///
+ [JsonProperty("xp_per_message")]
+ public int[]? ExperiencePerMessage { get; internal set; }
+
+ ///
+ /// Gets the rate at which you gain experience on this guild.
+ ///
+ [JsonProperty("xp_rate")]
+ public float? ExperienceRate { get; internal set; }
+
+ ///
+ /// Gets the leaderboard page that has been fetched.
+ ///
+ [JsonProperty("page")]
+ public int? Page { get; internal set; }
+
+
+
+ ///
+ /// Unknown
+ ///
+ [JsonProperty("is_member")]
+ public bool? IsMember { get; internal set; }
+
+ ///
+ /// Unknown
+ ///
+ [JsonProperty("user_guild_settings")]
+ public object? UserGuildSettings { get; internal set; }
+
+ ///
+ /// Unknown
+ ///
+ [JsonProperty("player")]
+ public object? Player { get; internal set; }
+
+ ///
+ /// Unknown
+ ///
+ [JsonProperty("banner_url")]
+ public string? BannerUrl { get; internal set; }
+}
diff --git a/DisCatSharp.ThirdPartyLookups/Entities/Mee6 Leaderboard/Mee6User.cs b/DisCatSharp.ThirdPartyLookups/Entities/Mee6 Leaderboard/Mee6User.cs
new file mode 100644
index 000000000..be539c099
--- /dev/null
+++ b/DisCatSharp.ThirdPartyLookups/Entities/Mee6 Leaderboard/Mee6User.cs
@@ -0,0 +1,102 @@
+// 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.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+using Newtonsoft.Json;
+
+namespace DisCatSharp.ThirdPartyLookups.Entities;
+
+///
+/// A user represented in a Mee6 Leaderboard.
+///
+public class Mee6User
+{
+ ///
+ /// The id of this guild.
+ ///
+ [JsonProperty("id")]
+ internal string? _Id { get; set; }
+
+ ///
+ /// The id of this guild.
+ ///
+ [JsonIgnore]
+ public ulong Id => Convert.ToUInt64(this._Id);
+
+ ///
+ /// The username of this user.
+ ///
+ [JsonProperty("username")]
+ public string? Username { get; set; }
+
+ ///
+ /// The discriminator of this user.
+ ///
+ [JsonProperty("discriminator")]
+ public string? Discriminator { get; set; }
+
+ ///
+ /// The username and discriminator combined. E.g. User#0001
+ ///
+ public string UsernameWithDiscriminator => $"{this.Username}#{this.Discriminator}";
+
+ ///
+ /// The hash of the users' avatar.
+ ///
+ [JsonProperty("avatar")]
+ public string? AvatarHash { get; set; }
+
+ ///
+ /// The id of the guild this user belongs to.
+ ///
+ [JsonProperty("guild_id")]
+ public string? GuildId { get; set; }
+
+ ///
+ /// How many messages the user wrote.
+ ///
+ [JsonProperty("message_count")]
+ public int? MessageCount { get; set; }
+
+ ///
+ /// The current level of this user.
+ ///
+ [JsonProperty("level")]
+ public int? Level { get; set; }
+
+ ///
+ /// The current experience of this user.
+ ///
+ [JsonProperty("xp")]
+ public int? Experience { get; set; }
+
+ ///
+ /// Detailed information about the users' experience.
+ ///
+ [JsonProperty("detailed_xp")]
+ public int[]? DetailedExperience { get; set; }
+}
diff --git a/DisCatSharp.ThirdPartyLookups/Exceptions/NotFoundException.cs b/DisCatSharp.ThirdPartyLookups/Exceptions/NotFoundException.cs
new file mode 100644
index 000000000..81457ed79
--- /dev/null
+++ b/DisCatSharp.ThirdPartyLookups/Exceptions/NotFoundException.cs
@@ -0,0 +1,10 @@
+using System;
+
+namespace DisCatSharp.ThirdPartyLookups.Exceptions;
+
+internal class NotFoundException : Exception
+{
+ public NotFoundException(string message = "") : base(message)
+ {
+ }
+}
diff --git a/DisCatSharp.ThirdPartyLookups/ThirdPartyLookupExtension.cs b/DisCatSharp.ThirdPartyLookups/ThirdPartyLookupExtension.cs
new file mode 100644
index 000000000..e45483c1b
--- /dev/null
+++ b/DisCatSharp.ThirdPartyLookups/ThirdPartyLookupExtension.cs
@@ -0,0 +1,89 @@
+// 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.Collections.Generic;
+using System.Linq;
+using System.Net.Http;
+using System.Text;
+using System.Threading.Tasks;
+
+using DisCatSharp.Entities;
+using DisCatSharp.ThirdPartyLookups.Entities;
+using DisCatSharp.ThirdPartyLookups.Exceptions;
+
+using Newtonsoft.Json;
+
+namespace DisCatSharp.ThirdPartyLookups;
+
+///
+/// The third party lookup extension.
+///
+public class ThirdPartyLookupExtension : BaseExtension
+{
+ ///
+ /// DO NOT USE THIS MANUALLY.
+ ///
+ /// DO NOT USE THIS MANUALLY.
+ ///
+ protected override void Setup(DiscordClient client)
+ {
+ if (this.Client != null)
+ throw new InvalidOperationException("What did I tell you?");
+
+ this.Client = client;
+ }
+
+ ///
+ /// Gets a mee6 leaderboard based of a DiscordGuild.
+ ///
+ /// The guild to fetch.
+ ///
+ /// Thrown if no guild id was provided.
+ /// Thrown if the guild was not found.
+ public async Task GetMee6Leaderboard(DiscordGuild Guild)
+ => await this.GetMee6Leaderboard(Guild.Id);
+
+ ///
+ /// Gets a mee6 leaderboard based of a guild id.
+ ///
+ /// The guild id to fetch.
+ ///
+ /// Thrown if no guild id was provided.
+ /// Thrown if the guild was not found.
+ public async Task GetMee6Leaderboard(ulong GuildId)
+ {
+ if (GuildId == 0)
+ throw new ArgumentException("Please provide a valid guild id.");
+
+ var client = new HttpClient();
+
+ client.DefaultRequestHeaders.Add("User-Agent", $"DisCatSharp.ThirdPartyLookups");
+ client.DefaultRequestHeaders.Add("Accept", "application/json");
+ client.DefaultRequestHeaders.Add("Content-Type", "application/json");
+
+ var response = await client.GetAsync($"https://mee6.xyz/api/plugins/levels/leaderboard/{GuildId}");
+ var mee6 = JsonConvert.DeserializeObject(await response.EnsureSuccessStatusCode().Content.ReadAsStringAsync());
+
+ return mee6 is null ? throw new NotFoundException() : mee6;
+ }
+}
diff --git a/DisCatSharp.sln b/DisCatSharp.sln
index 0aba3f024..188edb967 100644
--- a/DisCatSharp.sln
+++ b/DisCatSharp.sln
@@ -1,151 +1,153 @@
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("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DisCatSharp.ThirdPartyLookups", "DisCatSharp.ThirdPartyLookups\DisCatSharp.ThirdPartyLookups.csproj", "{E91BD01A-3E35-4091-A0A5-0045DBD02A16}"
+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
+ {E91BD01A-3E35-4091-A0A5-0045DBD02A16}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E91BD01A-3E35-4091-A0A5-0045DBD02A16}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E91BD01A-3E35-4091-A0A5-0045DBD02A16}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E91BD01A-3E35-4091-A0A5-0045DBD02A16}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {23F3A981-51B8-4285-A38C-3267F1D25FE7}
EndGlobalSection
EndGlobal