aboutsummaryrefslogtreecommitdiff
path: root/174bg/discord-bot/commands/oncall-check.js
blob: 7af986aa70b1fd1d2a78ab983f80b46e06a39f7e (plain)
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
import { SlashCommandBuilder, PermissionFlagsBits } from "discord.js";
import PocketBase from "pocketbase";

export default {
  data: new SlashCommandBuilder()
    .setName("oncall-check")
    .setDescription("Returns a list of members who are currently on call.")
    .setDefaultMemberPermissions(PermissionFlagsBits.Administrator),
  execute: async (interaction) => {
    const date = new Date();
    const dateUTCHours = date.getUTCHours();
    const dateUTCMinutes = date.getUTCMinutes();
    const dateUTCDay = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"][date.getUTCDay()];

    const pb = new PocketBase(process.env.POCKETBASE_URL);
    pb.authStore.save(process.env.POCKETBASE_AUTH_TOKEN, null);

    const members = await pb.collection("members").getFullList();

    let membersOnCall = [];

    for (const member of members) {
      try {
        if (member.onCallSchedule) {
          const available = member.onCallSchedule[dateUTCDay]?.available || false;

          if (available) {
            const start = member.onCallSchedule[dateUTCDay].start;
            const startHours = start.split(":")[0];
            const startMinutes = start.split(":")[1];
            const end = member.onCallSchedule[dateUTCDay].end;
            const endHours = end.split(":")[0];
            const endMinutes = end.split(":")[1];

            if ((dateUTCHours > startHours || (dateUTCHours === startHours && dateUTCMinutes >= startMinutes)) && (dateUTCHours < endHours || (dateUTCHours === endHours && dateUTCMinutes <= endMinutes))) {
              membersOnCall.push(member);
            }
          }
        }
      } catch (error) {
        console.error(`Error checking on-call schedule for member ${member.name}:`, error);
      }
    }

    await interaction.reply({
      content: `${membersOnCall.map((member) => `- <@${member.discordId}>`).join("\n") || "No members are currently on call."}`,
      ephemeral: true,
    });
  },
};