-
Notifications
You must be signed in to change notification settings - Fork 3
/
status-reminder.coffee
64 lines (55 loc) · 2.25 KB
/
status-reminder.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
# Description
# Remind users to give a daily status update
#
# Commands:
# status reminder add user <username> - Add a user
# status reminder remove user <username> - Remove a user
# status reminder list users - List all users getting reminders and show stats
# status reminder send reminders - Send reminders
#
# Notes:
# You can use package hubot-cron-json to execute the send reminders task
# at a certain time. Update conf/cron-tasks.json to set the time.
#
# Author:
# nick warner
module.exports = (robot) ->
robot.brain.data.status_reminder ||= {}
robot.brain.data.status_reminder.users ||= []
seconds_since_midnight = ->
d = new Date()
e = new Date(d)
e - d.setHours(0,0,0,0)
send_reminders = ->
for user in robot.brain.data.status_reminder.users
if user.last_status_date < (new Date().getTime()) - seconds_since_midnight
message = "Hey #{username}! Please update your daily status. Thanks!"
robot.send {user: {name: user.username}}, message
robot.respond /status reminder add user\s+(.*)?$/i, (msg) ->
username = msg.match[1]
user =
streak: 0
last_status_date: 0
username: username
robot.brain.data.status_reminder.users.push user
msg.send "Added user: #{username}"
robot.respond /status reminder remove user\s+(.*)?$/i, (msg) ->
username = msg.match[1]
users = robot.brain.data.status_reminder.users
robot.brain.data.status_reminder.users = users.filter (user) ->
user.username != username
msg.send "Removed user: #{username}"
robot.respond /status reminder list users/i, (msg) ->
for user in robot.brain.data.status_reminder.users
date = new Date(user.last_status_date)
msg.send "#{user.username} - Streak: #{user.streak} - Last update: #{date.toLocaleDateString()}"
robot.respond /status reminder send reminders/i, ->
send_reminders()
robot.on /status reminder send reminders/i, ->
send_reminders()
robot.hear /^t:|^today:|^y:|^yesterday:/i, (msg) ->
username = msg.message.user.name
users = robot.brain.data.status_reminder.users
index = users.map((user) -> user.username).indexOf(username)
robot.brain.data.status_reminder.users[index].last_status_date = (new Date().getTime())
#TODO record streak data