diff --git a/src/inc/irc/irc.js b/src/inc/irc/irc.js index 1cfcdfb..5acf9c6 100644 --- a/src/inc/irc/irc.js +++ b/src/inc/irc/irc.js @@ -3,109 +3,107 @@ var tls = require("tls"); var EventEmitter = require("events").EventEmitter; var util = require("util"); -function irc(options) { - EventEmitter.call(this); - this.options = options || {}; - this.options.channels = this.options.channels || []; - - this.options.host = this.options.host || "127.0.0.1"; - this.options.port = this.options.port || 6667; - this.options.ssl = this.options.ssl || false; - this.options.selfSigned = this.options.selfSigned || false; - - this.network = this.options.network || "test"; - this.nickname = this.options.nickname || "test"; - this.username = this.options.username || "test"; - this.realname = this.options.realname || "test"; - this.channels = this.options.channels || []; - - this.socket = (this.options.ssl?tls:net).connect({ - host: this.options.host, - port: this.options.port, - rejectUnauthorized: !this.options.selfSigned - }, () => { - this.send("NICK ", this.nickname); - this.send("USER ", this.username, ' 0 * :', this.realname); - }); - this.socket.setEncoding('utf-8'); - - this.socket.on('data', msg => { - msg = this.parse(msg); - switch(msg.command) { - case "464": // Password required - if(this.options.password.length > 0) - this.send("PASS ", this.options.password); // pwd - break; - case "PING": - this.send("PONG ", msg.params.join``); - break; - case "PRIVMSG": - this.emit('message', this.reply(msg)); - break; - } - }); -} - -irc.prototype.send = function send() { - for(let i = 0; i < arguments.length; i++) - this.socket.write(arguments[i]); - this.socket.write('\n'); -} - -irc.prototype.parse = function parse(data) { - var raw = data; - if(data.charAt(0) === ':') { - var i = data.indexOf(' '); - var prefix = data.slice(1, i); - data = data.slice(i + 1); +class irc { + constructor(options) { + EventEmitter.call(this); + this.options = options || {}; + this.options.channels = this.options.channels || []; + this.options.host = this.options.host || "127.0.0.1"; + this.options.port = this.options.port || 6667; + this.options.ssl = this.options.ssl || false; + this.options.selfSigned = this.options.selfSigned || false; + this.network = this.options.network || "test"; + this.nickname = this.options.nickname || "test"; + this.username = this.options.username || "test"; + this.realname = this.options.realname || "test"; + this.channels = this.options.channels || []; + this.socket = (this.options.ssl ? tls : net).connect({ + host: this.options.host, + port: this.options.port, + rejectUnauthorized: !this.options.selfSigned + }, () => { + this.send("NICK ", this.nickname); + this.send("USER ", this.username, ' 0 * :', this.realname); + }); + this.socket.setEncoding('utf-8'); + this.socket.on('data', msg => { + msg = this.parse(msg); + switch (msg.command) { + case "464":// Password required + if (this.options.password.length > 0) + this.send("PASS ", this.options.password); // pwd + break; + case "PING": + this.send("PONG ", msg.params.join``); + break; + case "PRIVMSG": + this.emit('message', this.reply(msg)); + break; + } + }); } - var i = data.indexOf(' '); - if(i === -1) i = data.length; - var command = data.slice(0, i); - data = data.slice(i + 1); - var params = []; - while(data && data.charAt(0) !== ':') { - var i = data.indexOf(' '); - if (i === -1) i = data.length; - params.push(data.slice(0, i)); - data = data.slice(i + 1); + send() { + for (let i = 0; i < arguments.length; i++) + this.socket.write(arguments[i]); + this.socket.write('\n'); } - if (data) params.push(data.slice(1)); - return { - raw: raw, - prefix: prefix, - command: command, - params: params - }; -} - -irc.prototype.reply = function(tmp) { // prefix: 'Flummi!~bark@bark', - let usertmp = tmp.prefix.split("!"); - let hosttmp = usertmp[1].split("@"); - let user = { - nick: usertmp[0], - username: hosttmp[0], - hostname: hosttmp[1] - }; - return { - type: "irc", - network: this.network, - channel: tmp.params[0], - user: user, - message: tmp.params[1].replace(/\r?\n|\r/g, ''), - time: Date.now(), - reply: msg => { - this.send(`PRIVMSG ${tmp.params[0]} ${msg}`); - }, - replyAction: msg => { - this.send(`PRIVMSG ${tmp.params[0]} \u0001ACTION ${msg}\u0001`); - }, - replyNotice: msg => { - this.send(`NOTICE ${tmp.params[0]} ${msg}`); - //rpc.emit('call', this.network, 'notice', [this.channel, msg]); + parse(data) { + var raw = data; + if (data.charAt(0) === ':') { + var i = data.indexOf(' '); + var prefix = data.slice(1, i); + data = data.slice(i + 1); } - }; -}; + var i = data.indexOf(' '); + if (i === -1) + i = data.length; + var command = data.slice(0, i); + data = data.slice(i + 1); + var params = []; + while (data && data.charAt(0) !== ':') { + var i = data.indexOf(' '); + if (i === -1) + i = data.length; + params.push(data.slice(0, i)); + data = data.slice(i + 1); + } + if (data) + params.push(data.slice(1)); + return { + raw: raw, + prefix: prefix, + command: command, + params: params + }; + } + reply(tmp) { + let usertmp = tmp.prefix.split("!"); + let hosttmp = usertmp[1].split("@"); + let user = { + nick: usertmp[0], + username: hosttmp[0], + hostname: hosttmp[1] + }; + return { + type: "irc", + network: this.network, + channel: tmp.params[0], + user: user, + message: tmp.params[1].replace(/\r?\n|\r/g, ''), + time: Date.now(), + reply: msg => { + this.send(`PRIVMSG ${tmp.params[0]} ${msg}`); + }, + replyAction: msg => { + this.send(`PRIVMSG ${tmp.params[0]} \u0001ACTION ${msg}\u0001`); + }, + replyNotice: msg => { + this.send(`NOTICE ${tmp.params[0]} ${msg}`); + //rpc.emit('call', this.network, 'notice', [this.channel, msg]); + } + }; + } +} module.exports = irc; util.inherits(irc, EventEmitter); \ No newline at end of file