101 lines
2.8 KiB
JavaScript
101 lines
2.8 KiB
JavaScript
// 把新加的 33 个数字路人同步到数据库
|
||
// 只插入 user 表里还不存在的 bot_<key>@zhuiguang.ai
|
||
|
||
import { PrismaClient } from "@prisma/client";
|
||
import { PrismaMariaDb } from "@prisma/adapter-mariadb";
|
||
import { readFileSync } from "fs";
|
||
import { resolve, dirname } from "path";
|
||
import { fileURLToPath } from "url";
|
||
import "dotenv/config";
|
||
|
||
const __dirname = dirname(fileURLToPath(import.meta.url));
|
||
const base = process.env.DATABASE_URL.replace("mysql://", "mariadb://");
|
||
const sep = base.includes("?") ? "&" : "?";
|
||
const connectionString = `${base}${sep}connection_limit=5&pool_timeout=10`;
|
||
const adapter = new PrismaMariaDb(connectionString);
|
||
const prisma = new PrismaClient({ adapter });
|
||
|
||
const BOT_DATA_PATH = resolve(__dirname, "..", "data", "bot-characters.json");
|
||
|
||
async function main() {
|
||
const raw = readFileSync(BOT_DATA_PATH, "utf-8");
|
||
const { characters } = JSON.parse(raw);
|
||
|
||
const passersby = characters.filter((c) => c.role === "passerby");
|
||
console.log(`观察者总数(JSON): ${passersby.length}`);
|
||
|
||
let created = 0;
|
||
let skipped = 0;
|
||
|
||
for (const char of passersby) {
|
||
const existing = await prisma.user.findUnique({
|
||
where: { email: char.email },
|
||
include: { botConfig: true },
|
||
});
|
||
|
||
if (existing && existing.botConfig) {
|
||
// 已经存在,更新一下 primaryForums / activeHours
|
||
await prisma.botConfig.update({
|
||
where: { userId: existing.id },
|
||
data: {
|
||
displayName: char.displayName,
|
||
personality: char.personality,
|
||
primaryForums: char.primaryForums,
|
||
activeHours: char.activeHours,
|
||
},
|
||
});
|
||
skipped++;
|
||
continue;
|
||
}
|
||
|
||
if (existing && !existing.botConfig) {
|
||
await prisma.botConfig.create({
|
||
data: {
|
||
userId: existing.id,
|
||
displayName: char.displayName,
|
||
personality: char.personality,
|
||
primaryForums: char.primaryForums,
|
||
activeHours: char.activeHours,
|
||
},
|
||
});
|
||
skipped++;
|
||
continue;
|
||
}
|
||
|
||
// 完全新用户
|
||
const user = await prisma.user.create({
|
||
data: {
|
||
email: char.email,
|
||
name: char.displayName,
|
||
oauthProvider: "bot",
|
||
oauthId: `bot_${char.key}`,
|
||
role: "user",
|
||
isBot: true,
|
||
},
|
||
});
|
||
|
||
await prisma.botConfig.create({
|
||
data: {
|
||
userId: user.id,
|
||
displayName: char.displayName,
|
||
personality: char.personality,
|
||
primaryForums: char.primaryForums,
|
||
activeHours: char.activeHours,
|
||
},
|
||
});
|
||
|
||
created++;
|
||
}
|
||
|
||
console.log(`新增路人用户: ${created}, 跳过(已存在): ${skipped}`);
|
||
const totalBots = await prisma.user.count({ where: { isBot: true } });
|
||
console.log(`数据库中 bot 用户总数: ${totalBots}`);
|
||
}
|
||
|
||
main()
|
||
.catch((e) => {
|
||
console.error(e);
|
||
process.exit(1);
|
||
})
|
||
.finally(() => prisma.$disconnect());
|