当我尝试编辑一个内联键盘(node-telegraph-bot-api)时,为什么我会得到一个400错误?

ykejflvf  于 2023-01-25  发布在  Node.js
关注(0)|答案(2)|浏览(106)

我正在用一个简单的内联键盘制作消息。预期的结果将是,当我单击按钮时,它会与消息文本一起更改。
然而,按钮没有改变,我得到这个错误:

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);
    }
})
gk7wooem

gk7wooem1#

我发现了错误。
方法editMessageReplyMarkup()需要参数replyMarkup,一个用于内联键盘的JSON序列化对象。
我的错误是我给出了整个reply_markup,而我被要求只给予inline_keyboard。代码现在看起来如下:

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.reply_markup, opts); // I gave info_message.keyboard.reply_markup as input, instead of info_message.keyboard
        await client.editMessageText(info_message.text, opts);
    }
})
m2xkgtsf

m2xkgtsf2#

发生此错误的原因是您试图编辑消息而不更改其中的任何内容。如果您需要使用editMessageTexteditMessageReplyMarkup,但由于某种原因您没有更改任何内容,请将代码 Package 在try catch块中(你应该一直这样做)。并且要在你点击的时候从内联键盘中删除时钟,在catch块中放入一些动作,例如answerCallbackQuery
在上面的示例中,用户没有正确传递reply_markup参数,因此消息没有任何变化,只出现了错误400 Bad Request: message is not modified
400 MESSAGE_NOT_MODIFIED

相关问题