diff --git a/Program.cs b/Program.cs index dc3bdfe..4597a1e 100644 --- a/Program.cs +++ b/Program.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.IO; using System.Threading; using System.Threading.Tasks; @@ -13,6 +14,7 @@ class Program { private static string _botToken = string.Empty; private static TelegramBotClient _botClient = null!; + private static Dictionary usersWaitingForReport = new Dictionary(); // Отслеживаем состояние пользователей static async Task Main() { @@ -34,7 +36,7 @@ class Program throw; } - // Настраиваем логирование + // Настроим логирование Log.Logger = new LoggerConfiguration() .WriteTo.Console() .WriteTo.File("logs/log.txt", rollingInterval: RollingInterval.Day) @@ -46,7 +48,7 @@ class Program { // Инициализация клиента бота _botClient = new TelegramBotClient(_botToken); - var me = await _botClient.GetMe(); + var me = await _botClient.GetMeAsync(); Log.Information($"Бот {me.FirstName} запущен! ID: {me.Id}"); } catch (Exception ex) @@ -90,23 +92,42 @@ class Program if (message.Text == "/start") { - await botClient.SendMessage( + await botClient.SendTextMessageAsync( chatId: message.Chat.Id, - text: "Приветик! Я бот для сбора заявок на ремонт оборудования. Отправь /report для подачи заявки." + text: "Привет! Я бот для сбора заявок на ремонт оборудования. Отправь /report для подачи заявки." ); - Log.Information($"Ответ на команду /start отправлен. ТЕКСТ ОТВЕТА: {message.Text}"); + Log.Information($"Ответ на команду /start отправлен. ТЕКСТ ОТВЕТА: Привет! Я бот для сбора заявок на ремонт оборудования. Отправь /report для подачи заявки."); } else if (message.Text == "/report") { - await botClient.SendMessage( + usersWaitingForReport[message.Chat.Id] = true; // Отметить, что пользователь должен отправить описание + await botClient.SendTextMessageAsync( chatId: message.Chat.Id, text: "Пожалуйста, отправьте описание проблемы." ); Log.Information("Ответ на команду /report отправлен."); } + else if (usersWaitingForReport.ContainsKey(message.Chat.Id) && usersWaitingForReport[message.Chat.Id]) + { + // Пользователь отправил описание проблемы + string problemDescription = message.Text; + + // Сохраняем описание проблемы в базу данных (SQLite) + await SaveReportToDatabase(message.Chat.Id, problemDescription); + + // Ответ пользователю, что заявка принята + await botClient.SendTextMessageAsync( + chatId: message.Chat.Id, + text: "Спасибо за заявку! Мы обработаем её в ближайшее время." + ); + + // Сброс состояния + usersWaitingForReport[message.Chat.Id] = false; + Log.Information($"Заявка пользователя {message.Chat.Id} сохранена в базе данных. Описание: {problemDescription}"); + } else { - await botClient.SendMessage( + await botClient.SendTextMessageAsync( chatId: message.Chat.Id, text: "Неизвестная команда. Используйте /start." ); @@ -120,6 +141,35 @@ class Program } } + private static async Task SaveReportToDatabase(long chatId, string description) + { + string connectionString = "Data Source=bot.db"; // Используем SQLite + + try + { + using (var connection = new SqliteConnection(connectionString)) + { + await connection.OpenAsync(); + + var insertCommand = connection.CreateCommand(); + insertCommand.CommandText = + @" + INSERT INTO Reports (ChatId, Description) + VALUES (@ChatId, @Description); + "; + insertCommand.Parameters.AddWithValue("@ChatId", chatId); + insertCommand.Parameters.AddWithValue("@Description", description); + + await insertCommand.ExecuteNonQueryAsync(); + Log.Information($"Заявка от пользователя {chatId} успешно сохранена."); + } + } + catch (Exception ex) + { + Log.Error($"Ошибка при сохранении заявки в базу данных: {ex.Message}"); + } + } + private static Task HandleErrorAsync(ITelegramBotClient botClient, Exception exception, CancellationToken cancellationToken) { Log.Error($"Ошибка в процессе работы с ботом: {exception.Message}");