using Discord; using Discord.WebSocket; using Microsoft.Extensions.DependencyInjection; using System; using System.Threading.Tasks; using EventBot.Services; using Discord.Commands; using Discord.Addons.Interactive; using Microsoft.EntityFrameworkCore; namespace EventBot { class Program { static void Main(string[] args) => new Program().MainAsync().GetAwaiter().GetResult(); public async Task MainAsync() { using (var services = ConfigureServices()) { var client = services.GetRequiredService(); client.Log += LogAsync; services.GetRequiredService().Log += LogAsync; services.GetRequiredService().Log += LogAsync; await services.GetRequiredService().InitializeAsync(); // Tokens should be considered secret data and never hard-coded. // We can read from the environment variable to avoid hardcoding. await client.LoginAsync(TokenType.Bot, Environment.GetEnvironmentVariable("token")); await client.StartAsync(); // Here we initialize the logic required to register our commands. await services.GetRequiredService().InitializeAsync(); await Task.Delay(-1); } } private Task LogAsync(LogMessage log) { Console.WriteLine(log.ToString()); return Task.CompletedTask; } private ServiceProvider ConfigureServices() { return new ServiceCollection() .AddSingleton(s => new DiscordSocketClient(getDiscordSocketConfig())) .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton(sp => { if (Environment.GetEnvironmentVariable("dbconnection") != null) return new MySqlDatabaseService(sp); return new SqliteDatabaseService(sp); }) .AddSingleton() //.AddSingleton() //.AddSingleton() .BuildServiceProvider(); } private DiscordSocketConfig getDiscordSocketConfig() { var config = new DiscordSocketConfig() { MessageCacheSize = 1500 }; #if DEBUG config.LogLevel = LogSeverity.Debug; #endif if(Environment.GetEnvironmentVariable("DEBUG") != null) config.LogLevel = LogSeverity.Debug; return config; } } }