Создал код на основе 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?