You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
	
	
		
			99 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			JavaScript
		
	
		
		
			
		
	
	
			99 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			JavaScript
		
	
| 
											9 months ago
										 | 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_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 = ["涩涩", "魅魔", "澀澀"]; | ||
|  | 
 | ||
|  | 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 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(); |