InlineQuery и mp3 файл

Делаю бота на telebot и работаю с inline query.
Мне нужно, чтобы при нажатии кнопки выходила песня...

Всё что я нашёл в оф. документации тг: InlineQueryResultAudio, но проблема в том, что мне нужно слать именно файлом.
Также пытался при InlineQueryResultArticle изменять в input_message_content это: InputTextMessageContent на это: InputMediaAudio.

Это не то что бы не работало, но мне выходила ошибка 400, с текстом:

ERROR - TeleBot: "A request to the Telegram API was unsuccessful. Error code: 400. Description: Bad Request: can't parse inline query result: Input message content is not specified"

Что делать? В доках telebot-а я всё таки не нашёл ничего полезного...


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

Автор решения: Denis Rudnitskiy

Первый способ - отправка трека по ссылке

Для этого случая требуется указать валидную ссылку на аудиофайл.

Если перейти по такой ссылке, то в вашем браузере должен отображаться проигрыватель наподобие такого:

2

Приведу простой пример, когда handler срабатывает при любом вводе текста.

import telebot
from telebot import types


bot = telebot.TeleBot('token')


@bot.inline_handler(func=lambda query: len(query.query) > 0)
def query_text(query):
    inline_btn = types.InlineQueryResultAudio(
                id='1', # уникальный идентификатор
                audio_url='', # ваша ссылка на аудиофайл
                title='Eisenmann', 
                performer='Unheilig'
                ) 
    bot.answer_inline_query(query.id, [inline_btn])

    
bot.polling(none_stop=True)     

Второй способ - отправка уже сохранённого на серверах Telegram аудиофайла

Здесь еще проще. Достаточно передать уникальный id, и audio_file_id.

import telebot
from telebot import types


bot = telebot.TeleBot('token')


@bot.message_handler(content_types=['audio'])
def start(message):
    print(message.audio.file_id) # для получения audio_file_id аудиозаписи



@bot.inline_handler(func=lambda query: len(query.query) > 0)
def query_text(query):
    inline_btn = types.InlineQueryResultCachedAudio(
                id='1', 
                audio_file_id='', # валидный file_id аудиофайла
                ) 
    bot.answer_inline_query(query.id, [inline_btn])


bot.polling(none_stop=True)

Выглядит это так:

4

→ Ссылка