55 lines
2.1 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|
|
} |