using AnsonBot.Bot; using AnsonBot.Core; using Discord; using Discord.Interactions; using Discord.WebSocket; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; var builder = Host.CreateApplicationBuilder(args); // config binding builder.Services.Configure(builder.Configuration.GetSection("Docker")); builder.Services.Configure(builder.Configuration.GetSection("Discord")); builder.Services.Configure(builder.Configuration.GetSection("Tracker")); // our services builder.Services.AddSingleton(); // persistence builder.Services.AddDbContextFactory(o => o.UseNpgsql(builder.Configuration.GetConnectionString("Postgres"))); // Registered as a singleton as well as a hosted service so the /players command // and the notifier resolve the same instance the polling loop runs on. builder.Services.AddSingleton(); builder.Services.AddHostedService(x => x.GetRequiredService()); // discord builder.Services.AddSingleton(new DiscordSocketConfig { GatewayIntents = GatewayIntents.Guilds, AlwaysDownloadUsers = false, LogLevel = LogSeverity.Info }); builder.Services.AddSingleton(); builder.Services.AddSingleton(x => new InteractionService( x.GetRequiredService())); // dev-only: tunnel to the home server's Docker socket. // Registered first so it starts before the bot and stops after it. if (builder.Environment.IsDevelopment()) { builder.Services.Configure(builder.Configuration.GetSection("SshTunnel")); builder.Services.AddHostedService(); } // the runner builder.Services.AddHostedService(); // subscribes to tracker events; after BotHostedService so the client exists builder.Services.AddHostedService(); var app = builder.Build(); await app.RunAsync(); //DiscordSocketConfig config = new() //{ // GatewayIntents = GatewayIntents.All | GatewayIntents.GuildMembers | GatewayIntents.GuildBans //}; //DiscordSocketClient _client = new(config); //DiscordService service = new(_client); //var token = "MTUyNjk1Njk4MTM5MzI5MzQxMg.G46bg4.RTqBp1gvtEirLUtbojdpktz9MCZF76Sm4ecqOo"; //await _client.LoginAsync(TokenType.Bot, token); //await _client.StartAsync(); //_client.Ready += service.ClientReady; //_client.SlashCommandExecuted += service.SlashHandler; //Console.WriteLine("Events registered!"); //await Task.Delay(-1);