From 0161d83b474d494a2d8b7eb5653e04908f8318be Mon Sep 17 00:00:00 2001 From: Professional Date: Wed, 19 Mar 2025 16:30:42 +0700 Subject: [PATCH] =?UTF-8?q?=D0=BD=D0=B5=D0=B1=D0=BE=D0=BB=D1=8C=D1=88?= =?UTF-8?q?=D0=B8=D0=B5=20=D1=83=D0=BB=D1=83=D1=87=D1=88=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20=D0=B8=20=D1=80=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D1=8F=20=D1=83=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20=D0=BF=D1=80=D0=B5=D0=B4=D1=8B=D0=B4=D1=83=D1=89=D0=B5?= =?UTF-8?q?=D0=B3=D0=BE=20=D1=81=D0=BE=D0=BE=D0=B1=D1=89=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20=D1=87=D1=82=D0=BE=D0=B1=D1=8B=20=D0=BD=D0=B5=20=D0=B7?= =?UTF-8?q?=D0=B0=D1=81=D0=BE=D1=80=D1=8F=D1=82=D1=8C=20=D1=87=D0=B0=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Добавлены методы для удаления сообщений и улучшена логика В класс `Program` добавлен метод `DeletePreviousMessage` для удаления предыдущих сообщений в чате с логированием. Изменена логика в `HandleUpdateAsync` для более безопасной обработки нажатий на кнопки, добавлена проверка на `null` для переменной `data`. Обновлена обработка статусов отчетов с использованием идентификатора сообщения из `callbackQuery`, что улучшает читаемость кода. Также изменен способ создания клавиатуры для отправки сообщений, что делает код более компактным. --- Program.cs | 54 +++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 41 insertions(+), 13 deletions(-) diff --git a/Program.cs b/Program.cs index 01a0b36..07ef70f 100644 --- a/Program.cs +++ b/Program.cs @@ -86,6 +86,20 @@ class Program cts.Token.WaitHandle.WaitOne(); } + private static async Task DeletePreviousMessage(ITelegramBotClient botClient, long chatId, int messageId) + { + try + { + await botClient.DeleteMessage(chatId, messageId); + Log.Information($"Сообщение {messageId} в чате {chatId} удалено."); + } + catch (Exception ex) + { + Log.Error($"Ошибка при удалении сообщения {messageId} в чате {chatId}: {ex.Message}"); + } + } + + private static async Task HandleUpdateAsync(ITelegramBotClient botClient, Update update, CancellationToken cancellationToken) { try @@ -101,11 +115,14 @@ class Program if (callbackQuery?.Message?.MessageId != null) { int messageId = callbackQuery.Message.MessageId; - // Your existing code here + await DeletePreviousMessage(botClient, chatId, messageId); // Удаляем предыдущее сообщение } - int callbackMessageId = callbackQuery.Message.MessageId; - await botClient.AnswerCallbackQuery(callbackQuery.Id); // Убираем "часики" у кнопки + if (callbackQuery?.Id != null) + { + await botClient.AnswerCallbackQuery(callbackQuery.Id); // Убираем "часики" у кнопки + } + // Убираем "часики" у кнопки if (data == "report") { @@ -125,19 +142,30 @@ class Program Log.Information($"Неавторизованный доступ к заявкам от {chatId}"); } } - else if (data.StartsWith("report_")) + else if (data != null && data.StartsWith("report_")) { long reportId = long.Parse(data.Substring(7)); - await ShowReportDetails(botClient, chatId, reportId, callbackMessageId); + if (callbackQuery?.Message?.MessageId != null) + { + int messageId = callbackQuery.Message.MessageId; + await ShowReportDetails(botClient, chatId, reportId, messageId); + } } - else if (data.StartsWith("status_")) + + else if (data != null && data.StartsWith("status_")) { string[] parts = data.Split('_'); long reportId = long.Parse(parts[1]); string newStatus = parts[2]; - await UpdateReportStatus(reportId, newStatus); - await ShowReportDetails(botClient, chatId, reportId, callbackMessageId); + if (callbackQuery?.Message?.MessageId != null) + { + int messageId = callbackQuery.Message.MessageId; + await UpdateReportStatus(reportId, newStatus); + await ShowReportDetails(botClient, chatId, reportId, messageId); + } } + + else if (data == "back_to_list") { await ViewReports(botClient, chatId); @@ -199,11 +227,11 @@ class Program // Создаем клавиатуру с кнопкой возврата var keyboard = new InlineKeyboardMarkup(new[] { - new[] - { - InlineKeyboardButton.WithCallbackData("Главное меню", "main_menu") - } - }); + new[] + { + InlineKeyboardButton.WithCallbackData("Главное меню", "main_menu") + } + }); await botClient.SendMessage( chatId: message.Chat.Id,