From 764f90577eeadd653f3f6248fbf2b0918c97a3d5 Mon Sep 17 00:00:00 2001 From: "Alex Pooley (@zuedev)" Date: Tue, 21 Jul 2026 17:01:54 +0100 Subject: fix oncall w/ pocketbase controller --- 174bg/discord-bot/.env.example | 3 ++- 174bg/discord-bot/commands/oncall-check.js | 7 ++++--- 174bg/discord-bot/commands/pocketbase.js | 17 ++++++----------- 174bg/discord-bot/controllers/pocketbase.js | 22 ++++++++++++++++++++++ 174bg/discord-bot/utilities/getUrl.js | 11 ++++++++++- 5 files changed, 44 insertions(+), 16 deletions(-) create mode 100644 174bg/discord-bot/controllers/pocketbase.js (limited to '174bg/discord-bot') diff --git a/174bg/discord-bot/.env.example b/174bg/discord-bot/.env.example index 0b2a30f..42f20fc 100644 --- a/174bg/discord-bot/.env.example +++ b/174bg/discord-bot/.env.example @@ -2,4 +2,5 @@ DISCORD_CLIENT_ID= DISCORD_BOT_TOKEN= DISCORD_GUILD_ID= POCKETBASE_URL= -POCKETBASE_AUTH_TOKEN= \ No newline at end of file +POCKETBASE_SUPERUSER_EMAIL= +POCKETBASE_SUPERUSER_PASSWORD= \ No newline at end of file diff --git a/174bg/discord-bot/commands/oncall-check.js b/174bg/discord-bot/commands/oncall-check.js index 7af986a..7a3886d 100644 --- a/174bg/discord-bot/commands/oncall-check.js +++ b/174bg/discord-bot/commands/oncall-check.js @@ -1,5 +1,5 @@ import { SlashCommandBuilder, PermissionFlagsBits } from "discord.js"; -import PocketBase from "pocketbase"; +import { login } from "../controllers/pocketbase.js"; export default { data: new SlashCommandBuilder() @@ -12,8 +12,7 @@ export default { 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 pb = await login(); const members = await pb.collection("members").getFullList(); @@ -32,6 +31,8 @@ export default { const endHours = end.split(":")[0]; const endMinutes = end.split(":")[1]; + console.log(`Checking on-call schedule for member ${member.name}: ${start} - ${end} (UTC)`); + if ((dateUTCHours > startHours || (dateUTCHours === startHours && dateUTCMinutes >= startMinutes)) && (dateUTCHours < endHours || (dateUTCHours === endHours && dateUTCMinutes <= endMinutes))) { membersOnCall.push(member); } diff --git a/174bg/discord-bot/commands/pocketbase.js b/174bg/discord-bot/commands/pocketbase.js index e223ec4..5724568 100644 --- a/174bg/discord-bot/commands/pocketbase.js +++ b/174bg/discord-bot/commands/pocketbase.js @@ -1,5 +1,5 @@ import { SlashCommandBuilder, PermissionFlagsBits } from "discord.js"; -import PocketBase from "pocketbase"; +import { login } from "../controllers/pocketbase.js"; import uex from "../.cache/uex.json" with { type: "json" }; export default { @@ -70,8 +70,7 @@ export default { }; async function populateUexItems(interaction) { - const pb = new PocketBase(process.env.POCKETBASE_URL); - pb.authStore.save(process.env.POCKETBASE_AUTH_TOKEN, null); + const pb = await login(); const items = uex.items ?? []; @@ -131,8 +130,7 @@ async function populateUexItems(interaction) { } async function populateUexSpaceStations(interaction) { - const pb = new PocketBase(process.env.POCKETBASE_URL); - pb.authStore.save(process.env.POCKETBASE_AUTH_TOKEN, null); + const pb = await login(); const stations = uex.space_stations ?? []; @@ -192,8 +190,7 @@ async function populateUexSpaceStations(interaction) { } async function populateUexPointsOfInterest(interaction) { - const pb = new PocketBase(process.env.POCKETBASE_URL); - pb.authStore.save(process.env.POCKETBASE_AUTH_TOKEN, null); + const pb = await login(); const pointsOfInterest = uex.points_of_interest ?? []; @@ -248,8 +245,7 @@ async function populateUexPointsOfInterest(interaction) { } async function populateInventoryLocations(interaction) { - const pb = new PocketBase(process.env.POCKETBASE_URL); - pb.authStore.save(process.env.POCKETBASE_AUTH_TOKEN, null); + const pb = await login(); const stations = uex.space_stations ?? []; const pointsOfInterest = uex.points_of_interest ?? []; @@ -340,8 +336,7 @@ async function populateInventoryLocations(interaction) { } async function populateUexVehicles(interaction) { - const pb = new PocketBase(process.env.POCKETBASE_URL); - pb.authStore.save(process.env.POCKETBASE_AUTH_TOKEN, null); + const pb = await login(); const vehicles = uex.vehicles ?? []; diff --git a/174bg/discord-bot/controllers/pocketbase.js b/174bg/discord-bot/controllers/pocketbase.js new file mode 100644 index 0000000..b808ce4 --- /dev/null +++ b/174bg/discord-bot/controllers/pocketbase.js @@ -0,0 +1,22 @@ +import PocketBase from "pocketbase"; + +const { POCKETBASE_URL, POCKETBASE_SUPERUSER_EMAIL, POCKETBASE_SUPERUSER_PASSWORD } = process.env; + +export async function login() { + const pb = new PocketBase(POCKETBASE_URL); + await pb.collection("_superusers").authWithPassword(POCKETBASE_SUPERUSER_EMAIL, POCKETBASE_SUPERUSER_PASSWORD); + return pb; +} + +export async function logout(pb) { + await pb.authStore.clear(); +} + +export async function getFullList(collectionName) { + const pb = await login(); + const data = await pb.collection(collectionName).getFullList(); + await logout(pb); + return data; +} + +export default { login, logout, getFullList } \ No newline at end of file diff --git a/174bg/discord-bot/utilities/getUrl.js b/174bg/discord-bot/utilities/getUrl.js index 49342d9..a6e22ef 100644 --- a/174bg/discord-bot/utilities/getUrl.js +++ b/174bg/discord-bot/utilities/getUrl.js @@ -1,5 +1,14 @@ export default async (url) => { const response = await fetch(url); + if (!response.ok) return null; - return await response.json(); + + // is it json? + const contentType = response.headers.get("content-type"); + if (contentType && contentType.includes("application/json")) { + return await response.json(); + } + + // fallback to text + return await response.text(); }; -- cgit v1.2.3