From a69d372362c584d6ce0eb0b5ec9108c683fac1b2 Mon Sep 17 00:00:00 2001 From: Sergey Nazarov Date: Tue, 7 May 2024 10:53:44 +0300 Subject: [PATCH] Fix back button on AddSubscription view --- .../MessageDispatcherHandler.cs | 3 ++ .../Handlers/BaseHandlers/StartHandlerBase.cs | 29 +++++++++++++++---- .../AddSubscription/AddSubscriptionHandler.cs | 27 ++++++++++++++--- .../CallbackQueries/Start/StartHandler.cs | 5 ++-- .../StartMessage/StartMessageHandler.cs | 5 ++-- 5 files changed, 55 insertions(+), 14 deletions(-) diff --git a/src/Nocr.TelegramClient.AppServices/Bots/MessageDispatcher/MessageDispatcherHandler.cs b/src/Nocr.TelegramClient.AppServices/Bots/MessageDispatcher/MessageDispatcherHandler.cs index 4898b3d..64e847e 100644 --- a/src/Nocr.TelegramClient.AppServices/Bots/MessageDispatcher/MessageDispatcherHandler.cs +++ b/src/Nocr.TelegramClient.AppServices/Bots/MessageDispatcher/MessageDispatcherHandler.cs @@ -27,6 +27,9 @@ public sealed class MessageDispatcherHandler : IMessageDispatcherHandler case TextMessage tm: await _bot.SendMessageAsync(tm, cancellationToken); break; + case AnimationMessage am: + await _bot.SendAnimationAsync(am, cancellationToken); + break; default: _logger.LogWarning("Dequeued message has unsupported type: {Type}", typeof(Message).FullName); break; diff --git a/src/Nocr.TelegramClient.AppServices/Handlers/BaseHandlers/StartHandlerBase.cs b/src/Nocr.TelegramClient.AppServices/Handlers/BaseHandlers/StartHandlerBase.cs index dfc1a00..255d577 100644 --- a/src/Nocr.TelegramClient.AppServices/Handlers/BaseHandlers/StartHandlerBase.cs +++ b/src/Nocr.TelegramClient.AppServices/Handlers/BaseHandlers/StartHandlerBase.cs @@ -2,6 +2,7 @@ using Insight.Localizer; using Insight.TelegramBot; using Insight.TelegramBot.Keyboards; using Insight.TelegramBot.Models; +using Microsoft.Extensions.Logging; using Nocr.TelegramClient.AppServices.Bots; using Nocr.TelegramClient.AppServices.Bots.MessageDispatcher; using Telegram.Bot.Types; @@ -12,18 +13,20 @@ namespace Nocr.TelegramClient.AppServices.Handlers.BaseHandlers; public abstract class StartHandlerBase { + private readonly ILogger _logger; protected IBot Bot { get; } protected ILocalizer Localizer { get; } protected IMessageDispatcherQueue MessageQueue { get; } - public StartHandlerBase(ILocalizer localizer, IMessageDispatcherQueue messageQueue, IBot bot) + public StartHandlerBase(ILogger logger, ILocalizer localizer, IMessageDispatcherQueue messageQueue, IBot bot) { + _logger = logger ?? throw new ArgumentNullException(nameof(logger)); Bot = bot ?? throw new ArgumentNullException(nameof(bot)); Localizer = localizer ?? throw new ArgumentNullException(nameof(localizer)); MessageQueue = messageQueue ?? throw new ArgumentNullException(nameof(messageQueue)); } - public Task Handle(Update update, CancellationToken cancellationToken = default) + public async Task Handle(Update update, CancellationToken cancellationToken = default) { long telegramId; switch (update.Type) @@ -47,11 +50,25 @@ public abstract class StartHandlerBase if (update.Type == UpdateType.CallbackQuery) { - return Bot.EditMessageTextAsync(update.CallbackQuery.Message.MessageId, message, cancellationToken); + var messageId = update.CallbackQuery.Message.MessageId; + if (update.CallbackQuery.Message.Type == MessageType.Text) + { + await Bot.EditMessageTextAsync(messageId, message, cancellationToken); + return; + } + + var chatId = update.CallbackQuery.Message.Chat.Id; + try + { + await Bot.DeleteMessageAsync(chatId, messageId, cancellationToken); + } + catch (Exception ex) + { + _logger.LogWarning(ex, "Failed to delete message {MessageId} in chat {ChatId}", messageId, chatId); + } } MessageQueue.Enqueue(message); - return Task.CompletedTask; } private IReplyMarkup GetKeyboard() @@ -62,12 +79,12 @@ public abstract class StartHandlerBase { CallbackData = NocrCallbackData.AddSubscription().ToString() }); - + markup.Add(new InlineKeyboardButton(Localizer.Get(nameof(StartHandlerBase), "SubscriptionsButton")) { CallbackData = NocrCallbackData.ViewSubscription().ToString() }); - + markup.Add(new InlineKeyboardButton(Localizer.Get(nameof(StartHandlerBase), "FeedbackButton")) { CallbackData = NocrCallbackData.Feedback().ToString() diff --git a/src/Nocr.TelegramClient.AppServices/Handlers/CallbackQueries/AddSubscription/AddSubscriptionHandler.cs b/src/Nocr.TelegramClient.AppServices/Handlers/CallbackQueries/AddSubscription/AddSubscriptionHandler.cs index 86e44eb..a65a575 100644 --- a/src/Nocr.TelegramClient.AppServices/Handlers/CallbackQueries/AddSubscription/AddSubscriptionHandler.cs +++ b/src/Nocr.TelegramClient.AppServices/Handlers/CallbackQueries/AddSubscription/AddSubscriptionHandler.cs @@ -2,7 +2,9 @@ using Insight.Localizer; using Insight.TelegramBot; using Insight.TelegramBot.Handling.Handlers; using Insight.TelegramBot.Models; +using Microsoft.Extensions.Logging; using Nocr.TelegramClient.AppServices.Bots; +using Nocr.TelegramClient.AppServices.Bots.MessageDispatcher; using Telegram.Bot.Types; using Telegram.Bot.Types.ReplyMarkups; @@ -10,20 +12,27 @@ namespace Nocr.TelegramClient.AppServices.Handlers.CallbackQueries.AddSubscripti public sealed class AddSubscriptionHandler : IMatchingUpdateHandler { + private readonly ILogger _logger; private readonly ILocalizer _localizer; private readonly IBot _bot; + private readonly IMessageDispatcherQueue _messageDispatcherQueue; private const string FaqFileId = "CgACAgIAAxkBAAIPQmY5H7c3pi5_4OxdPbpRVdnwEFMxAAIBTAACnxzJSefFRShccLRXNQQ"; - public AddSubscriptionHandler(ILocalizer localizer, IBot bot) + public AddSubscriptionHandler(ILogger logger, ILocalizer localizer, IBot bot, IMessageDispatcherQueue messageDispatcherQueue) { + _logger = logger ?? throw new ArgumentNullException(nameof(logger)); _localizer = localizer ?? throw new ArgumentNullException(nameof(localizer)); _bot = bot ?? throw new ArgumentNullException(nameof(bot)); + _messageDispatcherQueue = messageDispatcherQueue ?? throw new ArgumentNullException(nameof(messageDispatcherQueue)); } - public Task Handle(Update update, CancellationToken cancellationToken = default) + public async Task Handle(Update update, CancellationToken cancellationToken = default) { - var message = new AnimationMessage(update.CallbackQuery.Message.Chat.Id) + var chatId = update.CallbackQuery.Message.Chat.Id; + var messageId = update.CallbackQuery.Message.MessageId; + + var message = new AnimationMessage(chatId) { InputOnlineFile = new InputFileId(FaqFileId), Caption = _localizer.Get(nameof(AddSubscriptionHandler), "Text"), @@ -32,6 +41,16 @@ public sealed class AddSubscriptionHandler : IMatchingUpdateHandler { - public StartHandler(ILocalizer localizer, IMessageDispatcherQueue messageQueue, IBot bot) - : base(localizer, messageQueue, bot) + public StartHandler(ILogger logger, ILocalizer localizer, IMessageDispatcherQueue messageQueue, IBot bot) + : base(logger, localizer, messageQueue, bot) { } } \ No newline at end of file diff --git a/src/Nocr.TelegramClient.AppServices/Handlers/Messages/StartMessage/StartMessageHandler.cs b/src/Nocr.TelegramClient.AppServices/Handlers/Messages/StartMessage/StartMessageHandler.cs index f59bea9..490f61b 100644 --- a/src/Nocr.TelegramClient.AppServices/Handlers/Messages/StartMessage/StartMessageHandler.cs +++ b/src/Nocr.TelegramClient.AppServices/Handlers/Messages/StartMessage/StartMessageHandler.cs @@ -1,6 +1,7 @@ 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; @@ -9,8 +10,8 @@ namespace Nocr.TelegramClient.AppServices.Handlers.Messages.StartMessage; public class StartMessageHandler : StartHandlerBase, IMatchingUpdateHandler { - public StartMessageHandler(ILocalizer localizer, IMessageDispatcherQueue messageQueue, IBot bot) - :base(localizer, messageQueue, bot) + public StartMessageHandler(ILogger logger, ILocalizer localizer, IMessageDispatcherQueue messageQueue, IBot bot) + :base(logger, localizer, messageQueue, bot) { } } \ No newline at end of file