|
| 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