/
reminders.js
71 lines (55 loc) · 2.14 KB
/
reminders.js
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
65
66
67
68
69
70
71
const moment = require('moment');
const metadata = require('probot-metadata');
const parseReminder = require('parse-reminder');
const defaults = {
reminders: {
label: 'reminder'
}
};
module.exports = {
async set(context, command) {
const reminder = parseReminder(command.name + ' ' + command.arguments);
if (reminder) {
if (reminder.who === 'me') {
reminder.who = context.payload.comment.user.login;
}
const config = await context.config('config.yml', defaults);
const labels = context.payload.issue.labels;
if (!labels.find(label => label.name === config.reminders.label)) {
labels.push(config.reminders.label);
}
await context.github.issues.edit(context.issue({labels}));
await metadata(context).set(reminder);
await context.github.issues.createComment(context.issue({
body: `@${context.payload.sender.login} set a reminder for **${moment(reminder.when).calendar()}**`
}));
}
},
async check(context) {
const config = await context.config('config.yml', defaults);
const {owner, repo} = context.repo();
const q = `label:"${config.reminders.label}" repo:${owner}/${repo}`;
const resp = await context.github.search.issues({q});
await Promise.all(resp.data.items.map(async issue => {
// Issue objects from the API don't include owner/repo params, so
// setting them here with `context.repo` so we don't have to worry
// about it later. :/
issue = context.repo(issue);
const reminder = await metadata(context, issue).get();
if (moment(reminder.when) < moment()) {
const labels = issue.labels;
const frozenLabel = labels.find(label => {
return label.name === config.reminders.label;
});
const pos = labels.indexOf(frozenLabel);
labels.splice(pos, 1);
const {owner, repo, number} = issue;
await context.github.issues.edit({owner, repo, number, labels, state: 'open'});
await context.github.issues.createComment({
owner, repo, number,
body: ':wave: @' + reminder.who + ', ' + reminder.what
});
}
}));
}
};