Added a new project for initialization of the main web ui.
This commit is contained in:
@@ -0,0 +1,13 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net8.0</TargetFramework>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\DiscordBotCore\DiscordBotCore.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
108
DiscordBotCore.WebApplication/Initializer.cs
Normal file
108
DiscordBotCore.WebApplication/Initializer.cs
Normal file
@@ -0,0 +1,108 @@
|
|||||||
|
using DiscordBotCore.Bot;
|
||||||
|
using DiscordBotCore.Configuration;
|
||||||
|
using DiscordBotCore.Logging;
|
||||||
|
using DiscordBotCore.PluginManagement;
|
||||||
|
using DiscordBotCore.PluginManagement.Helpers;
|
||||||
|
using DiscordBotCore.PluginManagement.Loading;
|
||||||
|
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using Microsoft.Extensions.Hosting;
|
||||||
|
|
||||||
|
namespace DiscordBotCore.WebApplication;
|
||||||
|
|
||||||
|
public static class Initializer
|
||||||
|
{
|
||||||
|
private static readonly string DefaultLogFormat = "{ThrowTime} {SenderName} {Message}";
|
||||||
|
private static readonly string DefaultLogFolder = "./Data/Logs";
|
||||||
|
private static readonly string DefaultResourcesFolder = "./Data/Resources";
|
||||||
|
private static readonly string DefaultConfigFile = "./Data/Resources/config.json";
|
||||||
|
private static readonly string DefaultPluginFolder = "./Data/Plugins";
|
||||||
|
private static readonly string DefaultPluginDatabaseFile = "./Data/Resources/plugins.json";
|
||||||
|
|
||||||
|
public static void AddDiscordBotComponents(this IHostApplicationBuilder builder)
|
||||||
|
{
|
||||||
|
builder.Services.AddSingleton<ILogger>(sp =>
|
||||||
|
{
|
||||||
|
string logFormat = builder.Configuration["Logger:LogFormat"] ?? DefaultLogFormat;
|
||||||
|
string logFolder = builder.Configuration["Logger:LogFolder"] ?? DefaultLogFolder;
|
||||||
|
|
||||||
|
Directory.CreateDirectory(logFolder);
|
||||||
|
|
||||||
|
ILogger logger = new Logger(logFolder, logFormat);
|
||||||
|
logger.SetOutFunction((s, type) => { Console.WriteLine($"[{type}] {s}"); });
|
||||||
|
|
||||||
|
return logger;
|
||||||
|
});
|
||||||
|
|
||||||
|
builder.Services.AddSingleton<IConfiguration>(sp =>
|
||||||
|
{
|
||||||
|
ILogger logger = sp.GetRequiredService<ILogger>();
|
||||||
|
string configFile = builder.Configuration["ConfigFile"] ?? DefaultConfigFile;
|
||||||
|
Directory.CreateDirectory(new FileInfo(configFile).DirectoryName);
|
||||||
|
IConfiguration configuration = Configuration.Configuration.CreateFromFile(logger, configFile, true);
|
||||||
|
return configuration;
|
||||||
|
});
|
||||||
|
|
||||||
|
builder.Services.AddSingleton<IPluginRepositoryConfiguration>(sp =>
|
||||||
|
{
|
||||||
|
IConfiguration configuration = sp.GetRequiredService<IConfiguration>();
|
||||||
|
Dictionary<string, string>? remotePluginConnectionConfigurationDetails =
|
||||||
|
configuration.Get<Dictionary<string, string>>("RemotePluginConnectionConfigurationDetails");
|
||||||
|
|
||||||
|
if (remotePluginConnectionConfigurationDetails is null)
|
||||||
|
{
|
||||||
|
return PluginRepositoryConfiguration.Default;
|
||||||
|
}
|
||||||
|
|
||||||
|
return new PluginRepositoryConfiguration(
|
||||||
|
remotePluginConnectionConfigurationDetails["Baseurl"],
|
||||||
|
remotePluginConnectionConfigurationDetails["PluginsEndpoint"],
|
||||||
|
remotePluginConnectionConfigurationDetails["DependenciesEndpoint"]
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
builder.Services.AddSingleton<IPluginRepository>(sp =>
|
||||||
|
{
|
||||||
|
IPluginRepositoryConfiguration pluginRepositoryConfiguration =
|
||||||
|
sp.GetRequiredService<IPluginRepositoryConfiguration>();
|
||||||
|
ILogger logger = sp.GetRequiredService<ILogger>();
|
||||||
|
IPluginRepository pluginRepository = new PluginRepository(pluginRepositoryConfiguration, logger);
|
||||||
|
return pluginRepository;
|
||||||
|
});
|
||||||
|
|
||||||
|
builder.Services.AddSingleton<IPluginManager>(sp =>
|
||||||
|
{
|
||||||
|
IPluginRepository pluginRepository = sp.GetRequiredService<IPluginRepository>();
|
||||||
|
ILogger logger = sp.GetRequiredService<ILogger>();
|
||||||
|
IConfiguration configuration = sp.GetRequiredService<IConfiguration>();
|
||||||
|
|
||||||
|
string pluginFolder = configuration.Get<string>("PluginFolder", DefaultPluginFolder);
|
||||||
|
Directory.CreateDirectory(pluginFolder);
|
||||||
|
|
||||||
|
string resourcesFolder = configuration.Get<string>("ResourcesFolder", DefaultResourcesFolder);
|
||||||
|
Directory.CreateDirectory(resourcesFolder);
|
||||||
|
|
||||||
|
string pluginDatabaseFile = configuration.Get<string>("PluginDatabase", DefaultPluginDatabaseFile);
|
||||||
|
Directory.CreateDirectory(new FileInfo(pluginDatabaseFile).DirectoryName);
|
||||||
|
|
||||||
|
IPluginManager pluginManager = new PluginManager(pluginRepository, logger, configuration);
|
||||||
|
return pluginManager;
|
||||||
|
});
|
||||||
|
|
||||||
|
builder.Services.AddSingleton<IPluginLoader>(sp =>
|
||||||
|
{
|
||||||
|
IPluginManager pluginManager = sp.GetRequiredService<IPluginManager>();
|
||||||
|
ILogger logger = sp.GetRequiredService<ILogger>();
|
||||||
|
IConfiguration configuration = sp.GetRequiredService<IConfiguration>();
|
||||||
|
return new PluginLoader(pluginManager, logger, configuration);
|
||||||
|
});
|
||||||
|
|
||||||
|
builder.Services.AddSingleton<IDiscordBotApplication>(sp =>
|
||||||
|
{
|
||||||
|
ILogger logger = sp.GetRequiredService<ILogger>();
|
||||||
|
IConfiguration configuration = sp.GetRequiredService<IConfiguration>();
|
||||||
|
IPluginLoader pluginLoader = sp.GetRequiredService<IPluginLoader>();
|
||||||
|
return new DiscordBotApplication(logger, configuration, pluginLoader);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -37,6 +37,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebUI", "WebUI\WebUI.csproj
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DiscordBotCore.Database.Sqlite", "DiscordBotCore.Database.Sqlite\DiscordBotCore.Database.Sqlite.csproj", "{6D43E9A7-A295-41AC-8B2A-9A877FABB5DE}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DiscordBotCore.Database.Sqlite", "DiscordBotCore.Database.Sqlite\DiscordBotCore.Database.Sqlite.csproj", "{6D43E9A7-A295-41AC-8B2A-9A877FABB5DE}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DiscordBotCore.WebApplication", "DiscordBotCore.WebApplication\DiscordBotCore.WebApplication.csproj", "{A65A1D7A-99E9-463F-A205-F96CA54D5C51}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
@@ -99,6 +101,10 @@ Global
|
|||||||
{6D43E9A7-A295-41AC-8B2A-9A877FABB5DE}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{6D43E9A7-A295-41AC-8B2A-9A877FABB5DE}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{6D43E9A7-A295-41AC-8B2A-9A877FABB5DE}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{6D43E9A7-A295-41AC-8B2A-9A877FABB5DE}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{6D43E9A7-A295-41AC-8B2A-9A877FABB5DE}.Release|Any CPU.Build.0 = Release|Any CPU
|
{6D43E9A7-A295-41AC-8B2A-9A877FABB5DE}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{A65A1D7A-99E9-463F-A205-F96CA54D5C51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{A65A1D7A-99E9-463F-A205-F96CA54D5C51}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{A65A1D7A-99E9-463F-A205-F96CA54D5C51}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{A65A1D7A-99E9-463F-A205-F96CA54D5C51}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ using DiscordBotCore.Logging;
|
|||||||
using DiscordBotCore.PluginManagement;
|
using DiscordBotCore.PluginManagement;
|
||||||
using DiscordBotCore.PluginManagement.Helpers;
|
using DiscordBotCore.PluginManagement.Helpers;
|
||||||
using DiscordBotCore.PluginManagement.Loading;
|
using DiscordBotCore.PluginManagement.Loading;
|
||||||
|
using DiscordBotCore.WebApplication;
|
||||||
using IConfiguration = DiscordBotCore.Configuration.IConfiguration;
|
using IConfiguration = DiscordBotCore.Configuration.IConfiguration;
|
||||||
using ILogger = DiscordBotCore.Logging.ILogger;
|
using ILogger = DiscordBotCore.Logging.ILogger;
|
||||||
|
|
||||||
@@ -71,99 +72,9 @@ static Assembly? LoadFromSameFolder(object? sender, ResolveEventArgs args, strin
|
|||||||
|
|
||||||
var builder = WebApplication.CreateBuilder(args);
|
var builder = WebApplication.CreateBuilder(args);
|
||||||
|
|
||||||
string defaultLogFormat = "{ThrowTime} {SenderName} {Message}";
|
|
||||||
string defaultLogFolder = "./Data/Logs";
|
|
||||||
string defaultResourcesFolder = "./Data/Resources";
|
|
||||||
string defaultConfigFile = "./Data/Resources/config.json";
|
|
||||||
string defaultPluginFolder = "./Data/Plugins";
|
|
||||||
string defaultPluginDatabaseFile = "./Data/Resources/plugins.json";
|
|
||||||
|
|
||||||
// Add services to the container.
|
// Add services to the container.
|
||||||
builder.Services.AddControllersWithViews();
|
builder.Services.AddControllersWithViews();
|
||||||
builder.Services.AddSingleton<ILogger>(sp =>
|
builder.AddDiscordBotComponents();
|
||||||
{
|
|
||||||
string logFormat = builder.Configuration["Logger:LogFormat"] ?? defaultLogFormat;
|
|
||||||
string logFolder = builder.Configuration["Logger:LogFolder"] ?? defaultLogFolder;
|
|
||||||
|
|
||||||
Directory.CreateDirectory(logFolder);
|
|
||||||
|
|
||||||
ILogger logger = new Logger(logFolder, logFormat);
|
|
||||||
logger.SetOutFunction((s, type) =>
|
|
||||||
{
|
|
||||||
Console.WriteLine($"[{type}] {s}");
|
|
||||||
});
|
|
||||||
|
|
||||||
return logger;
|
|
||||||
});
|
|
||||||
|
|
||||||
builder.Services.AddSingleton<IConfiguration>(sp =>
|
|
||||||
{
|
|
||||||
ILogger logger = sp.GetRequiredService<ILogger>();
|
|
||||||
string configFile = builder.Configuration["ConfigFile"] ?? defaultConfigFile;
|
|
||||||
Directory.CreateDirectory(new FileInfo(configFile).DirectoryName);
|
|
||||||
IConfiguration configuration = Configuration.CreateFromFile(logger, configFile, true);
|
|
||||||
return configuration;
|
|
||||||
});
|
|
||||||
|
|
||||||
builder.Services.AddSingleton<IPluginRepositoryConfiguration>(sp =>
|
|
||||||
{
|
|
||||||
IConfiguration configuration = sp.GetRequiredService<IConfiguration>();
|
|
||||||
Dictionary<string, string>? remotePluginConnectionConfigurationDetails =
|
|
||||||
configuration.Get<Dictionary<string, string>>("RemotePluginConnectionConfigurationDetails");
|
|
||||||
|
|
||||||
if (remotePluginConnectionConfigurationDetails is null)
|
|
||||||
{
|
|
||||||
return PluginRepositoryConfiguration.Default;
|
|
||||||
}
|
|
||||||
|
|
||||||
return new PluginRepositoryConfiguration(
|
|
||||||
remotePluginConnectionConfigurationDetails["Baseurl"], remotePluginConnectionConfigurationDetails["PluginsEndpoint"],
|
|
||||||
remotePluginConnectionConfigurationDetails["DependenciesEndpoint"]
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
builder.Services.AddSingleton<IPluginRepository>(sp =>
|
|
||||||
{
|
|
||||||
IPluginRepositoryConfiguration pluginRepositoryConfiguration = sp.GetRequiredService<IPluginRepositoryConfiguration>();
|
|
||||||
ILogger logger = sp.GetRequiredService<ILogger>();
|
|
||||||
IPluginRepository pluginRepository = new PluginRepository(pluginRepositoryConfiguration, logger);
|
|
||||||
return pluginRepository;
|
|
||||||
});
|
|
||||||
|
|
||||||
builder.Services.AddSingleton<IPluginManager>(sp =>
|
|
||||||
{
|
|
||||||
IPluginRepository pluginRepository = sp.GetRequiredService<IPluginRepository>();
|
|
||||||
ILogger logger = sp.GetRequiredService<ILogger>();
|
|
||||||
IConfiguration configuration = sp.GetRequiredService<IConfiguration>();
|
|
||||||
|
|
||||||
string pluginFolder = configuration.Get<string>("PluginFolder", defaultPluginFolder);
|
|
||||||
Directory.CreateDirectory(pluginFolder);
|
|
||||||
|
|
||||||
string resourcesFolder = configuration.Get<string>("ResourcesFolder", defaultResourcesFolder);
|
|
||||||
Directory.CreateDirectory(resourcesFolder);
|
|
||||||
|
|
||||||
string pluginDatabaseFile = configuration.Get<string>("PluginDatabase", defaultPluginDatabaseFile);
|
|
||||||
Directory.CreateDirectory(new FileInfo(pluginDatabaseFile).DirectoryName);
|
|
||||||
|
|
||||||
IPluginManager pluginManager = new PluginManager(pluginRepository, logger, configuration);
|
|
||||||
return pluginManager;
|
|
||||||
});
|
|
||||||
|
|
||||||
builder.Services.AddSingleton<IPluginLoader>(sp =>
|
|
||||||
{
|
|
||||||
IPluginManager pluginManager = sp.GetRequiredService<IPluginManager>();
|
|
||||||
ILogger logger = sp.GetRequiredService<ILogger>();
|
|
||||||
IConfiguration configuration = sp.GetRequiredService<IConfiguration>();
|
|
||||||
return new PluginLoader(pluginManager, logger, configuration);
|
|
||||||
});
|
|
||||||
|
|
||||||
builder.Services.AddSingleton<IDiscordBotApplication>(sp =>
|
|
||||||
{
|
|
||||||
ILogger logger = sp.GetRequiredService<ILogger>();
|
|
||||||
IConfiguration configuration = sp.GetRequiredService<IConfiguration>();
|
|
||||||
IPluginLoader pluginLoader = sp.GetRequiredService<IPluginLoader>();
|
|
||||||
return new DiscordBotApplication(logger, configuration, pluginLoader);
|
|
||||||
});
|
|
||||||
|
|
||||||
var app = builder.Build();
|
var app = builder.Build();
|
||||||
|
|
||||||
|
|||||||
@@ -14,10 +14,8 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\DiscordBotCore.Configuration\DiscordBotCore.Configuration.csproj" />
|
<ProjectReference Include="..\DiscordBotCore.Database.Sqlite\DiscordBotCore.Database.Sqlite.csproj" />
|
||||||
<ProjectReference Include="..\DiscordBotCore.Logging\DiscordBotCore.Logging.csproj" />
|
<ProjectReference Include="..\DiscordBotCore.WebApplication\DiscordBotCore.WebApplication.csproj" />
|
||||||
<ProjectReference Include="..\DiscordBotCore.PluginManagement\DiscordBotCore.PluginManagement.csproj" />
|
|
||||||
<ProjectReference Include="..\DiscordBotCore\DiscordBotCore.csproj" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
Reference in New Issue
Block a user