diff --git a/Discord.Net.sln b/Discord.Net.sln
index 230795a3a..f697cac83 100644
--- a/Discord.Net.sln
+++ b/Discord.Net.sln
@@ -3,19 +3,15 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.26124.0
MinimumVisualStudioVersion = 15.0.26124.0
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{72164C41-C6CD-4722-B07B-64A5B6DDC977}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Discord.Net.Core", "src\Discord.Net.Core\Discord.Net.Core.csproj", "{3851F6F6-C028-4CC6-9981-5845EB53CDC5}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Discord.Net.Rest", "src\Discord.Net.Rest\Discord.Net.Rest.csproj", "{13E04C0A-65FD-4648-8B9C-87AAE7A76087}"
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{424AA4CA-E283-4B83-B288-B0181516D1F9}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Discord.Net.Gateway", "src\Discord.Net.Gateway\Discord.Net.Gateway.csproj", "{AAAAEEC8-7E76-4D74-B610-960291FD7580}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Discord.Tests.Unit", "test\Discord.Tests.Unit\Discord.Tests.Unit.csproj", "{97B3208E-FBB3-43D8-8944-EE06F6FE4032}"
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{424AA4CA-E283-4B83-B288-B0181516D1F9}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Discord.Tests.Integration", "test\Discord.Tests.Integration\Discord.Tests.Integration.csproj", "{D2A17BA6-C6A5-42DB-A4BC-F97C07904BA2}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Discord.Tests.Unit", "test\Discord.Tests.Unit\Discord.Tests.Unit.csproj", "{97B3208E-FBB3-43D8-8944-EE06F6FE4032}"
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{279F3738-D35E-402B-BC99-CBE44821C468}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Discord.Tests.Integration", "test\Discord.Tests.Integration\Discord.Tests.Integration.csproj", "{D2A17BA6-C6A5-42DB-A4BC-F97C07904BA2}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Discord.Net", "src\Discord.Net\Discord.Net.csproj", "{65F1C45D-6D82-4E24-9F56-2840D2E6EFB9}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -26,46 +22,7 @@ Global
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {3851F6F6-C028-4CC6-9981-5845EB53CDC5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {3851F6F6-C028-4CC6-9981-5845EB53CDC5}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {3851F6F6-C028-4CC6-9981-5845EB53CDC5}.Debug|x64.ActiveCfg = Debug|Any CPU
- {3851F6F6-C028-4CC6-9981-5845EB53CDC5}.Debug|x64.Build.0 = Debug|Any CPU
- {3851F6F6-C028-4CC6-9981-5845EB53CDC5}.Debug|x86.ActiveCfg = Debug|Any CPU
- {3851F6F6-C028-4CC6-9981-5845EB53CDC5}.Debug|x86.Build.0 = Debug|Any CPU
- {3851F6F6-C028-4CC6-9981-5845EB53CDC5}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {3851F6F6-C028-4CC6-9981-5845EB53CDC5}.Release|Any CPU.Build.0 = Release|Any CPU
- {3851F6F6-C028-4CC6-9981-5845EB53CDC5}.Release|x64.ActiveCfg = Release|Any CPU
- {3851F6F6-C028-4CC6-9981-5845EB53CDC5}.Release|x64.Build.0 = Release|Any CPU
- {3851F6F6-C028-4CC6-9981-5845EB53CDC5}.Release|x86.ActiveCfg = Release|Any CPU
- {3851F6F6-C028-4CC6-9981-5845EB53CDC5}.Release|x86.Build.0 = Release|Any CPU
- {13E04C0A-65FD-4648-8B9C-87AAE7A76087}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {13E04C0A-65FD-4648-8B9C-87AAE7A76087}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {13E04C0A-65FD-4648-8B9C-87AAE7A76087}.Debug|x64.ActiveCfg = Debug|Any CPU
- {13E04C0A-65FD-4648-8B9C-87AAE7A76087}.Debug|x64.Build.0 = Debug|Any CPU
- {13E04C0A-65FD-4648-8B9C-87AAE7A76087}.Debug|x86.ActiveCfg = Debug|Any CPU
- {13E04C0A-65FD-4648-8B9C-87AAE7A76087}.Debug|x86.Build.0 = Debug|Any CPU
- {13E04C0A-65FD-4648-8B9C-87AAE7A76087}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {13E04C0A-65FD-4648-8B9C-87AAE7A76087}.Release|Any CPU.Build.0 = Release|Any CPU
- {13E04C0A-65FD-4648-8B9C-87AAE7A76087}.Release|x64.ActiveCfg = Release|Any CPU
- {13E04C0A-65FD-4648-8B9C-87AAE7A76087}.Release|x64.Build.0 = Release|Any CPU
- {13E04C0A-65FD-4648-8B9C-87AAE7A76087}.Release|x86.ActiveCfg = Release|Any CPU
- {13E04C0A-65FD-4648-8B9C-87AAE7A76087}.Release|x86.Build.0 = Release|Any CPU
- {AAAAEEC8-7E76-4D74-B610-960291FD7580}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {AAAAEEC8-7E76-4D74-B610-960291FD7580}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {AAAAEEC8-7E76-4D74-B610-960291FD7580}.Debug|x64.ActiveCfg = Debug|Any CPU
- {AAAAEEC8-7E76-4D74-B610-960291FD7580}.Debug|x64.Build.0 = Debug|Any CPU
- {AAAAEEC8-7E76-4D74-B610-960291FD7580}.Debug|x86.ActiveCfg = Debug|Any CPU
- {AAAAEEC8-7E76-4D74-B610-960291FD7580}.Debug|x86.Build.0 = Debug|Any CPU
- {AAAAEEC8-7E76-4D74-B610-960291FD7580}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {AAAAEEC8-7E76-4D74-B610-960291FD7580}.Release|Any CPU.Build.0 = Release|Any CPU
- {AAAAEEC8-7E76-4D74-B610-960291FD7580}.Release|x64.ActiveCfg = Release|Any CPU
- {AAAAEEC8-7E76-4D74-B610-960291FD7580}.Release|x64.Build.0 = Release|Any CPU
- {AAAAEEC8-7E76-4D74-B610-960291FD7580}.Release|x86.ActiveCfg = Release|Any CPU
- {AAAAEEC8-7E76-4D74-B610-960291FD7580}.Release|x86.Build.0 = Release|Any CPU
{97B3208E-FBB3-43D8-8944-EE06F6FE4032}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{97B3208E-FBB3-43D8-8944-EE06F6FE4032}.Debug|Any CPU.Build.0 = Debug|Any CPU
{97B3208E-FBB3-43D8-8944-EE06F6FE4032}.Debug|x64.ActiveCfg = Debug|Any CPU
@@ -90,12 +47,28 @@ Global
{D2A17BA6-C6A5-42DB-A4BC-F97C07904BA2}.Release|x64.Build.0 = Release|Any CPU
{D2A17BA6-C6A5-42DB-A4BC-F97C07904BA2}.Release|x86.ActiveCfg = Release|Any CPU
{D2A17BA6-C6A5-42DB-A4BC-F97C07904BA2}.Release|x86.Build.0 = Release|Any CPU
+ {65F1C45D-6D82-4E24-9F56-2840D2E6EFB9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {65F1C45D-6D82-4E24-9F56-2840D2E6EFB9}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {65F1C45D-6D82-4E24-9F56-2840D2E6EFB9}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {65F1C45D-6D82-4E24-9F56-2840D2E6EFB9}.Debug|x64.Build.0 = Debug|Any CPU
+ {65F1C45D-6D82-4E24-9F56-2840D2E6EFB9}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {65F1C45D-6D82-4E24-9F56-2840D2E6EFB9}.Debug|x86.Build.0 = Debug|Any CPU
+ {65F1C45D-6D82-4E24-9F56-2840D2E6EFB9}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {65F1C45D-6D82-4E24-9F56-2840D2E6EFB9}.Release|Any CPU.Build.0 = Release|Any CPU
+ {65F1C45D-6D82-4E24-9F56-2840D2E6EFB9}.Release|x64.ActiveCfg = Release|Any CPU
+ {65F1C45D-6D82-4E24-9F56-2840D2E6EFB9}.Release|x64.Build.0 = Release|Any CPU
+ {65F1C45D-6D82-4E24-9F56-2840D2E6EFB9}.Release|x86.ActiveCfg = Release|Any CPU
+ {65F1C45D-6D82-4E24-9F56-2840D2E6EFB9}.Release|x86.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
- {3851F6F6-C028-4CC6-9981-5845EB53CDC5} = {72164C41-C6CD-4722-B07B-64A5B6DDC977}
- {13E04C0A-65FD-4648-8B9C-87AAE7A76087} = {72164C41-C6CD-4722-B07B-64A5B6DDC977}
- {AAAAEEC8-7E76-4D74-B610-960291FD7580} = {72164C41-C6CD-4722-B07B-64A5B6DDC977}
{97B3208E-FBB3-43D8-8944-EE06F6FE4032} = {424AA4CA-E283-4B83-B288-B0181516D1F9}
{D2A17BA6-C6A5-42DB-A4BC-F97C07904BA2} = {424AA4CA-E283-4B83-B288-B0181516D1F9}
+ {65F1C45D-6D82-4E24-9F56-2840D2E6EFB9} = {279F3738-D35E-402B-BC99-CBE44821C468}
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {1F07E0CE-26FE-4660-A0C3-4F9CC2BD7B72}
EndGlobalSection
EndGlobal
diff --git a/nuget.config b/nuget.config
index 422a0e18a..08801b795 100644
--- a/nuget.config
+++ b/nuget.config
@@ -1,8 +1,9 @@
-
-
+
+
+
diff --git a/src/Discord.Net.Core/Class1.cs b/src/Discord.Net.Core/Class1.cs
deleted file mode 100644
index 27463cf1e..000000000
--- a/src/Discord.Net.Core/Class1.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-using System;
-
-namespace Discord.Net.Core
-{
- public class Class1
- {
- }
-}
diff --git a/src/Discord.Net.Gateway/Class1.cs b/src/Discord.Net.Gateway/Class1.cs
deleted file mode 100644
index 2474bbecb..000000000
--- a/src/Discord.Net.Gateway/Class1.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-using System;
-
-namespace Discord.Net.Gateway
-{
- public class Class1
- {
- }
-}
diff --git a/src/Discord.Net.Gateway/Discord.Net.Gateway.csproj b/src/Discord.Net.Gateway/Discord.Net.Gateway.csproj
deleted file mode 100644
index 9f5c4f4ab..000000000
--- a/src/Discord.Net.Gateway/Discord.Net.Gateway.csproj
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
- netstandard2.0
-
-
-
diff --git a/src/Discord.Net.Rest/Class1.cs b/src/Discord.Net.Rest/Class1.cs
deleted file mode 100644
index 671a29156..000000000
--- a/src/Discord.Net.Rest/Class1.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-using System;
-
-namespace Discord.Net.Rest
-{
- public class Class1
- {
- }
-}
diff --git a/src/Discord.Net.Rest/Discord.Net.Rest.csproj b/src/Discord.Net.Rest/Discord.Net.Rest.csproj
deleted file mode 100644
index 9f5c4f4ab..000000000
--- a/src/Discord.Net.Rest/Discord.Net.Rest.csproj
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
- netstandard2.0
-
-
-
diff --git a/src/Discord.Net.Core/Discord.Net.Core.csproj b/src/Discord.Net/Discord.Net.csproj
similarity index 100%
rename from src/Discord.Net.Core/Discord.Net.Core.csproj
rename to src/Discord.Net/Discord.Net.csproj
diff --git a/src/Discord.Net/DiscordClient.cs b/src/Discord.Net/DiscordClient.cs
new file mode 100644
index 000000000..5147afa8f
--- /dev/null
+++ b/src/Discord.Net/DiscordClient.cs
@@ -0,0 +1,58 @@
+using System;
+using System.Net.Http.Headers;
+using System.Threading.Tasks;
+using Wumpus;
+using Wumpus.Events;
+
+namespace Discord
+{
+ internal class DiscordClient : IDiscordClient, IDisposable
+ {
+ public event Action Ready;
+
+ private int _shard, _totalShards;
+
+ public WumpusGatewayClient Gateway { get; }
+ public WumpusRestClient Rest { get; }
+
+ public DiscordClient(DiscordClientConfig config)
+ {
+ _shard = config.Shard;
+ _totalShards = config.TotalShards;
+
+ Gateway = new WumpusGatewayClient();
+ Rest = new WumpusRestClient();
+
+ var auth = new AuthenticationHeaderValue("", config.Token);
+ Gateway.Authorization = auth;
+ Rest.Authorization = auth;
+ }
+
+ public async Task StartAsync()
+ {
+ var gateway = await Rest.GetBotGatewayAsync().ConfigureAwait(false);
+ await Gateway.RunAsync(gateway.Url.ToString(), _shard, _totalShards).ConfigureAwait(false);
+ }
+
+ public async Task StopAsync()
+ {
+ await Gateway.StopAsync().ConfigureAwait(false);
+ }
+
+ private void RegisterEvents()
+ {
+ Gateway.Ready += OnReady;
+ }
+ private void OnReady(ReadyEvent args)
+ {
+ // TODO: Cache
+ Ready?.Invoke();
+ }
+
+ public void Dispose()
+ {
+ Gateway.Dispose();
+ Rest.Dispose();
+ }
+ }
+}
diff --git a/src/Discord.Net/DiscordClientBuilder.cs b/src/Discord.Net/DiscordClientBuilder.cs
new file mode 100644
index 000000000..c9e57dc50
--- /dev/null
+++ b/src/Discord.Net/DiscordClientBuilder.cs
@@ -0,0 +1,10 @@
+namespace Discord
+{
+ public sealed class DiscordClientBuilder
+ {
+ public IDiscordClient FromConfig(DiscordClientConfig config)
+ {
+ return new DiscordClient(config);
+ }
+ }
+}
diff --git a/src/Discord.Net/DiscordClientConfig.cs b/src/Discord.Net/DiscordClientConfig.cs
new file mode 100644
index 000000000..b1e1407ee
--- /dev/null
+++ b/src/Discord.Net/DiscordClientConfig.cs
@@ -0,0 +1,10 @@
+namespace Discord
+{
+ public class DiscordClientConfig
+ {
+ public string Token { get; set; }
+
+ public int Shard { get; set; } = 0;
+ public int TotalShards { get; set; } = 1;
+ }
+}
diff --git a/src/Discord.Net/IDiscordClient.cs b/src/Discord.Net/IDiscordClient.cs
new file mode 100644
index 000000000..4f6e022c4
--- /dev/null
+++ b/src/Discord.Net/IDiscordClient.cs
@@ -0,0 +1,17 @@
+using System;
+using System.Threading.Tasks;
+using Wumpus;
+
+namespace Discord
+{
+ public interface IDiscordClient
+ {
+ WumpusGatewayClient Gateway { get; }
+ WumpusRestClient Rest { get; }
+
+ Task StartAsync();
+ Task StopAsync();
+
+ event Action Ready;
+ }
+}