import fs from 'node:fs/promises'; import fetch from 'node-fetch'; 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_TW_URL = 'PlexPt/awesome-chatgpt-prompts-zh/main/prompts-zh-TW.json'; const TW_URL = MIRRORF_FILE_URL + RAW_TW_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 = ['涩涩', '魅魔', '澀澀']; function 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 fetchTW() { console.log('[Fetch] fetching tw prompts...'); try { const response = await Promise.race([fetch(TW_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 tw 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(), fetchTW(), fetchEN()]) .then(([cn, tw, en]) => { fs.writeFile(FILE, JSON.stringify({ cn, tw, en })); }) .catch((e) => { console.error('[Fetch] failed to fetch prompts'); fs.writeFile(FILE, JSON.stringify({ cn: [], tw: [], en: [] })); }) .finally(() => { console.log(`[Fetch] saved to ${FILE}`); }); } main();