我正在用一个简单的内联键盘制作消息。预期的结果将是,当我单击按钮时,它会与消息文本一起更改。
然而,按钮没有改变,我得到这个错误:
TelegramError: ETELEGRAM: 400 Bad Request: message is not modified: specified new message content and reply markup are exactly the same as a current content and reply markup of the message
我使用的是node-telegraph-bot-api包。
必须更改键盘的代码是:
let info_message = {
text: "some info boi",
keyboard: {
reply_markup: {
inline_keyboard: [
[{ text: 'Start', callback_data: '!/start' }]
]
}
}
}
client.on("callback_query", async (cb) => {
if (cb.data === "!/info") {
const msg = cb.message;
const opts = {
chat_id: msg.chat.id,
message_id: msg.message_id,
};
await client.editMessageReplyMarkup(info_message.keyboard, opts);
await client.editMessageText(info_message.text, opts);
}
})
2条答案
按热度按时间gk7wooem1#
我发现了错误。
方法
editMessageReplyMarkup()
需要参数replyMarkup
,一个用于内联键盘的JSON序列化对象。我的错误是我给出了整个reply_markup,而我被要求只给予inline_keyboard。代码现在看起来如下:
m2xkgtsf2#
发生此错误的原因是您试图编辑消息而不更改其中的任何内容。如果您需要使用
editMessageText
或editMessageReplyMarkup
,但由于某种原因您没有更改任何内容,请将代码 Package 在try catch
块中(你应该一直这样做)。并且要在你点击的时候从内联键盘中删除时钟,在catch
块中放入一些动作,例如answerCallbackQuery
。在上面的示例中,用户没有正确传递
reply_markup
参数,因此消息没有任何变化,只出现了错误400 Bad Request: message is not modified
。400 MESSAGE_NOT_MODIFIED