diff --git a/Moonlight/App/Services/DiscordBot/DiscordBotService.cs b/Moonlight/App/Services/DiscordBot/DiscordBotService.cs index 91ad5561..dbb99687 100644 --- a/Moonlight/App/Services/DiscordBot/DiscordBotService.cs +++ b/Moonlight/App/Services/DiscordBot/DiscordBotService.cs @@ -2,26 +2,27 @@ using Discord; using Discord.WebSocket; using Logging.Net; +using Moonlight.App.Repositories; using Moonlight.App.Services.DiscordBot.Commands; +using Moonlight.App.Services.DiscordBot.Modules; namespace Moonlight.App.Services.DiscordBot; public class DiscordBotService { public static bool MaintenanceMode = false; - + private readonly IServiceScopeFactory ServiceScopeFactory; private readonly ConfigService ConfigService; - + private IServiceScope ServiceScope; private readonly DiscordSocketClient Client; - // Add here references so e.g. - // public ExampleModule ExampleModule { get; private set; } - public RemoveCommandsModuels RemoveCommandsModuels { get; private set; } + // References + public ActivityStatusModule ActivityStatusModule { get; private set; } - public DiscordBotService( +public DiscordBotService( IServiceScopeFactory serviceScopeFactory, ConfigService configService) { @@ -39,15 +40,19 @@ public class DiscordBotService var discordConfig = ConfigService .GetSection("Moonlight") .GetSection("DiscordBot"); - - if(!discordConfig.GetValue("Enable")) + + if (!discordConfig.GetValue("Enable")) return; - + Client.Log += Log; Client.Ready += OnReady; //Commands - RemoveCommandsModuels = new(Client, ConfigService, ServiceScope); + + //Module + ActivityStatusModule = new(Client, ConfigService, ServiceScope); + + await ActivityStatusModule.UpdateActivityStatusList(); await Client.LoginAsync(TokenType.Bot, discordConfig.GetValue("Token")); await Client.StartAsync(); @@ -56,12 +61,13 @@ public class DiscordBotService } private async Task OnReady() { - //TODO: MASU Ladenachrichten jede Minute ändern. - await Client.SetGameAsync("Masu ist zu lazy um das zu Implementieren.", null, ActivityType.Listening); + //await Client.SetGameAsync(name: "https://endelon-hosting.de", type: ActivityType.Watching); await Client.SetStatusAsync(UserStatus.Idle); - + Logger.Info($"Invite link: https://discord.com/api/oauth2/authorize?client_id={Client.CurrentUser.Id}&permissions=1099511696391&scope=bot%20applications.commands"); Logger.Info($"Login as {Client.CurrentUser.Username}#{Client.CurrentUser.DiscriminatorValue}"); + + Task.Run(ActivityStatusModule.ActivityStatusScheduler); } private Task Log(LogMessage message) @@ -69,12 +75,12 @@ public class DiscordBotService Logger.Debug(message.Message); return Task.CompletedTask; } - + public async Task CreateCommands() { Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); - + var type = this.GetType(); var properties = type.GetProperties(); Logger.Debug("Start Initializing Commands"); @@ -96,9 +102,9 @@ public class DiscordBotService } } } - + stopwatch.Stop(); Logger.Info($"Registered all commands. Done in {stopwatch.ElapsedMilliseconds}ms"); } - + } \ No newline at end of file diff --git a/Moonlight/App/Services/DiscordBot/Modules/ActivityStatusModule.cs b/Moonlight/App/Services/DiscordBot/Modules/ActivityStatusModule.cs new file mode 100644 index 00000000..970fa474 --- /dev/null +++ b/Moonlight/App/Services/DiscordBot/Modules/ActivityStatusModule.cs @@ -0,0 +1,39 @@ +using Discord; +using Discord.WebSocket; +using Moonlight.App.Database.Entities; +using Moonlight.App.Repositories; + +namespace Moonlight.App.Services.DiscordBot.Modules; + +public class ActivityStatusModule : BaseModule +{ + + private List LoadingMessages; + + private readonly PeriodicTimer Timer = new(TimeSpan.FromMinutes(1)); + + public ActivityStatusModule(DiscordSocketClient client, ConfigService configService, IServiceScope scope) : base(client, configService, scope) + { } + public override Task RegisterCommands() + { return Task.CompletedTask; } + + public Task UpdateActivityStatusList() + { + var loadingMessageRepo = Scope.ServiceProvider.GetRequiredService(); + LoadingMessages = loadingMessageRepo.Get().ToList(); + + return Task.CompletedTask; + } + + public async void ActivityStatusScheduler() + { + while (await Timer.WaitForNextTickAsync()) + { + Random rand = new Random(); + LoadingMessage random = LoadingMessages[rand.Next(LoadingMessages.Count)]; + + await Client.SetGameAsync(random.Message, "https://www.endelon.team", ActivityType.Streaming); + } + } + +} \ No newline at end of file diff --git a/Moonlight/Moonlight.csproj b/Moonlight/Moonlight.csproj index 27c1bed0..f4e59156 100644 --- a/Moonlight/Moonlight.csproj +++ b/Moonlight/Moonlight.csproj @@ -66,7 +66,6 @@ - diff --git a/Moonlight/Program.cs b/Moonlight/Program.cs index 5b4efebf..ccd680cd 100644 --- a/Moonlight/Program.cs +++ b/Moonlight/Program.cs @@ -60,7 +60,8 @@ namespace Moonlight builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); - + builder.Services.AddScoped(); + builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); @@ -125,7 +126,6 @@ namespace Moonlight builder.Services.AddSingleton(); // Third party services - builder.Services.AddBlazorTable(); builder.Services.AddSweetAlert2(options => { options.Theme = SweetAlertTheme.Dark; }); builder.Services.AddBlazorContextMenu(); @@ -153,8 +153,9 @@ namespace Moonlight // Support service var supportServerService = app.Services.GetRequiredService(); - // cleanup service + // AutoStart services _ = app.Services.GetRequiredService(); + _ = app.Services.GetRequiredService(); // Discord bot service //var discordBotService = app.Services.GetRequiredService(); diff --git a/Moonlight/Shared/Views/Admin/Sys/DiscordBot.razor b/Moonlight/Shared/Views/Admin/Sys/DiscordBot.razor index 22f7c9ef..282b78d2 100644 --- a/Moonlight/Shared/Views/Admin/Sys/DiscordBot.razor +++ b/Moonlight/Shared/Views/Admin/Sys/DiscordBot.razor @@ -6,20 +6,34 @@ - +
+ + +
-@code +@code { + //ToDo: Ole muss ins Bett gehen + //ToDo: Bot Info Card with Name, Bot Avatar, (RichPresence) Game Status, Activity Status + private async Task RegisterCommands() { - + await DiscordBotService.CreateCommands(); + } + + private Task VoidCommands() + { + return Task.CompletedTask; } } \ No newline at end of file