Skip to content
This repository was archived by the owner on Jun 8, 2023. It is now read-only.

Commit 3b9ffaf

Browse files
committed
Merge pull request #532 from garylin/master
Add Eardropping script
2 parents e5e62a5 + 6b1e1ec commit 3b9ffaf

File tree

1 file changed

+70
-0
lines changed

1 file changed

+70
-0
lines changed

src/scripts/eardropping.coffee

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
# Description:
2+
# Add programmable interface to hubot. Allow to run a hubot command
3+
# whenever something came up in the conversation.
4+
#
5+
# Dependencies:
6+
# None
7+
#
8+
# Configuration:
9+
# None
10+
#
11+
# Commands:
12+
# hubot when you hear <pattern> do <something hubot does> - Setup a ear dropping event
13+
# hubot stop ear dropping - Stop all ear dropping
14+
# hubot stop ear dropping on <pattern> - Remove a particular ear dropping event
15+
# hubot show ear dropping - Show what hubot is ear dropping on
16+
#
17+
# Author:
18+
# garylin
19+
20+
TextMessage = require('hubot').TextMessage
21+
22+
class EarDropping
23+
constructor: (@robot) ->
24+
@cache = []
25+
@robot.brain.on 'loaded', =>
26+
if @robot.brain.data.eardropping
27+
@cache = @robot.brain.data.eardropping
28+
add: (pattern, action) ->
29+
task = {key: pattern, task: action}
30+
@cache.push task
31+
@robot.brain.data.eardropping = @cache
32+
all: -> @cache
33+
deleteByPattern: (pattern) ->
34+
@cache = @cache.filter (n) -> n.key != pattern
35+
@robot.brain.data.eardropping = @cache
36+
deleteAll: () ->
37+
@cache = []
38+
@robot.brain.data.eardropping = @cache
39+
40+
module.exports = (robot) ->
41+
earDropping = new EarDropping robot
42+
43+
robot.respond /when you hear (.+?) do (.+?)$/i, (msg) ->
44+
key = msg.match[1]
45+
task = msg.match[2]
46+
earDropping.add(key, task)
47+
msg.send "I am now ear dropping for #{key}. Hehe."
48+
49+
robot.respond /stop ear *dropping$/i, (msg) ->
50+
earDropping.deleteAll()
51+
msg.send 'Okay, fine. :( I am keep my ears shut.'
52+
53+
robot.respond /stop ear *dropping (for|on) (.+?)$/i, (msg) ->
54+
pattern = msg.match[2]
55+
earDropping.deleteByPattern(pattern)
56+
msg.send "Okay, I will ignore #{pattern}"
57+
58+
robot.respond /show ear *dropping/i, (msg) ->
59+
response = "\n"
60+
for task in earDropping.all()
61+
response += "#{task.key} -> #{task.task}\n"
62+
msg.send response
63+
64+
robot.hear /(.+)/i, (msg) ->
65+
robotHeard = msg.match[1]
66+
67+
for task in earDropping.all()
68+
if new RegExp(task.key, "i").test(robotHeard)
69+
if (robot.name != msg.message.user.name && !(new RegExp("^#{robot.name}", "i").test(robotHeard)))
70+
robot.receive new TextMessage(msg.message.user, "#{robot.name}: #{task.task}")

0 commit comments

Comments
 (0)