forked from GitHub/dbot
commit
566c91a2b6
5
modules/radio/config.json
Normal file
5
modules/radio/config.json
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"stream": "",
|
||||
"announce": [ { "server": "aberwiki", "name": "#dbot" } ],
|
||||
"outputPrefix": "\u00033radio\u000f"
|
||||
}
|
68
modules/radio/radio.js
Normal file
68
modules/radio/radio.js
Normal file
@ -0,0 +1,68 @@
|
||||
/**
|
||||
* Module Name: Radio
|
||||
* Description: Various icecast functionality.
|
||||
*/
|
||||
|
||||
var _ = require('underscore')._,
|
||||
icecast = require('icecast-stack');
|
||||
|
||||
var radio = function(dbot) {
|
||||
this.listening = false;
|
||||
this.data = false;
|
||||
this.stream = false;
|
||||
this.internalAPI = {
|
||||
'startRadio': function() {
|
||||
var stream = icecast.createReadStream(this.config.stream);
|
||||
this.stream = stream;
|
||||
|
||||
stream.on('connect', function() {
|
||||
this.listening = true;
|
||||
}.bind(this));
|
||||
|
||||
stream.on('response', function(res) {
|
||||
this.data = res.headers;
|
||||
_.each(this.config.announce, function(a) {
|
||||
dbot.say(a.server, a.name, dbot.t('now_online', {
|
||||
'name': res.headers['icy-name'],
|
||||
'desc': res.headers['icy-description'],
|
||||
'url': res.headers['icy-url']
|
||||
}));
|
||||
});
|
||||
}.bind(this));
|
||||
|
||||
stream.on('metadata', function(metadata) {
|
||||
var title = icecast.parseMetadata(metadata).StreamTitle;
|
||||
_.each(this.config.announce, function(a) {
|
||||
dbot.say(a.server, a.name, dbot.t('now_playing', {
|
||||
'name': this.data['icy-name'],
|
||||
'song': title,
|
||||
'url': this.data['icy-url']
|
||||
}));
|
||||
}, this);
|
||||
}.bind(this));
|
||||
|
||||
stream.on('end', function() {
|
||||
this.stream.end();
|
||||
this.listening = false;
|
||||
}.bind(this));
|
||||
}.bind(this),
|
||||
|
||||
'getRadio': function() {
|
||||
dbot.api.timers.addTimer(20000, function() {
|
||||
if(this.listening == false) {
|
||||
this.internalAPI.startRadio();
|
||||
}
|
||||
}.bind(this));
|
||||
}.bind(this)
|
||||
};
|
||||
this.onLoad = function() {
|
||||
this.internalAPI.getRadio();
|
||||
}.bind(this);
|
||||
this.onDestroy = function() {
|
||||
this.stream.abort();
|
||||
}.bind(this);
|
||||
};
|
||||
|
||||
exports.fetch = function(dbot) {
|
||||
return new radio(dbot);
|
||||
};
|
8
modules/radio/strings.json
Normal file
8
modules/radio/strings.json
Normal file
@ -0,0 +1,8 @@
|
||||
{
|
||||
"now_online": {
|
||||
"en": "Now Online: {name} - {desc} - {url}"
|
||||
},
|
||||
"now_playing": {
|
||||
"en": "Now Playing: {name} - {song} - {url}"
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user