Улучшение управления администраторами и отчетами
Внесены изменения в класс `Program` для улучшения управления администраторами: - Добавлено поле `adminFullNames` для хранения полных имен администраторов. - Изменена логика авторизации: теперь требуется указание полного имени. - Обновлена база данных для хранения полных имен в таблице `Admins`. - Изменены SQL-запросы для работы с новым полем `FullName`. - Обновлены сообщения пользователям с информацией о полном имени администратора. - Добавлен метод `SaveReportToDatabase` для сохранения отчетов. - Обновлена логика изменения статуса отчетов с сохранением ID администратора.
This commit is contained in:
parent
f0ad5fd74f
commit
62ba8b5877
52
Program.cs
52
Program.cs
@ -18,6 +18,7 @@ class Program
|
||||
private static Dictionary<long, bool> usersWaitingForReport = new Dictionary<long, bool>(); // Отслеживаем состояние пользователей
|
||||
private static HashSet<long> admins = new HashSet<long>(); // Хранение списка администраторов
|
||||
private static string adminPassword = "admin123"; // Простой пароль для администратора
|
||||
private static Dictionary<long, string> adminFullNames = new Dictionary<long, string>();
|
||||
|
||||
static async Task Main()
|
||||
{
|
||||
@ -233,7 +234,7 @@ class Program
|
||||
{
|
||||
admins.Add(message.Chat.Id);
|
||||
// Сохраняем администратора в базу данных
|
||||
await SaveAdminToDatabase(message.Chat.Id);
|
||||
await SaveAdminToDatabase(message.Chat.Id, ""); // Добавляем пустую строку для fullName
|
||||
|
||||
var authMessage = await botClient.SendMessage(message.Chat.Id, "✅ Вы авторизованы как администратор!");
|
||||
Log.Information($"Новый администратор: {message.Chat.Id}");
|
||||
@ -241,6 +242,7 @@ class Program
|
||||
await botClient.DeleteMessage(message.Chat.Id, authMessage.MessageId);
|
||||
await SendMainMenu(botClient, message.Chat.Id);
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
var authMessage = await botClient.SendMessage(message.Chat.Id, "❌ Неверный пароль!");
|
||||
@ -397,21 +399,23 @@ class Program
|
||||
if (message.Text.StartsWith("/admin"))
|
||||
{
|
||||
string[] parts = message.Text.Split(' ');
|
||||
if (parts.Length == 2 && parts[1] == adminPassword)
|
||||
if (parts.Length == 3 && parts[1] == adminPassword)
|
||||
{
|
||||
string fullName = parts[2];
|
||||
admins.Add(message.Chat.Id);
|
||||
adminFullNames[message.Chat.Id] = fullName;
|
||||
// Сохраняем администратора в базу данных
|
||||
await SaveAdminToDatabase(message.Chat.Id);
|
||||
await SaveAdminToDatabase(message.Chat.Id, fullName);
|
||||
|
||||
var authMessage = await botClient.SendMessage(message.Chat.Id, "✅ Вы авторизованы как администратор!");
|
||||
Log.Information($"Новый администратор: {message.Chat.Id}");
|
||||
Log.Information($"Новый администратор: {message.Chat.Id}, ФИО: {fullName}");
|
||||
await Task.Delay(2000);
|
||||
await botClient.DeleteMessage(message.Chat.Id, authMessage.MessageId);
|
||||
await SendMainMenu(botClient, message.Chat.Id);
|
||||
}
|
||||
else
|
||||
{
|
||||
var authMessage = await botClient.SendMessage(message.Chat.Id, "❌ Неверный пароль!");
|
||||
var authMessage = await botClient.SendMessage(message.Chat.Id, "❌ Неверный пароль или ФИО!");
|
||||
await Task.Delay(2000);
|
||||
await botClient.DeleteMessage(message.Chat.Id, authMessage.MessageId);
|
||||
await SendMainMenu(botClient, message.Chat.Id);
|
||||
@ -419,6 +423,7 @@ class Program
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// В блоке для обработки текстовых сообщений
|
||||
else if (message.Text == "/admins")
|
||||
{
|
||||
@ -777,7 +782,7 @@ class Program
|
||||
{
|
||||
await connection.OpenAsync();
|
||||
var command = connection.CreateCommand();
|
||||
command.CommandText = "SELECT Priority, Room, Description, ReporterName, Status, DateCreated FROM Reports WHERE Id = @id";
|
||||
command.CommandText = "SELECT Priority, Room, Description, ReporterName, Status, DateCreated, AdminId FROM Reports WHERE Id = @id";
|
||||
command.Parameters.AddWithValue("@id", reportId);
|
||||
|
||||
using (var reader = await command.ExecuteReaderAsync())
|
||||
@ -790,6 +795,8 @@ class Program
|
||||
string reporterName = reader.GetString(3);
|
||||
string status = reader.GetString(4);
|
||||
string dateCreated = reader.GetDateTime(5).ToString("yyyy-MM-dd HH:mm:ss");
|
||||
long adminId = reader.GetInt64(6);
|
||||
string adminFullName = adminFullNames.ContainsKey(adminId) ? adminFullNames[adminId] : "Неизвестно";
|
||||
|
||||
string priorityEmoji = GetPriorityEmoji(priority);
|
||||
string statusEmoji = GetStatusEmoji(status);
|
||||
@ -822,7 +829,8 @@ class Program
|
||||
$"Описание: {description}\n" +
|
||||
$"ФИО: {reporterName}\n" +
|
||||
$"Статус: {statusEmoji} {status}\n" +
|
||||
$"Дата создания: {dateCreated}";
|
||||
$"Дата создания: {dateCreated}\n" +
|
||||
$"Администратор: {adminFullName}";
|
||||
|
||||
await botClient.SendMessage(
|
||||
chatId: chatId,
|
||||
@ -1072,6 +1080,7 @@ class Program
|
||||
string description = "";
|
||||
string priority = "";
|
||||
string room = "";
|
||||
string changerFullName = adminFullNames[changerId];
|
||||
|
||||
using (var connection = new SqliteConnection("Data Source=bot.db"))
|
||||
{
|
||||
@ -1107,7 +1116,7 @@ class Program
|
||||
|
||||
await _botClient.SendMessage(
|
||||
chatId: adminId,
|
||||
text: $"{priorityEmoji} <b>Заявка #{reportId} взята в работу</b>\n\n" +
|
||||
text: $"{priorityEmoji} <b>Заявка #{reportId} взята в работу администратором {changerFullName}</b>\n\n" +
|
||||
$"<b>Приоритет:</b> {priority}\n" +
|
||||
$"<b>Кабинет:</b> {room}\n" +
|
||||
$"<b>Фрагмент описания:</b> {description.Substring(0, Math.Min(50, description.Length))}...",
|
||||
@ -1152,13 +1161,14 @@ class Program
|
||||
// Если статус не изменился, прерываем выполнение
|
||||
if (oldStatus == newStatus) return;
|
||||
|
||||
// Обновляем статус
|
||||
// Обновляем статус и сохраняем ID администратора
|
||||
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.CommandText = "UPDATE Reports SET Status = @status, AdminId = @adminId WHERE Id = @id";
|
||||
command.Parameters.AddWithValue("@status", newStatus);
|
||||
command.Parameters.AddWithValue("@adminId", changerId);
|
||||
command.Parameters.AddWithValue("@id", reportId);
|
||||
await command.ExecuteNonQueryAsync();
|
||||
|
||||
@ -1183,6 +1193,7 @@ class Program
|
||||
|
||||
|
||||
|
||||
|
||||
private static async Task SaveReportToDatabase(long chatId, Report report)
|
||||
{
|
||||
string connectionString = "Data Source=bot.db"; // Используем SQLite
|
||||
@ -1340,10 +1351,11 @@ class Program
|
||||
await connection.OpenAsync();
|
||||
var command = connection.CreateCommand();
|
||||
command.CommandText = @"
|
||||
CREATE TABLE IF NOT EXISTS Admins (
|
||||
Id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
ChatId INTEGER NOT NULL UNIQUE
|
||||
);";
|
||||
CREATE TABLE IF NOT EXISTS Admins (
|
||||
Id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
ChatId INTEGER NOT NULL UNIQUE,
|
||||
FullName TEXT NOT NULL
|
||||
);";
|
||||
await command.ExecuteNonQueryAsync();
|
||||
Log.Information("Таблица Admins успешно создана (если её не было).");
|
||||
}
|
||||
@ -1354,8 +1366,9 @@ class Program
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Метод для сохранения администратора в базу данных
|
||||
private static async Task SaveAdminToDatabase(long chatId)
|
||||
private static async Task SaveAdminToDatabase(long chatId, string fullName)
|
||||
{
|
||||
try
|
||||
{
|
||||
@ -1373,8 +1386,9 @@ class Program
|
||||
{
|
||||
// Добавляем нового админа
|
||||
var insertCommand = connection.CreateCommand();
|
||||
insertCommand.CommandText = "INSERT INTO Admins (ChatId) VALUES (@chatId)";
|
||||
insertCommand.CommandText = "INSERT INTO Admins (ChatId, FullName) VALUES (@chatId, @fullName)";
|
||||
insertCommand.Parameters.AddWithValue("@chatId", chatId);
|
||||
insertCommand.Parameters.AddWithValue("@fullName", fullName);
|
||||
await insertCommand.ExecuteNonQueryAsync();
|
||||
Log.Information($"Администратор {chatId} добавлен в базу данных");
|
||||
}
|
||||
@ -1395,15 +1409,17 @@ class Program
|
||||
{
|
||||
await connection.OpenAsync();
|
||||
var command = connection.CreateCommand();
|
||||
command.CommandText = "SELECT ChatId FROM Admins";
|
||||
command.CommandText = "SELECT ChatId, FullName FROM Admins";
|
||||
|
||||
using (var reader = await command.ExecuteReaderAsync())
|
||||
{
|
||||
while (await reader.ReadAsync())
|
||||
{
|
||||
long adminId = reader.GetInt64(0);
|
||||
string fullName = reader.GetString(1);
|
||||
admins.Add(adminId);
|
||||
Log.Information($"Загружен администратор с ID: {adminId}");
|
||||
adminFullNames[adminId] = fullName;
|
||||
Log.Information($"Загружен администратор с ID: {adminId}, ФИО: {fullName}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user