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
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DiscordBotCore.Database.Sqlite", "DiscordBotCore.Database.Sqlite\DiscordBotCore.Database.Sqlite.csproj", "{6D43E9A7-A295-41AC-8B2A-9A877FABB5DE}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DiscordBotCore.WebApplication", "DiscordBotCore.WebApplication\DiscordBotCore.WebApplication.csproj", "{A65A1D7A-99E9-463F-A205-F96CA54D5C51}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
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}.Release|Any CPU.ActiveCfg = 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
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
||||
@@ -5,6 +5,7 @@ using DiscordBotCore.Logging;
|
||||
using DiscordBotCore.PluginManagement;
|
||||
using DiscordBotCore.PluginManagement.Helpers;
|
||||
using DiscordBotCore.PluginManagement.Loading;
|
||||
using DiscordBotCore.WebApplication;
|
||||
using IConfiguration = DiscordBotCore.Configuration.IConfiguration;
|
||||
using ILogger = DiscordBotCore.Logging.ILogger;
|
||||
|
||||
@@ -71,99 +72,9 @@ static Assembly? LoadFromSameFolder(object? sender, ResolveEventArgs args, strin
|
||||
|
||||
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.
|
||||
builder.Services.AddControllersWithViews();
|
||||
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.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);
|
||||
});
|
||||
builder.AddDiscordBotComponents();
|
||||
|
||||
var app = builder.Build();
|
||||
|
||||
|
||||
@@ -14,10 +14,8 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\DiscordBotCore.Configuration\DiscordBotCore.Configuration.csproj" />
|
||||
<ProjectReference Include="..\DiscordBotCore.Logging\DiscordBotCore.Logging.csproj" />
|
||||
<ProjectReference Include="..\DiscordBotCore.PluginManagement\DiscordBotCore.PluginManagement.csproj" />
|
||||
<ProjectReference Include="..\DiscordBotCore\DiscordBotCore.csproj" />
|
||||
<ProjectReference Include="..\DiscordBotCore.Database.Sqlite\DiscordBotCore.Database.Sqlite.csproj" />
|
||||
<ProjectReference Include="..\DiscordBotCore.WebApplication\DiscordBotCore.WebApplication.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
Reference in New Issue
Block a user