text-matcher/src/Nocr.TextMatcher.AppServices/TextMatchers/MessageReceivedHandler.cs
2024-03-22 20:46:17 +04:00

55 lines
2.1 KiB
C#

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<MessageReceived>
{
private readonly ILogger<MessageReceivedHandler> _logger;
private readonly IBus _bus;
private readonly ITextMatchService _textMatchService;
private readonly ICurrentDateProvider _dateProvider;
public MessageReceivedHandler(ILogger<MessageReceivedHandler> 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);
}
}
}
}