Anonymous
Telegram-бот с Python — telegram.error.BadRequest: Сообщение не изменено:
Сообщение
Anonymous » 20 фев 2026, 03:07
У меня есть вложенная функция обратного звонка. Каждая встроенная клавиатура попадает в обратный вызов, который использует 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])
Пожалуйста, помогите с этим.
Подробнее здесь:
https://stackoverflow.com/questions/608 ... t-modified
1771546055
Anonymous
У меня есть вложенная функция обратного звонка. Каждая встроенная клавиатура попадает в обратный вызов, который использует query.edit_message_text для отправки другого набора встроенных клавиатур. Каждый результат сохраняется в БД с помощью отдельных функций. Изначально код работает правильно, но когда количество сообщений пользователей увеличивается, большая часть сообщений попадает в исключение - telegram.error.BadRequest: Сообщение не изменено указанное новое содержимое сообщения и разметка ответа точно такие же, как текущее содержимое и разметка ответа сообщения. Код обратного вызова - [code]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]) [/code] Пожалуйста, помогите с этим. Подробнее здесь: [url]https://stackoverflow.com/questions/60862027/telegram-bot-with-python-telegram-error-badrequest-message-is-not-modified[/url]