Added ActivityStatus

This commit is contained in:
Spielepapagei
2023-04-05 23:26:09 +02:00
parent 0e6910f46b
commit f4efb0f9a7
5 changed files with 83 additions and 24 deletions

View File

@@ -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");
}
}

View File

@@ -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);
}
}
}