Spielepapagei 2 роки тому
батько
коміт
f4efb0f9a7

+ 23 - 17
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<bool>("Enable"))
+
+        if (!discordConfig.GetValue<bool>("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<string>("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");
     }
-    
+
 }

+ 39 - 0
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<LoadingMessage> 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<LoadingMessageRepository>();
+        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);
+        }
+    }
+
+}

+ 0 - 1
Moonlight/Moonlight.csproj

@@ -66,7 +66,6 @@
     <Folder Include="App\Http\Middleware" />
     <Folder Include="App\Models\Daemon\Requests" />
     <Folder Include="App\Models\Google\Resources" />
-    <Folder Include="App\Services\DiscordBot\Commands" />
     <Folder Include="resources\lang" />
   </ItemGroup>
 

+ 4 - 3
Moonlight/Program.cs

@@ -60,7 +60,8 @@ namespace Moonlight
             builder.Services.AddScoped<NotificationRepository>();
             builder.Services.AddScoped<DdosAttackRepository>();
             builder.Services.AddScoped<SubscriptionRepository>();
-
+            builder.Services.AddScoped<LoadingMessageRepository>();
+            
             builder.Services.AddScoped<AuditLogEntryRepository>();
             builder.Services.AddScoped<ErrorLogEntryRepository>();
             builder.Services.AddScoped<SecurityLogEntryRepository>();
@@ -125,7 +126,6 @@ namespace Moonlight
             builder.Services.AddSingleton<DiscordBotService>();
 
             // 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<SupportServerService>();
             
-            // cleanup service
+            // AutoStart services
             _ = app.Services.GetRequiredService<CleanupService>();
+            _ = app.Services.GetRequiredService<DiscordBotService>();
             
             // Discord bot service
             //var discordBotService = app.Services.GetRequiredService<DiscordBotService>();

+ 17 - 3
Moonlight/Shared/Views/Admin/Sys/DiscordBot.razor

@@ -6,20 +6,34 @@
 
 <OnlyAdmin>
     <AdminSystemNavigation Index="6"/>
-    
+
     <div class="mt-3 card card-body">
         <WButton Text="Register commands"
                  WorkingText="Working"
                  CssClasses="btn-primary"
                  OnClick="RegisterCommands">
         </WButton>
+
+        <WButton Text="Void commands"
+                 WorkingText="Working"
+                 CssClasses="mt-3 btn-danger"
+                 OnClick="VoidCommands">
+        </WButton>
     </div>
 </OnlyAdmin>
 
-@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;
     }
 }