Discord 音乐机器人查找 yt 视频

时间:2021-04-11 17:58:04

标签: python python-3.x discord discord.py

嗨,我想知道如何让我的机器人根据 YouTube 搜索播放音乐,因为复制和粘贴网址让我很生气。机器人有 youtube_dl 和 ffmpg。这是更新后的代码,它仍然无法正常工作。抱歉我的英语不好。

    @client.command(pass_context=True, aliases=['p', 'pla'])
async def play(ctx, url: str):

    song_there = os.path.isfile("song.mp3")
    try:
        if song_there:
            os.remove("song.mp3")
            print("Usunięto starą piosenke.")
    except PermissionError:
        print("Próbuję usunąć plik utworu, ale jest on odtwarzany ")
        await ctx.send(":no_entry_sign:  Muzyka już gra!")
        return

    await ctx.send(":mag_right: Szukanie i Pobieranie")

    voice = get(client.voice_clients, guild=ctx.guild)

    ydl_opts = {
        'format': 'bestaudio/best',
        'postprocessors': [{
            'key': 'FFmpegExtractAudio',
            'preferredcodec': 'mp3',
            'preferredquality': '192',
        }],
    }

    yt = yt_search.build(url)
    search_result = yt.search("keyword", sMax=10, sType=["video"])
    print(search_result)

    with youtube_dl.YoutubeDL(options) as ytdl:
        if url[:4] == 'http':
            ytdl.download([url])
        else: # "yts" is youtube-search imported as
            link = json.loads(yts(url, max_results=1).to_json())['videos'][0]['url_suffix']
            link = 'https://www.youtube.com' + link
            ytdl.download([link])

    for file in os.listdir("./"):
        if file.endswith(".mp3"):
            name = file
            print(f"Zmnieniono nazwe: {file}\n")
            os.rename(file, "song.mp3")

    voice.play(discord.FFmpegPCMAudio("song.mp3"), after=lambda e: print("Koniec!"))
    voice.source = discord.PCMVolumeTransformer(voice.source)
    voice.source.volume = 0.17

    nname = name.rsplit("-", 2)
    await ctx.send(f" :notes: Teraz Leci: `{nname[0]} - {nname[1]}`")
    print("Puszczanie\n")

1 个答案:

答案 0 :(得分:0)

在 youtube-search 上查找文档。举个例子:

  with youtube_dl.YoutubeDL(options) as ytdl:
    if url[:4] == 'http':
      ytdl.download([url])
    else: # "yts" is youtube-search imported as
      link = json.loads(yts(url, max_results=1).to_json())['videos'][0]['url_suffix']
      link = 'https://www.youtube.com' + link
      ytdl.download([link])

基本上是说“如果它以 http 开头,则仅用作链接。否则,使用 youtube-search 获取 YouTube 上第一个搜索结果的链接。”这可能不是一个好方法,可以使用 try/except 来查看搜索是否首先作为链接工作,而 except 重试传入获取的链接。