最后活跃于 3 weeks ago

gistfile1.txt 原始文件
1import path from "path";
2import { BotConfig, Nation } from "../types";
3import { Store } from "@systems/store";
4import { Paths } from "@helpers/paths";
5
6
7// Function instead of const so env vars are read lazily at call time
8function getDefaults(): Required<BotConfig> {
9 return {
10 officerRoles: ["Ice King"],
11 configRoles: ["Ice King"],
12 tagRoles: ["Ice King", "Ice", "Rebellion"],
13 lockMessage: "🔒 This poll has been locked.",
14 confirmYesMessage: "⚔️ TG is confirmed for tonight!",
15 confirmNoMessage: "❌ TG is cancelled for tonight.",
16 pollChannelId: process.env.POLL_CHANNEL_ID ?? "",
17 resultsChannelId: process.env.RESULTS_CHANNEL_ID ?? "",
18 scoreChannelId: process.env.SCORE_CHANNEL_ID ?? "",
19 slots: [
20 { tgHour: 20, pollOpens: "10:00", closesAfter: 35, active: true },
21 ],
22 scoreWindowHours: 2,
23 tgDurationMinutes: 35,
24 nationSource: Nation.Procyon,
25 wRankPostOnReset: false,
26 wRankGoal: 7,
27 wRankYellowColor: "#BA7517",
28 wRankGrayColor: "#888888",
29 deltaUpColor: "#A32D2D",
30 deltaDownColor: "#185FA5",
31 stormBringerColor: "#185FA5",
32 luminousBringerColor: "#8B4CB8",
33 showClassInMessages: false,
34 showLevelInMessages: false,
35 charDisplayFormat: "{wrank} {class} {level} {name}",
36 showNationTotalsInHeader: false,
37 showNoInNationField: false,
38 borrowRequestExpiryMs: 0, // 0 = never expire
39 conflictReclaimBehavior: "revert",
40 };
41}
42
43let _cfg: BotConfig = {};
44
45export function loadConfig(): void {
46 _cfg = Store.readOrDefault(Paths.data("config.json"), {});
47}
48export function saveConfig(): void {
49 Store.write(Paths.data("config.json"), _cfg);
50}
51
52export function cfg<K extends keyof BotConfig>(key: K): Required<BotConfig>[K] {
53 return (_cfg[key] !== undefined ? _cfg[key] : getDefaults()[key]) as Required<BotConfig>[K];
54}
55
56export function setCfg<K extends keyof BotConfig>(key: K, value: BotConfig[K]): void {
57 _cfg[key] = value;
58 saveConfig();
59}
60
61export function resetCfg<K extends keyof BotConfig>(key: K): void {
62 delete _cfg[key];
63 saveConfig();
64}