From de22b30321c4d6ecce0b59b902a0f66a800fef04 Mon Sep 17 00:00:00 2001 From: 107 <107@DESKTOP-UP8U7M2> Date: Thu, 20 Mar 2025 12:06:45 +0700 Subject: [PATCH] =?UTF-8?q?=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=BE=D0=B9?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=B2=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20=D0=B8=D0=BB=D0=B8=20=D0=BE=D1=82=D0=BA=D0=BB=D1=8E?= =?UTF-8?q?=D1=87=D0=B5=D0=BD=D0=B8=D1=8F=20=D1=83=D0=B2=D0=B5=D0=B4=D0=BE?= =?UTF-8?q?=D0=BC=D0=BB=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=BE=20=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=D1=81=D1=80=D0=BE=D1=87=D0=BA=D0=B5=20=D0=B7=D0=B0=D1=8F?= =?UTF-8?q?=D0=B2=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Program.cs | 98 +++++++++++++++++++++++++++++++++++------------------- 1 file changed, 63 insertions(+), 35 deletions(-) diff --git a/Program.cs b/Program.cs index 41c1d11..f2f5ea9 100644 --- a/Program.cs +++ b/Program.cs @@ -93,7 +93,7 @@ class Program private static async Task MonitorReportStatus(long reportId, CancellationToken token) { // Ждем 15 секунд перед первой проверкой - await Task.Delay(TimeSpan.FromHours(1), token); + await Task.Delay(15000, token); while (!token.IsCancellationRequested) { @@ -132,7 +132,7 @@ class Program } // Ждем 15 секунд перед следующей проверкой - await Task.Delay(TimeSpan.FromHours(1), token); + await Task.Delay(15000, token); } } @@ -355,7 +355,18 @@ class Program await SendMainMenu(botClient, chatId); } } - + else if (data != null && data.StartsWith("enable_notifications_")) + { + long adminId = long.Parse(data.Substring("enable_notifications_".Length)); + await ToggleAdminNotifications(adminId, true); + await ShowAdminSettings(botClient, chatId); + } + else if (data != null && data.StartsWith("disable_notifications_")) + { + long adminId = long.Parse(data.Substring("disable_notifications_".Length)); + await ToggleAdminNotifications(adminId, false); + await ShowAdminSettings(botClient, chatId); + } // Также добавим обработку команды /removeadmin в секцию обработки текстовых сообщений: // В блоке для обработки текстовых сообщений (после if (message.Text.StartsWith("/admin"))) @@ -1266,34 +1277,23 @@ class Program } // Получаем список всех администраторов из базы данных - var adminsList = new List<(long chatId, string username)>(); + var adminsList = new List<(long chatId, string username, bool notifyOnPendingReports)>(); using (var connection = new SqliteConnection("Data Source=bot.db")) { await connection.OpenAsync(); var command = connection.CreateCommand(); - command.CommandText = "SELECT ChatId FROM Admins"; + command.CommandText = "SELECT ChatId, FullName, NotifyOnPendingReports FROM Admins"; using (var reader = await command.ExecuteReaderAsync()) { while (await reader.ReadAsync()) { long adminId = reader.GetInt64(0); - string username = "Неизвестно"; + string username = reader.GetString(1); + bool notifyOnPendingReports = reader.GetInt32(2) == 1; - // Пытаемся получить имя пользователя - try - { - var user = await botClient.GetChat(adminId); - username = user.Username ?? user.FirstName ?? "Неизвестно"; - } - catch - { - // Если возникает ошибка при получении информации о пользователе, - // просто используем "Неизвестно" - } - - adminsList.Add((adminId, username)); + adminsList.Add((adminId, username, notifyOnPendingReports)); } } } @@ -1312,13 +1312,16 @@ class Program var messageText = new System.Text.StringBuilder(); messageText.AppendLine("📋 Список администраторов:\n"); - for (int i = 0; i < adminsList.Count; i++) + foreach (var (adminId, username, notifyOnPendingReports) in adminsList) { - var (adminId, username) = adminsList[i]; - messageText.AppendLine($"{i + 1}. {username} (ID: {adminId})"); + string notificationStatus = notifyOnPendingReports ? "✅ Включены" : "❌ Отключены"; + string toggleAction = notifyOnPendingReports ? "disable_notifications" : "enable_notifications"; + + messageText.AppendLine($"{username} (ID: {adminId}) - Уведомления: {notificationStatus}"); buttons.Add(new[] { - InlineKeyboardButton.WithCallbackData($"❌ Удалить {username}", $"removeadmin_{adminId}") + InlineKeyboardButton.WithCallbackData($"❌ Удалить {username}", $"removeadmin_{adminId}"), + InlineKeyboardButton.WithCallbackData($"Уведомления: {notificationStatus}", $"{toggleAction}_{adminId}") }); } @@ -1344,6 +1347,29 @@ class Program + private static async Task ToggleAdminNotifications(long adminId, bool enable) + { + try + { + using (var connection = new SqliteConnection("Data Source=bot.db")) + { + await connection.OpenAsync(); + var command = connection.CreateCommand(); + command.CommandText = "UPDATE Admins SET NotifyOnPendingReports = @notify WHERE ChatId = @chatId"; + command.Parameters.AddWithValue("@notify", enable ? 1 : 0); + command.Parameters.AddWithValue("@chatId", adminId); + await command.ExecuteNonQueryAsync(); + Log.Information($"Уведомления для администратора {adminId} {(enable ? "включены" : "отключены")}"); + } + } + catch (Exception ex) + { + Log.Error($"Ошибка при переключении уведомлений для администратора {adminId}: {ex.Message}"); + } + } + + + private static async Task NotifyAdminsAboutWorkAssignment(long reportId, long changerId) { try @@ -1633,35 +1659,36 @@ 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, - FullName TEXT NOT NULL - );"; + CREATE TABLE IF NOT EXISTS Admins ( + Id INTEGER PRIMARY KEY AUTOINCREMENT, + ChatId INTEGER NOT NULL UNIQUE, + FullName TEXT NOT NULL, + NotifyOnPendingReports INTEGER NOT NULL DEFAULT 1 + );"; await command.ExecuteNonQueryAsync(); Log.Information("Таблица Admins успешно создана (если её не было)."); - // Проверяем наличие столбца FullName + // Проверяем наличие столбца NotifyOnPendingReports command.CommandText = "PRAGMA table_info(Admins);"; var tableInfo = await command.ExecuteReaderAsync(); - bool fullNameColumnExists = false; + bool notifyColumnExists = false; while (await tableInfo.ReadAsync()) { - if (tableInfo["name"].ToString() == "FullName") + if (tableInfo["name"].ToString() == "NotifyOnPendingReports") { - fullNameColumnExists = true; + notifyColumnExists = true; break; } } await tableInfo.CloseAsync(); // Закрываем DataReader перед изменением CommandText - if (!fullNameColumnExists) + if (!notifyColumnExists) { - command.CommandText = "ALTER TABLE Admins ADD COLUMN FullName TEXT NOT NULL DEFAULT '';"; + command.CommandText = "ALTER TABLE Admins ADD COLUMN NotifyOnPendingReports INTEGER NOT NULL DEFAULT 1;"; await command.ExecuteNonQueryAsync(); - Log.Information("Столбец FullName добавлен в таблицу Admins."); + Log.Information("Столбец NotifyOnPendingReports добавлен в таблицу Admins."); } } } @@ -1674,6 +1701,7 @@ class Program + // Метод для сохранения администратора в базу данных private static async Task SaveAdminToDatabase(long chatId, string fullName) {