From 5ea17912a7c8ece692a13dffde4516dad733f53a Mon Sep 17 00:00:00 2001 From: rnhmjoj Date: Mon, 4 May 2015 22:33:04 +0200 Subject: [PATCH] Improved module iternamento Fix partial matches in Diliberti's regex Use Levenshtein distance to check if someone is trying to free himself. --- package.json | 1 + scripts/internamento.coffee | 26 ++++++++++++++++---------- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index ed8624a..c0decc5 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "cheerio": "^0.19.0", "coffee-coverage": "^0.4.6", "coffee-script": "^1.9.2", + "fast-levenshtein": "^1.0.6", "github": "^0.2.4", "htmlparser": "^1.7.7", "hubot": "^2.12.0", diff --git a/scripts/internamento.coffee b/scripts/internamento.coffee index f557ca8..8a7fcbb 100644 --- a/scripts/internamento.coffee +++ b/scripts/internamento.coffee @@ -13,6 +13,8 @@ # Ravinder Pal Singh # +lev = require 'fast-levenshtein' + module.exports = (robot) -> robot.respond /interna (.+)/i, (res) -> mem = robot.brain.get('internati') or {} @@ -24,7 +26,7 @@ module.exports = (robot) -> res.send 'Mi dispiace ma '+name+' è già stato internato su ordine di '+intern else res.send 'Mi dispiace ma '+name+' è già stato internato...' else - if name.match /(?:dili(?:bert(?:i)?)?)|(?:ros(?:y|ario))|dre/i + if name.match /(?:dili(?:bert(?:i)?)?)|(?:ros(?:y|ario))|dre$/i # Diliberti res.send 'non posso internare il mio padrone...' else if name.match /fa(?:zo|soli)/i @@ -42,20 +44,24 @@ module.exports = (robot) -> robot.respond /libera (.+)/i, (res) -> mem = robot.brain.get('internati') or {} - m = res.match[1].toLowerCase() - boh = ['sorry non è qui','troppo tardi','ti piacerebbe, eh?', 'scordatelo'] - if mem[m]? - res.send 'ho liberato '+m+' ma ricordate che potete sbatterlo dentro quando volete ;)' - delete mem[m] + user = res.message.user.name.toLowerCase().split '_' + name = res.match[1].toLowerCase() + if (Math.min.apply @, user.map (x) -> lev.get(name, x)) < 4 + reply = ['ti volevi liberare, eh? non sono mica scemo', + 'si certo, come no.', 'neanche per sogno', 'scordatelo'] + res.send res.random reply + else if mem[name]? + res.send 'ho liberato '+name+' ma ricordate che potete sbatterlo dentro quando volete ;)' + delete mem[name] robot.brain.set 'internati', mem - else res.send res.random boh + else res.send res.random ['chi?', 'mai sentito', 'sorry, non è qui', 'e chi sarebbe?'] robot.respond /internati-dump/i, (res) -> res.send JSON.stringify robot.brain.get('internati') robot.respond /(?:(?:(?:dimmi|mostrami) )|(?:lista ))?(?:gli )?internat(?:i|o)(?:\?)?/i, (res) -> - m = robot.brain.get 'internati' - if m isnt null + mem = robot.brain.get 'internati' + if mem isnt null r = ['ho internato', 'ho preso', 'ho catturato', 'sbattuto dentro'] - res.send 'negli ultimi giorni '+res.random(r)+' '+(i for i of m).join(', ') + res.send 'negli ultimi giorni '+res.random(r)+' '+(i for i of mem).join(', ') else res.send res.random ['sorry, nessun prigioniero...', 'nessuno. mandatemi subito qualcuno']