mirror of
				https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web.git
				synced 2025-10-25 19:33:42 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			78 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 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();
 |