@miahaldsd

Как решить проблему с выводом аудио файла через бота тг?

Создал код на основе python. Обычный музыкальный бот который использует библиотеку яндекс музыки. При вводе запроса например "Дора" он выдает треки которые он нашел, с этой частью все впорядке. Однако стадия когда он должен отправить аудио файл не работает не могу разобраться почему.

import yandex_music
import requests
from telegram import Update, InlineKeyboardButton, InlineKeyboardMarkup
from telegram.ext import Updater, CommandHandler, CallbackQueryHandler, MessageHandler, Filters

TOKEN = 'TOKEN'
bot = Updater(TOKEN, use_context=True)
client = yandex_music.Client()

def start(update, context):
    context.bot.send_message(chat_id=update.effective_chat.id, text="Привет! Напиши название песни или имя исполнителя, и я найду её для тебя")

def search_song(update, context):
    query = update.message.text
    search_result = client.search(query)
    tracks = search_result['tracks']['results']
    if len(tracks) == 0:
        context.bot.send_message(chat_id=update.effective_chat.id, text="К сожалению, я не смог найти такую песню")
        return
    elif len(tracks) == 1:
        send_song(update, context, tracks[0])
        return
    else:
        keyboard = []
        for i in range(min(6, len(tracks))):
            keyboard.append([InlineKeyboardButton(tracks[i]['title'] + ' - ' + tracks[i]['artists'][0]['name'], callback_data=str(tracks[i]['id']))])
        reply_markup = InlineKeyboardMarkup(keyboard)
        if len(tracks) > 6:
            reply_markup.inline_keyboard.append([InlineKeyboardButton('Next', callback_data='next')])
        context.bot.send_message(chat_id=update.effective_chat.id, text="Выбери песню из списка:", reply_markup=reply_markup)

def send_song(update, context, track):
    track_id = track['id']
    audio_file_info = client.tracks_download_info(track_id)
    audio_file = requests.get(audio_file_info[0].direct_link).content
    with open(f"{track['title']}.mp3", "wb") as f:
        f.write(audio_file)
    audio = open(f"{track['title']}.mp3", 'rb')
    context.bot.send_audio(chat_id=update.effective_chat.id, audio=audio, title=track['title'], performer=track['artists'][0]['name'], caption="Like bot")
    audio.close()

def button(update, context):
    query = update.callback_query
    track_id = int(query.data)
    track = client.tracks(track_id)[0]
    send_song(update, context, track)
    query.answer()

def main():
    dp = bot.dispatcher
    dp.add_handler(CommandHandler('start', start))
    dp.add_handler(MessageHandler(Filters.text & ~Filters.command, search_song))
    dp.add_handler(CallbackQueryHandler(button))
    bot.start_polling()
    bot.idle()

if __name__ == '__main__':
    main()


ошибка заключаеться в этом

No error handlers are registered, logging exception.
Traceback (most recent call last):
  File "C:\Users\Angell\AppData\Local\Programs\Python\Python310\lib\site-packages\telegram\ext\dispatcher.py", line 555, in process_update
    handler.handle_update(update, self, check, context)
  File "C:\Users\Angell\AppData\Local\Programs\Python\Python310\lib\site-packages\telegram\ext\handler.py", line 198, in handle_update
    return self.callback(update, context)
  File "C:\Users\Angell\Desktop\вфыв\asdd.py", line 46, in button
    send_song(update, context, track)
  File "C:\Users\Angell\Desktop\вфыв\asdd.py", line 35, in send_song
    audio_file = requests.get(audio_file_info[0].direct_link).content
  File "C:\Users\Angell\AppData\Local\Programs\Python\Python310\lib\site-packages\requests\api.py", line 75, in get
    return request('get', url, params=params, **kwargs)
  File "C:\Users\Angell\AppData\Local\Programs\Python\Python310\lib\site-packages\requests\api.py", line 61, in request
    return session.request(method=method, url=url, **kwargs)
  File "C:\Users\Angell\AppData\Local\Programs\Python\Python310\lib\site-packages\requests\sessions.py", line 528, in request
    prep = self.prepare_request(req)
  File "C:\Users\Angell\AppData\Local\Programs\Python\Python310\lib\site-packages\requests\sessions.py", line 456, in prepare_request
    p.prepare(
  File "C:\Users\Angell\AppData\Local\Programs\Python\Python310\lib\site-packages\requests\models.py", line 316, in prepare
    self.prepare_url(url, params)
  File "C:\Users\Angell\AppData\Local\Programs\Python\Python310\lib\site-packages\requests\models.py", line 390, in prepare_url
    raise MissingSchema(error)
requests.exceptions.MissingSchema: Invalid URL 'None': No schema supplied. Perhaps you meant http://None?
  • Вопрос задан
  • 54 просмотра
Пригласить эксперта
Ответы на вопрос 1
phaggi
@phaggi
лужу, паяю, ЭВМы починяю
Исправлять за вас никто не будет, скорее всего.
Рекомендую либо сделать проверку состояния url-параметра requests что оно is not None, либо обрабатывать вашу конкретную ошибку при помощи try/exception.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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