vera_ira
@vera_ira
Делаю приложение по изучению Иврит (Python Kotlin)

Как работает bot.edit_message_text в python telegram bot?

Есть хендлер который вызывает функцию и есть функция которая выполняет ряд действий и отправляет сообщение с инлайн-клавиатурной.

def make_b(message, namber_bort):
    key = telebot.types.InlineKeyboardMarkup()
    but = telebot.types.InlineKeyboardButton(text="бла-бла", callback_data=5)
    key.add(but)
        
    bot.edit_message_text(message.chat_id, text="тру-ту-ту", reply_markup=key )


@bot.message_handler(content_types=['text'])
def handle_text(message):
   if message.text==5
       make_b(message, namber_bort)


Если отправляю сообщение так, как указано ниже, то проблем нет.
bot.send_message(message.chat.id, text="тру-ту-ту", reply_markup=key)


А если через bot.edit_message_text, то ошибка:


AttributeError: 'Message' object has no attribute 'chat_id'


А мне нужно изменить сообщение. Подскажите, что не так?
message.chat_id задавала через message.chat.id. Ошибка такая:

(__init__.py:418 MainThread) ERROR - TeleBot: "A request to the Telegram API was unsuccessful. The server returned HTTP 400 Bad Request. Response body:
[b'{"ok":false,"error_code":400,"description":"Bad Request: chat not found"}']"


И через message.chat.get('id'):

AttributeError: 'Chat' object has no attribute 'get'


И фантазия моя закончилась.
  • Вопрос задан
  • 34123 просмотра
Решения вопроса 1
vera_ira
@vera_ira Автор вопроса
Делаю приложение по изучению Иврит (Python Kotlin)
Решение нашла:
bot.edit_message_text работает только на изменение уже существующего сообщения, поэтому логично, что его стоит помещать только в @bot.callback_query_handler.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@AlmazKayum
В методе edit_message_text надо указывать id чата chat_id и id сообщения message_id.
Попробуй так:
bot.edit_message_text(chat_id=message.chat.id, message_id=message.message_id, text="тру-ту-ту", reply_markup=key )
Ответ написан
@hey_umbrella
bot.edit_message_text не обязательно помещать только в @bot.callback_query_handler,можно записать сообщение в переменную,а потом брать message_id из нее и редактировать сообщение.
messagetoedit = bot.send_message(message.chat.id, 'Текст')
bot.edit_message_text(chat_id=message.chat.id, message_id=messagetoedit.message_id, text=f"Новый текст")
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы