From 34b201d3e02c7fb7d6e3140bd9f1bbc466599ede Mon Sep 17 00:00:00 2001 From: Professional Date: Wed, 19 Mar 2025 21:59:35 +0700 Subject: [PATCH] =?UTF-8?q?=D1=84=D0=B8=D0=BA=D1=81=20=D1=83=D0=B4=D0=B0?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B8=D0=B7=20=D0=B0=D0=B4?= =?UTF-8?q?=D0=BC=D0=B8=D0=BD=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Program.cs | 367 ++++++++++++++++++++--------------------------------- 1 file changed, 137 insertions(+), 230 deletions(-) diff --git a/Program.cs b/Program.cs index a17c9d3..a9f1450 100644 --- a/Program.cs +++ b/Program.cs @@ -135,137 +135,17 @@ class Program userReports[chatId] = new Report(); var priorityKeyboard = new InlineKeyboardMarkup(new[] { - new[] - { - InlineKeyboardButton.WithCallbackData("Низкий", "priority_low"), - InlineKeyboardButton.WithCallbackData("Средний", "priority_medium"), - InlineKeyboardButton.WithCallbackData("Высокий", "priority_high") - } - }); + new[] + { + InlineKeyboardButton.WithCallbackData("Низкий", "priority_low"), + InlineKeyboardButton.WithCallbackData("Средний", "priority_medium"), + InlineKeyboardButton.WithCallbackData("Высокий", "priority_high") + } + }); await botClient.SendMessage(chatId, "Пожалуйста, выберите приоритет:", replyMarkup: priorityKeyboard); Log.Information($"Пользователь {chatId} начал создание заявки"); } - else if (data == "admin_settings") - { - if (admins.Contains(chatId)) - { - await ShowAdminSettings(botClient, chatId); - } - else - { - await botClient.SendMessage(chatId, "⛔ У вас нет прав для доступа к настройкам администраторов!"); - await Task.Delay(2000); - await SendMainMenu(botClient, chatId); - } - } - else if (data == "view_admins") - { - if (admins.Contains(chatId)) - { - await ShowAdminsList(botClient, chatId); - } - else - { - await botClient.SendMessage(chatId, "⛔ У вас нет прав для просмотра администраторов!"); - await Task.Delay(2000); - await SendMainMenu(botClient, chatId); - } - } - else if (data != null && data.StartsWith("removeadmin_")) - { - long adminIdToRemove = long.Parse(data.Substring(11)); - - // Проверяем, что пользователь является администратором - if (admins.Contains(chatId)) - { - // Проверяем, не пытается ли пользователь удалить себя - if (adminIdToRemove == chatId) - { - await botClient.SendMessage( - chatId: chatId, - text: "⚠️ Вы не можете удалить себя из администраторов!" - ); - } - 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 в секцию обработки текстовых сообщений: - - // В блоке для обработки текстовых сообщений (после if (message.Text.StartsWith("/admin"))) - else if (update.Type == UpdateType.Message && update.Message?.Text != null) - { - var message = update.Message; - Log.Information($"Получено сообщение от {message.Chat.Id}: {message.Text}"); - - if (message.Text.StartsWith("/admin")) - { - string[] parts = message.Text.Split(' '); - if (parts.Length == 2 && parts[1] == adminPassword) - { - admins.Add(message.Chat.Id); - // Сохраняем администратора в базу данных - await SaveAdminToDatabase(message.Chat.Id); - - var authMessage = await botClient.SendMessage(message.Chat.Id, "✅ Вы авторизованы как администратор!"); - Log.Information($"Новый администратор: {message.Chat.Id}"); - 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, "❌ Неверный пароль!"); - await Task.Delay(2000); - await botClient.DeleteMessage(message.Chat.Id, authMessage.MessageId); - await SendMainMenu(botClient, message.Chat.Id); - } - return; - } - - // В блоке для обработки текстовых сообщений - else if (message.Text == "/admins") - { - if (admins.Contains(message.Chat.Id)) - { - await ShowAdminsList(botClient, message.Chat.Id); - } - else - { - await botClient.SendMessage( - chatId: message.Chat.Id, - text: "⛔ У вас нет прав для просмотра списка администраторов!" - ); - } - } - } - - else if (data == "admin_panel") + else if (data == "admin_panel") { if (admins.Contains(chatId)) { @@ -355,116 +235,143 @@ class Program userReportSteps[chatId] = 2; await botClient.SendMessage(chatId, "Пожалуйста, укажите кабинет."); } - } - } + else if (data != null && data.StartsWith("removeadmin_")) + { + long adminIdToRemove = long.Parse(data.Substring(11)); - // Обработка текстовых сообщений - if (update.Type == UpdateType.Message && update.Message?.Text != null) - { - var message = update.Message; - Log.Information($"Получено сообщение от {message.Chat.Id}: {message.Text}"); - - if (message.Text.StartsWith("/admin")) - { - string[] parts = message.Text.Split(' '); - if (parts.Length == 2 && parts[1] == adminPassword) - { - admins.Add(message.Chat.Id); - // Сохраняем администратора в базу данных - await SaveAdminToDatabase(message.Chat.Id); - - var authMessage = await botClient.SendMessage(message.Chat.Id, "✅ Вы авторизованы как администратор!"); - Log.Information($"Новый администратор: {message.Chat.Id}"); - 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, "❌ Неверный пароль!"); - await Task.Delay(2000); - await botClient.DeleteMessage(message.Chat.Id, authMessage.MessageId); - await SendMainMenu(botClient, message.Chat.Id); - } - return; - } - - // В блоке для обработки текстовых сообщений - else if (message.Text == "/admins") - { - if (admins.Contains(message.Chat.Id)) - { - await ShowAdminsList(botClient, message.Chat.Id); - } - else - { - await botClient.SendMessage( - chatId: message.Chat.Id, - text: "⛔ У вас нет прав для просмотра списка администраторов!" - ); - } - } - - if (message.Text == "/start") - { - var keyboard = new InlineKeyboardMarkup(new[] - { - new[] - { - InlineKeyboardButton.WithCallbackData("Подать заявку", "report"), - InlineKeyboardButton.WithCallbackData("Панель администратора", "admin_panel") - } - }); - - await botClient.SendMessage( - chatId: message.Chat.Id, - text: "Привет! Я бот для сбора заявок на ремонт оборудования.", - replyMarkup: keyboard - ); - Log.Information($"Ответ на команду /start с кнопками отправлен."); - } - else if (usersWaitingForReport.TryGetValue(message.Chat.Id, out bool isWaiting) && isWaiting) - { - if (userReportSteps.TryGetValue(message.Chat.Id, out int step)) - { - switch (step) + // Проверяем, что пользователь является администратором + if (admins.Contains(chatId)) { - case 2: - userReports[message.Chat.Id].Room = message.Text; - userReportSteps[message.Chat.Id] = 3; - await botClient.SendMessage(message.Chat.Id, "Пожалуйста, опишите проблему."); - break; - case 3: - userReports[message.Chat.Id].Description = message.Text; - userReportSteps[message.Chat.Id] = 4; - await botClient.SendMessage(message.Chat.Id, "Пожалуйста, укажите ваше ФИО."); - break; - case 4: - userReports[message.Chat.Id].ReporterName = message.Text; - await SaveReportToDatabase(message.Chat.Id, userReports[message.Chat.Id]); - var mainMenuKeyboard = new InlineKeyboardMarkup(new[] - { - new[] - { - InlineKeyboardButton.WithCallbackData("Главное меню", "main_menu") - } - }); + // Проверяем, не пытается ли пользователь удалить себя + if (adminIdToRemove == chatId) + { await botClient.SendMessage( - message.Chat.Id, - "✅ Спасибо за заявку! Мы обработаем её в ближайшее время.", - replyMarkup: mainMenuKeyboard + chatId: chatId, + text: "⚠️ Вы не можете удалить себя из администраторов!" ); - usersWaitingForReport[message.Chat.Id] = false; - userReportSteps.Remove(message.Chat.Id); - userReports.Remove(message.Chat.Id); - Log.Information($"Заявка пользователя {message.Chat.Id} сохранена в базе данных."); - break; + } + 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); } } } - else + + // Обработка текстовых сообщений + if (update.Type == UpdateType.Message && update.Message?.Text != null) { - await botClient.SendMessage(message.Chat.Id, "ℹ️ Используйте команду /start для начала работы с ботом."); + var message = update.Message; + Log.Information($"Получено сообщение от {message.Chat.Id}: {message.Text}"); + + if (message.Text.StartsWith("/admin")) + { + string[] parts = message.Text.Split(' '); + if (parts.Length == 2 && parts[1] == adminPassword) + { + admins.Add(message.Chat.Id); + // Сохраняем администратора в базу данных + await SaveAdminToDatabase(message.Chat.Id); + + var authMessage = await botClient.SendMessage(message.Chat.Id, "✅ Вы авторизованы как администратор!"); + Log.Information($"Новый администратор: {message.Chat.Id}"); + 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, "❌ Неверный пароль!"); + await Task.Delay(2000); + await botClient.DeleteMessage(message.Chat.Id, authMessage.MessageId); + await SendMainMenu(botClient, message.Chat.Id); + } + return; + } + + if (message.Text == "/start") + { + var keyboard = new InlineKeyboardMarkup(new[] + { + new[] + { + InlineKeyboardButton.WithCallbackData("Подать заявку", "report"), + InlineKeyboardButton.WithCallbackData("Панель администратора", "admin_panel") + } + }); + + await botClient.SendMessage( + chatId: message.Chat.Id, + text: "Привет! Я бот для сбора заявок на ремонт оборудования.", + replyMarkup: keyboard + ); + Log.Information($"Ответ на команду /start с кнопками отправлен."); + } + else if (usersWaitingForReport.TryGetValue(message.Chat.Id, out bool isWaiting) && isWaiting) + { + if (userReportSteps.TryGetValue(message.Chat.Id, out int step)) + { + switch (step) + { + case 2: + userReports[message.Chat.Id].Room = message.Text; + userReportSteps[message.Chat.Id] = 3; + await botClient.SendMessage(message.Chat.Id, "Пожалуйста, опишите проблему."); + break; + case 3: + userReports[message.Chat.Id].Description = message.Text; + userReportSteps[message.Chat.Id] = 4; + await botClient.SendMessage(message.Chat.Id, "Пожалуйста, укажите ваше ФИО."); + break; + case 4: + userReports[message.Chat.Id].ReporterName = message.Text; + await SaveReportToDatabase(message.Chat.Id, userReports[message.Chat.Id]); + var mainMenuKeyboard = new InlineKeyboardMarkup(new[] + { + new[] + { + InlineKeyboardButton.WithCallbackData("Главное меню", "main_menu") + } + }); + await botClient.SendMessage( + message.Chat.Id, + "✅ Спасибо за заявку! Мы обработаем её в ближайшее время.", + replyMarkup: mainMenuKeyboard + ); + usersWaitingForReport[message.Chat.Id] = false; + userReportSteps.Remove(message.Chat.Id); + userReports.Remove(message.Chat.Id); + Log.Information($"Заявка пользователя {message.Chat.Id} сохранена в базе данных."); + break; + } + } + } + else + { + await botClient.SendMessage(message.Chat.Id, "ℹ️ Используйте команду /start для начала работы с ботом."); + } } } }