46 lines
1.9 KiB
C#
46 lines
1.9 KiB
C#
using Insight.TelegramBot;
|
|
using Insight.TelegramBot.Handling.Handlers;
|
|
using Insight.TelegramBot.Models;
|
|
using Nocr.TelegramClient.AppServices.Bots.MessageDispatcher;
|
|
using Nocr.TelegramClient.AppServices.Matches;
|
|
using Nocr.TelegramClient.AppServices.Users;
|
|
using Nocr.TextMatcher.Api.Contracts.TextMatches;
|
|
using Nocr.Users.Api.Contracts.Users.Dto;
|
|
using Telegram.Bot.Types;
|
|
using Telegram.Bot.Types.Enums;
|
|
|
|
namespace Nocr.TelegramClient.AppServices.Handlers.Messages.SubscriptionsMessage;
|
|
|
|
public class SubscriptionsMessageHandler : IMatchingUpdateHandler<SubscriptionsMessageMatcher>
|
|
{
|
|
private readonly IMessageDispatcherQueue _messageQueue;
|
|
private readonly IUsersService _usersService;
|
|
private readonly ITextSubscriptionsController _textSubscriptionsController;
|
|
|
|
public SubscriptionsMessageHandler(IMessageDispatcherQueue messageQueue, IUsersService usersService,
|
|
ITextSubscriptionsController textSubscriptionsController)
|
|
{
|
|
_messageQueue = messageQueue ?? throw new ArgumentNullException(nameof(messageQueue));
|
|
_usersService = usersService ?? throw new ArgumentNullException(nameof(usersService));
|
|
_textSubscriptionsController = textSubscriptionsController ?? throw new ArgumentNullException(nameof(textSubscriptionsController));
|
|
}
|
|
|
|
public async Task Handle(Update update, CancellationToken cancellationToken = default)
|
|
{
|
|
var telegramId = update.Message.From.Id;
|
|
var user = await _usersService.GetOrCreate(telegramId, update.Message.From.Username, cancellationToken);
|
|
|
|
var subscriptions = await _textSubscriptionsController.GetByUserId(user.Id, cancellationToken);
|
|
|
|
foreach (var subscription in subscriptions)
|
|
{
|
|
var textMessage = new TextMessage(telegramId)
|
|
{
|
|
Text = subscription.TextView(),
|
|
ParseMode = ParseMode.Html
|
|
};
|
|
|
|
_messageQueue.Enqueue(textMessage);
|
|
}
|
|
}
|
|
} |