From 0ebb1a9c70d12ff8fd992f8d82acd80d5e141eba Mon Sep 17 00:00:00 2001 From: Professional Date: Wed, 19 Mar 2025 17:59:32 +0700 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=B8=20?= =?UTF-8?q?=D0=B0=D0=B4=D0=BC=D0=B8=D0=BD=D0=B8=D1=81=D1=82=D1=80=D0=B8?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=B8=20=D1=83?= =?UTF-8?q?=D0=BB=D1=83=D1=87=D1=88=D0=B5=D0=BD=20=D0=BA=D0=BE=D0=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Внесены изменения в класс `Program` в файле `Program.cs`: - Реализована обработка команды "admin_panel" для проверки прав администратора. - Добавлена команда "view_archived_reports" с аналогичной проверкой. - Обновлена клавиатура в методе `SendMainMenu`, добавлена кнопка для панели администратора. - Создан новый метод `ViewArchivedReports` для просмотра завершенных заявок. - Обновлен метод `ViewReports` для исключения завершенных заявок из списка. - Упрощен код в методе `UpdateReportStatus`, убран лишний блок `try-catch`. --- Program.cs | 170 ++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 142 insertions(+), 28 deletions(-) diff --git a/Program.cs b/Program.cs index d30caeb..98a76c2 100644 --- a/Program.cs +++ b/Program.cs @@ -129,6 +129,26 @@ class Program await botClient.SendMessage(chatId, "Пожалуйста, отправьте описание проблемы."); Log.Information($"Пользователь {chatId} начал создание заявки"); } + else if (data == "admin_panel") + { + if (admins.Contains(chatId)) + { + await SendAdminPanel(botClient, chatId); + } + else + { + var keyboard = new InlineKeyboardMarkup(new[] + { + new[] + { + InlineKeyboardButton.WithCallbackData("Главное меню", "main_menu") + } + }); + + await botClient.SendMessage(chatId, "⛔ Вы не являетесь администратором!", replyMarkup: keyboard); + Log.Information($"Неавторизованный доступ к админ-панели от {chatId}"); + } + } else if (data == "view_reports") { if (admins.Contains(chatId)) @@ -149,6 +169,26 @@ class Program Log.Information($"Неавторизованный доступ к заявкам от {chatId}"); } } + else if (data == "view_archived_reports") + { + if (admins.Contains(chatId)) + { + await ViewArchivedReports(botClient, chatId); + } + else + { + var keyboard = new InlineKeyboardMarkup(new[] + { + new[] + { + InlineKeyboardButton.WithCallbackData("Главное меню", "main_menu") + } + }); + + await botClient.SendMessage(chatId, "⛔ Вы не являетесь администратором!", replyMarkup: keyboard); + Log.Information($"Неавторизованный доступ к архиву заявок от {chatId}"); + } + } else if (data != null && data.StartsWith("report_")) { long reportId = long.Parse(data.Substring(7)); @@ -232,7 +272,7 @@ class Program new[] { InlineKeyboardButton.WithCallbackData("Подать заявку", "report"), - InlineKeyboardButton.WithCallbackData("Просмотр заявок", "view_reports") + InlineKeyboardButton.WithCallbackData("Панель администратора", "admin_panel") } }); @@ -278,6 +318,7 @@ class Program } } + private static async Task DeleteReport(ITelegramBotClient botClient, long chatId, long reportId) { try @@ -319,12 +360,12 @@ class Program { var keyboard = new InlineKeyboardMarkup(new[] { - new[] - { - InlineKeyboardButton.WithCallbackData("Подать заявку", "report"), - InlineKeyboardButton.WithCallbackData("Просмотр заявок", "view_reports") - } - }); + new[] + { + InlineKeyboardButton.WithCallbackData("Подать заявку", "report"), + InlineKeyboardButton.WithCallbackData("Панель администратора", "admin_panel") + } + }); await botClient.SendMessage( chatId: chatId, @@ -333,6 +374,28 @@ class Program ); } + private static async Task SendAdminPanel(ITelegramBotClient botClient, long chatId) + { + var keyboard = new InlineKeyboardMarkup(new[] + { + new[] + { + InlineKeyboardButton.WithCallbackData("Менеджер заявок", "view_reports"), + InlineKeyboardButton.WithCallbackData("Архив заявок", "view_archived_reports") + }, + new[] + { + InlineKeyboardButton.WithCallbackData("Главное меню", "main_menu") + } + }); + + await botClient.SendMessage( + chatId: chatId, + text: "Панель администратора:", + replyMarkup: keyboard + ); + } + private static async Task ViewReports(ITelegramBotClient botClient, long chatId) { string connectionString = "Data Source=bot.db"; @@ -343,7 +406,7 @@ class Program { await connection.OpenAsync(); var command = connection.CreateCommand(); - command.CommandText = "SELECT Id, Description, Status FROM Reports"; + command.CommandText = "SELECT Id, Description, Status FROM Reports WHERE Status != 'Завершена'"; var buttons = new List(); @@ -357,18 +420,18 @@ class Program buttons.Add(new[] { - InlineKeyboardButton.WithCallbackData( - $"#{id} - {status} - {description}...", - $"report_{id}") - }); + InlineKeyboardButton.WithCallbackData( + $"#{id} - {status} - {description}...", + $"report_{id}") + }); } } // Добавляем кнопки навигации buttons.Add(new[] { - InlineKeyboardButton.WithCallbackData("Главное меню", "main_menu") - }); + InlineKeyboardButton.WithCallbackData("Главное меню", "main_menu") + }); await botClient.SendMessage( chatId: chatId, @@ -384,6 +447,57 @@ class Program } } + private static async Task ViewArchivedReports(ITelegramBotClient botClient, long chatId) + { + string connectionString = "Data Source=bot.db"; + + try + { + using (var connection = new SqliteConnection(connectionString)) + { + await connection.OpenAsync(); + var command = connection.CreateCommand(); + command.CommandText = "SELECT Id, Description, Status FROM Reports WHERE Status = 'Завершена'"; + + var buttons = new List(); + + using (var reader = await command.ExecuteReaderAsync()) + { + while (await reader.ReadAsync()) + { + long id = reader.GetInt64(0); + string description = reader.GetString(1).Substring(0, Math.Min(20, reader.GetString(1).Length)); + string status = reader.GetString(2); + + buttons.Add(new[] + { + InlineKeyboardButton.WithCallbackData( + $"#{id} - {status} - {description}...", + $"report_{id}") + }); + } + } + + // Добавляем кнопки навигации + buttons.Add(new[] + { + InlineKeyboardButton.WithCallbackData("Главное меню", "main_menu") + }); + + await botClient.SendMessage( + chatId: chatId, + text: "Архив заявок:", + replyMarkup: new InlineKeyboardMarkup(buttons) + ); + } + } + catch (Exception ex) + { + Log.Error($"Ошибка: {ex.Message}"); + await botClient.SendMessage(chatId, "Ошибка при получении архива заявок"); + } + } + private static async Task ShowReportDetails(ITelegramBotClient botClient, long chatId, long reportId, int messageId) { try @@ -446,24 +560,24 @@ class Program private static async Task UpdateReportStatus(long reportId, string newStatus) +{ + try { - try + using (var connection = new SqliteConnection("Data Source=bot.db")) { - using (var connection = new SqliteConnection("Data Source=bot.db")) - { - await connection.OpenAsync(); - var command = connection.CreateCommand(); - command.CommandText = "UPDATE Reports SET Status = @status WHERE Id = @id"; - command.Parameters.AddWithValue("@status", newStatus); - command.Parameters.AddWithValue("@id", reportId); - await command.ExecuteNonQueryAsync(); - } - } - catch (Exception ex) - { - Log.Error($"Ошибка: {ex.Message}"); + await connection.OpenAsync(); + var command = connection.CreateCommand(); + command.CommandText = "UPDATE Reports SET Status = @status WHERE Id = @id"; + command.Parameters.AddWithValue("@status", newStatus); + command.Parameters.AddWithValue("@id", reportId); + await command.ExecuteNonQueryAsync(); } } + catch (Exception ex) + { + Log.Error($"Ошибка: {ex.Message}"); + } +} private static async Task SaveReportToDatabase(long chatId, string description) {