using NLog; using System; using System.Reflection; using System.Runtime.CompilerServices; using ChaosBot.Discord; using System.Threading.Tasks; using ChaosBot.ConfigHelpers; using Microsoft.Extensions.Configuration; [assembly: InternalsVisibleTo("ChaosBot.UnitTests")] namespace ChaosBot { internal static class Program { private static ILogger _logger; public static IConfiguration AppSettingsHandler; public const string AppSettingsPath = "./appsettings.json"; private static void Main(string[] args) { try { /* * Load configuration from AppSettings.Json and save as Cfg */ AppSettingsHandler = LoadConfiguration(AppSettingsPath); /* * Initialize the _logger for logging purposes */ _logger = Logging.GenLog(AppSettingsHandler); _logger.Trace("Logger initialized"); } catch (Exception ex) { Console.Write($"{MethodBase.GetCurrentMethod()?.ReflectedType?.FullName}: Exception [{ex}] thrown, <[{ex.Message}]>.\n{ex.StackTrace}"); Environment.Exit(1); } /* * Initialize the Discord Client and Login */ Configuration config = new Configuration(); _logger.Info($"Starting Up {config.GetByKey("Bot:Name").GetValue()} v{config.GetByKey("Bot:Version").GetValue()}"); try { Task discordBot = LoadDiscord(); LoadWebServer(args); discordBot.GetAwaiter().GetResult(); } catch (Exception ex) { LoggingFacade.Exception(ex); Environment.Exit(1); } } public static ILogger GetLogger() { return _logger; } private static IConfiguration LoadConfiguration(string appSettingsPath) { return new ConfigurationBuilder() .SetBasePath(System.IO.Directory.GetCurrentDirectory()) .AddJsonFile(appSettingsPath, optional: false, reloadOnChange: true).Build(); } private static void LoadWebServer(string[] args) { WebServer.WebServer.Start(args); } private static Task LoadDiscord() { return DiscordConnect.StartUp(); } } }