Advertisement
Guest User

Untitled

a guest
Sep 25th, 2017
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var http = require('http');
  2. var net = require('net');
  3. var fs = require('fs');
  4. var log = [];
  5. var limit = 32;
  6. var irc = {
  7.     s: {},
  8.     nick: 'echobot',
  9.     nickpass: 'lockdown',
  10.     user: 'echobot echobot nfdb.net EchoBot',
  11.     server: 'chat.freenode.net',
  12.     port: 6666,
  13.     chan: 'nfdtest',
  14.     cmd: '.',
  15.     priv: '+'
  16. }
  17.  
  18. for (var i=0;i<limit;i++) {
  19.     log[i] = {line:'', nick:'', time:0}
  20. }
  21.  
  22. function pad(n) { return n < 10 ? '0'+n : n; }
  23.  
  24. http.createServer(function (req, res) {
  25.     switch (req.url) {
  26.         case "/":
  27.             res.writeHead(200, {'Content-Type': 'text/html'});
  28.             var page = fs.readFileSync('index.htm', 'utf8');
  29.             res.write(page);
  30.             res.end();
  31.             break;
  32.         case "/read":
  33.             res.writeHead(200, {'Content-Type': 'text/plain'});
  34.             var lineformat = fs.readFileSync('line.format', 'utf8');
  35.             var lineresult = '';
  36.             for (line in log) {
  37.                 lineresult = lineformat.replace('||||', log[line].line, 'gi');
  38.                 lineresult = lineresult.replace('^^^^', log[line].nick, 'gi');
  39.                 var td = new Date(log[line].time);
  40.                 lineresult = lineresult.replace('{H}', pad(td.getHours()), 'gi');
  41.                 lineresult = lineresult.replace('{M}', pad(td.getMinutes()), 'gi');
  42.                 lineresult = lineresult.replace('{S}', pad(td.getSeconds()), 'gi');
  43.                 lineresult = lineresult.replace('{T}', log[line].time, 'gi');
  44.                 res.write((log[line].time > 0 ? lineresult : '<div class="line">&nbsp;</div>')+"\n");
  45.             }
  46.             res.end();
  47.             break;
  48.         case "/fade.png":
  49.             res.writeHead(200, {'Content-Type': 'image/png'});
  50.             var buff = fs.readFileSync('fade.png');
  51.             res.write(buff);
  52.             res.end();
  53.         default:
  54.             res.writeHead(404, {'Content-Type': 'text/html'});
  55.             res.write("The requested page does not exist.");
  56.             res.end();
  57.     }
  58. }).listen(80, 'nfd.ath.cx');
  59. console.log('HTTP Server Running');
  60. console.log('TCP Server Listening');
  61. irc.s = new net.Socket();
  62. irc.s.addListener('data', ircdata);
  63. irc.s.addListener('connect', ircconnect);
  64. irc.s.addListener('end', ircdisconnect);
  65. irc.s.setEncoding('ascii');
  66.  
  67. var notconnected = false;
  68. do {
  69.     notconnected = false;
  70.     try {
  71.         irc.s.connect(irc.port, irc.server);
  72.         console.log('Connecting to IRC server...');
  73.     } catch (e) {
  74.         console.log('Error connecting to server... '+e);
  75.         console.log('Retrying connection...');
  76.         notconnected = true;
  77.     }
  78. } while (notconnected == true);
  79.  
  80. function ircconnect() {
  81.     console.log('IRC Connection Established.');
  82.     irc.s.write('NICK '+irc.nick+'\n');
  83.     irc.s.write('USER '+irc.user+'\n');
  84.     irc.s.write('JOIN #'+irc.chan+'\n');
  85. }
  86.  
  87. function ircdisconnect() {
  88.     console.log('Connection lost.');
  89.     irc.s.connect(irc.port, irc.server);
  90.     console.log('Reconnecting...');
  91. }
  92.  
  93. function ircdata(data) {
  94.     //console.log('Data recieved: '+data.trim());
  95.     var lines = data.split('\n');
  96.     for (var i = 0; i < lines.length; i++) {
  97.         processline(lines[i]);
  98.     }
  99. }
  100.  
  101. function processline(data) {
  102.     var dat = data.split(' ');
  103.     var musr = {
  104.         nick: dat[0].split('!')[0],
  105.         host: dat[0].split('!')[1]
  106.     };
  107.     switch (dat[0]) {
  108.         case 'PING':
  109.             irc.s.write('PONG '+dat[1].substr(1)+'\n');
  110.             console.log('Pong!');
  111.             break;
  112.         default:
  113.             switch (dat[1]) {
  114.                 case 'PRIVMSG':
  115.                     var msg = dat.slice(3);
  116.                     msg = msg.join(' ');
  117.                     msg = msg.trim().substr(1);
  118.                     if (dat[3].substr(1,1) == irc.cmd) {
  119.                         console.log('Command from '+musr.nick+': "'+dat[3].substr(1).trim()+'"');
  120.                         // Send a command to the tile page?
  121.                     } else {
  122.                         console.log('Message from '+musr.nick.substr(1)+': "'+msg+'"');
  123.                         log.splice(0,1);
  124.                         var d = new Date();
  125.                         log.push({line:msg, nick:musr.nick.substr(1), time:d.getTime()});
  126.                     }
  127.                     break;
  128.                 case '372': // MOTD, ignore it.
  129.                     break;
  130.                 case '433': // Nick in use
  131.                     irc.s.write('PRIVMSG nickserv IDENTIFY '+irc.nick+' '+irc.nickpass+'\n'); // Identify with ident services.
  132.                     irc.s.write('PRIVMSG nickserv GHOST\n'); // Attempt to ghost anyone using the nick.
  133.                     irc.s.write('NICK '+irc.nick+'\n'); // Attempt to set nick back to EchoBot.
  134.                     irc.s.write('USER '+irc.user+'\n'); // Perform user auth.
  135.                     irc.s.write('JOIN #'+irc.chan+'\n'); // Join the channel.
  136.                     break;
  137.                 default:
  138.                     // The bot didn't recognize the data recieved, ignore it.
  139.             }
  140.     }
  141. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement