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 { 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); } } }