aboutsummaryrefslogtreecommitdiff
path: root/174bg/discord-bot
diff options
context:
space:
mode:
Diffstat (limited to '174bg/discord-bot')
-rw-r--r--174bg/discord-bot/.env.example4
-rw-r--r--174bg/discord-bot/commands/_index.js5
-rw-r--r--174bg/discord-bot/commands/oncall-check.js50
-rw-r--r--174bg/discord-bot/package-lock.json23
-rw-r--r--174bg/discord-bot/package.json2
5 files changed, 81 insertions, 3 deletions
diff --git a/174bg/discord-bot/.env.example b/174bg/discord-bot/.env.example
index c262567..0b2a30f 100644
--- a/174bg/discord-bot/.env.example
+++ b/174bg/discord-bot/.env.example
@@ -1,3 +1,5 @@
DISCORD_CLIENT_ID=
DISCORD_BOT_TOKEN=
-DISCORD_GUILD_ID= \ No newline at end of file
+DISCORD_GUILD_ID=
+POCKETBASE_URL=
+POCKETBASE_AUTH_TOKEN= \ No newline at end of file
diff --git a/174bg/discord-bot/commands/_index.js b/174bg/discord-bot/commands/_index.js
index d1a50c6..2421b4d 100644
--- a/174bg/discord-bot/commands/_index.js
+++ b/174bg/discord-bot/commands/_index.js
@@ -1,6 +1,7 @@
import requisition from "./requisition.js";
import closeTicket from "./close-ticket.js";
+import oncallCheck from "./oncall-check.js";
-export { requisition, closeTicket };
+export { requisition, closeTicket, oncallCheck };
-export default [requisition, closeTicket];
+export default [requisition, closeTicket, oncallCheck];
diff --git a/174bg/discord-bot/commands/oncall-check.js b/174bg/discord-bot/commands/oncall-check.js
new file mode 100644
index 0000000..7af986a
--- /dev/null
+++ b/174bg/discord-bot/commands/oncall-check.js
@@ -0,0 +1,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,
+ });
+ },
+};
diff --git a/174bg/discord-bot/package-lock.json b/174bg/discord-bot/package-lock.json
index c2053fb..8cfe310 100644
--- a/174bg/discord-bot/package-lock.json
+++ b/174bg/discord-bot/package-lock.json
@@ -8,6 +8,8 @@
"@discordjs/voice": "^0.19.2",
"bufferutil": "^4.1.0",
"discord.js": "^14.26.4",
+ "pocketbase": "^0.27.0",
+ "prettier": "^3.9.5",
"zlib-sync": "^0.1.10"
}
},
@@ -648,6 +650,27 @@
"node-gyp-build-test": "build-test.js"
}
},
+ "node_modules/pocketbase": {
+ "version": "0.27.0",
+ "resolved": "https://registry.npmjs.org/pocketbase/-/pocketbase-0.27.0.tgz",
+ "integrity": "sha512-K5N6d93UP/BNMbMnlZ6BUfy9VPCIvLyqhJFOsNI8OsZwzvKWEAfyD36boi5K4ECIOl5HMlo0TzuaeGdKpMwizQ==",
+ "license": "MIT"
+ },
+ "node_modules/prettier": {
+ "version": "3.9.5",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.9.5.tgz",
+ "integrity": "sha512-/FVl766LpUfB5vXgCYOYa0MeV/441Ia99AeICQIQFTY/Nw0roZwULcXpku5i1/m5kt/baz+s4Zogspd839HSMg==",
+ "license": "MIT",
+ "bin": {
+ "prettier": "bin/prettier.cjs"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/prettier/prettier?sponsor=1"
+ }
+ },
"node_modules/prism-media": {
"version": "1.3.5",
"resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.3.5.tgz",
diff --git a/174bg/discord-bot/package.json b/174bg/discord-bot/package.json
index d3e8dac..911e71c 100644
--- a/174bg/discord-bot/package.json
+++ b/174bg/discord-bot/package.json
@@ -8,6 +8,8 @@
"@discordjs/voice": "^0.19.2",
"bufferutil": "^4.1.0",
"discord.js": "^14.26.4",
+ "pocketbase": "^0.27.0",
+ "prettier": "^3.9.5",
"zlib-sync": "^0.1.10"
},
"type": "module"