Telegram bot包含Telegram.error.BadRequest:消息未修改:



我有一个嵌套的回调功能。每个内联键盘都会在回调处结束,回调使用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])

请帮忙。

Telegram Api似乎还没有为此做好准备。他们还在文档中写到了这件事。

请注意,目前只能在不使用reply_markup或内联键盘的情况下编辑消息。

最新更新