protected override async Task ExecuteAsync(CancellationToken stoppingToken) { // Reset event var mre = new ManualResetEvent(false); await _discordBot.Connect(_configSettings.DiscordBotToken); _discordSocketClient.Ready += async() => { _logger.LogInformation("Discord client is ready"); await _commandHandler.InstallCommandsAsync(); // Initialize modules _streamAnnouncer.Init(); }; _discordSocketClient.GuildAvailable += guild => { _logger.LogInformation("Discord guild is ready"); mre.Set(); return(Task.CompletedTask); }; // Wait for all connectable services to be ready mre.WaitOne(); await Task.Delay(Timeout.Infinite, stoppingToken); }
public IActionResult StartBot() { if (_bot.IsRunning()) { return(BadRequest("Bot is already running.")); } _bot.Connect(); return(RedirectToAction("Index", "Home")); }
public Task ToggleBotConnection() { if (_bot.IsRunning()) { _bot.Stop(); } else { _bot.Connect(); } return(Task.CompletedTask); }
protected override async Task ExecuteAsync(CancellationToken stoppingToken) { // Reset event var mre = new ManualResetEvent(false); await _discordBot.Connect(_settings.DiscordBotToken); _discordSocketClient.Ready += () => { _logger.LogInformation("Discord client is ready"); return(Task.CompletedTask); }; _discordSocketClient.GuildAvailable += guild => { _logger.LogInformation("Discord guild is ready"); mre.Set(); return(Task.CompletedTask); }; // Wait for all connectable services to be ready mre.WaitOne(); // Announce vehicles Task.Run(async() => { while (true) { using var scope = _serviceProvider.CreateScope(); var context = scope.ServiceProvider.GetRequiredService <VehicleContext>(); var vehicles = await context.Vehicles.ToListAsync(stoppingToken); await _discordBot.AnnounceCars(_settings.DiscordGuildId, _settings.DiscordChannelId, vehicles); await Task.Delay(TimeSpan.FromMinutes(15), stoppingToken); } }); await Task.Delay(Timeout.Infinite, stoppingToken); }