message to edit not found (python telebot)

Всем привет, возникла проблема в коде инлайн-кнопки + в телеграм боте, которая регулирует количество товара, которое выбрал пользователь. По задумке, при каждом нажатии на кнопку + сообщение должно каждый раз меняться в строке с заказом на 0,25 кг, если кнопка -, то уменьшаться

global amount, last_message_id, total
        if callback.data=='+':
            amount+=0.25
            price_per_kg_ = products[choice]['price_per_kg']    
            max_ = products[choice]['max']                         
            min_ = products[choice]['min']                          
            total = amount*price_per_kg_
            kb = types.InlineKeyboardMarkup(row_width=2)
            item1 = types.InlineKeyboardButton(text='+', callback_data='+')
            item2 = types.InlineKeyboardButton(text='-', callback_data='-') 
            item3 = types.InlineKeyboardButton(text='? Back to menu', callback_data='back2')
            item4 = types.InlineKeyboardButton(text='✅ В корзину', callback_data='confirm_amount')
            kb.add(item1, item2, item3, item4)
            if amount <= max_ and amount >= min_:
                global text
                text='⭐ Продукт: ' + choice + ' \n? Заказано кг: ' + str(amount) + ' кг' + ' \n? Стоимость: ' + str(total)
            else:
                text='❗Количество товара не может превышать ' + str(max_) + ' кг и не может быть ниже ' + str(min_) + ' кг!'
            if last_message_id:
                bot.edit_message_text(chat_id=callback.message.chat.id,message_id=last_message_id,text=text, reply_markup=kb)  
            else:
                sent_message=bot.edit_message_text(chat_id=callback.message.chat.id,message_id=callback.message.id, text=text, reply_markup=kb)
                last_message_id=sent_message.message_id

Почему в строке

bot.edit_message_text(chat_id=callback.message.chat.id,message_id=last_message_id,text=text, reply_markup=kb), которая в блоке

If last_message_id:

вылезает ошибка

  File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.11/site-packages/telebot/__init__.py", line 1074, in __threaded_polling
    self.worker_pool.raise_exceptions()
  File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.11/site-packages/telebot/util.py", line 147, in raise_exceptions
    raise self.exception_info
  File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.11/site-packages/telebot/util.py", line 90, in run
    task(*args, **kwargs)
  File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.11/site-packages/telebot/__init__.py", line 6801, in _run_middlewares_and_handler
    result = handler['function'](message)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<string>", line 403, in bot_message
  File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.11/site-packages/telebot/__init__.py", line 3839, in edit_message_text
    result = apihelper.edit_message_text(self.token, text, chat_id, message_id, inline_message_id, parse_mode,
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.11/site-packages/telebot/apihelper.py", line 1327, in edit_message_text
    return _make_request(token, method_url, params=payload, method='post')
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.11/site-packages/telebot/apihelper.py", line 162, in _make_request
    json_result = _check_result(method_name, result)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.11/site-packages/telebot/apihelper.py", line 189, in _check_result
    raise ApiTelegramException(method_name, result, result_json)
telebot.apihelper.ApiTelegramException: A request to the Telegram API was unsuccessful. Error code: 400. Description: Bad Request: message to edit not found"

Как исправить?


Ответы (1 шт):

Автор решения: R1senDev

Мои предположения

  1. Пользователь (или сам бот, что маловероятно, если это не обозначено в коде) удалил сообщение, которое бот пытается отредактировать;

  2. В переменной last_message_id хранится что-то не то и написать надо по-иному:

bot.edit_message_text(
    chat_id      = callback.message.chat.id,
    message_id   = callback.message.message_id, # вместо той не вполне понятной переменной
    text         = text,
    reply_markup = kb
)
→ Ссылка