feat: character list

This commit is contained in:
2026-03-22 05:30:48 +07:00 Unverified
parent db2de4868e
commit 39d21ef9ba
9 changed files with 313 additions and 11 deletions
+42
View File
@@ -0,0 +1,42 @@
import { join } from "node:path";
import { $, MaybePromise, write } from "bun";
import { createLogger } from "@/lib/logger";
const log = createLogger();
fetch("https://gi.yatta.moe/api/v2/en/avatar")
.then((a) => a.json())
.then(async (a) => {
const avatars = Object.keys(a.data.items);
log`fetch complete, ${avatars.length} avatars`;
const map = Object.fromEntries(
(
await asyncMap(avatars, (a) =>
fetch(`https://gi.yatta.moe/api/v2/en/avatar/${a}`)
.then((c) => c.text())
.then((t) => {
try {
const c = JSON.parse(t);
log`${c.data.route}`;
return [a, c.data.other?.nameCard?.id] as const;
} catch {
log`${a}: ${t}`;
return [];
}
}),
)
).filter((e) => e[1]),
);
log`crawling complete`;
const target = join(__dirname, "../src/lib/namecards.ts");
await write(
target,
`// GENERATED BY util/genNamecardRelation\n\nexport const CharacterNamecardMap: Record<string, number> = ${JSON.stringify(map)}`,
);
await $`bun biome format ${target} --fix`;
});
async function asyncMap<S, R>(arr: S[], fn: (a: S) => MaybePromise<R>) {
const res: R[] = [];
for (const ent of arr) res.push(await fn(ent));
return res;
}