1 |
|
2 |
|
3 |
|
4 | class Factoids
|
5 | constructor: (@robot) ->
|
6 | if @robot.brain?.data?
|
7 | @data = @robot.brain.data.factoids ?= {}
|
8 |
|
9 | @robot.brain.on 'loaded', =>
|
10 | @data = @robot.brain.data.factoids ?= {}
|
11 |
|
12 | set: (key, value, who, resolveAlias) ->
|
13 | key = key.trim()
|
14 | value = value.trim()
|
15 | fact = @get key, resolveAlias
|
16 |
|
17 | if typeof fact is 'object'
|
18 | fact.history ?= []
|
19 | hist =
|
20 | date: Date()
|
21 | editor: who
|
22 | oldValue: fact.value
|
23 | newValue: value
|
24 |
|
25 | fact.history.push hist
|
26 | fact.value = value
|
27 | if fact.forgotten? then fact.forgotten = false
|
28 | else
|
29 | fact =
|
30 | value: value
|
31 | popularity: 0
|
32 |
|
33 | @data[key.toLowerCase()] = fact
|
34 |
|
35 | get: (key, resolveAlias = true) ->
|
36 | fact = @data[key.toLowerCase()]
|
37 | alias = fact?.value?.match /^@([^@].+)$/i
|
38 | if resolveAlias and alias?
|
39 | fact = @get alias[1]
|
40 | fact
|
41 |
|
42 | getAll: () ->
|
43 | values = {}
|
44 | for i of @data
|
45 | if !@data[i].forgotten
|
46 | values[i] = @data[i].value
|
47 |
|
48 | values
|
49 |
|
50 | search: (str) ->
|
51 | keys = Object.keys @data
|
52 |
|
53 | keys.filter (a) =>
|
54 | value = @data[a].value
|
55 | value.indexOf(str) > -1 || a.indexOf(str) > -1
|
56 |
|
57 | forget: (key) ->
|
58 | fact = @get key
|
59 |
|
60 | if fact
|
61 | fact.forgotten = true
|
62 |
|
63 | remember: (key) ->
|
64 | fact = @get key
|
65 |
|
66 | if fact
|
67 | fact.forgotten = false
|
68 |
|
69 | fact
|
70 |
|
71 | drop: (key) ->
|
72 | key = key.toLowerCase()
|
73 | if @get key, false
|
74 | delete @data[key]
|
75 | else false
|
76 |
|
77 | module.exports = Factoids
|