Добавлены функции администрирования и улучшен код
Внесены изменения в класс `Program` в файле `Program.cs`: - Реализована обработка команды "admin_panel" для проверки прав администратора. - Добавлена команда "view_archived_reports" с аналогичной проверкой. - Обновлена клавиатура в методе `SendMainMenu`, добавлена кнопка для панели администратора. - Создан новый метод `ViewArchivedReports` для просмотра завершенных заявок. - Обновлен метод `ViewReports` для исключения завершенных заявок из списка. - Упрощен код в методе `UpdateReportStatus`, убран лишний блок `try-catch`.
This commit is contained in:
parent
97b7b8467c
commit
0ebb1a9c70
124
Program.cs
124
Program.cs
@ -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)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user