summaryrefslogtreecommitdiff
path: root/dynobot-irc.js
diff options
context:
space:
mode:
authorTrygve Laugstøl <trygvis@inamo.no>2012-06-16 14:24:33 +0200
committerTrygve Laugstøl <trygvis@inamo.no>2012-06-16 14:24:33 +0200
commit2870c4da1aedf41926972dd60227c3d62cdaa123 (patch)
treebab887acdac4969c8a4cc3fcaf827ebb81726f6c /dynobot-irc.js
parente971ae61c99c8a602a1d60c95e9f8f908d4cf053 (diff)
downloaddynobot-irc-2870c4da1aedf41926972dd60227c3d62cdaa123.tar.gz
dynobot-irc-2870c4da1aedf41926972dd60227c3d62cdaa123.tar.bz2
dynobot-irc-2870c4da1aedf41926972dd60227c3d62cdaa123.tar.xz
dynobot-irc-2870c4da1aedf41926972dd60227c3d62cdaa123.zip
o Polishing the dynobot a bit.
Diffstat (limited to 'dynobot-irc.js')
-rw-r--r--dynobot-irc.js183
1 files changed, 48 insertions, 135 deletions
diff --git a/dynobot-irc.js b/dynobot-irc.js
index 8258930..9cae258 100644
--- a/dynobot-irc.js
+++ b/dynobot-irc.js
@@ -1,60 +1,46 @@
require('tinycolor');
-var EventEmitter = require('events').EventEmitter;
-var util = require('util');
+var Channel = require('dynobot/channel.js');
+var cmdopt = require('cmdopt')
var cp = require('child_process');
+var EventEmitter = require('events').EventEmitter;
+var FakeSocket = require('./FakeSocket.js');
var IrcClient = require('./irc-client').IrcClient;
-var Service = require('dynobot/service.js');
-var Channel = require('dynobot/channel.js');
+var os = require('os')
var _ = require('underscore');
-var rl = require('readline');
-
-/************************************************************/
-
-function FakeSocket(stdin, stdout, msgHandler) {
- this.stdin = stdin;
- this.stdout = stdout;
- this.msgHandler = msgHandler;
- this.connectHandler = undefined;
- this.errorHandler = undefined;
-}
-
-FakeSocket.prototype.setEncoding = function(encoding) {
- this.stdin.setEncoding(encoding);
-}
+var Service = require('dynobot/service.js');
+var util = require('util');
-FakeSocket.prototype.on = function(event, cb) {
- switch(event) {
- case 'data':
- this.stdin.on('data', function(chunk) {
- cb(chunk.trim() + '\r\n');
- });
- break;
- case 'connect':
- this.connectHandler = cb;
- break;
- case 'close':
- this.stdin.on('exit', cb);
- break;
- case 'end':
- case 'error':
- break;
- default:
- process.exit(1);
- break;
+var parser = new cmdopt.Parser();
+parser.option("-h, --help", "Show this help");
+parser.option("-s, --server=HOST", "Server to join");
+parser.option("-p, --port=PORT", "Port to use");
+parser.option("-n, --nick=NICK", "Nickname of the bot");
+parser.option("-c, --channel=CHANNEL", "IRC channel to join");
+
+var args = process.argv.slice(2);
+var defaults = {
+ server: "irc.freenode.org",
+ port: "6667",
+ nick: os.hostname(),
+ channel: "#dynobot"
+};
+
+try {
+ var config = parser.parse(args);
+ if (config.help) {
+ console.log(parser.help());
+ return;
}
+ config = _.defaults(config, defaults);
+ console.log("config", config);
+} catch (ex) {
+ if (ex instanceof cmdopt.ParseError) {
+ process.stderr.write(ex.message + "\n");
+ process.exit(1);
+ }
+ throw ex;
}
-FakeSocket.prototype.connect = function(server, port) {
- this.connectHandler();
-}
-
-FakeSocket.prototype.write = function(chunk) {
- this.stdout.write(chunk.red);
- this.msgHandler && this.msgHandler(chunk);
-}
-
-/************************************************************/
-
var StdinPipe = function() {
EventEmitter.call(this);
}
@@ -66,11 +52,8 @@ StdinPipe.prototype.send = function(msg) {
stdinPipe.emit('data', msg + '\r\n');
}
-/************************************************************/
-
var stdinPipe = new StdinPipe();
var irc;
-var nick = 'dynobot';
var realName = 'bots\'r\'us';
var ident = 'ident';
@@ -80,9 +63,7 @@ function info(a, b, c) {
var reallyConnect = true;
if(reallyConnect) {
- var host = 'localhost';
- // host = 'irc.freenode.net';
- irc = new IrcClient(nick, realName, ident, host, 6667);
+ irc = new IrcClient(config.nick, realName, ident, config.server, config.port);
}
else {
var msgHandler = function(line) {
@@ -94,8 +75,7 @@ else {
stdinPipe.send(prefix + ' JOIN ' + parts[1]);
}
}
- irc = new IrcClient(nick, realName, ident,new FakeSocket(stdinPipe, process.stdout, msgHandler));
- process.stdin.resume();
+ irc = new IrcClient(nick, realName, ident, new FakeSocket(stdinPipe, process.stdout, msgHandler));
}
var ircService = new Service('irc', irc);
@@ -109,8 +89,8 @@ function Plugin(name, script) {
}
var plugins = [
- new Plugin('echo', './echo-bot/index.js')
-// new Plugin('atom', './atom-bot/index.js')
+// new Plugin('echo', './echo-bot/index.js')
+ new Plugin('atom', './atom-bot/index.js')
];
_.each(plugins, function(plugin) {
@@ -133,85 +113,18 @@ _.each(plugins, function(plugin) {
// piping to process.stdout
});
-process.stdin.resume();
-var i = rl.createInterface(process.stdin, process.stdout, null);
-
-function quit() {
- i.close();
- process.stdin.destroy();
- process.exit(0);
-}
-
-function setupRepl() {
- var from = 'alice!~alice@example.com';
- var channel = '#bitraf2';
-
- function updatePrompt() {
- var prefix = 'from=' + from;
- prefix += channel ? ', channel=' + channel : '';
- prefix += '> ';
- i.setPrompt(prefix, prefix.length);
- i.prompt();
- }
-
- i.on('line', function (cmd) {
- cmd = cmd.trim();
- if(cmd.length == 0) {
- i.prompt();
- return;
- }
- var parts = cmd.split(' ');
- switch(parts[0]) {
- case '/quit':
- case '/q':
- quit();
- break;
- case '/raw':
- case '/r':
- parts.shift();
- stdinPipe.send(parts.join(' '));
- updatePrompt();
- break;
- case '/join':
- case '/j':
- channel = parts[1];
- updatePrompt();
- break;
- case '/from':
- case '/f':
- from = parts[1];
- updatePrompt();
- break;
- case '/notice':
- case '/n':
- if(channel) {
- parts.shift();
- stdinPipe.send(':' + from + ' NOTICE ' + channel + ' :' + parts.join(' '));
- }
- else {
- info('You have to /j a channel first');
- }
- break;
- default:
- stdinPipe.send(':' + from + ' PRIVMSG ' + channel + ' :' + parts.join(' '));
- updatePrompt();
- break;
- }
- }).on('close', function() {
- quit();
- });
- updatePrompt();
-}
-
-irc.join('#bitraf2', function(name) {
+irc.join(config.channel, function(name) {
info('joined ' + name + ' from dynobot.');
});
info('colors: ' + 'from bot'.red + ', ' + 'to bot'.blue);
irc.connect();
-setupRepl(i);
-
-setTimeout(function() {
- stdinPipe.send(':irc.foo.bar 001 this :Welcome to Some Internet Relay Chat Network this');
-}, 1000);
+var repl = require('./Repl.js');
+repl.init();
+if(reallyConnect) {
+ repl.setupRepl();
+}
+else {
+ repl.setupSimulatorRepl();
+}