From 83360d8517f658d6f31913b8f3fa0fb8ac723ac4 Mon Sep 17 00:00:00 2001 From: Tom Bell Date: Mon, 10 Oct 2011 13:08:55 +0000 Subject: [PATCH] Update with major code clean up --- lib/bot.js | 30 +++++++++---------- lib/image.js | 2 +- lib/time.js | 8 +++++- src/bot.coffee | 72 ++++++++++++++++++++++++++++++---------------- src/fortune.coffee | 4 +-- src/github.coffee | 4 +-- src/image.coffee | 3 +- src/imdb.coffee | 4 +-- src/isitup.coffee | 5 +--- src/time.coffee | 10 +++++-- src/weather.coffee | 8 ++---- 11 files changed, 83 insertions(+), 67 deletions(-) diff --git a/lib/bot.js b/lib/bot.js index 2c68260..f92ed56 100644 --- a/lib/bot.js +++ b/lib/bot.js @@ -2,14 +2,14 @@ var client, dispatch, error, fortune, github, handlers, hear, image, imdb, irc, irc_channels, irc_name, irc_server, isup, listen, say, seen, success, sys, time, weather; irc = require("irc"); sys = require("sys"); - weather = require("./weather"); - image = require("./image"); - github = require("./github"); fortune = require("./fortune"); + github = require("./github"); + image = require("./image"); + imdb = require("./imdb"); isup = require("./isitup"); seen = require("./seen"); time = require("./time"); - imdb = require("./imdb"); + weather = require("./weather"); irc_server = process.env.IRC_SERVER; irc_name = process.env.IRC_NAME; irc_channels = process.env.IRC_CHANNELS.split(";"); @@ -31,6 +31,12 @@ say = function(channel, message) { return client.say(channel, message); }; + success = function(message) { + return console.log("\033[01;32m" + message + "\033[0m"); + }; + error = function(message) { + return console.log("\033[01;31m" + message + "\033[0m"); + }; listen = function() { var opts; opts = { @@ -52,19 +58,12 @@ return error(message); }); }; - success = function(message) { - return console.log("\033[01;32m" + message + "\033[0m"); - }; - error = function(message) { - return console.log("\033[01;31m" + message + "\033[0m"); - }; hear(/^weather me (.*)/i, function(message) { var location; seen.setSeenUser(message.from, message.to); location = message.match[1]; return weather.getWeather(location, function(err, weather) { if (err || !weather) { - error("weather:error => " + err); return say(message.to, "Could not find weather for '" + location + "'"); } else { say(message.to, "Current: " + weather.current); @@ -79,7 +78,6 @@ phrase = message.match[1]; return image.getImage(phrase, function(err, image) { if (err || !image) { - error("image:error => " + err); return say(message.to, "Could not find an image for '" + phrase + "'"); } else { return say(message.to, image); @@ -93,7 +91,6 @@ proj = message.match[2]; return github.getLatestCommit(user, proj, function(err, commit) { if (err || !commit) { - error("github:error => " + err); return say(message.to, "Could not get latest commit for '" + user + "/" + proj + "'"); } else { return say(message.to, "" + commit.author + " commited '" + commit.message + "' to " + user + "/" + proj + " on " + commit.date); @@ -104,10 +101,9 @@ seen.setSeenUser(message.from, message.to); return fortune.getFortune(function(err, fortune) { if (err || !fortune) { - error("fortune:error => " + err); - return say(message.to, "Could not get fortune"); + return say(message.to, "" + message.from + ": " + err); } else { - return say(message.to, fortune); + return say(message.to, "" + message.from + ": " + fortune); } }); }); @@ -128,7 +124,7 @@ seen.setSeenUser(message.from, message.to); sides = parseInt(message.match[1] || 6); if (sides === 0) { - return say(message.to, "" + message.from + " I cannot make the warp core stabalizers divide by 0!"); + return say(message.to, "" + message.from + " I cannot make the warp core stabilizers divide by 0!"); } else { return say(message.to, "" + message.from + " rolls a " + sides + " sided die and gets " + (Math.floor(Math.random() * sides) + 1)); } diff --git a/lib/image.js b/lib/image.js index 18eb913..45182ac 100644 --- a/lib/image.js +++ b/lib/image.js @@ -7,7 +7,7 @@ path = "/ajax/services/search/images?v=1.0&safe=off&rsz=8&q=" + (encodeURI(phrase)); client = http.createClient(80, host); headers = { - Host: "ajax.googleapis.com" + 'Host': "ajax.googleapis.com" }; request = client.request("GET", path, headers); request.on("response", function(response) { diff --git a/lib/time.js b/lib/time.js index 847e132..ce7d47c 100644 --- a/lib/time.js +++ b/lib/time.js @@ -17,7 +17,7 @@ response.on("data", function(chunk) { return data += chunk; }); - return response.on("end", function() { + response.on("end", function() { var body, time; body = JSON.parse(data); if (body.data.error) { @@ -28,6 +28,12 @@ return callback(null, "The time in " + place + " is " + time); } }); + return response.on("error", function(error) { + return callback(error); + }); + }); + request.on("error", function(error) { + return callback(error); }); return request.end(); }; diff --git a/src/bot.coffee b/src/bot.coffee index e0e822d..4b70999 100644 --- a/src/bot.coffee +++ b/src/bot.coffee @@ -1,14 +1,14 @@ irc = require "irc" sys = require "sys" -weather = require "./weather" -image = require "./image" -github = require "./github" fortune = require "./fortune" +github = require "./github" +image = require "./image" +imdb = require "./imdb" isup = require "./isitup" seen = require "./seen" time = require "./time" -imdb = require "./imdb" +weather = require "./weather" irc_server = process.env.IRC_SERVER irc_name = process.env.IRC_NAME @@ -30,70 +30,77 @@ hear = (pattern, callback) -> say = (channel, message) -> client.say channel, message +success = (message) -> + console.log "\033[01;32m#{message}\033[0m" + +error = (message) -> + console.log "\033[01;31m#{message}\033[0m" + listen = -> - opts = - autoRejoin: true - channels: irc_channels - realName: irc_name - userName: irc_name + opts = autoRejoin: true, channels: irc_channels, realName: irc_name, userName: irc_name client = new irc.Client irc_server, irc_name, opts client.addListener "message", (from, to, message) -> - dispatch { from: from, to: to, message: message } + dispatch from: from, to: to, message: message success "#{to}:#{from} => #{message}" client.addListener "error", (message) -> error message -success = (message) -> - console.log "\033[01;32m#{message}\033[0m" - -error = (message) -> - console.log "\033[01;31m#{message}\033[0m" - +# +# Weather command - 'weather me :location' +# hear /^weather me (.*)/i, (message) -> seen.setSeenUser message.from, message.to location = message.match[1] weather.getWeather location, (err, weather) -> if err or not weather - error "weather:error => #{err}" say message.to, "Could not find weather for '#{location}'" else say message.to, "Current: #{weather.current}" say message.to, "Today: #{weather.today}" say message.to, "Tomorrow: #{weather.tomorrow}" +# +# Image command - 'image me :term' +# hear /^image me (.*)$/i, (message) -> seen.setSeenUser message.from, message.to phrase = message.match[1] image.getImage phrase, (err, image) -> if err or not image - error "image:error => #{err}" say message.to, "Could not find an image for '#{phrase}'" else say message.to, image +# +# Commit command - 'commit me :user/:project' +# hear /^commit me (.*)\/(.*)/i, (message) -> seen.setSeenUser message.from, message.to user = message.match[1] proj = message.match[2] github.getLatestCommit user, proj, (err, commit) -> if err or not commit - error "github:error => #{err}" say message.to, "Could not get latest commit for '#{user}/#{proj}'" else say message.to, "#{commit.author} commited '#{commit.message}' to #{user}/#{proj} on #{commit.date}" +# +# Fortune command - 'fortune me' +# hear /fortune me/i, (message) -> seen.setSeenUser message.from, message.to fortune.getFortune (err, fortune) -> if err or not fortune - error "fortune:error => #{err}" - say message.to, "Could not get fortune" + say message.to, "#{message.from}: #{err}" else - say message.to, fortune + say message.to, "#{message.from}: #{fortune}" +# +# Seen command - 'seen :nick' +# hear /^seen ([\w^_-|\{\}\[\]`\\]+)$/i, (message) -> seen.setSeenUser message.from, message.to user = message.match[1] @@ -103,15 +110,20 @@ hear /^seen ([\w^_-|\{\}\[\]`\\]+)$/i, (message) -> else say message.to, "#{message.from}: #{msg}" +# +# Roll command - 'roll me :sides' +# hear /^roll me ?(\d*)/i, (message) -> seen.setSeenUser message.from, message.to sides = parseInt message.match[1] or 6 - if sides is 0 - say message.to, "#{message.from} I cannot make the warp core stabalizers divide by 0!" + say message.to, "#{message.from} I cannot make the warp core stabilizers divide by 0!" else say message.to, "#{message.from} rolls a #{sides} sided die and gets #{Math.floor(Math.random() * sides) + 1}" +# +# Website status command - 'is :domain up' +# hear /^is (.*) up/, (message) -> seen.setSeenUser message.from, message.to url = message.match[1] @@ -121,6 +133,9 @@ hear /^is (.*) up/, (message) -> else say message.to, "#{message.from}: #{msg}" +# +# Time command - 'what is the time in :city' +# hear /^what is the time in (.*)/i, (message) -> seen.setSeenUser message.from, message.to place = message.match[1] @@ -130,6 +145,9 @@ hear /^what is the time in (.*)/i, (message) -> else say message.to, "#{message.from}: #{msg}" +# +# Movie command - 'movie me :movie_or_tv_show' +# hear /^movie me (.*)/i, (message) -> seen.setSeenUser message.from, message.to query = message.match[1] @@ -139,10 +157,16 @@ hear /^movie me (.*)/i, (message) -> else say message.to, "#{message.from}: #{msg}" +# +# That's what she said command +# hear /(it's|its|it was) (long|short|hard)/i, (message) -> seen.setSeenUser message.from, message.to say message.to, "That's what she said!" +# +# Pull requests command - 'what are the pulls on :user/:project' +# hear /^what are the pulls on (.*)\/(.*)/i, (message) -> seen.setSeenUser message.from, message.to user = message.match[1] diff --git a/src/fortune.coffee b/src/fortune.coffee index de51472..d82345e 100644 --- a/src/fortune.coffee +++ b/src/fortune.coffee @@ -1,9 +1,7 @@ http = require "http" exports.getFortune = getFortune = (callback) -> - opts = - host: "www.fortunefortoday.com" - path: "/getfortuneonly.php" + opts = host: "www.fortunefortoday.com", path: "/getfortuneonly.php" request = http.request opts, (response) -> data = "" diff --git a/src/github.coffee b/src/github.coffee index a8deefb..2c27c2d 100644 --- a/src/github.coffee +++ b/src/github.coffee @@ -1,9 +1,7 @@ https = require "https" exports.getLatestCommit = getLatestCommit = (user, proj, callback) -> - opts = - host: "api.github.com" - path: "/repos/#{user}/#{proj}/commits?per_page=1" + opts = host: "api.github.com", path: "/repos/#{user}/#{proj}/commits?per_page=1" request = https.request opts, (response) -> data = "" diff --git a/src/image.coffee b/src/image.coffee index 24f8022..41dc760 100644 --- a/src/image.coffee +++ b/src/image.coffee @@ -6,8 +6,7 @@ exports.getImage = getImage = (phrase, callback) -> client = http.createClient 80, host - headers = - Host: "ajax.googleapis.com" + headers = 'Host': "ajax.googleapis.com" request = client.request "GET", path, headers diff --git a/src/imdb.coffee b/src/imdb.coffee index 334bd22..cd00edf 100644 --- a/src/imdb.coffee +++ b/src/imdb.coffee @@ -1,9 +1,7 @@ http = require 'http' exports.getMovie = getMovie = (query, callback) -> - opts = - host: process.env.IMDB_URL - path: "/by/title/#{encodeURI query}" + opts = host: process.env.IMDB_URL, path: "/by/title/#{encodeURI query}" request = http.request opts, (response) -> if response.statusCode is 200 diff --git a/src/isitup.coffee b/src/isitup.coffee index d8ba762..33a7662 100644 --- a/src/isitup.coffee +++ b/src/isitup.coffee @@ -1,9 +1,7 @@ http = require "http" exports.isItUp = isItUp = (url, callback) -> - opts = - host: "www.isup.me" - path: "/#{url}" + opts = host: "www.isup.me", path: "/#{url}" request = http.request opts, (response) -> data = "" @@ -13,7 +11,6 @@ exports.isItUp = isItUp = (url, callback) -> response.on "end", -> body = "" - unknown = data.indexOf 'doesn\'t look like a site on the interwho.' down = data.indexOf 'looks down from here.' diff --git a/src/time.coffee b/src/time.coffee index 792b6cc..d460895 100644 --- a/src/time.coffee +++ b/src/time.coffee @@ -6,9 +6,7 @@ exports.getTime = getTime = (place, callback) -> place = place.replace("?", "") location = encodeURI place - opts = - host: "www.worldweatheronline.com" - path: "/feed/tz.ashx?q=#{location}&format=json&key=#{API_KEY}" + opts = host: "www.worldweatheronline.com", path: "/feed/tz.ashx?q=#{location}&format=json&key=#{API_KEY}" request = http.request opts, (response) -> data = "" @@ -28,4 +26,10 @@ exports.getTime = getTime = (place, callback) -> time = body.data.time_zone[0].localtime callback null, "The time in #{place} is #{time}" + response.on "error", (error) -> + callback error + + request.on "error", (error) -> + callback error + request.end() diff --git a/src/weather.coffee b/src/weather.coffee index bae1ac6..b623c31 100644 --- a/src/weather.coffee +++ b/src/weather.coffee @@ -5,9 +5,7 @@ query_to_woeid = {} getWhereOnEarthID = (wanted, callback) -> query = encodeURI "select woeid from geo.places where text=\"#{wanted}\" limit 1&format=json" - opts = - host: "query.yahooapis.com" - path: "/v1/public/yql?q=#{query}" + opts = host: "query.yahooapis.com", path: "/v1/public/yql?q=#{query}" request = http.request opts, (response) -> data = "" @@ -35,9 +33,7 @@ getWhereOnEarthID = (wanted, callback) -> request.end() getWeatherInternal = (woeid, callback) -> - opts = - host: "weather.yahooapis.com" - path: "/forecastjson?w=#{woeid}&u=c" + opts = host: "weather.yahooapis.com", path: "/forecastjson?w=#{woeid}&u=c" request = http.request opts, (response) -> data = ""