# 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) # moment = require 'moment' moment.locale 'it' dateFormatsA = ['YYYY-MM-DD','DD-MM-YYYY',"DD MMMM YYYY", "DD MMMM","DD"] toDate = (d) -> dat = d.replace /(?:l'|il )/i, '' moment dat, dateFormatsA module.exports = (robot) -> robot.respond /ricorda(?:ti)? (?:che )?(.+?) ([=è]|sono) (.+)/i, (res) -> mem = robot.brain.get('memoria') or {} name = res.match[1].toLowerCase().replace('tuo','mio').replace('tuoi','miei') definition = res.match[3].replace('tuo','mio').replace('tuoi','miei') r = if res.match[2] is 'sono' then 'fossero' else 'fosse' # 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' if mem[name]? res.send 'pensavo che '+name+' '+r+' '+mem[name]+'. Mi ricorderò che invece è '+definition else res.send 'non sapevo che '+name+' '+r+' '+definition+'. Me lo ricorderò' mem[name] = definition robot.brain.set 'memoria', mem robot.respond /dimentica(?:ti)? (.+)/i, (res) -> mem = robot.brain.get('memoria') or {} m = res.match[1].toLowerCase() m = m.replace('tuo','mio').replace('tuoi','miei') nonso = ['non so cosa sia','BZBZ 404-NOT-FOUND','non mi fa ne caldo ne freddo','se sapessi cos\'è magari'] if mem[m]? res.send 'in caso cambi idea, sappi che ricordavo "'+mem[m]+'" riguardo a '+m delete mem[m] robot.brain.set 'memoria', mem # necessary? else res.send res.random nonso robot.respond /memory-dump/i, (res) -> res.send JSON.stringify robot.brain.get('memoria') robot.respond /(?:che )?(?:(?:(?:(?:(cos|qual|quand)(?:\'| )?è)|(?:chi (sono|è)?)))|(?:quali|cosa) sono) ([^?]+)(?:\?)?/i, (res) -> 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] if query? then query = query.replace '?', '' # Estrazione argomento della query arg = (res.match[3] or res.match[2] or res.match[1]).toLowerCase().replace('?','') arg = arg.replace('tuo','mio').replace('tuoi','miei') # Controllo se l'argomento è data data = toDate arg if data.isValid() and arg.match(/^(il |l')/i) and (query is 'quand' or query is 'cos') # chiesto una data 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 {} verbo = if query is 'è' or query is 'sono' then query if query is 'cos' or query is 'quand' then verbo = 'è' if query is 'qual' then verbo = 'è' else if !query? then verbo = 'sono' if mem[arg] # controllo se è salvata una data nell'argomento chiesto odata = toDate mem[arg] if odata.isValid() and mem[arg].match(/^(il |l')/i) and query is 'quand' # nella memoria era salvata una data res.send arg+' è '+odata.format('dddd Do MMMM YYYY')+' ovvero '+odata.fromNow() else res.send arg+' '+verbo+' '+mem[arg] else res.send res.random ['boh','mistero','se qualcuno me lo spiegasse magari','BZBZ 404-NOT-FOUND'] robot.respond /(?:mostrami la tua )?memoria|(?:a )?cosa (?:stai|ti|hai) (?:pensando|ricordi|imparato)(?:\?)?/i, (res) -> 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).sort().join(', ') else res.send res.random ['non so niente...', 'ignoranza proprio']