public PingModule(DiscordSocketClient discordClient, DiscordRestClient restClient, IHttpClientFactory httpClientFactory) { _discordClient = discordClient; _restClient = restClient; _httpClient = httpClientFactory.CreateClient(); //Some APIs require this _httpClient.DefaultRequestHeaders.Add("User-Agent", "MODiX"); _latencyProviders = new Dictionary <string, Func <Task <double> > > { ["Discord Gateway"] = () => Task.FromResult((double)_discordClient.Latency), ["Google"] = async() => (await new Ping().SendPingAsync("8.8.8.8", PingTimeout)).RoundtripTime, ["Cloudflare"] = async() => (await new Ping().SendPingAsync("1.1.1.1", PingTimeout)).RoundtripTime }; _availabilityProviders = new Dictionary <string, Func <Task <bool> > > { ["Github REST"] = () => EndpointAvailable("https://api.github.com"), ["Discord REST"] = () => EndpointAvailable(() => _restClient.GetApplicationInfoAsync()) }; }
async Task IService.InitializeAsync() { var config = Basic; DiscordToken = config.DiscordToken; DefaultPrefix = config.DefaultPrefix; PostgresConnectionString = config.PostgresConnectionString; OwnerIds = config.OwnerIds; _successColor = config._successColor; _warnColor = config._warnColor; _errorColor = config._errorColor; if (OwnerIds.Count == 0) { await _logging.LogDebugAsync("No owner IDs found. Fetching the bot owner's ID.", "Configuration"); var app = await _restClient.GetApplicationInfoAsync(); await _logging.LogDebugAsync($"Got owner {app.Owner}.", "Configuration"); OwnerIds = new List <ulong> { app.Owner.Id }; } using (var ctx = new AdminDatabaseContext()) { await _logging.LogDebugAsync("Attempting database connection.", "Configuration"); if (!await ctx.Database.CanConnectAsync()) { await _logging.LogCriticalAsync( "Could not connect to the PostgreSQL database using the following connection string:\n" + PostgresConnectionString, "Configuration"); Console.ReadKey(); Environment.Exit(-1); } else { await _logging.LogDebugAsync("Connection successful.", "Configuration"); } await _logging.LogDebugAsync("Checking for pending database migrations.", "Configuration"); var migrations = (await ctx.Database.GetPendingMigrationsAsync()).ToList(); if (migrations.Count > 0) { await _logging.LogDebugAsync($"{migrations.Count} new migration(s) found.\n" + "Attempting to apply migrations.", "Configuration"); try { await ctx.Database.MigrateAsync(); } catch (Exception ex) { await _logging.LogCriticalAsync($"An error occurred migrating the PostgreSQL database:\n{ex}", "Configuration"); Console.ReadKey(); Environment.Exit(-1); } } else { await _logging.LogDebugAsync("No migrations found.", "Configuration"); } } await _logging.LogInfoAsync("Initialized.", "Configuration"); }