using Microsoft.Extensions.Logging; using Nocr.TelegramListener.Async.Api.Contracts.Events; using Nocr.TextMatcher.AppServices.TextMatches.Services; using Nocr.TextMatcher.Async.Api.Contracts; using Nocr.TextMatcher.Core.Dates; using Rebus.Bus; using Rebus.Handlers; namespace Nocr.TextMatcher.AppServices.TextMatchers; public sealed class MessageReceivedHandler : IHandleMessages { private readonly ILogger _logger; private readonly IBus _bus; private readonly ITextMatchService _textMatchService; private readonly ICurrentDateProvider _dateProvider; public MessageReceivedHandler(ILogger logger, IBus bus, ITextMatchService textMatchService, ICurrentDateProvider dateProvider) { _logger = logger ?? throw new ArgumentNullException(nameof(logger)); _bus = bus ?? throw new ArgumentNullException(nameof(bus)); _textMatchService = textMatchService ?? throw new ArgumentNullException(nameof(textMatchService)); _dateProvider = dateProvider ?? throw new ArgumentNullException(nameof(dateProvider)); } public async Task Handle(MessageReceived message) { _logger.LogInformation("Received message: {@Message}", message); var matches = await _textMatchService.Get(); foreach (var match in matches) { if (match.IsMatches(message.ChatId, message.ChatUsername, message.Text)) { _logger.LogInformation("Message {@Message} matched {@Match}", message, match); var @event = new TextMatchMatched { ChatId = message.ChatId, ChatUsername = message.ChatUsername, Text = message.Text, UserId = message.From, OccuredDateTime = message.OccuredDateTime, PublishedDateTime = _dateProvider.UtcNow }; // TODO: await _bus.Advanced.Topics.Publish("nocr.text.matcher.matched", @event); } } } }