using Discord; using Discord.Interactions; using Discord.WebSocket; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using System; using System.Threading; using System.Threading.Tasks; namespace InteractionFramework { public class Program { private readonly IConfiguration _configuration; private readonly IServiceProvider _services; private readonly DiscordSocketConfig _socketConfig = new() { GatewayIntents = GatewayIntents.AllUnprivileged | GatewayIntents.GuildMembers, AlwaysDownloadUsers = true, }; public Program() { _configuration = new ConfigurationBuilder() .AddEnvironmentVariables(prefix: "DC_") .AddJsonFile("appsettings.json", optional: true) .Build(); _services = new ServiceCollection() .AddSingleton(_configuration) .AddSingleton(_socketConfig) .AddSingleton<DiscordSocketClient>() .AddSingleton(x => new InteractionService(x.GetRequiredService<DiscordSocketClient>())) .AddSingleton<InteractionHandler>() .BuildServiceProvider(); } static void Main(string[] args) => new Program().RunAsync() .GetAwaiter() .GetResult(); public async Task RunAsync() { var client = _services.GetRequiredService<DiscordSocketClient>(); client.Log += LogAsync; // Here we can initialize the service that will register and execute our commands await _services.GetRequiredService<InteractionHandler>() .InitializeAsync(); // Bot token can be provided from the Configuration object we set up earlier await client.LoginAsync(TokenType.Bot, _configuration["token"]); await client.StartAsync(); // Never quit the program until manually forced to. await Task.Delay(Timeout.Infinite); } private async Task LogAsync(LogMessage message) => Console.WriteLine(message.ToString()); public static bool IsDebug() { #if DEBUG return true; #else return false; #endif } } }