지금까지 내용 커밋

This commit is contained in:
2026-04-08 12:59:45 +09:00
commit b0dae31cb9
68 changed files with 12083 additions and 0 deletions

117
bot/src/utils/Database.ts Normal file
View File

@@ -0,0 +1,117 @@
import Database from "better-sqlite3";
import { Config } from "./Config";
import { join } from "node:path";
import { readFileSync } from "node:fs";
import { GuildRow, GuildType } from "../../db/db";
import { Logger } from "./Logger";
const database = new Database(Config.dbPath);
const schemaPath = join(process.cwd(), "db/schema.sql");
const schema = readFileSync(schemaPath, "utf-8");
database.exec(schema);
Logger.ready("DB 활성화!");
const stmt = {
guild: {
// 전체
all: database.prepare("SELECT * FROM guilds"),
// 가져오기
get: database.prepare("SELECT * FROM guilds WHERE ID = ?"),
// 추가
insert: (data: GuildRow) => {
const keys = Object.keys(data);
if (keys.length === 0) throw new Error("insert: 키1개는 있어야함");
return database.prepare(`INSERT INTO guilds (${
keys.map(k => `"${k}"`).join(", ")
}) VALUES (${
keys.map(k => `@${k}`).join(", ")
})`).run(data);
},
// 수정
update: (data: GuildRow) => {
const keys = Object.keys(data).filter(k => k !== "id");
if (keys.length === 0) throw new Error("update: 키1개는 있어야함");
return database.prepare(`UPDATE guilds SET ${
keys.map(k => `${k} = @${k}`).join(", ")
} WHERE id = @id`).run(data);
},
},
// user: {
// // 가져오기
// get: database.prepare("SELECT * FROM users WHERE guild_id = ? AND id = ?"),
// // 추가
// insert: (data: UserType) => {
// const keys = Object.keys(data);
// if (keys.length === 0) throw new Error("insert: 키1개는 있어야함");
// return database.prepare(`INSERT INTO users (${
// keys.map(k => `"${k}"`).join(", ")
// }) VALUES (${
// keys.map(k => `@${k}`).join(", ")
// })`).run(data);
// },
// // 수정
// update: (data: UserType) => {
// const keys = Object.keys(data).filter(k => k !== "guild_id" && k !== "id");
// if (keys.length === 0) throw new Error("update: 키1개는 있어야함");
// return database.prepare(`UPDATE users SET ${
// keys.map(k => `${k} = @${k}`).join(", ")
// } WHERE guild_id = @guild_id AND id = @id`).run(data);
// },
// },
};
export const DB = {
guild: {
all() {
return stmt.guild.all.all() as GuildType[];
},
get(id: string) {
const row = stmt.guild.get.get(id) as GuildRow | undefined;
if (!row) return undefined;
return { ...row, options: JSON.parse(row.options) } as GuildType;
},
set(data: GuildType) {
try {
stmt.guild.insert({ ...data, options: JSON.stringify(data.options) });
return true;
} catch (err) {
Logger.error(String(err));
return false;
}
},
update(data: GuildType) {
try {
stmt.guild.update({ ...data, options: JSON.stringify(data.options) });
return true;
} catch (err) {
Logger.error(String(err));
return false;
}
},
},
// user: {
// get(guildId: string, id: string) {
// return stmt.user.get.get(guildId, id) as UserType | undefined;
// },
// set(data: UserType) {
// try {
// stmt.user.insert(data);
// return true;
// } catch (err) {
// Logger.error(String(err));
// return false;
// }
// },
// update(data: UserType) {
// try {
// stmt.user.update(data);
// return true;
// } catch (err) {
// Logger.error(String(err));
// return false;
// }
// },
// },
};