Задать вопрос
@Yuri_Ananiev

Есть ли метод в telegramBotAPI, который позволит добавить текст, фото и inline-клавиатуру ОДНОВРЕМЕННО?

Хочу написать телеграм бот для поиска и фильмов и возник вопрос: есть ли такой метод в telegramBot, который позволил бы добавить одновременно фото, текст и inline-клавиатуру, как на фото (чтобы было красиво):

67852f7840ec4202238023.png
Если использовать метод bot.send_photo, то всё перечисленное добавляется, но при нажатии на любую из кнопок выдает ошибку:
Пример кода:
def start_keyboard():
    keyboard = InlineKeyboardMarkup()
    button_1 = types.InlineKeyboardButton(' Поиск', callback_data='search')
    button_2 = types.InlineKeyboardButton(' История запросов', callback_data='history')
    button_3 = types.InlineKeyboardButton('⚙️ Помощь', callback_data='help')
    keyboard.add(button_1)
    keyboard.add(button_2)
    keyboard.add(button_3)
    return keyboard


def start(message):
    with open('logo_1.jpg', 'rb') as photo:
        bot.send_photo(message.chat.id, photo,
                       caption='<b>Для поиска фильма нажмите кнопку «Поиск»\n'
                               'Для помощи в обращении с ботом, нажмите кнопку «Помощь» </b>',
                       reply_markup=start_keyboard(),
                       parse_mode='HTML'
                       )

Ошибка
2025-01-13 18:11:46,645 (__init__.py:1241 MainThread) ERROR - TeleBot: "Threaded polling exception: A request to the Telegram API was unsuccessful. Error code: 400. Description: Bad Request: there is no text in the message to edit"
2025-01-13 18:11:46,648 (__init__.py:1243 MainThread) ERROR - TeleBot: "Exception traceback:
Traceback (most recent call last):
  File "D:\Python_Basic_Diploma\venv\Lib\site-packages\telebot\__init__.py", line 1235, in __threaded_polling
    self.worker_pool.raise_exceptions()
  File "D:\Python_Basic_Diploma\venv\Lib\site-packages\telebot\util.py", line 150, in raise_exceptions
    raise self.exception_info
  File "D:\Python_Basic_Diploma\venv\Lib\site-packages\telebot\util.py", line 93, in run
    task(*args, **kwargs)
  File "D:\Python_Basic_Diploma\venv\Lib\site-packages\telebot\__init__.py", line 9040, in _run_middlewares_and_handler
    result = handler['function'](message)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\Python_Basic_Diploma\main.py", line 131, in functions
    bot.edit_message_text(
  File "D:\Python_Basic_Diploma\venv\Lib\site-packages\telebot\__init__.py", line 4954, in edit_message_text
    result = apihelper.edit_message_text(
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\Python_Basic_Diploma\venv\Lib\site-packages\telebot\apihelper.py", line 1497, in edit_message_text
    return _make_request(token, method_url, params=payload, method='post')
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\Python_Basic_Diploma\venv\Lib\site-packages\telebot\apihelper.py", line 168, in _make_request
    json_result = _check_result(method_name, result)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\Python_Basic_Diploma\venv\Lib\site-packages\telebot\apihelper.py", line 195, 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: there is no text in the message to edit
"


Если использовать метод bot.send_message, то есть только текст и клавиатура (рабочая, кстати) !

@bot.message_handler(commands=['start'])
def start(message):
    bot.send_message(message.chat.id,
                     "<b>Для поиска фильма нажмите кнопку «Поиск»\n"
                          "Для помощи в обращении с ботом, нажмите кнопку «Помощь» </b>",
                          reply_markup=start_keyboard(), 
                          parse_mode = 'html'
                     )

Хотелось бы знать, есть ли такой метод, или я впустую трачу время и силы, а может есть какой-то другой способ ?
  • Вопрос задан
  • 34 просмотра
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
Wispik
@Wispik
File "D:\Python_Basic_Diploma\main.py", line 131, in functions
    bot.edit_message_text(

Причем тут отправка фото? У тебя ошибка при редактировании сообщения, ты пытаешься редактировать сообщение, не изменяя текст (либо вообще передаешь пустую строку при редактировании).
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы