diff --git a/Program.cs b/Program.cs index 9b098b4..e597ff4 100644 --- a/Program.cs +++ b/Program.cs @@ -86,22 +86,7 @@ class Program // Ожидаем отмены через token cts.Token.WaitHandle.WaitOne(); } - private class ReportData - { - public ReportStep Step { get; set; } - public string Priority { get; set; } = string.Empty; - public string Room { get; set; } = string.Empty; - public string Description { get; set; } = string.Empty; - public string FullName { get; set; } = string.Empty; - } - private enum ReportStep - { - Priority, - Room, - Description, - FullName, - Completed - } + private static async Task DeletePreviousMessage(ITelegramBotClient botClient, long chatId, int messageId) { try @@ -114,7 +99,7 @@ class Program Log.Error($"Ошибка при удалении сообщения {messageId} в чате {chatId}: {ex.Message}"); } } - private static Dictionary reportCreation = new Dictionary(); + private static async Task HandleUpdateAsync(ITelegramBotClient botClient, Update update, CancellationToken cancellationToken) { @@ -141,192 +126,150 @@ class Program if (data == "report") { - // Начинаем процесс создания заявки с запроса приоритета - reportCreation[chatId] = new ReportData { Step = ReportStep.Priority }; - - var priorityKeyboard = new InlineKeyboardMarkup(new[] - { - new[] { - InlineKeyboardButton.WithCallbackData("Низкий", "priority_low") - }, - new[] { - InlineKeyboardButton.WithCallbackData("Средний", "priority_medium") - }, - new[] { - InlineKeyboardButton.WithCallbackData("Высокий", "priority_high") - }, - new[] { - InlineKeyboardButton.WithCallbackData("Отмена", "cancel_report") - } - }); - - await botClient.SendMessage(chatId, "Выберите приоритет заявки:", replyMarkup: priorityKeyboard); - Log.Information($"Пользователь {chatId} начал создание заявки - выбор приоритета"); + usersWaitingForReport[chatId] = true; + await botClient.SendMessage(chatId, "Пожалуйста, отправьте описание проблемы."); + Log.Information($"Пользователь {chatId} начал создание заявки"); } - else if (data != null && data.StartsWith("priority_")) + else if (data == "admin_panel") { - // Обрабатываем выбор приоритета - if (reportCreation.TryGetValue(chatId, out var reportData)) + if (admins.Contains(chatId)) { - string priority = data.Substring(9) switch - { - "low" => "Низкий", - "medium" => "Средний", - "high" => "Высокий", - _ => "Не указан" - }; - - reportData.Priority = priority; - reportData.Step = ReportStep.Room; - - var cancelKeyboard = new InlineKeyboardMarkup(new[] - { - new[] { InlineKeyboardButton.WithCallbackData("Отмена", "cancel_report") } - }); - - await botClient.SendMessage(chatId, "Введите номер кабинета:", replyMarkup: cancelKeyboard); - Log.Information($"Пользователь {chatId} выбрал приоритет {priority}"); - } - else if (data == "admin_panel") - { - if (admins.Contains(chatId)) - { - await SendAdminPanel(botClient, chatId); - } - else - { - var keyboard = new InlineKeyboardMarkup(new[] - { - new[] - { - InlineKeyboardButton.WithCallbackData("Главное меню", "main_menu") - } - }); - - await botClient.SendMessage(chatId, "⛔ Вы не являетесь администратором!", replyMarkup: keyboard); - Log.Information($"Неавторизованный доступ к админ-панели от {chatId}"); - } - } - else if (data == "view_reports") - { - if (admins.Contains(chatId)) - { - await ViewReports(botClient, chatId); - } - else - { - var keyboard = new InlineKeyboardMarkup(new[] - { - new[] - { - InlineKeyboardButton.WithCallbackData("Главное меню", "main_menu") - } - }); - - await botClient.SendMessage(chatId, "⛔ Вы не являетесь администратором!", replyMarkup: keyboard); - Log.Information($"Неавторизованный доступ к заявкам от {chatId}"); - } - } - else if (data == "view_archived_reports") - { - if (admins.Contains(chatId)) - { - await ViewArchivedReports(botClient, chatId); - } - else - { - var keyboard = new InlineKeyboardMarkup(new[] - { - new[] - { - InlineKeyboardButton.WithCallbackData("Главное меню", "main_menu") - } - }); - - await botClient.SendMessage(chatId, "⛔ Вы не являетесь администратором!", replyMarkup: keyboard); - Log.Information($"Неавторизованный доступ к архиву заявок от {chatId}"); - } - } - else if (data != null && data.StartsWith("report_")) - { - long reportId = long.Parse(data.Substring(7)); - if (callbackQuery?.Message?.MessageId != null) - { - int messageId = callbackQuery.Message.MessageId; - await ShowReportDetails(botClient, chatId, reportId, messageId); - } - } - else if (data != null && data.StartsWith("status_")) - { - string[] parts = data.Split('_'); - long reportId = long.Parse(parts[1]); - string newStatus = parts[2]; - if (callbackQuery?.Message?.MessageId != null) - { - int messageId = callbackQuery.Message.MessageId; - await UpdateReportStatus(reportId, newStatus); - await ShowReportDetails(botClient, chatId, reportId, messageId); - } - } - else if (data != null && data.StartsWith("delete_")) - { - long reportId = long.Parse(data.Substring(7)); - await DeleteReport(botClient, chatId, reportId); - } - else if (data == "back_to_list") - { - await ViewReports(botClient, chatId); - } - else if (data == "main_menu") - { - await SendMainMenu(botClient, chatId); - } - } - } - - // Обработка текстовых сообщений - if (update.Type == UpdateType.Message && update.Message?.Text != null) - { - var message = update.Message; - Log.Information($"Получено сообщение от {message.Chat.Id}: {message.Text}"); - - // Обработка команды /admin для авторизации - if (message.Text.StartsWith("/admin")) - { - string[] parts = message.Text.Split(' '); - if (parts.Length == 2 && parts[1] == adminPassword) - { - admins.Add(message.Chat.Id); - var keyboard = new InlineKeyboardMarkup(new[] - { - new[] - { - InlineKeyboardButton.WithCallbackData("Главное меню", "main_menu") - } - }); - - await botClient.SendMessage(message.Chat.Id, "✅ Вы авторизованы как администратор!", replyMarkup: keyboard); - Log.Information($"Новый администратор: {message.Chat.Id}"); + await SendAdminPanel(botClient, chatId); } else { var keyboard = new InlineKeyboardMarkup(new[] { + new[] + { + InlineKeyboardButton.WithCallbackData("Главное меню", "main_menu") + } + }); + + await botClient.SendMessage(chatId, "⛔ Вы не являетесь администратором!", replyMarkup: keyboard); + Log.Information($"Неавторизованный доступ к админ-панели от {chatId}"); + } + } + else if (data == "view_reports") + { + if (admins.Contains(chatId)) + { + await ViewReports(botClient, chatId); + } + else + { + var keyboard = new InlineKeyboardMarkup(new[] + { + new[] + { + InlineKeyboardButton.WithCallbackData("Главное меню", "main_menu") + } + }); + + await botClient.SendMessage(chatId, "⛔ Вы не являетесь администратором!", replyMarkup: keyboard); + Log.Information($"Неавторизованный доступ к заявкам от {chatId}"); + } + } + else if (data == "view_archived_reports") + { + if (admins.Contains(chatId)) + { + await ViewArchivedReports(botClient, chatId); + } + else + { + var keyboard = new InlineKeyboardMarkup(new[] + { + new[] + { + InlineKeyboardButton.WithCallbackData("Главное меню", "main_menu") + } + }); + + await botClient.SendMessage(chatId, "⛔ Вы не являетесь администратором!", replyMarkup: keyboard); + Log.Information($"Неавторизованный доступ к архиву заявок от {chatId}"); + } + } + else if (data != null && data.StartsWith("report_")) + { + long reportId = long.Parse(data.Substring(7)); + if (callbackQuery?.Message?.MessageId != null) + { + int messageId = callbackQuery.Message.MessageId; + await ShowReportDetails(botClient, chatId, reportId, messageId); + } + } + else if (data != null && data.StartsWith("status_")) + { + string[] parts = data.Split('_'); + long reportId = long.Parse(parts[1]); + string newStatus = parts[2]; + if (callbackQuery?.Message?.MessageId != null) + { + int messageId = callbackQuery.Message.MessageId; + await UpdateReportStatus(reportId, newStatus); + await ShowReportDetails(botClient, chatId, reportId, messageId); + } + } + else if (data != null && data.StartsWith("delete_")) + { + long reportId = long.Parse(data.Substring(7)); + await DeleteReport(botClient, chatId, reportId); + } + else if (data == "back_to_list") + { + await ViewReports(botClient, chatId); + } + else if (data == "main_menu") + { + await SendMainMenu(botClient, chatId); + } + } + } + + // Обработка текстовых сообщений + if (update.Type == UpdateType.Message && update.Message?.Text != null) + { + var message = update.Message; + Log.Information($"Получено сообщение от {message.Chat.Id}: {message.Text}"); + + // Обработка команды /admin для авторизации + if (message.Text.StartsWith("/admin")) + { + string[] parts = message.Text.Split(' '); + if (parts.Length == 2 && parts[1] == adminPassword) + { + admins.Add(message.Chat.Id); + var keyboard = new InlineKeyboardMarkup(new[] + { new[] { InlineKeyboardButton.WithCallbackData("Главное меню", "main_menu") } }); - await botClient.SendMessage(message.Chat.Id, "❌ Неверный пароль!", replyMarkup: keyboard); - } - return; + await botClient.SendMessage(message.Chat.Id, "✅ Вы авторизованы как администратор!", replyMarkup: keyboard); + Log.Information($"Новый администратор: {message.Chat.Id}"); } - - if (message.Text == "/start") + else { var keyboard = new InlineKeyboardMarkup(new[] { + new[] + { + InlineKeyboardButton.WithCallbackData("Главное меню", "main_menu") + } + }); + + await botClient.SendMessage(message.Chat.Id, "❌ Неверный пароль!", replyMarkup: keyboard); + } + return; + } + + if (message.Text == "/start") + { + var keyboard = new InlineKeyboardMarkup(new[] + { new[] { InlineKeyboardButton.WithCallbackData("Подать заявку", "report"), @@ -334,39 +277,38 @@ class Program } }); - await botClient.SendMessage( - chatId: message.Chat.Id, - text: "Привет! Я бот для сбора заявок на ремонт оборудования.", - replyMarkup: keyboard - ); - Log.Information($"Ответ на команду /start с кнопками отправлен."); - } - else if (usersWaitingForReport.TryGetValue(message.Chat.Id, out bool isWaiting) && isWaiting) - { - string problemDescription = message.Text; - await SaveReportToDatabase(message.Chat.Id, problemDescription); + await botClient.SendMessage( + chatId: message.Chat.Id, + text: "Привет! Я бот для сбора заявок на ремонт оборудования.", + replyMarkup: keyboard + ); + Log.Information($"Ответ на команду /start с кнопками отправлен."); + } + else if (usersWaitingForReport.TryGetValue(message.Chat.Id, out bool isWaiting) && isWaiting) + { + string problemDescription = message.Text; + await SaveReportToDatabase(message.Chat.Id, problemDescription); - // Создаем клавиатуру с кнопкой возврата - var keyboard = new InlineKeyboardMarkup(new[] - { + // Создаем клавиатуру с кнопкой возврата + var keyboard = new InlineKeyboardMarkup(new[] + { new[] { InlineKeyboardButton.WithCallbackData("Главное меню", "main_menu") } }); - await botClient.SendMessage( - chatId: message.Chat.Id, - text: "✅ Спасибо за заявку! Мы обработаем её в ближайшее время.", - replyMarkup: keyboard); + await botClient.SendMessage( + chatId: message.Chat.Id, + text: "✅ Спасибо за заявку! Мы обработаем её в ближайшее время.", + replyMarkup: keyboard); - usersWaitingForReport[message.Chat.Id] = false; - Log.Information($"Заявка пользователя {message.Chat.Id} сохранена в базе данных."); - } - else - { - await botClient.SendMessage(chatId: message.Chat.Id, text: "ℹ️ Используйте команду /start для начала работы с ботом."); - } + usersWaitingForReport[message.Chat.Id] = false; + Log.Information($"Заявка пользователя {message.Chat.Id} сохранена в базе данных."); + } + else + { + await botClient.SendMessage(chatId: message.Chat.Id, text: "ℹ️ Используйте команду /start для начала работы с ботом."); } } } @@ -410,6 +352,11 @@ class Program } } + + + + + private static async Task SendMainMenu(ITelegramBotClient botClient, long chatId) { var keyboard = new InlineKeyboardMarkup(new[]