реализация кнопок

This commit is contained in:
student 2025-03-19 13:24:38 +07:00
parent 0946c2dcb9
commit 8978283ed1

View File

@ -9,6 +9,7 @@ using Serilog;
using Telegram.Bot; using Telegram.Bot;
using Telegram.Bot.Types; using Telegram.Bot.Types;
using Telegram.Bot.Types.Enums; using Telegram.Bot.Types.Enums;
using Telegram.Bot.Types.ReplyMarkups;
class Program class Program
{ {
@ -50,7 +51,7 @@ class Program
{ {
// Инициализация клиента бота // Инициализация клиента бота
_botClient = new TelegramBotClient(_botToken); _botClient = new TelegramBotClient(_botToken);
var me = await _botClient.GetMeAsync(); var me = await _botClient.GetMe(); // Добавили await для получения объекта User
Log.Information($"Бот {me.FirstName} запущен! ID: {me.Id}"); Log.Information($"Бот {me.FirstName} запущен! ID: {me.Id}");
} }
catch (Exception ex) catch (Exception ex)
@ -97,52 +98,32 @@ class Program
if (message.Text == "/start") if (message.Text == "/start")
{ {
await botClient.SendMessage(chatId: message.Chat.Id, text: "Привет! Я бот для сбора заявок на ремонт оборудования. Отправь /report для подачи заявки."); // Отправляем главное меню с кнопками
Log.Information($"Ответ на команду /start отправлен."); var keyboard = new InlineKeyboardMarkup(new[]
{
new InlineKeyboardButton[] // Кнопки для навигации
{
InlineKeyboardButton.WithCallbackData("Подать заявку", "report"),
InlineKeyboardButton.WithCallbackData("Просмотр заявок", "view_reports")
}
});
await botClient.SendMessage(
chatId: message.Chat.Id,
text: "Привет! Я бот для сбора заявок на ремонт оборудования.",
replyMarkup: keyboard
);
Log.Information($"Ответ на команду /start с кнопками отправлен.");
} }
else if (message.Text == "/report") else if (message.Text == "report")
{ {
usersWaitingForReport[message.Chat.Id] = true; // Отметить, что пользователь должен отправить описание usersWaitingForReport[message.Chat.Id] = true; // Отметить, что пользователь должен отправить описание
await botClient.SendMessage(chatId: message.Chat.Id, text: "Пожалуйста, отправьте описание проблемы."); await botClient.SendMessage(chatId: message.Chat.Id, text: "Пожалуйста, отправьте описание проблемы.");
Log.Information("Ответ на команду /report отправлен."); Log.Information("Ответ на кнопку 'Подать заявку' отправлен.");
} }
else if (message.Text.StartsWith("/admin")) else if (admins.Contains(message.Chat.Id) && message.Text == "view_reports")
{ {
string passwordAttempt = message.Text.Substring(7); // Получаем пароль, который ввел пользователь await ViewReports(botClient, message.Chat.Id);
if (passwordAttempt == adminPassword)
{
admins.Add(message.Chat.Id); // Назначаем пользователя администратором
await botClient.SendMessage(chatId: message.Chat.Id, text: "Вы стали администратором.");
Log.Information($"Пользователь {message.Chat.Id} стал администратором.");
}
else
{
await botClient.SendMessage(chatId: message.Chat.Id, text: "Неверный пароль.");
Log.Information($"Неудачная попытка входа для пользователя {message.Chat.Id}.");
}
}
else if (admins.Contains(message.Chat.Id)) // Команды доступны только для администраторов
{
if (message.Text == "/view_reports")
{
await ViewReports(botClient, message.Chat.Id);
}
else if (message.Text.StartsWith("/change_status "))
{
string[] parts = message.Text.Split(' ', 3);
if (parts.Length >= 3)
{
long reportId = long.Parse(parts[1]);
string newStatus = parts[2];
await ChangeReportStatus(reportId, newStatus);
await botClient.SendMessage(chatId: message.Chat.Id, text: "Статус заявки изменен.");
}
else
{
await botClient.SendMessage(chatId: message.Chat.Id, text: "Неверный формат команды. Используйте /change_status <Id> <новый статус>.");
}
}
} }
else if (usersWaitingForReport.ContainsKey(message.Chat.Id) && usersWaitingForReport[message.Chat.Id]) else if (usersWaitingForReport.ContainsKey(message.Chat.Id) && usersWaitingForReport[message.Chat.Id])
{ {
@ -154,8 +135,9 @@ class Program
} }
else else
{ {
await botClient.SendMessage(chatId: message.Chat.Id, text: "Неизвестная команда. Используйте /start."); // Ответ на нераспознанные сообщения
Log.Information("Ответ на неизвестную команду отправлен."); await botClient.SendMessage(chatId: message.Chat.Id, text: "Неизвестная команда. Используйте кнопки для навигации.");
Log.Information("Ответ на неизвестную команду с кнопками отправлен.");
} }
} }
catch (Exception ex) catch (Exception ex)
@ -261,35 +243,6 @@ class Program
} }
} }
private static async Task ChangeReportStatus(long reportId, string newStatus)
{
string connectionString = "Data Source=bot.db";
try
{
using (var connection = new SqliteConnection(connectionString))
{
await connection.OpenAsync();
var command = connection.CreateCommand();
command.CommandText =
@"
UPDATE Reports
SET Status = @Status
WHERE Id = @Id;
";
command.Parameters.AddWithValue("@Status", newStatus);
command.Parameters.AddWithValue("@Id", reportId);
await command.ExecuteNonQueryAsync();
Log.Information($"Статус заявки с ID {reportId} изменен на {newStatus}.");
}
}
catch (Exception ex)
{
Log.Error($"Ошибка при изменении статуса заявки: {ex.Message}");
}
}
private static Task HandleErrorAsync(ITelegramBotClient botClient, Exception exception, CancellationToken cancellationToken) private static Task HandleErrorAsync(ITelegramBotClient botClient, Exception exception, CancellationToken cancellationToken)
{ {
Log.Error($"Ошибка в процессе работы с ботом: {exception.Message}"); Log.Error($"Ошибка в процессе работы с ботом: {exception.Message}");