UNPKG

hubot-tomahk

Version:

Hubot Plugin to translate various music URLs into unified toma.hk links so that you are not restricted to the services of your peers

66 lines (58 loc) 2.63 kB
# Description: # Allows Hubot to resolve Music URLs to unified toma.hk links # # Commands: # hubot np <url> - Translate the music URL to a toma.hk link and displays metadata # # Configuration: # HUBOT_AXE_DIRECTORY - Directory with .axe files (Tomahawk Resolvers) # HUBOT_TOMAHK_ANY - Respond to all regonized music URLs (turn off with "false") queuedURLs = {} module.exports = (robot) -> robot.hear /(np|nowplaying):? (.*)/i, (msg) -> url = msg.match[2] if canParseUrl(msg.match[2]) queuedURLs[url] = msg lookupUrl(url) if process.env.HUBOT_TOMAHK_ANY != "false" robot.hear /(.*)/i, (msg) -> urls = msg.match[0].split(/\s+/).filter(canParseUrl).map (url) -> queuedURLs[url] = msg lookupUrl(url) async = require 'async' glob = require 'glob' http = require 'http' path = require 'path' TomahawkJS = require 'tomahawkjs' tomahk = require 'tomahk' sendQueuedMsg = (url, message) -> if queuedURLs.hasOwnProperty(url) queuedURLs[url].send message delete queuedURLs[url] urlResult = (url, result) -> switch result.type when 'track' tomahk.shortTrackUrl result.artist, result.title, (tomahkUrl) -> sendQueuedMsg url, result.artist + ' - ' + result.title + ' ' + tomahkUrl when 'album' tomahkUrl = tomahk.albumUrl result.artist, result.name sendQueuedMsg url, result.artist + ' - ' + result.name + ' ' + tomahkUrl when 'playlist' tomahk.createPlaylist result.title, result.tracks, (tomahkUrl) -> sendQueuedMsg url, result.title + ' - ' + tomahkUrl when 'artist' tomahkUrl = tomahk.artistUrl result.name sendQueuedMsg url, result.name + ' ' + tomahkUrl axes = [] glob path.join(process.env.HUBOT_AXE_DIRECTORY, '*.axe'), (err, files) -> async.map files, TomahawkJS.loadAxe, (err, results) -> async.map results, ((item, cb) -> item.getInstance cb), (err, results) -> results.forEach ({instance, context}) -> instance.init() axes.push instance: instance, context: context context.on 'url-result', urlResult # Ask all resolvers that are capable of urllookup if they could parse this url canParseUrl = (url) -> axes.filter((a) -> a.context.hasCapability('urllookup')).map((a) -> a.instance.canParseUrl(url)).reduce(((a,b) -> a || b), false) lookupUrl = (url) -> axes.filter((a) -> a.context.hasCapability('urllookup') && a.instance.canParseUrl(url)).map((a) -> a.instance.lookupUrl(url))