kulmapaikka-ircbot/app.js

305 lines
7.1 KiB
JavaScript
Raw Normal View History

2015-06-20 03:04:20 +03:00
// IRC Bot
var config = {
irc: {
server: 'irc.elisa.fi',
nick: 'Ookami-dev',
2015-06-20 15:08:25 +03:00
channels: ['#kulmapaikka-dev']
}
};
var members = {
'lanxu': {
user: /julankin$/,
host: /^jumi\.lut\.fi$/
},
'asdfas': {
user: /asdfas$/,
host: /(.*)\.ssp\.fi$/
},
'asdfas2': {
user: /Asdfas$/,
host: /(.*)\.elisa-mobile\.fi$/
},
'cbd': {
user: /cbd$/,
host: /kapsi\.fi$/
},
'fitzhood': {
user: /Fitzhood$/,
host: /(.*)ssp\.fi$/
},
'mindflayer': {
user: /mindflaye$/,
host: /(.*)opintanner\.fi$/
},
'pariah': {
user: /rautia$/,
host: /mozart\.cc\.tut\.fi$/
},
'zoid': {
user: /jolaakso$/,
host: /kapsi\.fi$/
},
'palin': {
user: /Palin$/,
host: /(.*)\.elisa-mobile\.fi$/
},
'rootmer': {
user: /ror$/,
host: /(.*)\.inet\.fi$/
},
'masaKapsi': {
user: /maruohon$/,
host: /kapsi\.fi$/
},
'masaJumi': {
user: /maruohon$/,
host: /jumi\.lut\.fi$/
},
'masaAura': {
user: /masa$/,
host: /(.*)\.ssp\.fi$/
2015-06-20 03:04:20 +03:00
}
};
var irc = require('irc');
var penaapi = require('./penaapi')();
var owmapi = require('./owmapi')();
var owmCityIds = {
Tampere: 634963,
Karinainen: 654059,
Lappeenranta: 648900
};
2015-06-20 15:08:25 +03:00
var iconCodeToText = {
'01d': 'selkeää',
'02d': 'puolipilvistä',
'03d': 'pilvistä',
'04d': 'pilvipeite rakoilee',
'09d': 'sadekuuroja',
'10d': 'vesisadetta',
'11d': 'ukkostaa',
'13d': 'lumisadetta',
'50d': 'sumua',
'01n': 'selkeää',
'02n': 'puolipilvistä',
'03n': 'pilvistä',
'04n': 'pilvipeite rakoilee',
'09n': 'sadekuuroja',
'10n': 'vesisadetta',
'11n': 'ukkostaa',
'13n': 'lumisadetta',
'50n': 'sumua'
};
2015-06-20 03:04:20 +03:00
var getTemperatureString = function() {
var Promise = require('promise');
var promise = new Promise(function(resolve, reject) {
Promise.all([
owmapi.getTemperatures(owmCityIds),
penaapi.getTemperatures()
]).then(function(results) {
var resultString = '';
// OWM
results[0].list.forEach(function(data) {
var city = data.name;
var temp = (data.main.temp-273.15).toFixed(1);
2015-06-20 15:08:25 +03:00
var code = data.weather[0].icon;
2015-06-20 03:04:20 +03:00
2015-06-20 15:08:25 +03:00
resultString += '' + city + ' ('+temp+' °C, '+iconCodeToText[code]+'), ';
2015-06-20 03:04:20 +03:00
});
if(results[1].length > 0) {
var temp = Number(results[1][0].temp).toFixed(1);
resultString += 'Aura (' + temp + ' °C)';
}
2015-06-20 15:08:25 +03:00
2015-06-20 03:04:20 +03:00
resolve(resultString);
});
});
return promise;
};
var getDiceString = function(numThrows, sides) {
2015-06-20 15:08:25 +03:00
2015-06-20 03:04:20 +03:00
var total = 0;
var totalThrows = [];
numThrows = Number(numThrows);
sides = Number(sides);
if(numThrows === 0 || sides === 0) {
return 'Tyhjää ei voi heittää';
}
if(numThrows > 100) {
return 'Ei jaksa...';
}
for(var a = 0; a < numThrows; a++) {
var t = Math.floor(Math.random()*sides)+1;
totalThrows.push(t);
total += t;
}
var resultString = '';
totalThrows.forEach(function(value) {
resultString += value + ', ';
});
2015-06-20 15:08:25 +03:00
2015-06-20 03:04:20 +03:00
resultString = resultString.substring(0, resultString.length - 2);
resultString += ' (yhteensä: ' + total + '. '+ (total/numThrows).toFixed(2) + ' per heitto)';
2015-06-20 15:08:25 +03:00
2015-06-20 03:04:20 +03:00
return resultString;
};
2015-06-20 15:08:25 +03:00
/*
getTemperatureString().then(function(result) {
console.log(result);
});
*/
2015-06-20 03:04:20 +03:00
/*
2015-06-20 15:08:25 +03:00
var res = null;
var message= '.heita 4d6';
if (res = message.match(/^\.heita ([0-9]+)d([0-9]+)$/i)) {
console.log(getDiceString(res[1], res[2]));
}
*/
2015-06-20 03:04:20 +03:00
/*
var message = '.saa Tampere'; var res = null;
if (res = message.match(/^\.saa ([^0-9 ]+)$/i)) {
console.log('kaupunki', res[1]);
owmapi.getTemperature(res[1]).then(function(result) {
console.log(result);
if(result.cod === '404') {
console.log('Eioo');
} else {
var city = result.name;
2015-06-20 15:08:25 +03:00
var country = result.sys.country;
2015-06-20 03:04:20 +03:00
var temp = (result.main.temp-273.15).toFixed(1);
2015-06-20 15:08:25 +03:00
var sunriseDate = new Date(result.sys.sunrise*1000);
var sunsetDate = new Date(result.sys.sunset*1000);
var sunrise = sunriseDate.getHours() + '.' + sunriseDate.getMinutes();
var sunset = sunsetDate.getHours() + '.' + sunsetDate.getMinutes();
var humidity = result.main.humidity;
var pressure = result.main.pressure;
console.log(city, temp, country, sunrise, sunset, humidity, pressure);
2015-06-20 03:04:20 +03:00
}
}, function(error) {
console.log('fas',error);
});
}
2015-06-20 15:08:25 +03:00
*/
2015-06-20 03:04:20 +03:00
var client = new irc.Client(config.irc.server, config.irc.nick, {
debug: true,
channels: config.irc.channels,
});
client.addListener('message', function (from, to, message) {
console.log(from + ' => ' + to + ': ' + message);
if (to.match(/^[#&]/)) {
// channel message
if (message.match(/^\.sää$/i) || message.match(/^\.saa$/i)) {
getTemperatureString().then(function(str) {
client.say(to, 'Sää: ' + str);
});
}
var res = null;
if (res = message.match(/^\.s(ää|aa) ([^0-9]+)$/i)) {
//console.log('kaupunki', res[1]);
owmapi.getTemperature(res[2]).then(function(result) {
//console.log(result);
if(result.cod === '404') {
//console.log('Eioo: ' + res[1]);
client.say(to, 'Eioo: ' + res[2]);
} else {
var city = result.name;
2015-06-20 15:08:25 +03:00
var country = result.sys.country;
2015-06-20 03:04:20 +03:00
var temp = (result.main.temp-273.15).toFixed(1);
2015-06-20 15:08:25 +03:00
var code = result.weather[0].icon;
var sunriseDate = new Date(result.sys.sunrise*1000);
var sunsetDate = new Date(result.sys.sunset*1000);
var sunrise = sunriseDate.getHours() + '.' + sunriseDate.getMinutes();
var sunset = sunsetDate.getHours() + '.' + sunsetDate.getMinutes();
var humidity = result.main.humidity;
var pressure = result.main.pressure;
var windspeed = result.wind.speed;
//console.log(city, temp, code);
client.say(to, 'Sää: '+city+', '+country+' ('+temp+' °C, '+ iconCodeToText[code] +', ilmankosteus: '+humidity+' %, ilmanpaine: '+pressure+' hPa, tuulen nopeus: '+windspeed+' m/s)');
2015-06-20 03:04:20 +03:00
}
}, function(error) {
console.log('ERROR ',error);
client.say(to, 'Oho! Tapahtui virhe. Yritä myöhemmin uudelleen...');
});
}
if (res = message.match(/^\.heit(a|ä) ([0-9]+)d([0-9]+)$/i)) {
var th = getDiceString(res[2], res[3]);
client.say(to, 'Heitettiin: '+th);
}
if (message.match(/^\.heit(a|ä) voltti homo$/i)) {
client.say(to, 'steam://run/1250');
}
2015-06-20 15:08:25 +03:00
if (message.match(/^\.op$/i)) {
client.send('NAMES', to);
}
2015-06-20 03:04:20 +03:00
}
});
2015-06-20 15:08:25 +03:00
2015-06-20 03:04:20 +03:00
client.addListener('join', function(channel, who) {
2015-06-20 15:08:25 +03:00
client.whois(who, function(result) {
console.log(result);
for(var memberNick in members) {
var member = members[memberNick];
if(result.host.match(member.host) && result.user.match(member.user)) {
client.send('MODE', channel, '+o', result.nick);
}
}
});
2015-06-20 03:04:20 +03:00
setTimeout(function() {
// client.say(channel, 'Moi ' + who + '!');
}, 4000);
});
2015-06-20 15:08:25 +03:00
client.addListener('error', function(message) {
console.log('error: ', message);
});
client.addListener('names', function(channel, nicks) {
console.log('names', channel, nicks);
if(typeof nicks[config.irc.nick] !== 'undefined' && nicks[config.irc.nick] === '@') {
// go through nicks
for(var nick in nicks) {
if(nicks[nick] !== '@') {
client.whois(nick, function(result) {
for(var memberNick in members) {
var member = members[memberNick];
if(result.host.match(member.host) && result.user.match(member.user)) {
console.log('testing', channel, result.nick);
client.send('MODE', channel, '+o', result.nick);
}
}
});
}
}
}
});