This repository has been archived by the owner on Apr 13, 2022. It is now read-only.
/
triggers.coffee
130 lines (98 loc) · 4.47 KB
/
triggers.coffee
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# Description:
# LioBot heeds the call of the last op
#
# Commands:
# !<trigger> - Display response to intended user
# Liona (list|show) triggers - Lists all triggers in private message
# Liona learn trigger <trigger> <phrase> - Learn a dynamic trigger
# Liona show trigger <trigger> - View information about a trigger
# Liona forget trigger <trigger> - Forget a dynamic trigger
# Liona suggest trigger <trigger> <phrase> - Suggest a trigger
# Liona (list|show) suggested triggers - list the waiting suggestions
# Liona show suggested trigger <id> - show the suggested trigger
# Liona (reject|forget) suggested trigger <id> - remove a suggested trigger
# Liona learn suggested trigger <id> - add the suggested trigger to the triggers
#
# Notes:
# Add helpful triggers when you think of them!
whitelist = require '../support/whitelist'
TriggerRepo = require '../support/trigger_repository'
SuggestedRepo = require '../support/suggested_trigger_repository'
module.exports = (robot) ->
triggerRepo = new TriggerRepo(robot.brain)
suggestRepo = new SuggestedRepo(robot.brain)
robot.respond /(list|show) triggers/i, (msg) ->
triggers = triggerRepo.all()
formatter = (list) -> list.map((t) -> t.name).join(', ') || 'None'
message = "Available triggers: "
user = msg.message.user.name
# make it a private message
if msg.message.room
msg.message.room = user
if msg.message.user?.room
msg.message.user.room = user
msg.send message + formatter(triggers)
robot.respond /learn trigger (\![a-zA-Z0-9-_\&\^\!\#]+) (.*)/i, (msg) ->
return unless whitelist.canAddTriggers(robot, msg.message.user)
[name, phrase] = msg.match[1..2]
triggerRepo.save(name, phrase, msg.message.user.name)
msg.reply "Got it. Learned '#{name}' as '#{phrase}'."
robot.respond /show trigger (\![a-zA-Z0-9-_\&\^\!\#]+)/i, (msg) ->
return unless whitelist.canAddTriggers robot, msg.message.user
name = msg.match[1]
trigger = triggerRepo.find name
return unless trigger
rmsg = "#{trigger.name} \"#{trigger.phrase}\" [#{trigger.author}]"
if trigger.suggested_by?
rmsg = "#{rmsg} {#{trigger.suggested_by}}"
if trigger.created_at?
rmsg = "#{rmsg} #{new Date(trigger.created_at).toDateString()}"
msg.reply rmsg
robot.respond /forget trigger (\![a-zA-Z0-9-_\&\^\!\#]+)/i, (msg) ->
return unless whitelist.canAddTriggers(robot, msg.message.user)
name = msg.match[1]
triggerRepo.remove name
msg.reply "Now I know nothing about '#{name}' unless it's hardcoded"
robot.respond /suggest trigger (\![a-zA-Z0-9-_\&\^\!\#]+) (.*)/i, (msg) ->
[name, phrase] = msg.match[1..2]
user = msg.message.user.name
trigger = suggestRepo.create(name, phrase, user)
msg.reply "Thank you. It will be waiting for review. (#{trigger.id})"
robot.respond /(list|show) suggested triggers/i, (msg) ->
console.log whitelist.canAddTriggers robot, msg.message.user
return unless whitelist.canAddTriggers(robot, msg.message.user)
triggers = suggestRepo.all()
formatter = (list) -> list.map((t) -> "#{t.id}: #{t.name}").join(', ') || 'None'
msg.reply formatter(triggers)
robot.respond /show suggested trigger ([a-zA-Z0-9]+)/i, (msg) ->
return unless whitelist.canAddTriggers robot, msg.message.user
id = msg.match[1]
trigger = suggestRepo.find id
if trigger?
date = new Date(trigger.created_at).toDateString()
msg.reply "#{trigger.name} \"#{trigger.phrase}\" [#{trigger.author}] #{date} "
robot.respond /learn suggested trigger ([a-zA-Z0-9]+)/i, (msg) ->
return unless whitelist.canAddTriggers robot, msg.message.user
id = msg.match[1]
trigger = suggestRepo.find id
return unless trigger?
triggerRepo.save trigger.name, trigger.phrase, msg.message.user.name, trigger.author
suggestRepo.remove id
msg.reply "Got it. Learned '#{trigger.name}' as '#{trigger.phrase}'."
robot.respond /(reject|forget) suggested trigger ([a-zA-Z0-9]+)/i, (msg) ->
return unless whitelist.canAddTriggers robot, msg.message.user
id = msg.match[2]
suggestRepo.remove id
msg.reply "Removed suggested trigger with id: #{id}."
robot.hear /^(([^,:\s!]+)[,:\s]+)?(!\w+)(.*)/i, (msg) ->
user = msg.match[2]
name = msg.match[3]
args = msg.match[4]
phrase = triggerRepo.find(name)?.phrase
if phrase?
if user?
msg.send "#{user}: #{phrase}"
else
msg.send phrase
else
msg.reply "....ya I got nothing for #{name}."