mirror of
				https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web.git
				synced 2025-11-04 16:23:41 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			99 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			99 lines
		
	
	
		
			2.7 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_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();
 |