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