chaosbot/ChaosBot/Program.cs

86 lines
2.6 KiB
C#

using NLog;
using System;
using System.Runtime.CompilerServices;
using ChaosBot.Discord;
using System.Threading.Tasks;
using ChaosBot.Attribute;
using ChaosBot.Database.Repository;
using Microsoft.Extensions.Configuration;
[assembly: InternalsVisibleTo("ChaosBot.UnitTests")]
namespace ChaosBot
{
internal class Program
{
public static ILogger Logger;
private static string _appsettingsPath;
private static void Main(string[] args)
{
_appsettingsPath = args.Length > 0 ? args[0] : "./appsettings.json";
new Program().MainFunction().GetAwaiter().GetResult();
}
private async Task MainFunction()
{
try
{
/*
* Load configuration from AppSettings.Json and save as Cfg
*/
IConfiguration configurationHandler = LoadConfiguration(_appsettingsPath);
/*
* Initialize the _logger for logging purposes
*/
Logger = Logging.GenLog(configurationHandler);
/*
* Set AppSettingsHandler on ConfigurationRepository
*/
ConfigurationRepository.AppSettingsHandler = configurationHandler;
/*
* Attempt to load our custom assemblies
*/
RegisterAssemblyController();
/*
* Initialize the Discord Client and Login
*/
Logger.Info($"Starting Up {ConfigurationRepository.GetValue<string>("Bot:Name")} v{ConfigurationRepository.GetValue<string>("Bot:Version")}");
var discordBot = LoadDiscord();
LoadWebServer();
await discordBot;
}
catch (Exception ex)
{
Logger.Error(ex, $"Program.MainFunction: Exception [{ex}] thrown, <[{ex.Message}]>.");
}
}
public static IConfiguration LoadConfiguration(string appsettingsPath)
{
return new ConfigurationBuilder()
.SetBasePath(System.IO.Directory.GetCurrentDirectory())
.AddJsonFile(appsettingsPath, optional: false, reloadOnChange: true).Build();
}
public static void RegisterAssemblyController()
{
AssemblyController.RegisterAll();
}
public static void LoadWebServer()
{
WebServer.WebServer.Start(new string[]{});
}
public static Task LoadDiscord()
{
return DiscordConnect.StartUp();
}
}
}