import fetch from "node-fetch"; import fs from "fs/promises"; const RAW_FILE_URL = "https://raw.githubusercontent.com/"; const MIRRORF_FILE_URL = "http://raw.fgit.ml/"; const RAW_CN_URL = "PlexPt/awesome-chatgpt-prompts-zh/main/prompts-zh.json"; const CN_URL = MIRRORF_FILE_URL + RAW_CN_URL; const RAW_EN_URL = "f/awesome-chatgpt-prompts/main/prompts.csv"; const EN_URL = MIRRORF_FILE_URL + RAW_EN_URL; const FILE = "./public/prompts.json"; const ignoreWords = ["涩涩", "魅魔"]; const timeoutPromise = (timeout) => { return new Promise((resolve, reject) => { setTimeout(() => { reject(new Error("Request timeout")); }, timeout); }); }; async function fetchCN() { console.log("[Fetch] fetching cn prompts..."); try { const response = await Promise.race([fetch(CN_URL), timeoutPromise(5000)]); const raw = await response.json(); return raw .map((v) => [v.act, v.prompt]) .filter( (v) => v[0] && v[1] && ignoreWords.every((w) => !v[0].includes(w) && !v[1].includes(w)), ); } catch (error) { console.error("[Fetch] failed to fetch cn prompts", error); return []; } } async function fetchEN() { console.log("[Fetch] fetching en prompts..."); try { // const raw = await (await fetch(EN_URL)).text(); const response = await Promise.race([fetch(EN_URL), timeoutPromise(5000)]); const raw = await response.text(); return raw .split("\n") .slice(1) .map((v) => v .split('","') .map((v) => v.replace(/^"|"$/g, "").replaceAll('""', '"')) .filter((v) => v[0] && v[1]), ); } catch (error) { console.error("[Fetch] failed to fetch en prompts", error); return []; } } async function main() { Promise.all([fetchCN(), fetchEN()]) .then(([cn, en]) => { fs.writeFile(FILE, JSON.stringify({ cn, en })); }) .catch((e) => { console.error("[Fetch] failed to fetch prompts"); fs.writeFile(FILE, JSON.stringify({ cn: [], en: [] })); }) .finally(() => { console.log("[Fetch] saved to " + FILE); }); } main();