Files
discord-rpg-concept/shared/scripts/migrate-game-settings-to-db.ts

129 lines
4.0 KiB
TypeScript

import { gameSettingsService } from "@shared/modules/game-settings/game-settings.service";
import { readFileSync, existsSync } from "node:fs";
import { join } from "node:path";
const configPath = join(import.meta.dir, '..', 'config', 'config.json');
interface FileConfig {
leveling: {
base: number;
exponent: number;
chat: {
cooldownMs: number;
minXp: number;
maxXp: number;
};
};
economy: {
daily: {
amount: string | number;
streakBonus: string | number;
weeklyBonus: string | number;
cooldownMs: number;
};
transfers: {
allowSelfTransfer: boolean;
minAmount: string | number;
};
exam: {
multMin: number;
multMax: number;
};
};
inventory: {
maxStackSize: string | number;
maxSlots: number;
};
lootdrop: {
activityWindowMs: number;
minMessages: number;
spawnChance: number;
cooldownMs: number;
reward: {
min: number;
max: number;
currency: string;
};
};
trivia: {
entryFee: string | number;
rewardMultiplier: number;
timeoutSeconds: number;
cooldownMs: number;
categories: number[];
difficulty: 'easy' | 'medium' | 'hard' | 'random';
};
moderation: {
prune: {
maxAmount: number;
confirmThreshold: number;
batchSize: number;
batchDelayMs: number;
};
};
commands: Record<string, boolean>;
system: Record<string, unknown>;
}
async function migrateGameSettingsToDatabase() {
console.log("🎮 Migrating game settings to database...\n");
const existing = await gameSettingsService.getSettings(false);
if (existing) {
console.log("Game settings already exist in database:");
console.log(JSON.stringify(existing, null, 2));
console.log("\nSkipping migration. Delete existing settings first if you want to re-migrate.");
return;
}
if (!existsSync(configPath)) {
console.log("No config.json file found. Creating default settings...");
await gameSettingsService.upsertSettings(gameSettingsService.getDefaults());
console.log("✅ Default game settings created in database.");
return;
}
const raw = readFileSync(configPath, 'utf-8');
const fileConfig: FileConfig = JSON.parse(raw);
await gameSettingsService.upsertSettings({
leveling: fileConfig.leveling,
economy: {
daily: {
amount: String(fileConfig.economy.daily.amount),
streakBonus: String(fileConfig.economy.daily.streakBonus),
weeklyBonus: String(fileConfig.economy.daily.weeklyBonus ?? 50),
cooldownMs: fileConfig.economy.daily.cooldownMs,
},
transfers: {
allowSelfTransfer: fileConfig.economy.transfers.allowSelfTransfer,
minAmount: String(fileConfig.economy.transfers.minAmount),
},
exam: fileConfig.economy.exam,
},
inventory: {
maxStackSize: String(fileConfig.inventory.maxStackSize),
maxSlots: fileConfig.inventory.maxSlots,
},
lootdrop: fileConfig.lootdrop,
trivia: {
...fileConfig.trivia,
entryFee: String(fileConfig.trivia.entryFee),
},
moderation: fileConfig.moderation,
commands: fileConfig.commands ?? {},
system: fileConfig.system ?? {},
});
console.log("✅ Game settings migrated to database!");
console.log("\nGame-wide settings are now stored in the database.");
console.log("The config.json file can be safely deleted after verification.");
}
migrateGameSettingsToDatabase()
.then(() => process.exit(0))
.catch((error) => {
console.error("Migration failed:", error);
process.exit(1);
});