diff --git a/cogs/audio.py b/cogs/audio.py
index 0ebb8fa94..072384af6 100644
--- a/cogs/audio.py
+++ b/cogs/audio.py
@@ -40,7 +40,8 @@ youtube_dl_options = {
'ignoreerrors': True,
'quiet': True,
'no_warnings': True,
- 'outtmpl': "data/audio/cache/%(id)s"}
+ 'outtmpl': "data/audio/cache/%(id)s",
+ 'default_search' : 'auto'}
class Audio:
"""Music streaming."""
@@ -63,15 +64,22 @@ class Audio:
"https://www.youtube.com/watch?v=41tIUr_ex3g", "https://www.youtube.com/watch?v=f9O2Rjn1azc"]
@commands.command(pass_context=True, no_pm=True)
- async def play(self, ctx, link : str):
- """Plays link
+ async def play(self, ctx, *link : str):
+ """Plays videos (links/search terms)
"""
if self.downloader["DOWNLOADING"]:
await self.bot.say("I'm already downloading a track.")
return
msg = ctx.message
if await self.check_voice(msg.author, msg):
- if self.is_playlist_valid([link]): # reusing a function
+ if link != ():
+ link = " ".join(link)
+ if "http" not in link or "www." not in link:
+ link = "[SEARCH:]" + link
+ else:
+ if not self.is_playlist_valid([link]):
+ await self.bot.say("Invalid link.")
+ return
if await self.is_alone_or_admin(msg):
self.queue = []
self.current = -1
@@ -79,13 +87,14 @@ class Audio:
self.queue.append(link)
self.music_player.paused = False
self.music_player.stop()
+ await self.bot.say("Playing requested link...")
else:
self.playlist = []
self.current = -1
if not self.queue: await self.bot.say("The link has been put into queue.")
self.queue.append(link)
else:
- await self.bot.say("That link is not allowed.")
+ await self.bot.say("You need to add a link or search terms.")
@commands.command(aliases=["title"])
async def song(self):
@@ -266,16 +275,23 @@ class Audio:
if self.bot.voice: await self.bot.voice.disconnect()
@commands.command(name="queue", pass_context=True, no_pm=True) #check that author is in the same channel as the bot
- async def _queue(self, ctx, link : str=None):
- """Add link to queue
+ async def _queue(self, ctx, *link : str):
+ """Add links or search terms to queue
Shows queue list if no links are provided.
"""
- if not link:
+ if link == ():
queue_list = await self.queue_titles()
- await self.bot.say("Videos in queue: \n" + queue_list + "\n\nType queue to add a link to the queue.")
- elif await self.check_voice(ctx.message.author, ctx.message) and self.is_playlist_valid([link]):
+ await self.bot.say("Videos in queue: \n" + queue_list + "\n\nType queue to add a link or search terms to the queue.")
+ elif await self.check_voice(ctx.message.author, ctx.message):
if not self.playlist:
+ link = " ".join(link)
+ if "http" not in link or "." not in link:
+ link = "[SEARCH:]" + link
+ else:
+ if not self.is_playlist_valid([link]):
+ await self.bot.say("Invalid link.")
+ return
self.queue.append(link)
msg = ctx.message
result = await self.get_song_metadata(link)
@@ -508,7 +524,7 @@ class Audio:
async def play_video(self, link):
self.downloader = {"DONE" : False, "TITLE" : False, "ID" : False, "URL": False, "DURATION" : False, "DOWNLOADING" : False}
- if "https://" in link or "http://" in link:
+ if "https://" in link or "http://" in link or "[SEARCH:]" in link:
path = "data/audio/cache/"
t = threading.Thread(target=self.get_video, args=(link,self,))
t.start()
@@ -593,7 +609,12 @@ class Audio:
try:
self.downloader["DOWNLOADING"] = True
yt = youtube_dl.YoutubeDL(youtube_dl_options)
- v = yt.extract_info(url, download=False)
+ if "[SEARCH:]" not in url:
+ v = yt.extract_info(url, download=False)
+ else:
+ url = url.replace("[SEARCH:]", "")
+ url = "https://youtube.com/watch?v=" + yt.extract_info(url, download=False)["entries"][0]["id"]
+ v = yt.extract_info(url, download=False)
if v["duration"] > self.settings["MAX_LENGTH"]: raise MaximumLength("Track exceeded maximum length. See help audioset maxlength")
if not os.path.isfile("data/audio/cache/" + v["id"]):
v = yt.extract_info(url, download=True)