Последовательность ответов-вопросов телеграм бота node.js
Делаю телеграм бота, который может поддержать беседу с человеком, но не знаю как сделать так, чтобы бот задавал вопрос и только следующее сообщения после этого вопроса воспринимал как ответ и отвечал соответственно. Например в моем коде, бот задает вопрос "Чем занимаешься?" и я хочу чтобы только следующее сообщение воспринималось как ответ, и бот отвечал что-то типа "Очень интересное занятие!"
Мой код:
if (text.toLowerCase()==='давай') {
await bot.sendMessage(chatId, 'Чем занимаешься?')
}
Я хотел написать в этой же ветке новое условие if, но бот пишет сообщение из новой ветки, не дождавшись ответа пользователя
if (text.toLowerCase()==='давай') {
await bot.sendMessage(chatId, 'Чем занимаешься?')
if (text) {
return await bot.sendMessage(chatId, 'Очень интересное занятие!')
}
}
Уже не знаю как внедрить такой функционал, искал подобные вопросы, но не нашел в них подходящего для меня ответа, надеюсь на помощь
Ответы (1 шт):
Можешь что-то типа этого сделать. Вообще "поддержать беседу" довольно сложная задача, чтобы бот не казался "деревянным".. Для примера вопрос о любимом цвете, но анализ текста гораздо сложнее, чем просто условия if else.. Вопрос больше касается не телеграм ботов, а азов программирования, их стоит подтянуть. Области видимости, циклы и т.д. потому, что не сегодня - завтра понадобятся.
let marker = ""
bot.on('message', function(msg) {
let chatId = msg.from.id, text = msg.text;
if (text.toLowerCase() === 'давай') {
bot.sendMessage(chatId, 'Чем занимаешься?');
text = null;
marker = "marker_0";
}
if (text && marker === "marker_0") {
bot.sendMessage(chatId, 'Очень интересное занятие! Какой твой любимый цвет?');
text = null;
marker = "marker_1";
}
if (text && marker === "marker_1") {
let txt = defineColor(text);
bot.sendMessage(chatId, `${txt} Ты любишь пешие походы?`);
text = null;
marker = "marker_2";
}
});
function defineColor(text) {
let txt = text.toLowerCase();
if (txt.includes("чёрный") || txt.includes("чeрный") || txt.includes("чорный")) { // учти что могут быть ошибки, другие языки да кто знает, как человек ответит..
return "Вау! И я люблю черный!";
}else {
return "Круто! А я люблю черный!";
}
}