Хочу написать телеграм бот для поиска и фильмов и возник вопрос: есть ли такой метод в telegramBot, который позволил бы добавить одновременно фото, текст и inline-клавиатуру, как на фото (чтобы было красиво):
Если использовать метод
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'
)
Хотелось бы знать, есть ли такой метод, или я впустую трачу время и силы, а может есть какой-то другой способ ?