Permalink
Browse files

Merge pull request #80 from lukesmith/locations-script

A decision making script. Ask hubot to remember locations
  • Loading branch information...
2 parents 551f247 + eeddd10 commit c1425b721bd4c085784afb414d419dfb2b98e463 @atmos atmos committed Nov 1, 2011
Showing with 75 additions and 0 deletions.
  1. +75 −0 src/scripts/location-decision-maker.coffee
View
75 src/scripts/location-decision-maker.coffee
@@ -0,0 +1,75 @@
+# Decides where you should go.
+#
+# These commands are grabbed from comment blocks at the top of each file.
+#
+# remember <location> as a <group> location - Remembers the location for the group.
+# forget <location> as a <group> location - Forgets the location from the group.
+# forget all locations for <group> - Forgets all the locations for the group.
+# where can we go for <group>? - Returns a list of places that exist for the group.
+# where should we go for <group>? - Returns a randomly selected location for the group.
+
+class Locations
+ constructor: (@robot) ->
+ @robot.brain.data.locations = {}
+
+ add: (groupname, name) ->
+ if @robot.brain.data.locations[groupname] is undefined
+ @robot.brain.data.locations[groupname] = []
+
+ for location in @robot.brain.data.locations[groupname]
+ if location.toLowerCase() is name.toLowerCase()
+ return
+
+ @robot.brain.data.locations[groupname].push name
+
+ remove: (groupname, name) ->
+ group = @robot.brain.data.locations[groupname] or []
+ @robot.brain.data.locations[groupname] = (location for location in group when location.toLowerCase() isnt name.toLowerCase())
+
+ removeAll: (groupname) ->
+ delete @robot.brain.data.locations[groupname]
+
+ group: (name) ->
+ return @robot.brain.data.locations[name] or []
+
+
+module.exports = (robot) ->
+ locations = new Locations robot
+
+ robot.respond /remember (.*) as a (.*) location/i, (msg) ->
+ locationname = msg.match[1]
+ locationgroup = msg.match[2]
+ locations.add locationgroup, locationname
+
+ if locationname.toLowerCase() is "nandos"
+ msg.send "Nom peri peri. My fav."
+
+ robot.respond /forget (.*) as a (.*) location/i, (msg) ->
+ locationname = msg.match[1]
+ locationgroup = msg.match[2]
+ locations.remove locationgroup, locationname
+
+ robot.respond /forget all locations for (.*)/i, (msg) ->
+ locationgroup = msg.match[1]
+ locations.removeAll locationgroup
+
+ robot.respond /where can we go for (.*)\?$/i, (msg) ->
+ locationgroup = msg.match[1]
+ grouplocations = locations.group(locationgroup)
+
+ if grouplocations.length > 0
+ for location in grouplocations
+ msg.send location
+ else
+ msg.send "I don't know anywhere to go for #{locationgroup}"
+
+ robot.respond /where (should|shall) we go for (.*)\?$/i, (msg) ->
+ locationgroup = msg.match[2]
+ grouplocations = locations.group(locationgroup)
+
+ if grouplocations.length is 0
+ msg.send "I dont know anywhere to go for #{locationgroup}"
+ else
+ location = msg.random grouplocations
+
+ msg.send "I think you should goto #{location}"

0 comments on commit c1425b7

Please sign in to comment.