为什么Telegram机器人突然崩溃了

时间:2018-03-30 06:15:22

标签: javascript node.js telegram telegram-bot

此代码在一个月前正常运行,但从昨晚开始它就崩溃了。

  

(node:3848)UnhandledPromiseRejectionWarning:错误:400:错误请求:   消息未被修改       在buildConfig.then.then.then.then(D:\ apps \ bot \ node_modules \ telegraf \ core \ network \ client.js:235:17)       在       at process._tickCallback(internal / process / next_tick.js:118:7)(node:3848)UnhandledPromiseRejectionWarning:未处理的承诺   拒绝。这个错误源于抛出异步内部   没有捕获块的函数,或拒绝承诺的函数   没有用.catch()处理。 (拒绝ID:1)(节点:3848)[DEP0018]   弃用警告:已弃用未处理的承诺拒绝。在   未来,未经处理的承诺拒绝将终止   Node.js使用非零退出代码进行处理。

代码:

app.action('start', (ctx) => {
    http.get('http://localhost:3000/api/questions', (res) => {
        //res.setEncoding('utf8');
        let rawData = '';
        res.on('data', (chunk) => {
            rawData += chunk;
        });
        res.on('end', () => {
            try {
                data = JSON.parse(rawData);
                i = Object.keys(data).length;
                ctx.editMessageText('Choose one of the options:', 
                Extra.HTML().markup(m => m.inlineKeyboard([
                    m.callbackButton(data[x].Q1, 'plus1'),
                    m.callbackButton(data[x].Q2, 'plus2')
                ], {
                    columns: 1
                })));
            } catch (e) {
                console.error(e.message);
            }
        });
    }).on('error', (e) => {
        console.error(`Got error: ${e.message}`);
    });
});

app.action('plus1', (ctx) => {
    if (x < i) {
        answer[x] = 1;
        ctx.editMessageText('Choose one of the options:', Extra.HTML().markup(m => m.inlineKeyboard([
            m.callbackButton(data[x].Q1, 'plus1'),
            m.callbackButton(data[x].Q2, 'plus2')
        ], {
            columns: 1
        })));
        x++;
    } else {
        ctx.editMessageText('Finished :', Extra.HTML().markup(m => m.inlineKeyboard([
            m.callbackButton('Result', 'result')
        ])));
    }
});

app.action('plus2', (ctx) => {
    if (x < i) {
        answer[x] = 2;
        ctx.editMessageText('Choose one of the options', Extra.HTML().markup(m => m.inlineKeyboard([
            m.callbackButton(data[x].Q1, 'plus1'),
            m.callbackButton(data[x].Q2, 'plus2')
        ], {
            columns: 1
        })));
        x++;
    } else {
        ctx.editMessageText('Finished :', Extra.HTML().markup(m => m.inlineKeyboard([
            m.callbackButton('Result', 'result')
        ])));
    }});

app.action('result', (ctx) => {
    ctx.reply(answer);
});
app.startPolling();

1 个答案:

答案 0 :(得分:3)

电报有updating a message的几种方法。如果您拨打editMessageText但文本本身没有更改,则这是您获得的回复。如果您只修改标记,则应使用editMessageReplyMarkup。因此,查看您使用的库的方法并调用适当的库可能是有意义的。我相信你的editMessageText以某种方式被调用相同的文本或两次。