Добавлен класс ReportData и улучшен процесс создания заявок
В код добавлен новый класс `ReportData` для хранения информации о заявках, а также перечисляемый тип `ReportStep` для определения этапов создания заявки. Введена структура данных `Dictionary<long, ReportData> reportCreation` для отслеживания процесса создания заявок по идентификатору чата. Изменен процесс обработки обновлений: теперь при выборе "report" пользователю предлагается выбрать приоритет через клавиатуру. Упрощена логика обработки выбора приоритета и удалены лишние проверки для админ-панели и просмотра заявок. Обновлены сообщения для пользователей, улучшено взаимодействие и управление состоянием ожидания заявки. Также обновлены кнопки навигации для более интуитивного пользовательского интерфейса.
This commit is contained in:
parent
4c42e61de3
commit
76c2a1492a
74
Program.cs
74
Program.cs
@ -86,7 +86,22 @@ class Program
|
|||||||
// Ожидаем отмены через token
|
// Ожидаем отмены через token
|
||||||
cts.Token.WaitHandle.WaitOne();
|
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)
|
private static async Task DeletePreviousMessage(ITelegramBotClient botClient, long chatId, int messageId)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@ -99,7 +114,7 @@ class Program
|
|||||||
Log.Error($"Ошибка при удалении сообщения {messageId} в чате {chatId}: {ex.Message}");
|
Log.Error($"Ошибка при удалении сообщения {messageId} в чате {chatId}: {ex.Message}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
private static Dictionary<long, ReportData> reportCreation = new Dictionary<long, ReportData>();
|
||||||
|
|
||||||
private static async Task HandleUpdateAsync(ITelegramBotClient botClient, Update update, CancellationToken cancellationToken)
|
private static async Task HandleUpdateAsync(ITelegramBotClient botClient, Update update, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
@ -126,9 +141,51 @@ class Program
|
|||||||
|
|
||||||
if (data == "report")
|
if (data == "report")
|
||||||
{
|
{
|
||||||
usersWaitingForReport[chatId] = true;
|
// Начинаем процесс создания заявки с запроса приоритета
|
||||||
await botClient.SendMessage(chatId, "Пожалуйста, отправьте описание проблемы.");
|
reportCreation[chatId] = new ReportData { Step = ReportStep.Priority };
|
||||||
Log.Information($"Пользователь {chatId} начал создание заявки");
|
|
||||||
|
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} начал создание заявки - выбор приоритета");
|
||||||
|
}
|
||||||
|
else if (data != null && data.StartsWith("priority_"))
|
||||||
|
{
|
||||||
|
// Обрабатываем выбор приоритета
|
||||||
|
if (reportCreation.TryGetValue(chatId, out var reportData))
|
||||||
|
{
|
||||||
|
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")
|
else if (data == "admin_panel")
|
||||||
{
|
{
|
||||||
@ -312,6 +369,7 @@ class Program
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Log.Error($"Ошибка при обработке обновлений: {ex.Message}");
|
Log.Error($"Ошибка при обработке обновлений: {ex.Message}");
|
||||||
@ -352,11 +410,6 @@ class Program
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private static async Task SendMainMenu(ITelegramBotClient botClient, long chatId)
|
private static async Task SendMainMenu(ITelegramBotClient botClient, long chatId)
|
||||||
{
|
{
|
||||||
var keyboard = new InlineKeyboardMarkup(new[]
|
var keyboard = new InlineKeyboardMarkup(new[]
|
||||||
@ -431,7 +484,6 @@ class Program
|
|||||||
// Добавляем кнопки навигации
|
// Добавляем кнопки навигации
|
||||||
buttons.Add(new[]
|
buttons.Add(new[]
|
||||||
{
|
{
|
||||||
InlineKeyboardButton.WithCallbackData("Назад", "admin_panel"),
|
|
||||||
InlineKeyboardButton.WithCallbackData("Главное меню", "main_menu")
|
InlineKeyboardButton.WithCallbackData("Главное меню", "main_menu")
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user