UNPKG

1.65 kBtext/coffeescriptView Raw
1_ = require 'underscore'
2moment = require 'moment'
3cronJob = require("cron").CronJob
4
5class Reminders
6 constructor: (@robot, @key, @cb) ->
7 @robot.brain.once 'loaded', =>
8 # Run a cron job that runs every minute, Monday-Friday
9 new cronJob('0 * * * * 1-5', @_check.bind(@), null, true)
10
11 _get: ->
12 @robot.brain.get(@key) or []
13
14 _save: (reminders) ->
15 @robot.brain.set @key, reminders
16
17 _check: ->
18 reminders = @_get()
19 _.chain(reminders).filter(@_shouldFire).pluck('room').each @cb
20
21 _shouldFire: (reminder) ->
22 now = new Date
23 currentHours = now.getHours()
24 currentMinutes = now.getMinutes()
25 reminderHours = reminder.time.split(':')[0]
26 reminderMinutes = reminder.time.split(':')[1]
27 try
28 reminderHours = parseInt reminderHours, 10
29 reminderMinutes = parseInt reminderMinutes, 10
30 catch _error
31 return false
32 if reminderHours is currentHours and reminderMinutes is currentMinutes
33 return true
34 return false
35
36 getAll: ->
37 @_get()
38
39 getForRoom: (room) ->
40 _.where @_get(), room: room
41
42 save: (room, time) ->
43 reminders = @_get()
44 newReminder =
45 time: time
46 room: room
47 reminders.push newReminder
48 @_save reminders
49
50 clearAllForRoom: (room) ->
51 reminders = @_get()
52 remindersToKeep = _.reject(reminders, room: room)
53 @_save remindersToKeep
54 reminders.length - (remindersToKeep.length)
55
56 clearForRoomAtTime: (room, time) ->
57 reminders = @_get()
58 remindersToKeep = _.reject reminders,
59 room: room
60 time: time
61 @_save remindersToKeep
62 reminders.length - (remindersToKeep.length)
63
64module.exports = Reminders