@jenya7771

Правильный пример бота на node Telegram bot api?

Здравствуйте, пишу бота на nodeJs, и возник вопрос, как хранить и обрабатывать цепочку сообщений, например пользователь нажимает кнопку собрать машину и я ему задаю выберите цвет, выберите тип и тд. Где правильнее хранить ответ на каждый вопрос и как это всё обрабатывать?
Я сделал вот так, но это как я понимаю совершенно не правильно. Спасибо.
bot.on("callback_query", function (msg) {

		if (callback === 'startSearch') {

			bot.sendMessage(id, "Первый вопрос: ", {
				reply_markup: {
					one_time_keyboard: true,
					resize_keyboard: true,
					keyboard: servises.telegram.keyboard(CITY, 3, false)
				}
			})
			.then(res => {


				servises.redis.updateObject(`user_${id}`, [
				{
					field: 'search',
					value: {
						level: 'startSearch'
					}
				}
				])
				.catch(error => {
					console.log(error)
				})

				bot.answerCallbackQuery({
					callback_query_id: msg.id,
					text: "Поиск начался",
				});
			})
		}
})

И после когда пользователь пишет сообщение, я смотрю есть ли пометка в редисе что сейчас нужно принять от пользователя какой либо ответ на вопрос
bot.on('message', (msg) => {

	const message = msg.text;

	if (message === 'roomType') {

		if (ROOM_TYPE.indexOf(message) != -1) {

			bot.sendMessage(id, "Второй вопрос: ", {
				reply_markup: {
					resize_keyboard: true,
					one_time_keyboard: true,
					keyboard: servises.telegram.keyboard(LEASE_TERM, 2, false)
				}
			})
			.then(res => {

				user.level = 'leaseTerm';
				user.roomType = message;

				servises.redis.updateObject(`user_${id}`, [
				{
					field: 'search',
					value: user
				}
				])
				.catch(error => {
					console.log(error)
				})
			})
		} else {

			bot.sendMessage(id, "Такого варианта нет, выберите из предложеных:")
		}
	}
})

Может есть примеры реализации?
  • Вопрос задан
  • 5494 просмотра
Решения вопроса 1
mak_ufo
@mak_ufo
Почитайте про конечные автоматы. Если коротко, то вы должны где-то хранить состояние пользователя (аналог сессий), и в зависимости от конкретной сессии ожидать конкретный тип данных.

Уже скинули пример из телеграфа, там это хорошо реализовано.
З.Ы. Выкиньте уже node-telegram-bot-api на помойку)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы