Advertisement
djazz

nodejs irc bot

May 6th, 2013
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var net = require('net');
  2. var http = require('http');
  3.  
  4.  
  5.  
  6. var HOST = 'irc.bsnet.se';          // The server we want to connect to
  7. var PORT = 6667;                    // The connection port which is usually 6667
  8. var NICK = 'wonderbot';                     // The bot's nickname
  9. var IDENT = '****************';
  10. var REALNAME = 'NODE.JS';
  11. var CHANNEL = '#wonderlan';             // The default channel for the bot
  12. var OWNER = 'djazz';
  13.  
  14. var lastfm = {
  15.     username: 'ottoremse',
  16.     apiKey: '37d771e988ae15a26ea733c48612a6df',
  17.     secret: '4b0622860b5b89514b52a983dd63a98c',
  18.     limit: 2
  19. }
  20.  
  21. var lastfmUrl = 'http://ws.audioscrobbler.com/2.0/?method=user.getrecenttracks&user=' + lastfm.username + '&api_key=' + lastfm.apiKey + '&limit=' + lastfm.limit + '&format=json';
  22.  
  23. var cmdLock = false;
  24.  
  25. function sendMsg(msg) {
  26.   console.log(msg);
  27.   s.write(msg + '\r\n');
  28. }
  29. function sendChat(msg, chan) {
  30.     chan = chan || CHANNEL;
  31.     sendMsg('PRIVMSG '+chan+' :'+msg);
  32. }
  33.  
  34. function scanPorts(ip, callback) {
  35.     var list = [];
  36.     var toScan = 0;
  37.     console.log('scanning ip '+ip);
  38.     for (var i = 0; i < 60000; i+=1000) {
  39.         toScan+=1000;
  40.         (function (i) {
  41.             setTimeout(function () {
  42.                 //console.log('trying interval '+i);
  43.                 for (var k = 0; k < 1000; k++) {
  44.                    
  45.                     var port = i+k;
  46.                     (function (port) {
  47.                         var client = net.connect({
  48.                             host: ip,
  49.                             port: port
  50.                         }, function () {
  51.                             console.log(ip+":"+port);
  52.                             list.push(port);
  53.                         });
  54.                         client.on('error', function () {
  55.                             //console.log(port)
  56.                         });
  57.                         client.on('close', function () {
  58.                             toScan--;
  59.                             if (toScan === 0) {
  60.                                 list.sort(function(a,b){return a-b});
  61.                                 //console.log(list);
  62.                                 callback(list);
  63.                             }
  64.                         });
  65.                        
  66.                         setTimeout(function () {
  67.                             client.destroy();
  68.                         }, 300);
  69.                     }(port));
  70.                 }
  71.             }, (i/1000)*200);
  72.            
  73.         }(i));
  74.     }
  75. }
  76.  
  77. // Connect
  78. // Create the socket  & Connect to the server
  79. var s = net.connect(PORT, HOST, function () {
  80.    
  81.     // Send the nick to server
  82.     sendMsg('NICK '+NICK);
  83.    
  84.     // Identify to server
  85.     sendMsg('USER '+NICK+' '+HOST+' asdasdsdasd.com :'+REALNAME);
  86.  
  87.     sendMsg('JOIN ' + CHANNEL);
  88.  
  89.     /*setTimeout(function () {
  90.        
  91.        
  92.         // This is my nick, i promise!
  93.         sendMsg('PRIVMSG nick IDENTIFY '+IDENT);
  94.  
  95.        
  96.        
  97.     }, 20*1000);*/
  98.    
  99.    
  100.     //sendChat('javascript');
  101.    
  102.    
  103. });
  104. s.on('data', function (data) {
  105.  
  106.     var lines = data.toString().split('\r\n');
  107.    
  108.     for (var i = 0; i < lines.length; i++) {
  109.         console.log(lines[i]);
  110.         var line = lines[i].split(' ');
  111.         var row = line.slice(3).join(' ').replace(/\:/g, ' ').replace(/\,/g, ' ').replace(/\./g, ' ').replace(/\?/g, ' ').trim().toLowerCase().split(' ');
  112.        
  113.         if (line[0] === 'PING') {
  114.             sendMsg('PONG '+line[1]);
  115.            
  116.         } else if (line[1] === 'PRIVMSG') {
  117.             if(line[2] === CHANNEL && row.indexOf(NICK) !== -1) {
  118.                 var mentioner = line[0].split("!")[0].split(":")[1];
  119.                
  120.                 if (line[3].indexOf(NICK) && line[4]) { // Command
  121.  
  122.                     if (line[4].length > 0) {
  123.                         console.log('got command');
  124.                         cmdLock = true;
  125.                         switch(line[4]) { // Command name
  126.                             case 'music':
  127.  
  128.                                 console.log('music command');
  129.  
  130.                                 http.get(lastfmUrl, function (res) {
  131.                                     var data = "";
  132.                                     res.on('data', function (chunk) {
  133.                                         data += chunk.toString();
  134.                                     });
  135.                                     res.on('end', function () {
  136.                                         track = JSON.parse(data).recenttracks.track[0];
  137.                                         if (cmdLock) {
  138.                                             sendChat("WonderLAN spelar låten "+track.name+" ("+track.url+")", line[2]);
  139.                                         }
  140.                                         cmdLock = false;
  141.                                     });
  142.                                 }).on('error', function (e) {
  143.                                     sendChat("Got error: " + e.message, line[2]);
  144.                                     cmdLock = false;
  145.                                 });
  146.  
  147.                                 break;
  148.  
  149.                             case 'scan':
  150.                                
  151.                                
  152.                                 console.log('scan command');
  153.  
  154.                                 if (isNaN(+line[5])) {
  155.  
  156.                                     var ip = line[5];
  157.  
  158.                                     scanPorts(ip, function (scanlist) {
  159.                                         sendChat("Scanned ip "+ip+" for open ports: "+scanlist.join(", "));
  160.                                        
  161.                                     });
  162.  
  163.                                 } else {
  164.                                    
  165.                                     var startAddress = "194.47.158.";
  166.                                     var port = +line[5] || 5357;
  167.                                     var toScan = 0;
  168.                                     var scanlist = [];
  169.  
  170.                                     console.log('scanning for port '+port);
  171.  
  172.                                     for (var i = 0; i < 256; i++) {
  173.                                         toScan++;
  174.                                         (function (i) {
  175.                                             var client = net.connect({
  176.                                                 host: startAddress+i,
  177.                                                 port: port
  178.                                             }, function () {
  179.                                                 console.log(startAddress+i+"\t:"+port);
  180.                                                 scanlist.push(i);
  181.                                                
  182.                                             });
  183.                                             client.on('error', function () {});
  184.                                             client.on('data', function (data) {
  185.                                                 console.log(data.toString());
  186.                                             });
  187.                                             client.on('close', function () {
  188.                                                 toScan--;
  189.                                                 if (toScan === 0) {
  190.                                                     scanlist.sort(function(a,b){return a-b});
  191.                                                     sendChat("Scanned port "+port+": 194.47.158.... "+scanlist.join(", "));
  192.  
  193.                                                 }
  194.                                             });
  195.                                             setTimeout(function () {
  196.                                                 client.destroy();
  197.                                             }, 300);
  198.                                         }(i));
  199.                                     }
  200.                                 }
  201.  
  202.                                 break;
  203.  
  204.                             default:
  205.                                 cmdLock = false;
  206.                                 sendChat('Okänt kommando: '+line[4]);
  207.                                 break;
  208.                         }
  209.                     }
  210.  
  211.                 } else { // Just normal mention
  212.                     if (!line[4]) {
  213.                         sendChat(mentioner+": Kommandon: music", line[2]);
  214.                     }
  215.                 }
  216.                
  217.             } else if (line[2] === NICK) {
  218.                 var username = line[0].split("!")[0].substr(1);
  219.                 sendChat('Hello!', username);
  220.             }
  221.            
  222.         }
  223.        
  224.     }
  225.    
  226. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement