99 lines
2.7 KiB
JavaScript
99 lines
2.7 KiB
JavaScript
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();
|