Telegram bot with python - telegram.error.BadRequest: Message is not modified:

Viewed 5999

I have a nested call back feature. Every inline keyboard ends up at the callback, which uses query.edit_message_text to send another set of inline keyboards. Every result is saved into the db using separate functions.

Initially the code is functioning properly, but when the users messaging increases, a large chunk of messages goes into the exception - telegram.error.BadRequest: 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

The callback code is -

def languageSelector(update, context):
    # chatID = update.message.chat.id
    query = update.callback_query
    chatID = query.message.chat_id
    callback_data = query.data

    print (callback_data)
    try:
        option = int(callback_data)
        c.updateLanguage(chatID, option)
        query.edit_message_text(text = c.LanguageSet[option])
        context.bot.send_message(chat_id=chatID, text = c.enterTicketNo[option])

    except:
        languageCode = c.getLanguageCode(chatID)
        try:
            response = inline_handler(context,update)
            print (11)
            if response:
                keyboard = [[InlineKeyboardButton(c.domestic[languageCode], callback_data="dom"), InlineKeyboardButton(c.intl[languageCode], callback_data="intl")]]
                reply_markup = InlineKeyboardMarkup(keyboard, one_time_keyboard=True)
                query.edit_message_text(text = c.selectLocation[languageCode], reply_markup=reply_markup)

        except Exception as e:
            print (e)

            if callback_data in ["o1", "o2", "o3", "o4"]:
                print (1)
                c.UpdateUserRecord(chatID, "condition", callback_data)

                keyboard = [[InlineKeyboardButton(c.yes[languageCode], callback_data="True_infected"), InlineKeyboardButton(c.no[languageCode], callback_data="False_infected")]]
                reply_markup = InlineKeyboardMarkup(keyboard, one_time_keyboard=True)

                query.edit_message_text(text = c.q4[languageCode], reply_markup=reply_markup)

            elif callback_data in ["True", "False"]:

                if callback_data == "True":
                    c.UpdateUserRecord(chatID, "past-1", callback_data)
                    query.edit_message_text(text = c.selectDate[languageCode], reply_markup=telegramcalendar.create_calendar())

                else:
                    data = [callback_data, "na", "na"]
                    c.UpdateUserRecord(chatID, "past-all", callback_data)
                    keyboard = [[InlineKeyboardButton(c.yes[languageCode], callback_data="true"), InlineKeyboardButton(c.no[languageCode], callback_data="false")]]
                    reply_markup = InlineKeyboardMarkup(keyboard, one_time_keyboard=True)
                    query.edit_message_text(text = c.q3[languageCode], reply_markup=reply_markup)

            elif callback_data in ["dom", "intl"]:
                if callback_data == "dom":
                    reply_markup = c.domesticKey(languageCode, "past")
                    query.edit_message_reply_markup(inline_message_id=update.callback_query.inline_message_id, reply_markup=reply_markup)
                else:
                    c.UpdateUserRecord(chatID, "past-3", callback_data)

                    keyboard = [[InlineKeyboardButton(c.yes[languageCode], callback_data="true"), InlineKeyboardButton(c.no[languageCode], callback_data="false")]]
                    reply_markup = InlineKeyboardMarkup(keyboard, one_time_keyboard=True)
                    query.edit_message_text(text = c.q3[languageCode], reply_markup=reply_markup)

            elif callback_data in ["True_infected", "False_infected"]:
                c.UpdateUserRecord(chatID, "infected", 1 if callback_data == "True_infected" else 0)

                keyboard = [[InlineKeyboardButton(c.yes[languageCode], callback_data="True"), InlineKeyboardButton(c.no[languageCode], callback_data="False")]]
                reply_markup = InlineKeyboardMarkup(keyboard, one_time_keyboard=True)

                query.edit_message_text(text = c.q2[languageCode], reply_markup=reply_markup)



            elif callback_data in ["dom-post", "intl-post"]:
                if callback_data == "dom-post":
                    reply_markup = c.domesticKey(languageCode, "post")
                    query.edit_message_reply_markup(inline_message_id=update.callback_query.inline_message_id, reply_markup=reply_markup)
                else:
                    c.UpdateUserRecord(chatID, "post-2", "dom" if callback_data == "dom-post" else "intl")
                    query.edit_message_text(text = c.thanksForResponse[languageCode])
                    context.bot.send_photo(chat_id=chatID, photo=open(c.advisory[languageCode], 'rb'), timeout=70)
                    context.bot.send_message(chat_id=chatID, text = c.helpline[languageCode])


            elif callback_data in ["true", "false"]:
                data = [callback_data, "Pune"]
                c.UpdateUserRecord(chatID, "post-1", callback_data)

                if callback_data == "true":
                    keyboard = [[InlineKeyboardButton(c.domestic[languageCode], callback_data="dom-post"), InlineKeyboardButton(c.intl[languageCode], callback_data="intl-post")]]
                    reply_markup = InlineKeyboardMarkup(keyboard, one_time_keyboard=True)
                    query.edit_message_text(text = c.selectLocation[languageCode], reply_markup=reply_markup)

                else:
                    query.edit_message_text(text = c.thanksForResponse[languageCode])
                    context.bot.send_photo(chat_id=chatID, photo=open(c.advisory[languageCode], 'rb'), timeout=70)
                    context.bot.send_message(chat_id=chatID, text = c.helpline[languageCode])

            elif callback_data in c.states_past:
                c.UpdateUserRecord(chatID, "past-3", callback_data)
                keyboard = [[InlineKeyboardButton(c.yes[languageCode], callback_data="true"), InlineKeyboardButton(c.no[languageCode], callback_data="false")]]
                reply_markup = InlineKeyboardMarkup(keyboard, one_time_keyboard=True)
                query.edit_message_text(text = c.q3[languageCode], reply_markup=reply_markup)

            elif callback_data in c.states_post:
                c.UpdateUserRecord(chatID, "post-2", callback_data.strip("_"))
                query.edit_message_text(text = c.thanksForResponse[languageCode])
                context.bot.send_photo(chat_id=chatID, photo=open(c.advisory[languageCode], 'rb'), timeout=70)
                context.bot.send_message(chat_id=chatID, text = c.helpline[languageCode])

            else:
                query.edit_message_text(text = c.thanksForResponse[languageCode])
                context.bot.send_photo(chat_id=chatID, photo=open(c.advisory[languageCode], 'rb'), timeout=70)
                context.bot.send_message(chat_id=chatID, text = c.helpline[languageCode])

Please help with this.

1 Answers

Seems like the Telegram Api isn't yet ready for this. They also wrote about it in the docs.

Please note, that it is currently only possible to edit messages without reply_markup or with inline keyboards.

Related