嗨,我想知道如何让我的机器人根据 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")
答案 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 重试传入获取的链接。