66 lines
No EOL
2.3 KiB
TypeScript
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();
|
|
} |