tg-bot-ts/src/systems/config.ts
Nuno Duque Nunes 1446cd10fc initial commit
2026-06-01 13:36:51 +01:00

66 lines
No EOL
2.3 KiB
TypeScript

import fs from "fs";
import path from "path";
import { BotConfig, Nation } from "../types";
const CONFIG_PATH = path.join(__dirname, "../../data/config.json");
// Function instead of const so env vars are read lazily at call time
function getDefaults(): Required<BotConfig> {
return {
officerRoles: ["Ice King"],
configRoles: ["Ice King"],
tagRoles: ["Ice King", "Ice", "Rebellion"],
lockMessage: "🔒 This poll has been locked.",
confirmYesMessage: "⚔️ TG is confirmed for tonight!",
confirmNoMessage: "❌ TG is cancelled for tonight.",
pollChannelId: process.env.POLL_CHANNEL_ID ?? "",
resultsChannelId: process.env.RESULTS_CHANNEL_ID ?? "",
scoreChannelId: process.env.SCORE_CHANNEL_ID ?? "",
slots: [
{ tgHour: 20, pollOpens: "10:00", closesAfter: 35, active: true },
],
scoreWindowHours: 2,
tgDurationMinutes: 35,
nationSource: "Procyon" as Nation,
wRankPostOnReset: false,
wRankGoal: 7,
wRankYellowColor: "#BA7517",
wRankGrayColor: "#888888",
deltaUpColor: "#A32D2D",
deltaDownColor: "#185FA5",
stormBringerColor: "#185FA5",
luminousBringerColor: "#8B4CB8",
showClassInMessages: false,
showLevelInMessages: false,
charDisplayFormat: "{wrank} {class} {level} {name}",
showNationTotalsInHeader: false,
showNoInNationField: false,
borrowRequestExpiryMs: 0, // 0 = never expire
};
}
let _cfg: BotConfig = {};
export function loadConfig(): void {
try { _cfg = JSON.parse(fs.readFileSync(CONFIG_PATH, "utf8")); }
catch { _cfg = {}; }
}
export function saveConfig(): void {
try { fs.writeFileSync(CONFIG_PATH, JSON.stringify(_cfg, null, 2)); }
catch (err) { console.error("Failed to save config.json:", err); }
}
export function cfg<K extends keyof BotConfig>(key: K): Required<BotConfig>[K] {
return (_cfg[key] !== undefined ? _cfg[key] : getDefaults()[key]) as Required<BotConfig>[K];
}
export function setCfg<K extends keyof BotConfig>(key: K, value: BotConfig[K]): void {
_cfg[key] = value;
saveConfig();
}
export function resetCfg<K extends keyof BotConfig>(key: K): void {
delete _cfg[key];
saveConfig();
}