telegram-client/src/Nocr.TelegramClient.AppServices/Handlers/Messages/SubscriptionsMessage/SubscriptionsMessageHandler.cs
Sergey Nazarov 5e99e802ec nazarovsa/subscription_commands (#6)
Reviewed-on: #6
Co-authored-by: Sergey Nazarov <insight.appdev@gmail.com>
Co-committed-by: Sergey Nazarov <insight.appdev@gmail.com>
2024-04-16 13:03:31 +00:00

40 lines
1.6 KiB
C#

using Insight.Localizer;
using Insight.TelegramBot;
using Insight.TelegramBot.Handling.Handlers;
using Microsoft.Extensions.Logging;
using Nocr.TelegramClient.AppServices.Bots.MessageDispatcher;
using Nocr.TelegramClient.AppServices.Handlers.BaseHandlers;
using Nocr.TelegramClient.AppServices.Users;
using Nocr.TextMatcher.Api.Contracts.TextMatches;
using Telegram.Bot.Types;
namespace Nocr.TelegramClient.AppServices.Handlers.Messages.SubscriptionsMessage;
public class SubscriptionsMessageHandler : ViewSubscriptionHandlerBase,
IMatchingUpdateHandler<SubscriptionsMessageMatcher>
{
private readonly IUsersService _usersService;
public SubscriptionsMessageHandler(
ILogger<SubscriptionsMessageHandler> logger,
ILocalizer localizer,
IMessageDispatcherQueue messageQueue,
IUsersService usersService,
IBot bot,
ITextSubscriptionsController subscriptionsController)
: base(logger, localizer, messageQueue, bot, subscriptionsController)
{
_usersService = usersService ?? throw new ArgumentNullException(nameof(usersService));
}
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 SubscriptionsController.GetByUserId(user.Id, cancellationToken);
var subscription = subscriptions.MinBy(x => x.Id);
await SendSubscriptionMessage(telegramId, subscription, CancellationToken.None);
}
}