-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathscheduler.js
63 lines (54 loc) · 1.79 KB
/
scheduler.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
const schedule = require("node-schedule");
const { fetchMemberships, fetchRole } = require("./utilities.js");
const { Membership } = require("./db.js");
function refreshSchedule(client) {
const rule = new schedule.RecurrenceRule();
rule.second = 0;
rule.minute = 0;
rule.hour = [0, 6, 12, 18];
rule.tz = "Europe/Oslo";
schedule.scheduleJob(rule, async function (fireDate) {
const role = await fetchRole(client);
const guild = client.guilds.cache.get(process.env.guildId);
const members = await guild.members.fetch();
const membershipMap = await fetchMemberships();
// iterate over every membership in group
if (!membershipMap) {
return console.log("Schedule could not run, membershipMap is empty.");
}
for (const membership of membershipMap.values()) {
const currentRow = await Membership.findOne({
ntnui_no: membership.ntnui_no,
});
if (!currentRow) {
continue;
}
const discordId = currentRow.get("discord_id");
const registeredMember = members.get(discordId);
if (!registeredMember) {
continue;
}
await Membership.findOneAndUpdate(
{ discord_id: discordId },
{
has_valid_group_membership: membership.has_valid_group_membership,
ntnui_contract_expiry_date: membership.ntnui_contract_expiry_date,
}
);
if (membership.has_valid_group_membership) {
// grant current member MEMBER_ROLE
await registeredMember.roles.add(role);
} else {
// revoke MEMBER_ROLE
await registeredMember.roles.remove(role);
}
}
return console.log(
"This job was supposed to run at " +
fireDate +
", but actually ran at " +
new Date()
);
});
}
module.exports = { refreshSchedule };