настройка включения или отключения уведомлений о просрочке заявки
This commit is contained in:
parent
4957c697ff
commit
de22b30321
90
Program.cs
90
Program.cs
@ -93,7 +93,7 @@ class Program
|
|||||||
private static async Task MonitorReportStatus(long reportId, CancellationToken token)
|
private static async Task MonitorReportStatus(long reportId, CancellationToken token)
|
||||||
{
|
{
|
||||||
// Ждем 15 секунд перед первой проверкой
|
// Ждем 15 секунд перед первой проверкой
|
||||||
await Task.Delay(TimeSpan.FromHours(1), token);
|
await Task.Delay(15000, token);
|
||||||
|
|
||||||
while (!token.IsCancellationRequested)
|
while (!token.IsCancellationRequested)
|
||||||
{
|
{
|
||||||
@ -132,7 +132,7 @@ class Program
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Ждем 15 секунд перед следующей проверкой
|
// Ждем 15 секунд перед следующей проверкой
|
||||||
await Task.Delay(TimeSpan.FromHours(1), token);
|
await Task.Delay(15000, token);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -355,7 +355,18 @@ class Program
|
|||||||
await SendMainMenu(botClient, chatId);
|
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 в секцию обработки текстовых сообщений:
|
// Также добавим обработку команды /removeadmin в секцию обработки текстовых сообщений:
|
||||||
|
|
||||||
// В блоке для обработки текстовых сообщений (после if (message.Text.StartsWith("/admin")))
|
// В блоке для обработки текстовых сообщений (после 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"))
|
using (var connection = new SqliteConnection("Data Source=bot.db"))
|
||||||
{
|
{
|
||||||
await connection.OpenAsync();
|
await connection.OpenAsync();
|
||||||
var command = connection.CreateCommand();
|
var command = connection.CreateCommand();
|
||||||
command.CommandText = "SELECT ChatId FROM Admins";
|
command.CommandText = "SELECT ChatId, FullName, NotifyOnPendingReports FROM Admins";
|
||||||
|
|
||||||
using (var reader = await command.ExecuteReaderAsync())
|
using (var reader = await command.ExecuteReaderAsync())
|
||||||
{
|
{
|
||||||
while (await reader.ReadAsync())
|
while (await reader.ReadAsync())
|
||||||
{
|
{
|
||||||
long adminId = reader.GetInt64(0);
|
long adminId = reader.GetInt64(0);
|
||||||
string username = "Неизвестно";
|
string username = reader.GetString(1);
|
||||||
|
bool notifyOnPendingReports = reader.GetInt32(2) == 1;
|
||||||
|
|
||||||
// Пытаемся получить имя пользователя
|
adminsList.Add((adminId, username, notifyOnPendingReports));
|
||||||
try
|
|
||||||
{
|
|
||||||
var user = await botClient.GetChat(adminId);
|
|
||||||
username = user.Username ?? user.FirstName ?? "Неизвестно";
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
// Если возникает ошибка при получении информации о пользователе,
|
|
||||||
// просто используем "Неизвестно"
|
|
||||||
}
|
|
||||||
|
|
||||||
adminsList.Add((adminId, username));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1312,13 +1312,16 @@ class Program
|
|||||||
var messageText = new System.Text.StringBuilder();
|
var messageText = new System.Text.StringBuilder();
|
||||||
messageText.AppendLine("📋 <b>Список администраторов:</b>\n");
|
messageText.AppendLine("📋 <b>Список администраторов:</b>\n");
|
||||||
|
|
||||||
for (int i = 0; i < adminsList.Count; i++)
|
foreach (var (adminId, username, notifyOnPendingReports) in adminsList)
|
||||||
{
|
{
|
||||||
var (adminId, username) = adminsList[i];
|
string notificationStatus = notifyOnPendingReports ? "✅ Включены" : "❌ Отключены";
|
||||||
messageText.AppendLine($"{i + 1}. {username} (ID: {adminId})");
|
string toggleAction = notifyOnPendingReports ? "disable_notifications" : "enable_notifications";
|
||||||
|
|
||||||
|
messageText.AppendLine($"{username} (ID: {adminId}) - Уведомления: {notificationStatus}");
|
||||||
|
|
||||||
buttons.Add(new[] {
|
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)
|
private static async Task NotifyAdminsAboutWorkAssignment(long reportId, long changerId)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@ -1636,32 +1662,33 @@ class Program
|
|||||||
CREATE TABLE IF NOT EXISTS Admins (
|
CREATE TABLE IF NOT EXISTS Admins (
|
||||||
Id INTEGER PRIMARY KEY AUTOINCREMENT,
|
Id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
ChatId INTEGER NOT NULL UNIQUE,
|
ChatId INTEGER NOT NULL UNIQUE,
|
||||||
FullName TEXT NOT NULL
|
FullName TEXT NOT NULL,
|
||||||
|
NotifyOnPendingReports INTEGER NOT NULL DEFAULT 1
|
||||||
);";
|
);";
|
||||||
await command.ExecuteNonQueryAsync();
|
await command.ExecuteNonQueryAsync();
|
||||||
Log.Information("Таблица Admins успешно создана (если её не было).");
|
Log.Information("Таблица Admins успешно создана (если её не было).");
|
||||||
|
|
||||||
// Проверяем наличие столбца FullName
|
// Проверяем наличие столбца NotifyOnPendingReports
|
||||||
command.CommandText = "PRAGMA table_info(Admins);";
|
command.CommandText = "PRAGMA table_info(Admins);";
|
||||||
var tableInfo = await command.ExecuteReaderAsync();
|
var tableInfo = await command.ExecuteReaderAsync();
|
||||||
bool fullNameColumnExists = false;
|
bool notifyColumnExists = false;
|
||||||
|
|
||||||
while (await tableInfo.ReadAsync())
|
while (await tableInfo.ReadAsync())
|
||||||
{
|
{
|
||||||
if (tableInfo["name"].ToString() == "FullName")
|
if (tableInfo["name"].ToString() == "NotifyOnPendingReports")
|
||||||
{
|
{
|
||||||
fullNameColumnExists = true;
|
notifyColumnExists = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
await tableInfo.CloseAsync(); // Закрываем DataReader перед изменением CommandText
|
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();
|
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)
|
private static async Task SaveAdminToDatabase(long chatId, string fullName)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user