Пример #1
0
        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);
        }
Пример #2
0
        public IActionResult StartBot()
        {
            if (_bot.IsRunning())
            {
                return(BadRequest("Bot is already running."));
            }

            _bot.Connect();
            return(RedirectToAction("Index", "Home"));
        }
Пример #3
0
        public Task ToggleBotConnection()
        {
            if (_bot.IsRunning())
            {
                _bot.Stop();
            }
            else
            {
                _bot.Connect();
            }

            return(Task.CompletedTask);
        }
Пример #4
0
        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);
        }