From 48e8d06a410e454e6bf9145da4aef6d66407ff22 Mon Sep 17 00:00:00 2001 From: Leonid Pershin Date: Mon, 13 Jul 2026 04:38:06 +0300 Subject: [PATCH] Enhance Telegram bot message handling for login and activation callbacks - Updated the PnvBotUpdateHandler to edit the original message for login and activation requests instead of sending a new message, improving user experience by removing lingering buttons. - Added null checks for callback messages to ensure robust handling of user interactions. - Enhanced status messages to provide clearer feedback on user actions during the login and activation processes. --- .../Telegram/PnvBotUpdateHandler.cs | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/backend/src/PnvPanel.Api/Telegram/PnvBotUpdateHandler.cs b/backend/src/PnvPanel.Api/Telegram/PnvBotUpdateHandler.cs index 1d9c444..8ddc70d 100644 --- a/backend/src/PnvPanel.Api/Telegram/PnvBotUpdateHandler.cs +++ b/backend/src/PnvPanel.Api/Telegram/PnvBotUpdateHandler.cs @@ -187,10 +187,12 @@ public sealed class PnvBotUpdateHandler( : await sender.Send(new RejectTelegramLoginCommand(requestId, fromId), cancellationToken); await botClient.AnswerCallbackQuery(callback.Id, result.IsSuccess ? "Готово" : result.Error.Message, cancellationToken: cancellationToken); - if (result.IsSuccess) + if (result.IsSuccess && callback.Message is not null) { - var text = parts[1] == "approve" ? "✅ Вход подтверждён." : "❌ Вход отклонён."; - await botClient.SendMessage(chatId.Value, text, cancellationToken: cancellationToken); + var statusText = parts[1] == "approve" ? "✅ Вход подтверждён." : "❌ Вход отклонён."; + var text = $"{Escape(callback.Message.Text ?? "")}\n\n{statusText}"; + await botClient.EditMessageText( + chatId.Value, callback.Message.Id, text, parseMode: ParseMode.Html, cancellationToken: cancellationToken); } break; @@ -208,10 +210,14 @@ public sealed class PnvBotUpdateHandler( : await sender.Send(new RejectActivationCommand(requestId, Reason: null), cancellationToken); await botClient.AnswerCallbackQuery(callback.Id, result.IsSuccess ? "Готово" : result.Error.Message, cancellationToken: cancellationToken); - if (result.IsSuccess) + if (result.IsSuccess && callback.Message is not null) { - var text = parts[1] == "approve" ? "✅ Пользователь активирован." : "❌ Запрос отклонён."; - await botClient.SendMessage(chatId.Value, text, cancellationToken: cancellationToken); + // Редактируем исходное сообщение с запросом вместо отдельного — иначе кнопки + // «Активировать/Отклонить» остаются висеть под уже обработанным запросом. + var statusText = parts[1] == "approve" ? "✅ Пользователь активирован." : "❌ Запрос отклонён."; + var text = $"{Escape(callback.Message.Text ?? "")}\n\n{statusText}"; + await botClient.EditMessageText( + chatId.Value, callback.Message.Id, text, parseMode: ParseMode.Html, cancellationToken: cancellationToken); } break;