Discord py — создание собственного музыкального бота — код ошибки

#python #discord #discord.py #discord.py-rewrite

#python #Discord #discord.py

Вопрос:

Привет, ребята,

Я пытаюсь создать свой собственный музыкальный бот прямо сейчас.

Но у меня есть некоторые проблемы, и я надеюсь, что вы сможете мне помочь 🙂

Как выглядит мой код:

 from discord import Game, Intents
from discord.ext import commands
from os import environ, listdir

from pafy import new
from discord import FFmpegPCMAudio

import asyncio
import urllib.parse, urllib.request, re

intents = Intents.all()
client = commands.Bot(command_prefix='?', intents=intents)

@client.event
async def on_ready():
    print(f'Bot is ready to go!')

@client.command(pass_context=True)
async def play(ctx, url):
    ffmpeg_opts = {'before_options': '-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5', 'options': '-vn'}

    if not ctx.message.author.voice:
        await ctx.send("**Please connect to a voice channel!**")
        return
    
    channel = ctx.author.voice.channel
    voice = await channel.connect()
        
    await ctx.send(f':pushpin: Music bot connected to {channel}n:mag_right: **Searching for** ``'   url   "``")
    video = new(url)
    audio = video.getbestaudio().url
    voice.play(FFmpegPCMAudio(audio, **ffmpeg_opts))
    voice.is_playing()

@client.command()
async def join(ctx):

    if not ctx.message.author.voice:
        await ctx.send("You are not connected to a voice channel!")
        return
    else:
        channel = ctx.message.author.voice.channel
        await ctx.send(f'Connected to ``{channel}``')

    await channel.connect()

@client.command()
async def leave(ctx):
    voice_client = ctx.message.guild.voice_client
    user = ctx.message.author.mention
    await voice_client.disconnect()
    await ctx.send(f'Disconnected from {user}')

client.run(TOKEN)

  

Итак, теперь у меня две основные проблемы:

  • Youtube-dl больше не поддерживается, поэтому я переключился на pafy

но я все еще получаю эту ошибку

 discord.ext.commands.errors.CommandInvokeError: Command raised an exception: OSError: ERROR: Unable to extract JS player URL; please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; see  https://yt-dl.org/update  on how to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.
  

Самое смешное, что я не получаю эту ошибку каждый раз, когда использую бота: (

и вторая проблема заключается в том, что мне нужно отключать бота каждый раз, когда я хочу записать песню.

Как я могу использовать что-то вроде очереди? — Я не хочу каждый раз отключать бота…

Спасибо!

Ответ №1:

youtube-dl больше не существует. В качестве альтернативы я бы рекомендовал использовать lavalink с библиотекой wavelink. Он получил гораздо больше функциональности.

Ответ №2:

Прежде всего удалите youtube-dl:

 pip uninstall youtube-dl
  

Теперь о том, как я это сделал:

На Github появился новый Youtube-dl

Если вы используете Windows, установите его с помощью этой команды:

 pip install -U git https://github.com/l1ving/youtube-dl
  

И все готово — иногда я получаю сообщение об ошибке типа

ОШИБКА: Не удалось извлечь URL-адрес JS player

но если это произойдет, вам просто нужно перезапустить бота, и он снова заработает