using Discord; using Discord.WebSocket; using Discord.Interactions; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using TentacleBot.Services; using TentacleBot.Services.Memory; using TentacleBot.Services.Tools; using TentacleBot.Commands; var configuration = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json") .Build(); var discordConfig = new DiscordSocketConfig { GatewayIntents = GatewayIntents.All, LogLevel = LogSeverity.Info, UseInteractionSnowflakeDate = false, }; var client = new DiscordSocketClient(discordConfig); var services = new ServiceCollection() .AddLogging(builder => builder.AddConsole()) .AddSingleton(configuration) .AddSingleton(client) .AddSingleton(new InteractionService(client, new InteractionServiceConfig { LogLevel = LogSeverity.Info, UseCompiledLambda = true, })) .AddSingleton() .AddSingleton() .AddHttpClient() .AddSingleton(); // Initialize memory database var dbPath = configuration["Memory:DatabasePath"] ?? "data/tentaclebot.db"; var dbInit = new DatabaseInitializer(dbPath); dbInit.Initialize(); services.AddSingleton(dbInit); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); var serviceProvider = services.BuildServiceProvider(); var botService = serviceProvider.GetRequiredService(); var interactionService = serviceProvider.GetRequiredService(); // Register memory tools var toolRegistry = serviceProvider.GetRequiredService(); var memoryTools = serviceProvider.GetRequiredService(); memoryTools.RegisterAll(toolRegistry); // Register command modules await interactionService.AddModulesAsync( typeof(Program).Assembly, serviceProvider); // Initialize the bot await botService.InitializeAsync(); // Keep the bot running await Task.Delay(Timeout.Infinite);