54 lines
1.7 KiB
C#
54 lines
1.7 KiB
C#
using Microsoft.Extensions.Hosting;
|
|
using NLog;
|
|
using PepperBot.Application.Interfaces;
|
|
using PepperBot.Application.Services;
|
|
|
|
namespace PepperBot;
|
|
|
|
public class BotWorker : BackgroundService
|
|
{
|
|
private static readonly ILogger Logger = LogManager.GetCurrentClassLogger();
|
|
|
|
private readonly DealService _dealService;
|
|
private readonly IDealRepository _repository;
|
|
private readonly ISubscriptionRepository _subscriptionRepository;
|
|
private readonly ITelegramNotifier _telegramNotifier;
|
|
|
|
public BotWorker(
|
|
DealService dealService,
|
|
IDealRepository repository,
|
|
ISubscriptionRepository subscriptionRepository,
|
|
ITelegramNotifier telegramNotifier)
|
|
{
|
|
_dealService = dealService;
|
|
_repository = repository;
|
|
_subscriptionRepository = subscriptionRepository;
|
|
_telegramNotifier = telegramNotifier;
|
|
}
|
|
|
|
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
|
|
{
|
|
await _repository.InitializeAsync(stoppingToken);
|
|
await _subscriptionRepository.InitializeAsync(stoppingToken);
|
|
|
|
// Вся работа с Telegram вынесена в TelegramNotifier
|
|
await _telegramNotifier.StartAsync(stoppingToken);
|
|
|
|
Logger.Info("PepperBot запущен. Опрос скидок каждые 30 секунд.");
|
|
|
|
while (!stoppingToken.IsCancellationRequested)
|
|
{
|
|
try
|
|
{
|
|
await _dealService.CheckAndNotifyAsync(stoppingToken);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Logger.Error(ex, "Ошибка при обработке скидок");
|
|
}
|
|
|
|
await Task.Delay(TimeSpan.FromSeconds(30), stoppingToken);
|
|
}
|
|
}
|
|
}
|