From 50bf76d79539c55bd8149658d04691cbbdecbd64 Mon Sep 17 00:00:00 2001 From: jesopo Date: Mon, 2 Jul 2018 14:33:38 +0100 Subject: [PATCH] Add logic in soundcloud.py to accept urls and search back through log for urls --- modules/soundcloud.py | 65 ++++++++++++++++++++++++++++++------------- 1 file changed, 46 insertions(+), 19 deletions(-) diff --git a/modules/soundcloud.py b/modules/soundcloud.py index 9aa15508..aa35b019 100644 --- a/modules/soundcloud.py +++ b/modules/soundcloud.py @@ -1,34 +1,61 @@ #--require-config soundcloud-api-key -import json, time +import json, re, time import Utils -URL_SOUNDCLOUD = "http://api.soundcloud.com/tracks" +URL_SOUNDCLOUD_TRACK = "http://api.soundcloud.com/tracks" +URL_SOUNDCLOUD_RESOLVE = "http://api.soundcloud.com/resolve" +REGEX_SOUNDCLOUD = "https://soundcloud.com/([^/]+)/([^/]+)" class Module(object): _name = "SoundCloud" def __init__(self, bot): self.bot = bot bot.events.on("received").on("command").on("soundcloud", "sc" - ).hook(self.soundcloud, min_args=1, help="Search SoundCloud") + ).hook(self.soundcloud, help="Search SoundCloud") def soundcloud(self, event): - page = Utils.get_url(URL_SOUNDCLOUD, get_params={ - "client_id": self.bot.config["soundcloud-api-key"], - "limit": 1, "q": event["args"]}, json=True) - if page: - if page: - page = page[0] - title = page["title"] - user = page["user"]["username"] - duration = time.strftime("%H:%M:%S", time.gmtime(page[ - "duration"]/1000)) - if duration.startswith("00:"): - duration = duration[3:] - link = page["permalink_url"] - event["stdout"].write("%s [%s] (posted by %s) %s" % (title, - duration, user, link)) + query = None + url = None + + if event["args"]: + match = re.search(REGEX_SOUNDCLOUD, event["args"]) + if match: + url = match.string else: - event["stderr"].write("No results found") + query = event["args"] + else: + last_soundcloud = event["log"].find(REGEX_SOUNDCLOUD) + if last_soundcloud: + url = re.match(REGEX_SOUNDCLOUD, + last_soundcloud.message).string + + if not query and not url: + event["stderr"].write("no search phrase provided") + return + has_query = not query == None + get_params = {"limit": 1, + "client_id": self.bot.config["soundcloud-api-key"]} + + if query: + get_params["q"] = query + else: + get_params["url"] = url + + page = Utils.get_url( + URL_SOUNDCLOUD_TRACK if has_query else URL_SOUNDCLOUD_RESOLVE, + get_params=get_params, json=True) + + if page: + page = page[0] if has_query else page + title = page["title"] + user = page["user"]["username"] + duration = time.strftime("%H:%M:%S", time.gmtime(page[ + "duration"]/1000)) + if duration.startswith("00:"): + duration = duration[3:] + link = page["permalink_url"] + event["stdout"].write("%s [%s] (posted by %s) %s" % (title, + duration, user, link)) else: event["stderr"].write("Failed to load results")