bang.js (2059B)
1 const custom = require("./bangs/custom.js") 2 const tech = require("./bangs/tech.js") 3 const multimedia = require("./bangs/multimedia.js") 4 const entertainment = require("./bangs/entertainment.js") 5 const research = require("./bangs/research.js") 6 const services = require("./bangs/services.js") 7 const news = require("./bangs/news.js") 8 const shopping = require("./bangs/shopping.js") 9 10 const bangs = [ 11 ...custom.bangs, 12 ...tech.bangs, 13 ...multimedia.bangs, 14 ...entertainment.bangs, 15 ...research.bangs, 16 ...services.bangs, 17 ...news.bangs, 18 ...shopping.bangs, 19 ]; 20 21 /* 22 // NEW 23 bangs = [].concat([ 24 { 25 // default 26 d: "html.duckduckgo.com", 27 // bang 28 b: "dh", 29 // url 30 u: "https://html.duckduckgo.com/html/?q={{{s}}}" 31 }, 32 ], bangs); 33 */ 34 35 // const LS_DEFAULT_BANG = "ddg"; // localStorage.getItem("default-bang") ?? "g"; 36 const LS_DEFAULT_BANG = "g"; 37 const defaultBang = bangs.find((b) => b.b === LS_DEFAULT_BANG); 38 39 function getBangredirectUrl(req) { 40 const query = req.query.q.trim() ?? ""; 41 if (!query) { return; } 42 43 const match = query.match(/!(\S+)/i); 44 45 const bangCandidate = match?.[1]?.toLowerCase(); 46 const selectedBang = bangs.find((b) => b.b === bangCandidate) ?? defaultBang; 47 48 // Remove the first bang from the query 49 const cleanQuery = query.replace(/!\S+\s*/i, "").trim(); 50 51 // If the query is just `!gh`, use `github.com` instead of `github.com/search?q=` 52 if (cleanQuery === "") 53 return selectedBang ? `https://${selectedBang.d}` : null; 54 55 // Format of the url is: 56 // https://www.google.com/search?q={{{s}}} 57 const searchUrl = selectedBang?.u.replace( 58 "{{{s}}}", 59 // Replace %2F with / to fix formats like "!ghr+t3dotgg/unduck" 60 encodeURIComponent(cleanQuery).replace(/%2F/g, "/"), 61 ); 62 if (!searchUrl) return null; 63 64 return searchUrl; 65 } 66 67 function redirect(req, res) { 68 const searchUrl = getBangredirectUrl(req); 69 if (!searchUrl) return; 70 res.redirect(searchUrl); 71 } 72 73 74 module.exports = { 75 redirect 76 };