简体   繁体   中英

Sequential execution of functions with node-telegram-bot-api

When I try to send information about my Age it is asking my Gen and then my height. And if I'm writing my height it's asking my gen 2 times and 1 time my age. How to make it work like this: It should ask something. then if I answer something and the answer is not good, it should ask this question again, if the answer is good it should ask new questions using the same algorithm.

let weight, height, age, dailyNorm, A, proteine, fat, glucide, gen;
let low=1.2, small=1.4, middle=1.6, big=1.7;


const TelegramBot = require('node-telegram-bot-api');
const token = '734206894:... '; 
const bot = new TelegramBot(token, {polling: true, 
                                       onlyFirstMatch:true, }); 

bot.onText(/\/start/, (msg) => { 
    bot.sendMessage(msg.chat.id,"Bot activated🤖" , { "reply_markup": { 
        "keyboard":[["Calculate🍎" ], ["Report🐞"]] 
    }});
    console.log (msg.text);
});

function dataGen(a){
    bot.sendMessage(a.chat.id,"Your gen(👦-m,👧-f)?"); console.log (1)
    bot.on("message", (msg) => { 
     if (msg.text=="m"){ gen="m"; dataAge(msg);}  
     else if (msg.text=="f"){ gen="f"; dataAge(msg);} 
     else { dataGen(msg);} 
     console.log (2)
    });
} 

function dataAge(b){
    bot.sendMessage(b.chat.id,"Your age👶?");

For sending Sequential Question:

var answerCallbacks = {};

bot.on('message', function (message) {
    var callback = answerCallbacks[message.chat.id];
    if (callback) {
        delete answerCallbacks[message.chat.id];
        return callback(message);
    }
});

bot.onText(/questions/, function (message,match) {
    bot.sendMessage(message.chat.id, "Enter your name").then(function () {
        answerCallbacks[message.chat.id] = function (answer) {
            var name = answer.text;
            bot.sendMessage(message.chat.id, "Enter your address").then(function () {
                answerCallbacks[message.chat.id] = function (answer) {
                    var address = answer.text;
                    bot.sendMessage(message.chat.id, "Enter your phone ").then(function () {
                        answerCallbacks[message.chat.id] = function (answer) {
                            var phone = answer.text;
                            bot.sendMessage(message.chat.id, name + address + phone + " saved!");
                        }
                    });
                }
            });
        }
    });
});

Or as a function:

const answerCallbacks = {};

bot.on("message", function(msg) {
  const callback = answerCallbacks[msg.chat.id];
  if (callback) {
    delete answerCallbacks[msg.chat.id];
    return callback(msg);
  }
});

const askQuestion = async (chatId, question) => {
  await bot.sendMessage(chatId, question);
  return new Promise(fullfill => {
    answerCallbacks[chatId] = msg => {
      if (msg.text[0] !== "/") {
        fullfill(msg);
      }
    };
  });
};

You can then simply use:

const answer = await askQuestion(chatId, 'Tell me something good!')

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM