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