예제 #1
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);
        }