freifunk-bot.meta

Issues/PRs archive for MTRNord/freifunk-bot
git clone git://archive.git.mtrnord.blog/MTRNord/freifunk-bot.meta.git
Log | Files | Refs

12.diff (19308B)


      1 diff --git a/handlers/getNodes.js b/handlers/getNodes.js
      2 deleted file mode 100644
      3 index 28b1b20..0000000
      4 --- a/handlers/getNodes.js
      5 +++ /dev/null
      6 @@ -1,121 +0,0 @@
      7 -/**
      8 - * NodeHelper Module
      9 - *
     10 - * @module Main
     11 - * @class getNodes
     12 - * @submodule getNodes
     13 - * @author Marcel Radzio
     14 - */
     15 -//Load needed Features
     16 -var request = require('request')
     17 -//require('request-debug')(request);
     18 -var fs = require('fs');
     19 -var jsonfile = require('jsonfile')
     20 -var slack = require('./slack.js');
     21 -var _ = require("lodash");
     22 -/**
     23 - * Get Community Config at start
     24 - *
     25 - * @property communities
     26 - * @type String
     27 - */
     28 -module.exports = {
     29 -  saveNodes: function () {
     30 -    request.get('https://cdn.rawgit.com/MTRNord/gluon-web-remote/5bd3a914b3c15af70b3ce46b3bfcc16bbc7b89b5/configs/communities.json', function (err, res, body) {
     31 -
     32 -      if (!err && res.statusCode === 200) {
     33 -        /**
     34 -          * Content of communities
     35 -          *
     36 -          * @property communities
     37 -          * @type String
     38 -          */
     39 -       communities = body;
     40 -       if (!fs.existsSync("handlers/tmp")){
     41 -         fs.mkdirSync("handlers/tmp");
     42 -       }
     43 -       fs.writeFile("handlers/tmp/communities.json", communities, { flag: 'w' }, function(err) {
     44 -         if(err) {
     45 -           console.log(err);
     46 -           return err
     47 -        }
     48 -      });
     49 -     }else{
     50 -       /**
     51 -        * Fired when an error occurs...
     52 -        *
     53 -        * @property error
     54 -        * @type String
     55 -        */
     56 -        //TODO Add real Error Handler
     57 -        console.log(err);
     58 -        return err
     59 -        }
     60 -      })
     61 -    },
     62 -  countNodes: function (ccode_func, handler, TfromId, Tmsg, channel, bot, botan, IRCto) {
     63 -    jsonfile.readFile('handlers/tmp/communities.json', 'utf8', function (err,obj) {
     64 -      if (err) {
     65 -        return console.log(err);
     66 -      }
     67 -      var communities = obj
     68 -      _.find(communities.communities, function (key) {
     69 -        var ccode = key["ccode"];
     70 -        if (ccode.toLowerCase() == ccode_func.toLowerCase()) {
     71 -          var nodesFile_link = key["nodesURL"];
     72 -          var name = key["name"];
     73 -          request.get(nodesFile_link, function (err, res, body) {
     74 -            if (!err && res.statusCode == 200) {
     75 -              /**
     76 -                * Content of communities
     77 -                *
     78 -                * @property communities
     79 -                * @type String
     80 -                */
     81 -                // console.log(body);
     82 -                // onlineNodes = body.nodes.length
     83 -                // onlineNodes = Object.keys(body.nodes).length;
     84 -                var count = 0;
     85 -                nodes = JSON.parse(body)
     86 -                _.find(nodes.nodes, function (key) {
     87 -                  if (key.hasOwnProperty('flags')) {
     88 -                    if (key["flags"]["online"] == true) {
     89 -                      count++;
     90 -                    }
     91 -                  }
     92 -                  if (key.hasOwnProperty('status')) {
     93 -                    if (key["status"]["online"] == true) {
     94 -                      count++;
     95 -                    }
     96 -                  }
     97 -                });
     98 -                var output = "Current nodes in " + name + ": " + count
     99 -                if(handler == "telegram"){
    100 -                  bot.sendMessage(TfromId, output)
    101 -                  botan.track(Tmsg, 'nodes ' + ccode_func)
    102 -                }else {
    103 -                  if(handler == "irc"){
    104 -                    bot.say(IRCto, output);
    105 -                  }else {
    106 -                    if(handler == "slack"){
    107 -                      slack.slackSend(Schannel, output);
    108 -                    }
    109 -                  }
    110 -                }
    111 -           }else{
    112 -             /**
    113 -              * Fired when an error occurs...
    114 -              *
    115 -              * @property error
    116 -              * @type String
    117 -              */
    118 -              //TODO Add real Error Handler
    119 -              console.log(err);
    120 -              return err
    121 -              }
    122 -          })
    123 -        }
    124 -      });
    125 -    });
    126 -  }
    127 -}
    128 diff --git a/handlers/irc.js b/handlers/irc.js
    129 index 7112909..2a4514a 100644
    130 --- a/handlers/irc.js
    131 +++ b/handlers/irc.js
    132 @@ -18,7 +18,7 @@ var rl = require("readline")
    133  
    134  var command_config = require("../configs/commands.json");
    135  var params_config = require("../configs/ircServer.json");
    136 -var getNodes = require('./getNodes.js');
    137 +var getNodes = require('./parseNodes.js');
    138  
    139  //Set Params
    140  /**
    141 @@ -80,7 +80,7 @@ _.find(params_config["servers"], function (key) {
    142        autoConnect: false,
    143        messageSplit: 1000000,
    144        floodProtection: true,
    145 -      floodProtectionDelay: 1000
    146 +      floodProtectionDelay: 200
    147      });
    148      clients.push(bot[key]);
    149    }
    150 @@ -287,7 +287,7 @@ module.exports = {
    151          nodes: function (callback) {
    152            if (S(message).contains("!nodes")) {
    153              jsonfile.readFile('handlers/tmp/communities.json', 'utf8', function (err,obj) {
    154 -              if (err) {console.log(err)}
    155 +              if (err) {throw new Error(err);}
    156                var communities = obj
    157                _.find(communities.communities, function (key) {
    158                  var ccode = key["ccode"];
    159 @@ -300,10 +300,29 @@ module.exports = {
    160              });
    161            }
    162          },
    163 +        node: function (callback) {
    164 +          if (S(message).contains("!node") || !S(message).contains("!nodes")) {
    165 +            jsonfile.readFile('handlers/tmp/communities.json', 'utf8', function (err,obj) {
    166 +              if (err) {throw new Error(err);}
    167 +              var communities = obj
    168 +              _.find(communities.communities, function (key) {
    169 +                var ccode = key["ccode"];
    170 +                if (ccode.toLowerCase() === channel[1]) {
    171 +                  clients.forEach(function(client) {
    172 +                    if (channel[2] == undefined) {
    173 +                      channel[2] = "NoArg"
    174 +                    }
    175 +                    getNodes.NodeInfo(channel[1], channel[2].toLowerCase(), "irc", "", "", "", client, "", from)
    176 +                  });
    177 +                }
    178 +              });
    179 +            });
    180 +          }
    181 +        },
    182          communities: function (callback) {
    183            if (S(message).contains("!communities")) {
    184              jsonfile.readFile('handlers/tmp/communities.json', 'utf8', function (err,obj) {
    185 -              if (err) {console.log(err)}
    186 +              if (err) {throw new Error(err);}
    187                var communities = obj
    188                var communities_list = ""
    189                _.find(communities.communities, function (key) {
    190 @@ -334,7 +353,7 @@ module.exports = {
    191              			* @type String
    192              			*/
    193      	      		door_status = error;
    194 -    	      		console.log(error);
    195 +    	      		throw new Error(err);
    196      	      	}
    197                if (!error && response.statusCode === 200) {
    198      	      	  if (door_status === "geschlossen") {
    199 @@ -370,7 +389,7 @@ module.exports = {
    200              		  * @type String
    201              		  */
    202      	      		door_status = error;
    203 -    	      		console.log(error);
    204 +    	      		throw new Error(err);
    205      	      	}
    206                if (!error && response.statusCode == 200) {
    207      	      	  if (door_status === "geschlossen") {
    208 @@ -431,7 +450,7 @@ module.exports = {
    209        },
    210        function(err, result) {
    211          if (err) {
    212 -          console.log(err)
    213 +          throw new Error(err);
    214          }
    215        }
    216      );
    217 diff --git a/handlers/parseNodes.js b/handlers/parseNodes.js
    218 new file mode 100644
    219 index 0000000..6e9d646
    220 --- /dev/null
    221 +++ b/handlers/parseNodes.js
    222 @@ -0,0 +1,198 @@
    223 +/**
    224 + * NodeHelper Module
    225 + *
    226 + * @module Main
    227 + * @class getNodes
    228 + * @submodule getNodes
    229 + * @author Marcel Radzio
    230 + */
    231 +//Load needed Features
    232 +var request = require('request')
    233 +//require('request-debug')(request);
    234 +var fs = require('fs');
    235 +var jsonfile = require('jsonfile')
    236 +var slack = require('./slack.js');
    237 +var _ = require("lodash");
    238 +/**
    239 + * Get Community Config at start
    240 + *
    241 + * @property communities
    242 + * @type String
    243 + */
    244 +module.exports = {
    245 +  saveNodes: function () {
    246 +    request.get('https://cdn.rawgit.com/MTRNord/gluon-web-remote/5bd3a914b3c15af70b3ce46b3bfcc16bbc7b89b5/configs/communities.json', function (err, res, body) {
    247 +      if (!err && res.statusCode === 200) {
    248 +        /**
    249 +          * Content of communities
    250 +          *
    251 +          * @property communities
    252 +          * @type String
    253 +          */
    254 +        communities = body;
    255 +        if (!fs.existsSync("handlers/tmp")){
    256 +          fs.mkdirSync("handlers/tmp");
    257 +        }
    258 +        fs.writeFile("handlers/tmp/communities.json", communities, { flag: 'w' }, function(err) {
    259 +          if(err) {
    260 +            console.log(err);
    261 +            return err
    262 +          }
    263 +        });
    264 +      }else{
    265 +        /**
    266 +          * Fired when an error occurs...
    267 +          *
    268 +          * @property error
    269 +          * @type String
    270 +          */
    271 +          //TODO Add real Error Handler
    272 +        console.log(err);
    273 +        return err
    274 +      }
    275 +    })
    276 +  },
    277 +  countNodes: function (ccode_func, handler, TfromId, Tmsg, channel, bot, botan, IRCto) {
    278 +    jsonfile.readFile('handlers/tmp/communities.json', 'utf8', function (err,obj) {
    279 +      if (err) {
    280 +        return console.log(err);
    281 +      }
    282 +      var communities = obj
    283 +      _.find(communities.communities, function (key) {
    284 +        var ccode = key["ccode"];
    285 +        if (ccode.toLowerCase() == ccode_func.toLowerCase()) {
    286 +          var nodesFile_link = key["nodesURL"];
    287 +          var name = key["name"];
    288 +          request.get(nodesFile_link, function (err, res, body) {
    289 +            if (!err && res.statusCode == 200) {
    290 +              /**
    291 +                * Content of communities
    292 +                *
    293 +                * @property communities
    294 +                * @type String
    295 +                */
    296 +              var count = 0;
    297 +              nodes = JSON.parse(body)
    298 +              _.find(nodes.nodes, function (key) {
    299 +                if (key.hasOwnProperty('flags')) {
    300 +                  if (key["flags"]["online"] == true) {
    301 +                    count++;
    302 +                  }
    303 +                }
    304 +                if (key.hasOwnProperty('status')) {
    305 +                  if (key["status"]["online"] == true) {
    306 +                    count++;
    307 +                  }
    308 +                }
    309 +              });
    310 +              var output = "Current nodes in " + name + ": " + count
    311 +              if(handler == "telegram"){
    312 +                bot.sendMessage(TfromId, output)
    313 +                botan.track(Tmsg, 'nodes ' + ccode_func)
    314 +              }else {
    315 +                if(handler == "irc"){
    316 +                  bot.say(IRCto, output);
    317 +                }else {
    318 +                  if(handler == "slack"){
    319 +                    slack.slackSend(Schannel, output);
    320 +                  }
    321 +                }
    322 +              }
    323 +            }else{
    324 +              /**
    325 +                * Fired when an error occurs...
    326 +                *
    327 +                * @property error
    328 +                * @type String
    329 +                */
    330 +              //TODO Add real Error Handler
    331 +              throw new Error(err);
    332 +            }
    333 +          })
    334 +        }
    335 +      });
    336 +    });
    337 +  },
    338 +  NodeInfo: function (ccode_func, askedNode, handler, TfromId, Tmsg, channel, bot, botan, IRCto) {
    339 +    jsonfile.readFile('handlers/tmp/communities.json', 'utf8', function (err,obj) {
    340 +      if (err) {
    341 +        throw new Error(err);
    342 +      }
    343 +      var communities = obj
    344 +      _.find(communities.communities, function (key) {
    345 +        var ccode = key["ccode"];
    346 +        if (ccode.toLowerCase() == ccode_func.toLowerCase()) {
    347 +          var nodesFile_link = key["nodesURL"];
    348 +          request.get(nodesFile_link, function (err, res, body) {
    349 +            if (!err && res.statusCode == 200) {
    350 +              /**
    351 +                * Content of communities
    352 +                *
    353 +                * @property communities
    354 +                * @type String
    355 +                */
    356 +              var count = 0;
    357 +              nodes = JSON.parse(body)
    358 +              var output = "Some error"
    359 +              var name = ""
    360 +              var router = ""
    361 +              var version = ""
    362 +              var autoupdate = ""
    363 +              var autoupdateBranch = ""
    364 +              var clients = ""
    365 +              var status = ""
    366 +              var since = ""
    367 +              _.find(nodes.nodes, function (key) {
    368 +                name = key["nodeinfo"]["hostname"]
    369 +                if (name.toLowerCase() == askedNode.toLowerCase()){
    370 +                  router = key["nodeinfo"]["hardware"]["model"]
    371 +                  version = key["nodeinfo"]["software"]["firmware"]["release"]
    372 +                  autoupdate = key["nodeinfo"]["software"]["autoupdater"]["enabled"]
    373 +                  if (autoupdate === true) {
    374 +                    autoupdate = "active"
    375 +                  }else{
    376 +                    autoupdate = "unactive"
    377 +                  }
    378 +                  autoupdateBranch = key["nodeinfo"]["software"]["autoupdater"]["branch"]
    379 +                  clients = key["statistics"]["clients"]
    380 +                  status = key["flags"]["online"]
    381 +                  since = key["firstseen"]
    382 +                  if(handler == "telegram"){
    383 +                    output = "<b>Name: </b>" + name + "\n<b>Router Model: </b>" + router + "\n<b>Firmware Version: </b>" + version + "\n<b>Autoupdater Status: </b>" + autoupdate + "\n<b>Autoupdater Branch: </b>" + autoupdateBranch + "\n<b>Clients Connected: </b>" + clients + "\n<b>Online Status: </b>" + status + "\n<b>First Seen: </b>" + since
    384 +                  }
    385 +                  if(handler == "irc"){
    386 +                    output = "Name: " + name + "\nRouter Model: " + router + "\nFirmware Version: " + version + "\nAutoupdater Status: " + autoupdate + "\nAutoupdater Branch: " + autoupdateBranch + "\nClients Connected: " + clients + "\nOnline Status: " + status + "\nFirst Seen: " + since
    387 +                  }
    388 +                  if(handler == "slack"){
    389 +                    output = "<b>Name: </b>" + name + "\n<b>Router Model: </b>" + router + "\n<b>Firmware Version: </b>" + version + "\n<b>Autoupdater Status: </b>" + autoupdate + "\n<b>Autoupdater Branch: </b>" + autoupdateBranch + "\n<b>Clients Connected: </b>" + clients + "\n<b>Online Status: </b>" + status + "\n<b>First Seen: </b>" + since
    390 +                  }
    391 +                }
    392 +              });
    393 +              if (askedNode.toLowerCase() !== "noarg") {
    394 +                if(handler == "telegram"){
    395 +                  bot.sendMessage(TfromId, output, {"parse_mode": "HTML"})
    396 +                  botan.track(Tmsg, 'node ' + ccode_func)
    397 +                }
    398 +                if(handler == "irc"){
    399 +                  bot.say(IRCto, output);
    400 +                }
    401 +                if(handler == "slack"){
    402 +                  slack.slackSend(Schannel, output);
    403 +                }
    404 +              }
    405 +            }else{
    406 +              /**
    407 +                * Fired when an error occurs...
    408 +                *
    409 +                * @property error
    410 +                * @type String
    411 +                */
    412 +              //TODO Add real Error Handler
    413 +              throw new Error(err);
    414 +            }
    415 +          })
    416 +        }
    417 +      });
    418 +    });
    419 +  }
    420 +}
    421 diff --git a/handlers/pushbullet.js b/handlers/pushbullet.js
    422 index 091a9a4..4b4364e 100644
    423 --- a/handlers/pushbullet.js
    424 +++ b/handlers/pushbullet.js
    425 @@ -28,7 +28,7 @@ module.exports = {
    426          		 * @property err
    427          		 * @type String
    428          		 */
    429 -				console.log(err);
    430 +				throw new Error(err)
    431  			}
    432  		});
    433  	}
    434 diff --git a/handlers/telegram.js b/handlers/telegram.js
    435 index 2283e0d..3a5581b 100644
    436 --- a/handlers/telegram.js
    437 +++ b/handlers/telegram.js
    438 @@ -8,7 +8,7 @@ if (typeof botan_token === 'undefined' && !botan_token) {
    439  }
    440  var TelegramBot = require('node-telegram-bot-api');
    441  var jsonfile = require('jsonfile')
    442 -var getNodes = require('./getNodes.js');
    443 +var getNodes = require('./parseNodes.js');
    444  var botan = require('botanio')(botan_token);
    445  var util = require('util');
    446  var async = require("async");
    447 @@ -24,7 +24,7 @@ module.exports = {
    448            var resp = match[1];
    449            bot.sendChatAction(fromId, "typing")
    450            jsonfile.readFile('handlers/tmp/communities.json', 'utf8', function (err,obj) {
    451 -            if (err) {console.log(err)}
    452 +            if (err) {throw new Error(err);}
    453              var communities = obj
    454              _.find(communities.communities, function (key) {
    455                  var ccode = key["ccode"];
    456 @@ -36,6 +36,25 @@ module.exports = {
    457          });
    458          callback()
    459        },
    460 +      node: function (callback) {
    461 +        bot.onText(/\/node (.+)/, function (msg, match) {
    462 +          var fromId = msg.chat.id;
    463 +          var resp = match[1];
    464 +          var args = _.split(resp, ' ');
    465 +          bot.sendChatAction(fromId, "typing")
    466 +          jsonfile.readFile('handlers/tmp/communities.json', 'utf8', function (err,obj) {
    467 +            if (err) {throw new Error(err);}
    468 +            var communities = obj
    469 +            _.find(communities.communities, function (key) {
    470 +                var ccode = key["ccode"];
    471 +                if (ccode.toLowerCase() === args[0].toLowerCase()) {
    472 +                  getNodes.NodeInfo(args[0].toLowerCase(), args[1].toLowerCase(), "telegram", fromId, msg, "", bot, botan)
    473 +                }
    474 +            });
    475 +          });
    476 +        });
    477 +        callback()
    478 +      },
    479        communities: function (callback) {
    480          bot.onText(/\/communities/, function (msg, match) {
    481            var fromId = msg.chat.id;
    482 @@ -43,7 +62,7 @@ module.exports = {
    483            bot.sendChatAction(fromId, "typing")
    484            jsonfile.readFile('handlers/tmp/communities.json', 'utf8', function (err,obj) {
    485              var communities = obj
    486 -            var communities_list
    487 +            var communities_list = ""
    488              _.find(communities.communities, function (key) {
    489                  var ccode = key["ccode"]
    490                  var name = key["name"]
    491 @@ -51,7 +70,7 @@ module.exports = {
    492              });
    493              botan.track(msg, 'communities', function (err, res, body) {
    494                if (err) {
    495 -                console.log("[BOTAN] ERR: " + err);
    496 +                throw new Error("[BOTAN] ERR: " + err);
    497                }
    498                console.log("[BOTAN] RES: " + res.statusCode);
    499                console.log("[BOTAN] BODY: " + util.inspect(body, {showHidden: false, depth: null}));
    500 @@ -64,7 +83,7 @@ module.exports = {
    501      },
    502      function(err, result) {
    503        if (err) {
    504 -        console.log(err)
    505 +        throw new Error(err)
    506        }
    507      }
    508      );
    509 diff --git a/main.js b/main.js
    510 index 1f8d979..6fd0102 100644
    511 --- a/main.js
    512 +++ b/main.js
    513 @@ -21,7 +21,7 @@ require('./helper/heroku.js');
    514  var pushbullet = require('./handlers/pushbullet.js');
    515  var irc = require('./handlers/irc.js');
    516  var slack = require('./handlers/slack.js');
    517 -var getNodes = require('./handlers/getNodes.js');
    518 +var getNodes = require('./handlers/parseNodes.js');
    519  var telegram = require('./handlers/telegram.js');
    520  
    521  //Constants
    522 @@ -60,6 +60,7 @@ function GetData(){
    523           */
    524      		//TODO Add real Error Handler
    525        		door_status = error;
    526 +          throw new Error(err)
    527     		}
    528     		//If no error -> go on
    529      	if (!error && response.statusCode === 200) {
    530 @@ -119,7 +120,7 @@ process.on(SIGINT, function () {
    531   */
    532  function update(){
    533    git.pull("origin", "master", function(err, update) {
    534 -    if (err) {console.log(err)}
    535 +    if (err) {throw new Error(err)}
    536      if(update && update.summary.changes) {
    537        console.log('Start Update!');
    538        restart();