Ввод комментария пользователем после нажатия Reply кнопок в телеграмм боте C#
есть реализация телеграмм бота на C#, в котором есть меню с Reply кнопками. Необходимо настроить корректную обработку нажатий нескольких кнопок, т.е. сделать так, чтобы после нажатия на эту кнопку бот присылал пользователю сообщение с просьбой ввести комментарий, затем пользователь должен вводить сообщение и бот должен сохранить его в качестве комментария. Прилагаю код текущего решения:
if (e.Message != null && e.Message.Type == MessageType.Text)
{
string text = e.Message.Text;
try
{
// Проверяем, является ли полученное сообщение нажатием одной из кнопок
if (ButtonMenu.Values.Contains(text)) // Если текст сообщения совпадает с одним из значений в словаре buttonMenu
{
// Получаем индекс кнопки из словаря buttonMenu
string buttonIndex = ButtonMenu.FirstOrDefault(x => x.Value == text).Key;
string buttonName = ButtonMenu[buttonIndex];
if (buttonIndex == "1" || buttonIndex == "2" || buttonIndex == "5)
{
await _botClient.SendTextMessageAsync(chatId, $"Вы выбрали {buttonName}. Введите комментарий:");
// Сохраняем информацию о том, что мы ожидаем комментарий от этого пользователя
usersAwaitingComment[chatId] = true;
}
else
{
await _botClient.SendTextMessageAsync(chatId, $"Вы выбрали {buttonName}. Сохранено!");
}
}
// Проверяем, ожидает ли бот комментарий от этого пользователя
if (usersAwaitingComment.TryGetValue(chatId, out bool isAwaitingComment) && isAwaitingComment)
{
// Получаем введённый комментарий
string comment = e.Message.Text;
// Отправляем подтверждение пользователю
await _botClient.SendTextMessageAsync(chatId, $"Ваш комментарий: {comment}");
// Убираем пользователя из списка ожидающих комментариев
usersAwaitingComment[chatId] = false;
}
}
В данном случае бот, в качестве комментария пользователя воспринимает текст самой кнопки, на которую он нажал, поскольку после нажатия на кнопку ее название дублируется в чате, нужно это исправить, при этом не используя вместо этого inline клавиатуру. Хотелось бы найти решение задачи. Спасибо.
Ответы (1 шт):
async Task OnMessage(Message msg, UpdateType type)
{
if (msg.Text == "/start")
{
var replyMarkup = new ReplyKeyboardMarkup(true)
.AddButton("Комментарий 1")
.AddNewRow("Комментарий 2");
var sent = await bot.SendMessage(msg.Chat.Id, "Нажмите на кнопку", replyMarkup: replyMarkup);
return;
}
if (msg.Text == "Комментарий 1")
{
var sent = await bot.SendMessage(msg.Chat.Id, "Вы нажали кнопку 1 теперь введите комментарий");
//далее устанавливаем юзеру состояния ожидания комментария
return;
}
if (msg.Text == "Комментарий 2")
{
var sent = await bot.SendMessage(msg.Chat.Id, "Вы нажали кнопку 2 теперь введите комментарий");
//далее устанавливаем юзеру состояния ожидания комментария
return;
}
//тут якобы проверяем ждём ли от пользователя комментарий
if (true)
{
var sent = await bot.SendMessage(msg.Chat.Id, $"Ваш комментарий {msg.Text} сохранён.");
return;
}
}