diff --git a/app.js b/app.js index 669de71..5309875 100644 --- a/app.js +++ b/app.js @@ -1,6 +1,12 @@ // General includes var irc = require('irc'); +var fs = require('fs'); +var winston = require('winston'); var owmapi = require('./owmapi')(); +var path = require('path'); + +var googletin = require('./googleapi.js')(); + var iconCodeToText = { '01d': 'selkeää', '02d': 'puolipilvistä', @@ -30,6 +36,25 @@ var getDnDCharacter = require('./plugins/getCharacter')(); var getDiceString = require('./plugins/getDice')(); var getUrlString = require('./plugins/getUrl')(); +// Configure logger +// create a write stream (in append mode) +var logDirectory = __dirname + '/log'; +// ensure log directory exists +if(!fs.existsSync(logDirectory)) { + fs.mkdirSync(logDirectory); +} + +var logger = new (winston.Logger)({ + transports: [ + new (winston.transports.Console)(), + new (winston.transports.DailyRotateFile)({ + filename: logDirectory + '/ircbot.log', + datePattern: '.yyyy-MM-dd', + maxsize: 20000 + }) + ] +}); + // Start client var client = new irc.Client(config.irc.server, config.irc.nick, { debug: true, @@ -38,7 +63,7 @@ var client = new irc.Client(config.irc.server, config.irc.nick, { var handleMessage = function(from, to, message) { - console.log(from + ' => ' + to + ': ' + message); + logger.info(from + ' => ' + to + ': ' + message); //if (to.match(/^[#&]/)) { // channel message if (message.match(/^\.sää$/i) || message.match(/^\.saa$/i)) { @@ -101,10 +126,20 @@ var handleMessage = function(from, to, message) { client.send('NAMES', to); } + // reload config + if (message.match(/^\.paivita$/i)) { + // Using require for config files is dangerous + // Rewrite this in the future + var filename = path.resolve('./config.js'); + delete require.cache[filename]; + config = require('./config'); + client.say(to, 'Ladattiin asetustiedosto. ' + Object.keys(config.members).length + ' käyttäjäasetusta. Päivitetään operaattorioikeuksia...'); + client.send('NAMES', to); + } + // Url specific handling if (res = message.match(/http(s)?:\/\/(www\.)?((youtu\.be\/([a-zA-Z0-9_-]*))|(youtube\.com\/watch\?v=([a-zA-Z0-9_-]*)))/)) { - var googletin = require('./googleapi.js')(); console.log(res); var id = res[7]; if(typeof id === 'undefined') { @@ -125,7 +160,6 @@ var handleMessage = function(from, to, message) { } } else if (res = message.match(/^\.youtube (.+)$/i)) { - var googletin = require('./googleapi.js')(); console.log(res); googletin.getYoutubeVideo(res[1]).then(function(result) { var resultString = 'Youtube: '; @@ -144,6 +178,7 @@ var handleMessage = function(from, to, message) { }); } else if (res = message.match(/http(s)?:\/\/([^ ]*)/i)) { var url = res[0]; + console.log('Get url: ' + url); getUrlString(url).then(function(str) { client.say(to, 'Otsikko: ' + str); }); diff --git a/appTest.js b/appTest.js index e260d99..442c592 100644 --- a/appTest.js +++ b/appTest.js @@ -15,7 +15,7 @@ var getYoutubeTitle = function(query) { var apikey = 'AIzaSyBCLnmbmjjHvfScHNj8PBqINjoyLTAXEjg'; var youtube = google.youtube('v3'); - var params = { + var params = {- part: 'snippet, statistics', q: 'https://www.youtube.com/watch?v=XNwKqvCZ4kU', type: 'video', diff --git a/plugins/getUrl.js b/plugins/getUrl.js index a535bd9..1097a79 100644 --- a/plugins/getUrl.js +++ b/plugins/getUrl.js @@ -23,15 +23,17 @@ module.exports = function(config) { var getTitle = function(url) { var urlOpts = {host: url, path: '/', port: '80'}; - var re = /(<\s*title[^>]*>(.+?)<\s*\/\s*title)>/gi; + var re = /(<\s*title[^>]*>((.|\n)+?)<\s*\/\s*title)>/gi; var urlArgs = {}; var promise = new Promise(function(resolve, reject) { var urlPromise = requestPromise(url, urlArgs); urlPromise.then(function(data) { + var match = re.exec(data); + if (match && match[2]) { - resolve(match[2]); + resolve(match[2].trim()); } else { reject(); }