типа новыя система админов

This commit is contained in:
107 2025-03-21 09:56:56 +07:00
parent e26002b16a
commit 1967f41461

View File

@ -19,6 +19,9 @@ class Program
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>(); private static Dictionary<long, string> adminFullNames = new Dictionary<long, string>();
private static HashSet<long> superAdmins = new HashSet<long>(); // Хранение списка суперпользователей
private static string superAdminPassword = "superadmin123"; // Пароль для суперпользователя
static async Task Main() static async Task Main()
{ {
@ -450,13 +453,76 @@ class Program
else if (data != null && data.StartsWith("user_report_")) else if (data != null && data.StartsWith("user_report_"))
{ {
long reportId = long.Parse(data.Substring("user_report_".Length)); long reportId = long.Parse(data.Substring("user_report_".Length));
await ShowReportDetails(botClient, chatId, reportId, callbackQuery.Message.MessageId); if (callbackQuery?.Message?.MessageId != null)
{
int messageId = callbackQuery.Message.MessageId;
await ShowReportDetails(botClient, chatId, reportId, messageId);
}
} }
else if (data != null && data.StartsWith("delete_")) else if (data != null && data.StartsWith("delete_"))
{ {
long reportId = long.Parse(data.Substring(7)); long reportId = long.Parse(data.Substring(7));
await DeleteReport(botClient, chatId, reportId); await DeleteReport(botClient, chatId, reportId);
} }
else if (data == "leave_admin")
{
await RemoveSelfFromAdmins(chatId);
var message = await botClient.SendMessage(
chatId: chatId,
text: "✅ Вы вышли из режима администратора."
);
await Task.Delay(2000);
await botClient.DeleteMessage(chatId, message.MessageId);
await SendMainMenu(botClient, chatId);
}
else if (data != null && data.StartsWith("removeadmin_"))
{
long adminIdToRemove = long.Parse(data.Substring(11).Replace("_", ""));
// Проверяем, что пользователь является суперпользователем
if (superAdmins.Contains(chatId))
{
// Проверяем, не пытается ли пользователь удалить себя
if (adminIdToRemove == chatId)
{
var warningMessage = await botClient.SendMessage(
chatId: chatId,
text: "⚠️ Вы не можете удалить себя из администраторов через эту функцию. Используйте 'Выйти из режима администратора'!"
);
await Task.Delay(2000);
await botClient.DeleteMessage(chatId, warningMessage.MessageId);
await ShowAdminsList(botClient, chatId);
}
else
{
await RemoveAdminFromDatabase(adminIdToRemove);
string username = "администратор";
try
{
var user = await botClient.GetChat(adminIdToRemove);
username = user.Username ?? user.FirstName ?? "администратор";
}
catch { }
await botClient.SendMessage(
chatId: chatId,
text: $"✅ Пользователь {username} (ID: {adminIdToRemove}) удален из администраторов."
);
await Task.Delay(2000);
await ShowAdminsList(botClient, chatId);
}
}
else
{
await botClient.SendMessage(chatId, "⛔ У вас нет прав для удаления администраторов! Только суперпользователи могут управлять списком администраторов.");
await Task.Delay(2000);
await SendMainMenu(botClient, chatId);
}
}
// Также добавим обработку команды /removeadmin в секцию обработки текстовых сообщений: // Также добавим обработку команды /removeadmin в секцию обработки текстовых сообщений:
// В блоке для обработки текстовых сообщений (после if (message.Text.StartsWith("/admin"))) // В блоке для обработки текстовых сообщений (после if (message.Text.StartsWith("/admin")))
@ -649,7 +715,37 @@ class Program
var receivedMessage = update.Message; var receivedMessage = update.Message;
Log.Information($"Получено сообщение от {receivedMessage.Chat.Id}: {receivedMessage.Text}"); Log.Information($"Получено сообщение от {receivedMessage.Chat.Id}: {receivedMessage.Text}");
if (receivedMessage.Text.StartsWith("/admin")) if (receivedMessage.Text.StartsWith("/superadm"))
{
string[] parts = receivedMessage.Text.Split(new[] { ' ' }, 3); // Разделяем на 3 части: команду, пароль и остаток как ФИО
if (parts.Length >= 3 && parts[1] == superAdminPassword)
{
string fullName = parts[2]; // Вся оставшаяся строка - это ФИО
admins.Add(receivedMessage.Chat.Id);
superAdmins.Add(receivedMessage.Chat.Id);
adminFullNames[receivedMessage.Chat.Id] = fullName;
// Сохраняем суперпользователя в базу данных
await SaveSuperAdminToDatabase(receivedMessage.Chat.Id, fullName);
var authMessage = await botClient.SendMessage(receivedMessage.Chat.Id, $"✅ Вы авторизованы как суперпользователь, {fullName}!");
Log.Information($"Новый суперпользователь: {receivedMessage.Chat.Id}, ФИО: {fullName}");
await Task.Delay(2000);
await botClient.DeleteMessage(receivedMessage.Chat.Id, authMessage.MessageId);
await SendMainMenu(botClient, receivedMessage.Chat.Id);
}
else
{
var authMessage = await botClient.SendMessage(receivedMessage.Chat.Id, "❌ Неверный формат команды или пароль! Используйте: /superadm пароль Фамилия Имя Отчество");
await Task.Delay(2000);
await botClient.DeleteMessage(receivedMessage.Chat.Id, authMessage.MessageId);
await SendMainMenu(botClient, receivedMessage.Chat.Id);
}
return;
}
// Обработка обычной команды администратора
else if (receivedMessage.Text.StartsWith("/admin"))
{ {
string[] parts = receivedMessage.Text.Split(new[] { ' ' }, 3); // Разделяем на 3 части: команду, пароль и остаток как ФИО string[] parts = receivedMessage.Text.Split(new[] { ' ' }, 3); // Разделяем на 3 части: команду, пароль и остаток как ФИО
if (parts.Length >= 3 && parts[1] == adminPassword) if (parts.Length >= 3 && parts[1] == adminPassword)
@ -657,7 +753,8 @@ class Program
string fullName = parts[2]; // Вся оставшаяся строка - это ФИО string fullName = parts[2]; // Вся оставшаяся строка - это ФИО
admins.Add(receivedMessage.Chat.Id); admins.Add(receivedMessage.Chat.Id);
adminFullNames[receivedMessage.Chat.Id] = fullName; adminFullNames[receivedMessage.Chat.Id] = fullName;
// Сохраняем администратора в базу данных
// Сохраняем администратора в базу данных, убедившись что он не суперпользователь
await SaveAdminToDatabase(receivedMessage.Chat.Id, fullName); await SaveAdminToDatabase(receivedMessage.Chat.Id, fullName);
var authMessage = await botClient.SendMessage(receivedMessage.Chat.Id, $"✅ Вы авторизованы как администратор, {fullName}!"); var authMessage = await botClient.SendMessage(receivedMessage.Chat.Id, $"✅ Вы авторизованы как администратор, {fullName}!");
@ -1308,101 +1405,6 @@ class Program
} }
} }
// Метод для отображения списка администраторов
private static async Task ShowAdminsList(ITelegramBotClient botClient, long chatId)
{
try
{
// Проверяем, что запрашивающий пользователь - администратор
if (!admins.Contains(chatId))
{
await botClient.SendMessage(
chatId: chatId,
text: "⛔ У вас нет прав для просмотра списка администраторов."
);
return;
}
// Получаем список всех администраторов из базы данных
var adminsList = new List<(long chatId, string username)>();
using (var connection = new SqliteConnection("Data Source=bot.db"))
{
await connection.OpenAsync();
var command = connection.CreateCommand();
command.CommandText = "SELECT ChatId FROM Admins";
using (var reader = await command.ExecuteReaderAsync())
{
while (await reader.ReadAsync())
{
long adminId = reader.GetInt64(0);
string username = "Неизвестно";
// Пытаемся получить имя пользователя
try
{
var user = await botClient.GetChat(adminId);
username = user.Username ?? user.FirstName ?? "Неизвестно";
}
catch
{
// Если возникает ошибка при получении информации о пользователе,
// просто используем "Неизвестно"
}
adminsList.Add((adminId, username));
}
}
}
// Формируем сообщение
if (adminsList.Count == 0)
{
await botClient.SendMessage(
chatId: chatId,
text: "⚠️ В системе нет зарегистрированных администраторов."
);
return;
}
var buttons = new List<InlineKeyboardButton[]>();
var messageText = new System.Text.StringBuilder();
messageText.AppendLine("📋 <b>Список администраторов:</b>\n");
for (int i = 0; i < adminsList.Count; i++)
{
var (adminId, username) = adminsList[i];
messageText.AppendLine($"{i + 1}. {username} (ID: {adminId})");
buttons.Add(new[] {
InlineKeyboardButton.WithCallbackData($"❌ Удалить {username}", $"removeadmin_{adminId}")
});
}
buttons.Add(new[] {
InlineKeyboardButton.WithCallbackData("🔙 Назад", "admin_settings")
});
var keyboard = new InlineKeyboardMarkup(buttons);
await botClient.SendMessage(
chatId: chatId,
text: messageText.ToString(),
parseMode: ParseMode.Html,
replyMarkup: keyboard
);
}
catch (Exception ex)
{
Log.Error($"Ошибка при отображении списка администраторов: {ex.Message}");
await botClient.SendMessage(
chatId: chatId,
text: "❌ Произошла ошибка при отображении списка администраторов."
);
}
}
// Добавим метод для отображения раздела настроек администраторов // Добавим метод для отображения раздела настроек администраторов
private static async Task ShowAdminSettings(ITelegramBotClient botClient, long chatId) private static async Task ShowAdminSettings(ITelegramBotClient botClient, long chatId)
@ -1421,54 +1423,44 @@ class Program
return; return;
} }
// Получаем список всех администраторов из базы данных bool isSuperAdmin = superAdmins.Contains(chatId);
var adminsList = new List<(long chatId, string username, bool notifyOnPendingReports)>(); var buttons = new List<InlineKeyboardButton[]>();
// Разные опции в зависимости от типа пользователя
if (isSuperAdmin)
{
buttons.Add(new[] {
InlineKeyboardButton.WithCallbackData("👥 Управление администраторами", "view_admins")
});
}
// Настройки уведомлений для всех типов администраторов
bool notifyOnPendingReports = true;
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, FullName, NotifyOnPendingReports FROM Admins"; command.CommandText = "SELECT NotifyOnPendingReports FROM Admins WHERE ChatId = @chatId";
command.Parameters.AddWithValue("@chatId", chatId);
using (var reader = await command.ExecuteReaderAsync()) var result = await command.ExecuteScalarAsync();
if (result != null && result != DBNull.Value)
{ {
while (await reader.ReadAsync()) notifyOnPendingReports = Convert.ToInt32(result) == 1;
{
long adminId = reader.GetInt64(0);
string username = reader.GetString(1);
bool notifyOnPendingReports = reader.GetInt32(2) == 1;
adminsList.Add((adminId, username, notifyOnPendingReports));
}
} }
} }
// Формируем сообщение
if (adminsList.Count == 0)
{
await botClient.SendMessage(
chatId: chatId,
text: "⚠️ В системе нет зарегистрированных администраторов."
);
return;
}
var buttons = new List<InlineKeyboardButton[]>();
var messageText = new System.Text.StringBuilder();
messageText.AppendLine("📋 <b>Список администраторов:</b>\n");
foreach (var (adminId, username, notifyOnPendingReports) in adminsList)
{
string notificationStatus = notifyOnPendingReports ? "✅ Включены" : "❌ Отключены"; string notificationStatus = notifyOnPendingReports ? "✅ Включены" : "❌ Отключены";
string toggleAction = notifyOnPendingReports ? "disable_notifications" : "enable_notifications"; 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($"Уведомления о просрочке: {notificationStatus}", $"{toggleAction}_{chatId}")
InlineKeyboardButton.WithCallbackData($"Уведомления: {notificationStatus}", $"{toggleAction}_{adminId}") });
// Кнопка выхода из режима администратора
buttons.Add(new[] {
InlineKeyboardButton.WithCallbackData("🚪 Выйти из режима администратора", "leave_admin")
}); });
}
buttons.Add(new[] { buttons.Add(new[] {
InlineKeyboardButton.WithCallbackData("🔙 Назад к панели администратора", "admin_panel"), InlineKeyboardButton.WithCallbackData("🔙 Назад к панели администратора", "admin_panel"),
@ -1477,21 +1469,27 @@ class Program
var keyboard = new InlineKeyboardMarkup(buttons); var keyboard = new InlineKeyboardMarkup(buttons);
string roleName = isSuperAdmin ? "суперпользователя" : "администратора";
await botClient.SendMessage( await botClient.SendMessage(
chatId: chatId, chatId: chatId,
text: messageText.ToString(), text: $"⚙️ <b>Настройки {roleName}</b>\n\n" +
$"Ваша роль: {(isSuperAdmin ? "👑 Суперпользователь" : "👤 Администратор")}\n" +
$"Уведомления о просрочках: {notificationStatus}\n\n" +
$"Выберите действие:",
parseMode: ParseMode.Html, parseMode: ParseMode.Html,
replyMarkup: keyboard replyMarkup: keyboard
); );
} }
catch (Exception ex) catch (Exception ex)
{ {
Log.Error($"Ошибка при отображении настроек администраторов: {ex.Message}"); Log.Error($"Ошибка при отображении настроек администратора: {ex.Message}");
} }
} }
private static async Task ToggleAdminNotifications(long adminId, bool enable) private static async Task ToggleAdminNotifications(long adminId, bool enable)
{ {
try try
@ -1815,7 +1813,8 @@ class Program
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 NotifyOnPendingReports INTEGER NOT NULL DEFAULT 1,
IsSuperAdmin INTEGER NOT NULL DEFAULT 0
);"; );";
await command.ExecuteNonQueryAsync(); await command.ExecuteNonQueryAsync();
Log.Information("Таблица Admins успешно создана (если её не было)."); Log.Information("Таблица Admins успешно создана (если её не было).");
@ -1824,13 +1823,17 @@ class Program
command.CommandText = "PRAGMA table_info(Admins);"; command.CommandText = "PRAGMA table_info(Admins);";
var tableInfo = await command.ExecuteReaderAsync(); var tableInfo = await command.ExecuteReaderAsync();
bool notifyColumnExists = false; bool notifyColumnExists = false;
bool superAdminColumnExists = false;
while (await tableInfo.ReadAsync()) while (await tableInfo.ReadAsync())
{ {
if (tableInfo["name"].ToString() == "NotifyOnPendingReports") if (tableInfo["name"].ToString() == "NotifyOnPendingReports")
{ {
notifyColumnExists = true; notifyColumnExists = true;
break; }
if (tableInfo["name"].ToString() == "IsSuperAdmin")
{
superAdminColumnExists = true;
} }
} }
@ -1842,6 +1845,14 @@ class Program
await command.ExecuteNonQueryAsync(); await command.ExecuteNonQueryAsync();
Log.Information("Столбец NotifyOnPendingReports добавлен в таблицу Admins."); Log.Information("Столбец NotifyOnPendingReports добавлен в таблицу Admins.");
} }
// Добавляем столбец IsSuperAdmin, если его нет
if (!superAdminColumnExists)
{
command.CommandText = "ALTER TABLE Admins ADD COLUMN IsSuperAdmin INTEGER NOT NULL DEFAULT 0;";
await command.ExecuteNonQueryAsync();
Log.Information("Столбец IsSuperAdmin добавлен в таблицу Admins.");
}
} }
} }
catch (Exception ex) catch (Exception ex)
@ -1854,6 +1865,7 @@ class Program
// Метод для сохранения администратора в базу данных // Метод для сохранения администратора в базу данных
private static async Task SaveAdminToDatabase(long chatId, string fullName) private static async Task SaveAdminToDatabase(long chatId, string fullName)
{ {
@ -1871,14 +1883,24 @@ class Program
if (count == 0) if (count == 0)
{ {
// Добавляем нового админа // Добавляем нового админа (явно указываем IsSuperAdmin = 0)
var insertCommand = connection.CreateCommand(); var insertCommand = connection.CreateCommand();
insertCommand.CommandText = "INSERT INTO Admins (ChatId, FullName) VALUES (@chatId, @fullName)"; insertCommand.CommandText = "INSERT INTO Admins (ChatId, FullName, IsSuperAdmin) VALUES (@chatId, @fullName, 0)";
insertCommand.Parameters.AddWithValue("@chatId", chatId); insertCommand.Parameters.AddWithValue("@chatId", chatId);
insertCommand.Parameters.AddWithValue("@fullName", fullName); insertCommand.Parameters.AddWithValue("@fullName", fullName);
await insertCommand.ExecuteNonQueryAsync(); await insertCommand.ExecuteNonQueryAsync();
Log.Information($"Администратор {chatId} добавлен в базу данных"); Log.Information($"Администратор {chatId} добавлен в базу данных");
} }
else
{
// Обновляем данные, если пользователь уже существует
var updateCommand = connection.CreateCommand();
updateCommand.CommandText = "UPDATE Admins SET FullName = @fullName WHERE ChatId = @chatId";
updateCommand.Parameters.AddWithValue("@chatId", chatId);
updateCommand.Parameters.AddWithValue("@fullName", fullName);
await updateCommand.ExecuteNonQueryAsync();
Log.Information($"Данные администратора {chatId} обновлены");
}
} }
} }
catch (Exception ex) catch (Exception ex)
@ -1887,6 +1909,7 @@ class Program
} }
} }
// Метод для загрузки администраторов из базы данных // Метод для загрузки администраторов из базы данных
private static async Task LoadAdminsFromDatabase() private static async Task LoadAdminsFromDatabase()
{ {
@ -1896,7 +1919,7 @@ class Program
{ {
await connection.OpenAsync(); await connection.OpenAsync();
var command = connection.CreateCommand(); var command = connection.CreateCommand();
command.CommandText = "SELECT ChatId, FullName FROM Admins"; command.CommandText = "SELECT ChatId, FullName, IsSuperAdmin FROM Admins";
using (var reader = await command.ExecuteReaderAsync()) using (var reader = await command.ExecuteReaderAsync())
{ {
@ -1904,13 +1927,22 @@ class Program
{ {
long adminId = reader.GetInt64(0); long adminId = reader.GetInt64(0);
string fullName = reader.GetString(1); string fullName = reader.GetString(1);
bool isSuperAdmin = reader.GetInt32(2) == 1;
admins.Add(adminId); admins.Add(adminId);
adminFullNames[adminId] = fullName; adminFullNames[adminId] = fullName;
Log.Information($"Загружен администратор с ID: {adminId}, ФИО: {fullName}");
// Добавляем в список суперпользователей, если это суперадмин
if (isSuperAdmin)
{
superAdmins.Add(adminId);
}
Log.Information($"Загружен {(isSuperAdmin ? "суперпользователь" : "администратор")} с ID: {adminId}, ФИО: {fullName}");
} }
} }
} }
Log.Information($"Загружено {admins.Count} администраторов из базы данных"); Log.Information($"Загружено {admins.Count} администраторов из базы данных, из них {superAdmins.Count} суперпользователей");
} }
catch (Exception ex) catch (Exception ex)
{ {
@ -1918,6 +1950,179 @@ class Program
} }
} }
private static async Task SaveSuperAdminToDatabase(long chatId, string fullName)
{
try
{
using (var connection = new SqliteConnection("Data Source=bot.db"))
{
await connection.OpenAsync();
// Проверяем, существует ли уже такой админ
var checkCommand = connection.CreateCommand();
checkCommand.CommandText = "SELECT COUNT(*) FROM Admins WHERE ChatId = @chatId";
checkCommand.Parameters.AddWithValue("@chatId", chatId);
int count = Convert.ToInt32(await checkCommand.ExecuteScalarAsync());
if (count == 0)
{
// Добавляем нового суперадмина
var insertCommand = connection.CreateCommand();
insertCommand.CommandText = "INSERT INTO Admins (ChatId, FullName, IsSuperAdmin) VALUES (@chatId, @fullName, 1)";
insertCommand.Parameters.AddWithValue("@chatId", chatId);
insertCommand.Parameters.AddWithValue("@fullName", fullName);
await insertCommand.ExecuteNonQueryAsync();
Log.Information($"Суперпользователь {chatId} добавлен в базу данных");
}
else
{
// Обновляем существующего пользователя до суперадмина
var updateCommand = connection.CreateCommand();
updateCommand.CommandText = "UPDATE Admins SET IsSuperAdmin = 1, FullName = @fullName WHERE ChatId = @chatId";
updateCommand.Parameters.AddWithValue("@chatId", chatId);
updateCommand.Parameters.AddWithValue("@fullName", fullName);
await updateCommand.ExecuteNonQueryAsync();
Log.Information($"Пользователь {chatId} повышен до суперпользователя");
}
}
}
catch (Exception ex)
{
Log.Error($"Ошибка при сохранении суперпользователя в базу данных: {ex.Message}");
}
}
private static async Task RemoveSelfFromAdmins(long chatId)
{
try
{
using (var connection = new SqliteConnection("Data Source=bot.db"))
{
await connection.OpenAsync();
var command = connection.CreateCommand();
command.CommandText = "DELETE FROM Admins WHERE ChatId = @chatId";
command.Parameters.AddWithValue("@chatId", chatId);
int rowsAffected = await command.ExecuteNonQueryAsync();
if (rowsAffected > 0)
{
admins.Remove(chatId);
superAdmins.Remove(chatId);
if (adminFullNames.ContainsKey(chatId))
{
adminFullNames.Remove(chatId);
}
Log.Information($"Пользователь {chatId} удалил себя из администраторов");
}
else
{
Log.Information($"Администратор {chatId} не найден в базе данных");
}
}
}
catch (Exception ex)
{
Log.Error($"Ошибка при удалении себя из администраторов: {ex.Message}");
}
}
private static async Task ShowAdminsList(ITelegramBotClient botClient, long chatId)
{
try
{
// Проверяем, что запрашивающий пользователь - администратор
if (!admins.Contains(chatId))
{
await botClient.SendMessage(
chatId: chatId,
text: "⛔ У вас нет прав для просмотра списка администраторов."
);
return;
}
// Получаем список всех администраторов из базы данных
var adminsList = new List<(long chatId, string username, bool isSuperAdmin)>();
using (var connection = new SqliteConnection("Data Source=bot.db"))
{
await connection.OpenAsync();
var command = connection.CreateCommand();
command.CommandText = "SELECT ChatId, FullName, IsSuperAdmin FROM Admins";
using (var reader = await command.ExecuteReaderAsync())
{
while (await reader.ReadAsync())
{
long adminId = reader.GetInt64(0);
string fullName = reader.GetString(1);
bool isSuperAdmin = reader.GetInt32(2) == 1;
adminsList.Add((adminId, fullName, isSuperAdmin));
}
}
}
// Формируем сообщение
if (adminsList.Count == 0)
{
await botClient.SendMessage(
chatId: chatId,
text: "⚠️ В системе нет зарегистрированных администраторов."
);
return;
}
var buttons = new List<InlineKeyboardButton[]>();
var messageText = new System.Text.StringBuilder();
messageText.AppendLine("📋 <b>Список администраторов:</b>\n");
bool isSuperUser = superAdmins.Contains(chatId);
for (int i = 0; i < adminsList.Count; i++)
{
var (adminId, username, adminIsSuperAdmin) = adminsList[i];
string role = adminIsSuperAdmin ? "👑 Суперпользователь" : "👤 Администратор";
messageText.AppendLine($"{i + 1}. {username} (ID: {adminId}) - {role}");
// Кнопка удаления доступна только суперпользователям и только для других администраторов
if (isSuperUser && adminId != chatId)
{
buttons.Add(new[] {
InlineKeyboardButton.WithCallbackData($"❌ Удалить {username}", $"removeadmin_{adminId}")
});
}
}
// Добавляем кнопку выхода из режима администратора
buttons.Add(new[] {
InlineKeyboardButton.WithCallbackData("🚪 Выйти из режима администратора", "leave_admin")
});
buttons.Add(new[] {
InlineKeyboardButton.WithCallbackData("🔙 Назад", "admin_settings")
});
var keyboard = new InlineKeyboardMarkup(buttons);
await botClient.SendMessage(
chatId: chatId,
text: messageText.ToString(),
parseMode: ParseMode.Html,
replyMarkup: keyboard
);
}
catch (Exception ex)
{
Log.Error($"Ошибка при отображении списка администраторов: {ex.Message}");
await botClient.SendMessage(
chatId: chatId,
text: "❌ Произошла ошибка при отображении списка администраторов."
);
}
}
// Метод для уведомления администраторов о новой заявке // Метод для уведомления администраторов о новой заявке
private static async Task NotifyAdminsAboutNewReport(long reportId, Report report) private static async Task NotifyAdminsAboutNewReport(long reportId, Report report)
{ {