// 把新加的 33 个数字路人同步到数据库 // 只插入 user 表里还不存在的 bot_@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());