edgar_snodon/src/ctdo.js

138 lines
3.9 KiB
JavaScript

const net = require('net');
const myName = process.env['HUBOT_IRC_NICK'];
module.exports = function(robot) {
robot.brain.data.topics = {}
// old stuff
// lampel
function setLampel(r,ge,gr) {
var x = 0;
if(r)
x+=4;
if(ge)
x+=2;
if(gr)
x+=1;
var command = "io set port 2 0"+x+"\n";
var client = net.createConnection({port: 2701, host: 'lampel.raum.ctdo.de'}, function() {
client.end(command);
});
}
robot.respond(/rot$/i, function(r) {
setLampel(1,0,0);
});
robot.respond(/gruen$/i, function(r) {
setLampel(0,0,1);
});
robot.respond(/gelb$/i, function(r) {
setLampel(0,1,0);
});
robot.respond(/(all|alle|rotgelbgruen|gelbrotgruen|rotgruengelb|gelbgruenrot|gruenrotgelb|gruengelbrot)$/i, function(r) {
setLampel(1,1,1);
});
robot.respond(/(rotgelb|gelbrot)$/i, function(r) {
setLampel(1,1,0);
});
robot.respond(/(gruengelb|gelbgruen)$/i, function(r) {
setLampel(0,1,1);
});
robot.respond(/(rotgruen|gruenrot)$/i, function(r) {
setLampel(1,0,1);
});
robot.respond(/(aus|off)$/i, function(r) {
setLampel(0,0,0);
});
// topic
robot.adapter.bot.addListener('topic', function(channel, topic) {
robot.brain.data.topics[channel] = topic
setTopic(channel, topic);
});
function setTopic(channel, currentTopic) {
robot.http("https://status.ctdo.de/api/simple/v2")
.header('Accept', 'application/json')
.get()(function(err, res, body) {
var data = JSON.parse(body);
var raum_offen = /(raum: |r: )(auf|offen|open)/ig;
var raum_zu = /(raum: |r: )(zu|geschlossen|closed)/ig
var currentState = data.state;
var newTopic = currentTopic;
if(currentTopic.match(raum_offen)) {
// wenn raum auf drinsteht
if(!data.state) {
newTopic = currentTopic.replace(raum_offen, 'Raum: zu');
}
} else if(currentTopic.match(raum_zu)) {
// wenn raum zu drinsteht
if(data.state) {
newTopic = currentTopic.replace(raum_zu, 'Raum: auf');
}
} else {
// wenn nix drinsteht
if(data.state) {
newTopic = "Raum: auf | " + currentTopic;
} else {
newTopic = "Raum: zu | " + currentTopic;
}
}
if(newTopic !== currentTopic) {
robot.brain.data.topics[channel] = newTopic;
robot.adapter.topic({room: channel}, newTopic);
}
})
}
// topic interval
setInterval(function() {
var channels = process.env['HUBOT_IRC_ROOMS'];
channels = channels.split(',');
channels.forEach(function(c) {
setTopic(c, robot.brain.data.topics[c]);
});
}, 5000);
// gem
var gem = false;
robot.respond(/gem$/i, function(r) {
if(gem) {
gem = false;
r.reply("Gem Deactivated");
} else {
gem = true;
var c = Math.floor(Math.random() * 100) + 1;
if(c>99) {
r.reply('Mooooooooooooo!');
} else {
r.reply("Gem Activated");
}
}
});
// status
robot.respond(/(status|ls)$/i, function(r) {
console.log("status");
robot.http("https://status.ctdo.de/api/simple/v2")
.header('Accept', 'application/json')
.get()(function(err, res, body) {
var data = JSON.parse(body);
if(data.names.length)
return r.reply("Derzeit im Treff: " + data.names.join(', '));
r.reply("Ich erkenne niemanden im Treff.");
})
});
// disco
var discoInterval;
function disco() {
setLampel(Math.random() >= 0.5, Math.random() >= 0.5, Math.random() >= 0.5);
}
robot.respond(/(disco|disco ([0-9]{1,3}))$/i, function(r) {
if(typeof(discoInterval) !== 'undefined') {
clearInterval(discoInterval); // hebt den interval auf.
return discoInterval = undefined;
}
if(r.match.length === 2) {
console.log(parseInt(r.match[1]));
setInterval(disco, r.match[1]);
} else {
setInterval(disco, 500); // 120bpm!
}
});
}