Бот Telegram с python - telegram.error.BadRequest: Сообщение не изменено: - PullRequest
0 голосов
/ 26 марта 2020

У меня есть вложенная функция обратного вызова. Каждая встроенная клавиатура заканчивается обратным вызовом, который использует query.edit_message_text для отправки другого набора встроенных клавиатур. Каждый результат сохраняется в БД с использованием отдельных функций.

Изначально код работает нормально, но когда увеличивается количество сообщений пользователя, большая часть сообщений переходит в исключение - telegram.error.BadRequest: Сообщение не изменяется указанное новое содержимое сообщения и разметка ответа в точности совпадают с текущим содержанием и разметкой ответа сообщения

Код обратного вызова -

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])

Пожалуйста, помогите с этим.

1 Ответ

0 голосов
/ 26 марта 2020

Похоже, что Telegram Api еще не готов к этому. Они также написали об этом в документах.

Обратите внимание, что в настоящее время редактировать сообщения можно только без reply_markup или со встроенными клавиатурами.

...