UNPKG

1.55 kBtext/coffeescriptView Raw
1# Description:
2# Provides important functions used by the main Factoids code.
3
4class 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
77module.exports = Factoids