diff --git a/src/Nocr.TelegramClient.AppServices/Bots/NocrCallbackData.cs b/src/Nocr.TelegramClient.AppServices/Bots/NocrCallbackData.cs index ca50479..f116d8f 100644 --- a/src/Nocr.TelegramClient.AppServices/Bots/NocrCallbackData.cs +++ b/src/Nocr.TelegramClient.AppServices/Bots/NocrCallbackData.cs @@ -39,4 +39,9 @@ public class NocrCallbackData : CallbackData { return new NocrCallbackData(NocrState.Feedback); } + + public static NocrCallbackData AddSubscription() + { + return new NocrCallbackData(NocrState.AddSubscription); + } } \ No newline at end of file diff --git a/src/Nocr.TelegramClient.AppServices/Bots/NocrState.cs b/src/Nocr.TelegramClient.AppServices/Bots/NocrState.cs index 5188fed..0e5fcee 100644 --- a/src/Nocr.TelegramClient.AppServices/Bots/NocrState.cs +++ b/src/Nocr.TelegramClient.AppServices/Bots/NocrState.cs @@ -9,6 +9,7 @@ public enum NocrState // States Start, + AddSubscription, ViewSubscription, - Feedback + Feedback, } \ No newline at end of file diff --git a/src/Nocr.TelegramClient.AppServices/Handlers/BaseHandlers/StartHandlerBase.cs b/src/Nocr.TelegramClient.AppServices/Handlers/BaseHandlers/StartHandlerBase.cs index 660e534..dfc1a00 100644 --- a/src/Nocr.TelegramClient.AppServices/Handlers/BaseHandlers/StartHandlerBase.cs +++ b/src/Nocr.TelegramClient.AppServices/Handlers/BaseHandlers/StartHandlerBase.cs @@ -58,6 +58,11 @@ public abstract class StartHandlerBase { var markup = new VerticalKeyboardMarkup(); + markup.Add(new InlineKeyboardButton(Localizer.Get(nameof(StartHandlerBase), "AddSubscriptionButton")) + { + CallbackData = NocrCallbackData.AddSubscription().ToString() + }); + markup.Add(new InlineKeyboardButton(Localizer.Get(nameof(StartHandlerBase), "SubscriptionsButton")) { CallbackData = NocrCallbackData.ViewSubscription().ToString() diff --git a/src/Nocr.TelegramClient.AppServices/Handlers/CallbackQueries/AddSubscription/FeedbackHandler.cs b/src/Nocr.TelegramClient.AppServices/Handlers/CallbackQueries/AddSubscription/FeedbackHandler.cs new file mode 100644 index 0000000..4a8671a --- /dev/null +++ b/src/Nocr.TelegramClient.AppServices/Handlers/CallbackQueries/AddSubscription/FeedbackHandler.cs @@ -0,0 +1,47 @@ +using Insight.Localizer; +using Insight.TelegramBot; +using Insight.TelegramBot.Handling.Handlers; +using Insight.TelegramBot.Handling.Matchers.CallbackQueryMatchers; +using Insight.TelegramBot.Models; +using Microsoft.Extensions.Logging; +using Nocr.TelegramClient.AppServices.Bots; +using Telegram.Bot.Types; +using Telegram.Bot.Types.ReplyMarkups; + +namespace Nocr.TelegramClient.AppServices.Handlers.CallbackQueries.Feedback; + +public class AddSubscriptionMatcher : StateCallbackQueryMatcher +{ + public AddSubscriptionMatcher() + { + ExpectingState = NocrState.AddSubscription; + } +} + +public class AddSubscriptionHandler : IMatchingUpdateHandler +{ + private readonly ILogger _logger; + private readonly ILocalizer _localizer; + private readonly IBot _bot; + + public AddSubscriptionHandler(ILogger logger, ILocalizer localizer, IBot bot) + { + _logger = logger ?? throw new ArgumentNullException(nameof(logger)); + _localizer = localizer ?? throw new ArgumentNullException(nameof(localizer)); + _bot = bot ?? throw new ArgumentNullException(nameof(bot)); + } + + public Task Handle(Update update, CancellationToken cancellationToken = default) + { + var message = new TextMessage(update.CallbackQuery.Message.Chat.Id) + { + Text = _localizer.Get(nameof(AddSubscriptionHandler), "Text"), + ReplyMarkup = new InlineKeyboardMarkup(new InlineKeyboardButton(_localizer.Get("buttons", "back")) + { + CallbackData = NocrCallbackData.Start().ToString() + }) + }; + + return _bot.EditOrSendTextMessage(update.CallbackQuery.Message.MessageId, message, _logger, cancellationToken); + } +} \ No newline at end of file diff --git a/src/Nocr.TelegramClient.AppServices/Handlers/Messages/SubscribeMessage/SubscribeMessageHandler.cs b/src/Nocr.TelegramClient.AppServices/Handlers/Messages/SubscribeMessage/SubscribeMessageHandler.cs index a1de0f9..bf329d7 100644 --- a/src/Nocr.TelegramClient.AppServices/Handlers/Messages/SubscribeMessage/SubscribeMessageHandler.cs +++ b/src/Nocr.TelegramClient.AppServices/Handlers/Messages/SubscribeMessage/SubscribeMessageHandler.cs @@ -22,7 +22,7 @@ public class SubscribeMessageHandler : ViewSubscriptionHandlerBase, IMatchingUpd /// For instance, "/subscribe @baraholka 1 обувь ботинки сапоги" will create match for a current user with type "All" and pattern "обувь ботинки сапоги". /// private static Regex _commandRegex = - new Regex(@"/subscribe (.*\B@(?=\w{5,32}\b)[a-zA-Z0-9]+(?:_[a-zA-Z0-9]+)*.*) (\d{1}) (.*)", + new Regex(@"^/subscribe (.*\B@(?=\w{5,32}\b)[a-zA-Z0-9]+(?:_[a-zA-Z0-9]+)*.*) (.{3,})$", RegexOptions.Compiled); public SubscribeMessageHandler( @@ -38,7 +38,7 @@ public class SubscribeMessageHandler : ViewSubscriptionHandlerBase, IMatchingUpd public async Task Handle(Update update, CancellationToken cancellationToken = default) { - var receiverId = update.Message.From.Id; + var receiverId = update.Message.Chat.Id; var match = _commandRegex.Match(update.Message.Text); if (!match.Success) @@ -51,16 +51,9 @@ public class SubscribeMessageHandler : ViewSubscriptionHandlerBase, IMatchingUpd } var username = match.Groups[1].Value.TrimStart('@'); - if (!Enum.TryParse(match.Groups[2].Value, true, out var rule)) - { - MessageQueue.Enqueue(new TextMessage(receiverId) - { - Text = Localizer.Get(nameof(SubscribeMessageHandler), "WrongSubscriptionType") - }); - return; - } - - var template = match.Groups[3].Value; + var template = match.Groups[2].Value; + // note(nazarovsa): Temporary for simplify usage + var rule = TextSubscriptionRule.Full; var user = await UsersService.GetOrCreate(receiverId, update.Message.From.Username, cancellationToken); var subscriptionId = await SubscriptionsController.Create(new CreateTextSubscriptionRequest diff --git a/src/Nocr.TelegramClient.Host/Resources/Handlers/TelegramHandlers/Base/StartHandlerBase/StartHandlerBase.ru-ru.json b/src/Nocr.TelegramClient.Host/Resources/Handlers/TelegramHandlers/Base/StartHandlerBase/StartHandlerBase.ru-ru.json index 441aa6e..1e495c8 100644 --- a/src/Nocr.TelegramClient.Host/Resources/Handlers/TelegramHandlers/Base/StartHandlerBase/StartHandlerBase.ru-ru.json +++ b/src/Nocr.TelegramClient.Host/Resources/Handlers/TelegramHandlers/Base/StartHandlerBase/StartHandlerBase.ru-ru.json @@ -1,6 +1,7 @@ { "Text": "Привет! Я, Nocr 🤖!", + "AddSubscriptionButton": "Создать подписку ➕", "SubscriptionsButton": "Подписки 📩", "FeedbackButton": "Оставить отзыв 🙋‍" } \ No newline at end of file diff --git a/src/Nocr.TelegramClient.Host/Resources/Handlers/TelegramHandlers/CallbackQueries/AddSubscription/AddSubscriptionHandler.ru-ru.json b/src/Nocr.TelegramClient.Host/Resources/Handlers/TelegramHandlers/CallbackQueries/AddSubscription/AddSubscriptionHandler.ru-ru.json new file mode 100644 index 0000000..b3ec6a7 --- /dev/null +++ b/src/Nocr.TelegramClient.Host/Resources/Handlers/TelegramHandlers/CallbackQueries/AddSubscription/AddSubscriptionHandler.ru-ru.json @@ -0,0 +1,3 @@ +{ + "Text": "Чтобы добавить подписку пришлите команду в формате `/subscribe @chat_username ключевое_слово`. Ключевое слово должно быть длиннее 2 символов. \n\nНапример, `/subscribe @MyGreatChannel macbook`." +} \ No newline at end of file diff --git a/src/Nocr.TelegramClient.Host/appsettings.json b/src/Nocr.TelegramClient.Host/appsettings.json index 9a81d53..0323cfa 100644 --- a/src/Nocr.TelegramClient.Host/appsettings.json +++ b/src/Nocr.TelegramClient.Host/appsettings.json @@ -25,10 +25,10 @@ }, "AdministrationOptions": { "FeedbackReceiverIds": [ - -4202454237 + -1002085899956 ], "UpdateReceiverIds": [ - -4202454237 + -1002085899956 ] } }