该代码在一个月前正常工作,但是自从昨晚开始崩溃。
(节点:3848)UnhandledPromiseRejectionWarning:错误:400:错误的请求:
消息未修改
在buildConfig.then.then.then之后(D:\ apps \ bot \ node_modules \ telegraf \ core \ network \ client.js:235:17)
在
在process._tickCallback(内部/进程/next_tick.js:118:7)(节点:3848)处UnhandledPromiseRejectionWarning:未处理的承诺
拒绝。此错误是由抛出异步内部引起的
没有捕获块或拒绝承诺
未使用.catch()处理。 (拒绝ID:1)(节点:3848)[DEP0018]
DeprecationWarning:已弃用未处理的承诺拒绝。在
未来,未处理的承诺拒绝将终止
使用非零退出代码的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();
最佳答案
电报有几种updating a message方法。如果您调用editMessageText
,但文本本身没有更改,这就是您得到的响应。如果仅修改标记,则应使用editMessageReplyMarkup
。因此,复查您使用的库的方法并调用适当的方法可能是有意义的。我相信您的editMessageText
会以相同的文字或两次被调用。