From 62ba8b5877e613b744842b6a2e76dc05104d617b Mon Sep 17 00:00:00 2001 From: 107 <107@DESKTOP-UP8U7M2> Date: Thu, 20 Mar 2025 09:50:04 +0700 Subject: [PATCH] =?UTF-8?q?=D0=A3=D0=BB=D1=83=D1=87=D1=88=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D1=83=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20=D0=B0=D0=B4=D0=BC=D0=B8=D0=BD=D0=B8=D1=81=D1=82?= =?UTF-8?q?=D1=80=D0=B0=D1=82=D0=BE=D1=80=D0=B0=D0=BC=D0=B8=20=D0=B8=20?= =?UTF-8?q?=D0=BE=D1=82=D1=87=D0=B5=D1=82=D0=B0=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Внесены изменения в класс `Program` для улучшения управления администраторами: - Добавлено поле `adminFullNames` для хранения полных имен администраторов. - Изменена логика авторизации: теперь требуется указание полного имени. - Обновлена база данных для хранения полных имен в таблице `Admins`. - Изменены SQL-запросы для работы с новым полем `FullName`. - Обновлены сообщения пользователям с информацией о полном имени администратора. - Добавлен метод `SaveReportToDatabase` для сохранения отчетов. - Обновлена логика изменения статуса отчетов с сохранением ID администратора. --- Program.cs | 52 ++++++++++++++++++++++++++++++++++------------------ 1 file changed, 34 insertions(+), 18 deletions(-) diff --git a/Program.cs b/Program.cs index b3d27e8..760412c 100644 --- a/Program.cs +++ b/Program.cs @@ -18,6 +18,7 @@ class Program private static Dictionary usersWaitingForReport = new Dictionary(); // Отслеживаем состояние пользователей private static HashSet admins = new HashSet(); // Хранение списка администраторов private static string adminPassword = "admin123"; // Простой пароль для администратора + private static Dictionary adminFullNames = new Dictionary(); 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} Заявка #{reportId} взята в работу\n\n" + + text: $"{priorityEmoji} Заявка #{reportId} взята в работу администратором {changerFullName}\n\n" + $"Приоритет: {priority}\n" + $"Кабинет: {room}\n" + $"Фрагмент описания: {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}"); } } }