Добавлены функции администрирования и улучшен код

Внесены изменения в класс `Program` в файле `Program.cs`:
- Реализована обработка команды "admin_panel" для проверки прав администратора.
- Добавлена команда "view_archived_reports" с аналогичной проверкой.
- Обновлена клавиатура в методе `SendMainMenu`, добавлена кнопка для панели администратора.
- Создан новый метод `ViewArchivedReports` для просмотра завершенных заявок.
- Обновлен метод `ViewReports` для исключения завершенных заявок из списка.
- Упрощен код в методе `UpdateReportStatus`, убран лишний блок `try-catch`.
This commit is contained in:
Professional 2025-03-19 17:59:32 +07:00
parent 97b7b8467c
commit 0ebb1a9c70

View File

@ -129,6 +129,26 @@ class Program
await botClient.SendMessage(chatId, "Пожалуйста, отправьте описание проблемы."); await botClient.SendMessage(chatId, "Пожалуйста, отправьте описание проблемы.");
Log.Information($"Пользователь {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") else if (data == "view_reports")
{ {
if (admins.Contains(chatId)) if (admins.Contains(chatId))
@ -149,6 +169,26 @@ class Program
Log.Information($"Неавторизованный доступ к заявкам от {chatId}"); 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_")) else if (data != null && data.StartsWith("report_"))
{ {
long reportId = long.Parse(data.Substring(7)); long reportId = long.Parse(data.Substring(7));
@ -232,7 +272,7 @@ class Program
new[] new[]
{ {
InlineKeyboardButton.WithCallbackData("Подать заявку", "report"), 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) private static async Task DeleteReport(ITelegramBotClient botClient, long chatId, long reportId)
{ {
try try
@ -322,7 +363,7 @@ class Program
new[] new[]
{ {
InlineKeyboardButton.WithCallbackData("Подать заявку", "report"), InlineKeyboardButton.WithCallbackData("Подать заявку", "report"),
InlineKeyboardButton.WithCallbackData(росмотр заявок", "view_reports") InlineKeyboardButton.WithCallbackData(анель администратора", "admin_panel")
} }
}); });
@ -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) private static async Task ViewReports(ITelegramBotClient botClient, long chatId)
{ {
string connectionString = "Data Source=bot.db"; string connectionString = "Data Source=bot.db";
@ -343,7 +406,7 @@ class Program
{ {
await connection.OpenAsync(); await connection.OpenAsync();
var command = connection.CreateCommand(); 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<InlineKeyboardButton[]>(); var buttons = new List<InlineKeyboardButton[]>();
@ -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<InlineKeyboardButton[]>();
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) private static async Task ShowReportDetails(ITelegramBotClient botClient, long chatId, long reportId, int messageId)
{ {
try try
@ -446,7 +560,7 @@ class Program
private static async Task UpdateReportStatus(long reportId, string newStatus) 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"))
@ -463,7 +577,7 @@ class Program
{ {
Log.Error($"Ошибка: {ex.Message}"); Log.Error($"Ошибка: {ex.Message}");
} }
} }
private static async Task SaveReportToDatabase(long chatId, string description) private static async Task SaveReportToDatabase(long chatId, string description)
{ {