diff --git a/Bot/Program.cs b/Bot/Program.cs index 9204bf5..c0af17c 100644 --- a/Bot/Program.cs +++ b/Bot/Program.cs @@ -1,16 +1,6 @@ -using System.Reflection; -using Discord; -using Discord.Interactions; -using Discord.WebSocket; -using Lunaris2.Handler.ChatCommand; -using Lavalink4NET.Extensions; -using Lavalink4NET.Integrations.SponsorBlock.Extensions; -using Lunaris2.Handler.MusicPlayer; -using Lunaris2.Notification; -using Lunaris2.Service; -using Lunaris2.SlashCommand; +using Lavalink4NET.Integrations.SponsorBlock.Extensions; +using Lunaris2.Registration; using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; namespace Lunaris2; @@ -33,71 +23,11 @@ public class Program Host.CreateDefaultBuilder(args) .ConfigureServices((_, services) => { - var config = new DiscordSocketConfig - { - GatewayIntents = GatewayIntents.All - }; - - var client = new DiscordSocketClient(config); var configuration = new ConfigurationBuilder() .SetBasePath(AppContext.BaseDirectory) .AddJsonFile("appsettings.json") .Build(); - services - .AddMediatR(mediatRServiceConfiguration => mediatRServiceConfiguration.RegisterServicesFromAssembly(Assembly.GetExecutingAssembly())) - .AddLavalink() - .ConfigureLavalink(options => - { - options.BaseAddress = new Uri( - $"http://{configuration["LavaLinkHostname"]}:{configuration["LavaLinkPort"]}" - ); - options.WebSocketUri = new Uri($"ws://{configuration["LavaLinkHostname"]}:{configuration["LavaLinkPort"]}/v4/websocket"); - options.Passphrase = configuration["LavaLinkPassword"] ?? "youshallnotpass"; - options.Label = "Node"; - }) - .AddSingleton() - .AddSingleton() - .AddSingleton(client) - .AddSingleton() - .AddSingleton() - .AddSingleton(service => new InteractionService(service.GetRequiredService())) - .Configure(configuration.GetSection("LLM")); - - client.Ready += () => Client_Ready(client); - client.Log += Log; - - client - .LoginAsync(TokenType.Bot, configuration["Token"]) - .GetAwaiter() - .GetResult(); - - client - .StartAsync() - .GetAwaiter() - .GetResult(); - - var listener = services - .BuildServiceProvider() - .GetRequiredService(); - - listener - .StartAsync() - .GetAwaiter() - .GetResult(); + services.AddDiscordBot(configuration); }); - - private static Task Client_Ready(DiscordSocketClient client) - { - client.RegisterCommands(); - - new VoiceChannelMonitorService(client).StartMonitoring(); - return Task.CompletedTask; - } - - private static Task Log(LogMessage arg) - { - Console.WriteLine(arg); - return Task.CompletedTask; - } } \ No newline at end of file diff --git a/Bot/Registration/ChatRegistration.cs b/Bot/Registration/ChatRegistration.cs new file mode 100644 index 0000000..3954e54 --- /dev/null +++ b/Bot/Registration/ChatRegistration.cs @@ -0,0 +1,16 @@ +using Lunaris2.Handler.ChatCommand; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; + +namespace Lunaris2.Registration; + +public static class ChatRegistration +{ + public static IServiceCollection AddChat(this IServiceCollection services, IConfiguration configuration) + { + services.AddSingleton(); + services.Configure(configuration.GetSection("LLM")); + + return services; + } +} \ No newline at end of file diff --git a/Bot/Registration/DiscordBotRegistration.cs b/Bot/Registration/DiscordBotRegistration.cs new file mode 100644 index 0000000..c0f196f --- /dev/null +++ b/Bot/Registration/DiscordBotRegistration.cs @@ -0,0 +1,72 @@ +using System.Reflection; +using Discord; +using Discord.Interactions; +using Discord.WebSocket; +using Lunaris2.Notification; +using Lunaris2.Service; +using Lunaris2.SlashCommand; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; + +namespace Lunaris2.Registration +{ + public static class DiscordBotRegistration + { + public static IServiceCollection AddDiscordBot(this IServiceCollection services, IConfiguration configuration) + { + var config = new DiscordSocketConfig + { + GatewayIntents = GatewayIntents.All + }; + + var client = new DiscordSocketClient(config); + + services + .AddMediatR(mediatRServiceConfiguration => + mediatRServiceConfiguration.RegisterServicesFromAssembly(Assembly.GetExecutingAssembly())) + .AddMusicPlayer(configuration) + .AddSingleton(client) + .AddSingleton() + .AddSingleton(service => new InteractionService(service.GetRequiredService())) + .AddChat(configuration); + + client.Ready += () => Client_Ready(client); + client.Log += Log; + + client + .LoginAsync(TokenType.Bot, configuration["Token"]) + .GetAwaiter() + .GetResult(); + + client + .StartAsync() + .GetAwaiter() + .GetResult(); + + var listener = services + .BuildServiceProvider() + .GetRequiredService(); + + listener + .StartAsync() + .GetAwaiter() + .GetResult(); + + return services; + } + + private static Task Client_Ready(DiscordSocketClient client) + { + client.RegisterCommands(); + + new VoiceChannelMonitorService(client).StartMonitoring(); + return Task.CompletedTask; + } + + private static Task Log(LogMessage arg) + { + Console.WriteLine(arg); + return Task.CompletedTask; + } + } +} \ No newline at end of file diff --git a/Bot/Registration/MusicPlayerRegistration.cs b/Bot/Registration/MusicPlayerRegistration.cs new file mode 100644 index 0000000..ac0d2f1 --- /dev/null +++ b/Bot/Registration/MusicPlayerRegistration.cs @@ -0,0 +1,29 @@ +using Lavalink4NET.Extensions; +using Lunaris2.Handler.MusicPlayer; +using Lunaris2.Service; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; + +namespace Lunaris2.Registration; + +public static class MusicPlayerRegistration +{ + public static IServiceCollection AddMusicPlayer(this IServiceCollection services, IConfiguration configuration) + { + services + .AddLavalink() + .ConfigureLavalink(options => + { + options.BaseAddress = new Uri( + $"http://{configuration["LavaLinkHostname"]}:{configuration["LavaLinkPort"]}" + ); + options.WebSocketUri = new Uri($"ws://{configuration["LavaLinkHostname"]}:{configuration["LavaLinkPort"]}/v4/websocket"); + options.Passphrase = configuration["LavaLinkPassword"] ?? "youshallnotpass"; + options.Label = "Node"; + }) + .AddSingleton() + .AddSingleton(); + + return services; + } +} \ No newline at end of file