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 { private 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 dependency injector */ Dependency.Initialize(configurationHandler); /* * Set AppSettingsHandler on ConfigurationRepository */ ConfigurationRepository.AppSettingsHandler = configurationHandler; /* * Initialize the _logger for logging purposes */ _logger = Dependency.GetInstance(); /* * Attempt to load our custom assemblies */ RegisterAssemblyController(); /* * Initialize the Discord Client and Login */ _logger.Info($"Starting Up {ConfigurationRepository.GetValue("Bot:Name")} v{ConfigurationRepository.GetValue("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(); } } }