asjon/scripts/internamento.coffee
rnhmjoj 5ea17912a7 Improved module iternamento
Fix partial matches in Diliberti's regex
Use Levenshtein distance to check if someone is trying to free himself.
2015-05-04 22:33:04 +02:00

68 lines
2.6 KiB
CoffeeScript

# Description:
# permette di internare persone nel campo di Diliberti
#
# Configuration:
# None
#
# Commands:
# hubot interna <nome> - interna una persona
# hubot libera <nome> - libera una persona
# hubot lista/mostrami (gli) internati - mostra la lista di internati
#
# Author:
# Ravinder Pal Singh
#
lev = require 'fast-levenshtein'
module.exports = (robot) ->
robot.respond /interna (.+)/i, (res) ->
mem = robot.brain.get('internati') or {}
name = res.match[1].toLowerCase()
exp1 = ['ho sbattuto dentro', 'come vuoi, sbattiamo dentro', 'è la tua fine']
if mem[name]?
if mem[name].da
intern = mem[name].da.name
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
# Diliberti
res.send 'non posso internare il mio padrone...'
else if name.match /fa(?:zo|soli)/i
# Fasoli
res.send 'ciccio, io internerei te al posto suo'
else if name.match /as(?:sa|jon|sion(?:e|i))/i
# Asjon
res.send 'ma sei scemo????'
else
res.send res.random(exp1)+' '+name
# Salvo chi ha internato
mem[name] = { da: res.message.user }
console.log res.message.user, mem[name]
robot.brain.set 'internati', mem
robot.respond /libera (.+)/i, (res) ->
mem = robot.brain.get('internati') or {}
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 ['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) ->
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 mem).join(', ')
else res.send res.random ['sorry, nessun prigioniero...', 'nessuno. mandatemi subito qualcuno']