Added ActivityStatus
This commit is contained in:
parent
0e6910f46b
commit
f4efb0f9a7
5 changed files with 83 additions and 24 deletions
|
@ -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");
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -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>
|
||||
|
||||
|
|
|
@ -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>();
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue