Как осуществить поиск музыки в дискорд боте, для воспроизведения музыки?

Решил написать своего телегам бота на python, но столкнулся с проблемой на самом начале разработки. Цель моего бота - общаться с людьми и помогать им с вопросами. В коде, который будет ниже есть 2 основные функции, а именно "/ask" и "/search".

from disnake.ext import commands
import os
import youtube_dl
import openai

openai.api_key = 'KEY'

intents = disnake.Intents.default()
intents.voice_states = True
intents.message_content = True
bot = commands.Bot(command_prefix='!', intents=intents)

log_file = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'log_gpt_discord.txt')

def log_message(message):
    with open(log_file, 'a', encoding='utf-8') as file:
        file.write(message + '\n')

@bot.event
async def on_ready():
    print(f'Бот подключен как {bot.user}')
    await bot.change_presence(activity=disnake.Activity(type=disnake.ActivityType.watching, name="!ask"))

@bot.event
async def on_message(message):
    if message.author == bot.user:
        return
    await bot.process_commands(message)

@bot.slash_command(
    name="ask",
    description="Генерирует ответ на заданный вопрос."
)
async def ask(ctx, user_input: str):
    log_message(f'Пользователь: {ctx.author.name}')
    log_message(f'Сервер: {ctx.guild.name}')
    log_message(f'Канал: {ctx.channel.name}')
    log_message(f'Вопрос: {user_input}')

    await ctx.response.defer()

    bot_response = await generate_response(user_input)

    log_message(f'Ответ бота: {bot_response}')

    await ctx.edit_original_response(content=bot_response)

async def generate_response(user_input):
    response = openai.Completion.create(
        engine='text-davinci-003',
        prompt=user_input,
        temperature=0.4,
        max_tokens=3700,
        n=10,
        stop=None,
        top_p=0.8
    )

    return response.choices[0].text.strip()

@bot.slash_command(
    name="search",
    description="Ищет песню в YouTube по запросу."
)
async def search(ctx, search_query: str):
    search_results = await search_music(search_query)

    if search_results:
        result_message = create_search_results_message(search_results)
        await ctx.send(result_message)
    else:
        await ctx.send('Ничего не найдено.')

async def search_music(query):
    ydl_opts = {
        'format': 'bestaudio/best',
        'default_search': 'auto',
        'quiet': True,
        'no_warnings': True,
        'ignoreerrors': False,
    }

    with youtube_dl.YoutubeDL(ydl_opts) as ydl:
        try:
            info = ydl.extract_info(f"ytsearch5:{query}", download=False)
            videos = info['entries']
            return videos
        except Exception:
            return []

def create_search_results_message(videos):
    message = 'Результаты поиска:\n'
    for i, video in enumerate(videos, start=1):
        title = video['title']
        url = video['webpage_url']
        message += f'{i}. [{title}]({url})\n'
    message += 'Выберите песню, написав ее номер после команды !play.'
    return message

bot.run('TOKEN')

Работа бота Команда "!ask" работает корректно, но к сожалению не работает только музыкальная часть бота. При использовании "/search" в консоли выдает следующую ошибку: Ошибка в консоли

Моя цель - при команде "/search" бот ищет видео с названием, который вводил пользователь и показывал самые подходящие по запросу варианты.


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