dbot/modules-stock/soundcloud/soundcloud.js

71 lines
2.5 KiB
JavaScript
Raw Permalink Normal View History

/**
* Module Name: soundcloud
* Description: Various SoundCloud functionality
*/
var _ = require('underscore')._,
request = require('request');
var soundcloud = function(dbot) {
this.ApiRoot = 'http://api.soundcloud.com';
this.commands = {
'~soundcloud': function(event) {
var query = event.input[1];
request.get(this.ApiRoot + '/tracks.json', {
'qs': {
'client_id': this.config.client_id,
'q': query
},
'json': true
}, function(error, response, body) {
if(body.length != 0) {
body = body[0];
if(!body.genre) body.genre = '';
event.reply(dbot.t('sc_track', {
'title': body.title,
'artist': body.user.username,
'genre': body.genre.trim(),
'plays': body.playback_count,
'favs': body.favoritings_count
}) + ' — ' + body.permalink_url);
} else {
event.reply(dbot.t('sc_notrack'));
}
});
}
};
this.commands['~soundcloud'].regex = [/^soundcloud (.+)$/, 2];
this.onLoad = function() {
dbot.api.link.addHandler(this.name,
/https?:\/\/(www\.)?soundcloud\.com\//,
function(match, name, callback) {
var url = match.input;
request.get(this.ApiRoot + '/resolve.json', {
'qs': {
'client_id': this.config.client_id,
'url': url
},
'json': true
}, function(error, response, body) {
if(response.statusCode == 200) {
if(body.kind == 'track') {
if(!body.genre) body.genre = '';
callback(dbot.t('sc_track', {
'title': body.title,
'artist': body.user.username,
'genre': body.genre.trim(),
'plays': body.playback_count,
'favs': body.favoritings_count
}));
}
}
});
}.bind(this));
}.bind(this);
};
exports.fetch = function(dbot) {
return new soundcloud(dbot);
};