全项目扫描修复: Docker数据卷修复+安全requireAdmin+12页SEO+API白名单+脚本超时+常量提取+假数据删除
This commit is contained in:
@@ -0,0 +1,100 @@
|
||||
// 把新加的 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());
|
||||
Reference in New Issue
Block a user