Files
zhuiguang-ai/scripts/sync-new-passersby.mjs

101 lines
2.8 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 把新加的 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());