skip to Main Content

I am making a message with a simple inline keyboard. The expected result would be that when I click on the button it changes together with the message text.

However the button doesn’t change and i get this error:

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

I am using the node-telegram-bot-api package.

The code that has to change my keyboard is:

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

Answers


  1. Chosen as BEST ANSWER

    I found out the error.

    The method editMessageReplyMarkup() requires the parameter replyMarkup, A JSON-serialized object for an inline keyboard.

    My mistake was that I gave the whole reply_markup while I was requested to give only the inline_keyboard. The code now looks like this:

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


  2. The error occurs because you are trying to edit a message without changing anything in it. If you need to use editMessageText or editMessageReplyMarkup but for some reason you don’t change anything then wrap the code in a try catch block (you should always do that). And to remove the clock from the inline keyboard when you click, put some action in the catch block, for example answerCallbackQuery.

    In the above example the user didn’t pass the reply_markup parameter correctly, so the message didn’t change in any way and the error 400 Bad Request: message is not modified appeared.

    400 MESSAGE_NOT_MODIFIED

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search