2015-04-25 10:02:28 +02:00
|
|
|
# Description:
|
|
|
|
# permette di salvare e recuperare nozioni
|
|
|
|
#
|
|
|
|
# Dependencies:
|
|
|
|
# "moment": "2.10.2"
|
|
|
|
#
|
|
|
|
# Configuration:
|
|
|
|
# None
|
|
|
|
#
|
|
|
|
# Commands:
|
|
|
|
# hubot ricordati che ... è/sono ... - salva un ricordo
|
|
|
|
# hubot memoria/a cosa stai pensando? - stampa la lista delle nozioni
|
|
|
|
# hubot che cos'è/quand'è/quali sono/... ... - richiama un ricordo
|
|
|
|
#
|
|
|
|
# Author:
|
|
|
|
# Enrico Fasoli (fazo96)
|
|
|
|
#
|
|
|
|
|
2015-04-24 17:37:05 +02:00
|
|
|
moment = require 'moment'
|
|
|
|
moment.locale 'it'
|
|
|
|
|
2015-04-24 09:18:49 +02:00
|
|
|
module.exports = (robot) ->
|
2015-04-24 12:02:14 +02:00
|
|
|
robot.respond /ricorda(?:ti)? (?:che )?(.+) ([=è]|sono) (.+)/i, (res) ->
|
2015-04-24 09:18:49 +02:00
|
|
|
mem = robot.brain.get('memoria') or {}
|
2015-04-24 18:55:50 +02:00
|
|
|
name = res.match[1].toLowerCase().replace('?',''); definition = res.match[3].replace('?','')
|
2015-04-24 12:02:14 +02:00
|
|
|
r = if res.match[2] is 'sono' then 'fossero' else 'fosse'
|
2015-04-24 20:40:07 +02:00
|
|
|
# Evita il bug nel caso manca il soggeto ('ricorda che è/sono ...')
|
|
|
|
if name is 'che'
|
|
|
|
if res.match[2] is 'è' then return res.send 'ma COSA è '+definition
|
|
|
|
name = res.message.user.name.toLowerCase()
|
|
|
|
r = 'fosse'
|
2015-04-24 09:18:49 +02:00
|
|
|
if mem[name]?
|
2015-04-24 12:02:14 +02:00
|
|
|
res.send 'pensavo che '+name+' '+r+' '+mem[name]+'. Mi ricorderò che invece è '+definition
|
2015-04-24 09:18:49 +02:00
|
|
|
else
|
2015-04-24 12:02:14 +02:00
|
|
|
res.send 'non sapevo che '+name+' '+r+' '+definition+'. Me lo ricorderò'
|
2015-04-24 09:18:49 +02:00
|
|
|
mem[name] = definition
|
|
|
|
robot.brain.set 'memoria', mem
|
2015-04-24 17:37:05 +02:00
|
|
|
|
2015-04-24 10:58:29 +02:00
|
|
|
robot.respond /dimentica(?:ti)? (.+)/i, (res) ->
|
|
|
|
mem = robot.brain.get('memoria') or {}
|
2015-04-24 11:26:28 +02:00
|
|
|
m = res.match[1].toLowerCase()
|
2015-04-24 17:37:05 +02:00
|
|
|
nonso = ['non so cosa sia','BZBZ 404-NOT-FOUND','non mi fa ne caldo ne freddo','se sapessi cos\'è magari']
|
2015-04-24 11:26:28 +02:00
|
|
|
if mem[m]?
|
2015-04-24 18:55:50 +02:00
|
|
|
res.send 'in caso cambi idea, sappi che ricordavo "'+mem[m]+'" riguardo a '+m
|
2015-04-24 11:26:28 +02:00
|
|
|
delete mem[m]
|
2015-04-24 10:58:29 +02:00
|
|
|
robot.brain.set 'memoria', mem # necessary?
|
2015-04-24 17:37:05 +02:00
|
|
|
else res.send res.random nonso
|
|
|
|
|
2015-04-24 17:43:21 +02:00
|
|
|
robot.respond /memory-dump/i, (res) ->
|
|
|
|
res.send JSON.stringify robot.brain.get('memoria')
|
|
|
|
|
2015-04-24 18:55:50 +02:00
|
|
|
robot.respond /(?:che )?(?:(?:(?:(?:(cos|qual|quand)\'è)|(?:chi (sono|è)?)))|(?:quali|cosa) sono) ([^?]+)(?:\?)?/i, (res) ->
|
2015-04-24 17:37:05 +02:00
|
|
|
query = undefined
|
|
|
|
# Estrazione query (quand,cos,qual,chi...)
|
|
|
|
if res.match[2] then query = res.match[2] or res.match[1]
|
|
|
|
else if res.match[3] and res.match[1] then query = res.match[1]
|
2015-04-24 18:55:50 +02:00
|
|
|
if query? then query = query.replace '?', ''
|
2015-04-24 17:37:05 +02:00
|
|
|
# Estrazione argomento della query
|
2015-04-24 18:55:50 +02:00
|
|
|
arg = (res.match[3] or res.match[2] or res.match[1]).toLowerCase().replace('?','')
|
2015-04-24 18:08:10 +02:00
|
|
|
# Controllo se l'argomento è data
|
|
|
|
argIsDate = arg.trim().match(/^(?:il )?\d{4}-\d{1,2}-\d{1,2}$/i) and moment(arg,'YYYY-MM-DD').isValid()
|
|
|
|
if argIsDate and (query is 'quand' or query is 'cos')
|
2015-04-24 17:37:05 +02:00
|
|
|
# chiesto una data
|
|
|
|
data = moment(arg,'[il] YYYY-MM-DD')
|
|
|
|
res.send arg+' è '+data.format('dddd Do MMMM YYYY')+' ovvero '+data.fromNow()
|
|
|
|
else
|
|
|
|
# chiesto qualcosa che non è una data
|
|
|
|
mem = robot.brain.get('memoria') or {}
|
2015-04-24 17:52:12 +02:00
|
|
|
verbo = if query? then 'è' else 'sono'
|
2015-04-24 17:37:05 +02:00
|
|
|
if mem[arg]
|
|
|
|
# controllo se è salvata una data nell'argomento chiesto
|
|
|
|
data = moment(mem[arg],'[il] YYYY-MM-DD')
|
2015-04-24 18:08:10 +02:00
|
|
|
contentIsDate = mem[arg].trim().match(/^(?:il )?\d{4}-\d{1,2}-\d{1,2}$/i) and data.isValid()
|
|
|
|
if contentIsDate
|
2015-04-24 17:37:05 +02:00
|
|
|
# nella memoria era salvata una data
|
|
|
|
res.send arg+' è '+data.format('dddd Do MMMM YYYY')+' ovvero '+data.fromNow()
|
|
|
|
else res.send arg+' '+verbo+' '+mem[arg]
|
|
|
|
else res.send res.random ['boh','mistero','se qualcuno me lo spiega magari','BZBZ 404-NOT-FOUND']
|
|
|
|
|
|
|
|
robot.respond /(?:mostrami la tua )?memoria|a cosa stai pensando(?:\?)?/i, (res) ->
|
2015-04-24 12:27:42 +02:00
|
|
|
m = robot.brain.get 'memoria'
|
|
|
|
if m isnt null
|
|
|
|
r = ['ho studiato', 'ho imparato', 'ho appreso', 'sono venuto a conoscenza di']
|
|
|
|
res.send 'nel corso della mia vita '+res.random(r)+' '+(i for i of m).join(', ')
|
2015-04-24 17:37:05 +02:00
|
|
|
else res.send res.random ['non so niente...', 'ignoranza proprio']
|