небольшие улучшения и реализация удаления предыдущего сообщения чтобы не засорять чат

Добавлены методы для удаления сообщений и улучшена логика

В класс `Program` добавлен метод `DeletePreviousMessage` для удаления предыдущих сообщений в чате с логированием.
Изменена логика в `HandleUpdateAsync` для более безопасной обработки нажатий на кнопки, добавлена проверка на `null` для переменной `data`.
Обновлена обработка статусов отчетов с использованием идентификатора сообщения из `callbackQuery`, что улучшает читаемость кода.
Также изменен способ создания клавиатуры для отправки сообщений, что делает код более компактным.
This commit is contained in:
Professional 2025-03-19 16:30:42 +07:00
parent 209401892e
commit 0161d83b47

View File

@ -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,