Как сохранить и обработать ответ пользователя в telegram боте. (C#)
Часто на просторах интернета вижу, как люди сталкиваются с проблемой сохранения последующего ответа пользователя на сообщения бота, когда пишут бота на c#. Например, в библиотеке telebot для python есть отдельный метод register_next_step_handler, который регистрирует следующее сообщение пользователя. Сегодня я подробно разберу реализацию этого на c#.
P.S. Кто и так знает, как работать с базами данных и создавать элементарных ботов, сразу переходите к основной части.
Создание базы данных и элементарного бота
Заходим в Visual Studio, создаём консольное приложение и подключаем нужные пакеты через nuget:
Telegram.Bot
System.Data.SqlClient
Прописываем нужные директивы в код.
Далее в обозревателе решений создаём базу данных.
Далее открываем обозреватель серверов (Вид => Обозреватель серверов) , открываем нашу базу данных. В ней нам нужно лишь создать таблицу.
Создаём 2 колонки с типом данных int, называем таблицу и нажимаем «Обновить». Когда таблица создана перейдём к написанию элементарного бота.
В классе Program создаём 2 экземпляра класса:
connectionString находится в свойстве базы данных. (пкм по database1.mdf в обозревателе серверов => свойства => строка подключения/connection string)
в main методе пропишем обработчики на сообщения и запустим приём обновлений (по возможности использовать webhook). В обработчике сообщений создадим экземпляр этого же сообщения.
Шаблон бота готов, можем перейти к основной теме статьи.
Основная часть. Обработка сообщений.
Для начала поставим перед собой задачу. При нажатии на первую кнопку клавиатуры бот попросит ввести пользователя два числа через пробел, после чего отправит ему сумму этих двух чисел. При нажатии на вторую кнопку, бот отправит произведение двух чисел.
Начнём с того, что при вводе /start мы запишем в таблицу идентификатор пользователя и начальное значение второй колонки, пускай будет 0.
Потом обработчики на кнопки клавиатуры.
Далее, при поступлении каждого сообщения, нам нужно проверять значение второй колонки у написавшего пользователя. Тогда мы сможем отловить момент, когда у него во второй колонке 1 или 2 и обработать это сообщение. После обработки нужно обратно установить ‘0’ во вторую колонку, что-бы его сообщения дальше не триггерили. В обработчике сообщений напишем вот такой код (этот блок кода должен идти после if(msg.Text == «/start») а также перед остальным кодом).
Далее, когда у нас определенна переменная, сразу в обработчике сообщений ставим проверку на значение этой переменной. В них прописываем нужные нам действия, это может быть что угодно, но я не буду отходить от нашего примера.
Таких блоков можно создать почти бесконечность. Плюс этого способа в том, что пользователи друг другу не мешают и бот сможет обрабатывать сразу несколько пользователей одновременно.