// ==UserScript== // @name chatGPT tools Plus(修改版) // @namespace http://tampermonkey.net/ // @version 1.1.5 // @description Google、必应、百度、Yandex、360搜索、谷歌镜像、Fsou侧边栏Chat搜索,即刻体验AI,无需翻墙,无需注册,无需等待! // @author 夜雨 // @match https://cn.bing.com/* // @match https://www.bing.com/* // @match https://chat.openai.com/chat // @match https://www.google.com/* // @match https://www.so.com/s* // @match http*://www.baidu.com/s* // @match https://www.baidu.com* // @match https://m.baidu.com/* // @match http*://yandex.ru/search* // @match http*://yandex.com/search* // @match https://search.ecnu.cf/search* // @match https://search.aust.cf/search* // @match https://search.*.cf/search* // @match https://fsoufsou.com/search* // @match https://www.google.com.hk/* // @include /^https:\/\/www\.baidu\.com\/s\?wd.*$/ // @icon https://www.google.com/s2/favicons?sz=64&domain=openai.com // @grant GM_xmlhttpRequest // @grant GM_addStyle // @run-at document-end // @require https://cdn.staticfile.org/jquery/3.4.0/jquery.min.js // @require https://cdn.staticfile.org/jquery-cookie/1.4.1/jquery.cookie.min.js // @require https://cdn.jsdelivr.net/npm/marked@4.2.3/marked.min.js // @require https://cdnjs.cloudflare.com/ajax/libs/markdown-it/13.0.1/markdown-it.min.js // @require https://unpkg.com/axios/dist/axios.min.js // @connect api.forchange.cn // @connect wenxin110.top // @connect chatforai.net // @license MIT // @resource css https://cdnjs.cloudflare.com/ajax/libs/github-markdown-css/5.1.0/github-markdown.css // @resource css https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.7.0/styles/default.min.css // @require https://cdn.jsdelivr.net/npm/showdown@2.1.0/dist/showdown.min.js // @require https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.7.0/highlight.min.js // @require https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js // @downloadURL none // ==/UserScript== (function() { 'use strict'; //enc-start async function digestMessage(r) { const hash = CryptoJS.SHA256(r); return hash.toString(CryptoJS.enc.Hex); } const generateSignature = async r => { const { t: e, m: t } = r; const n = {}.PUBLIC_SECRET_KEY; const a = `${e}:${t}:${n}`; return await digestMessage(a); }; //enc-end //start function addChatBtn() { let mybtn = ``; $(".bg.s_btn_wr").after(mybtn) document.getElementById("mybtn").addEventListener("click", function() { console.log("reloadPage") if (window.location.href.indexOf("https:\/\/www.baidu.com\/s") > -1) { GM_add_box_style(2) addBothStyle() keyEvent() appendBox(2).then((res) => { pivElemAddEventAndValue(2) }) } }) } function isMobile() { var userAgentInfo = navigator.userAgent.toLowerCase(); var mobileAgents = ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"]; var mobile_flag = false; //根据userAgent判断是否是手机 for (let v = 0; v < mobileAgents.length; v++) { if (userAgentInfo.indexOf(mobileAgents[v].toLowerCase()) > -1) { mobile_flag = true; break; } } return mobile_flag; } //end //顶级配置 var your_qus var abortXml let regx =/search.*?\.cf/g; if (window.location.href.indexOf("bing.com") > -1) { GM_add_box_style(0) addBothStyle() keyEvent() appendBox(0).then((res) => { pivElemAddEventAndValue(0) }) //linkToBing_beautification_script() } if (window.location.href.indexOf("www.google.com") > -1 || window.location.href.match(regx)) { GM_add_box_style(1) addBothStyle() keyEvent() appendBox(1).then((res) => { pivElemAddEventAndValue(1) }) } if (window.location.href.indexOf("https:\/\/www.baidu.com\/s") > -1 && !isMobile()) { GM_add_box_style(2) addBothStyle() keyEvent() appendBox(2).then((res) => { pivElemAddEventAndValue(2) }) } else if (window.location.href.indexOf("https:\/\/m.baidu.com") > -1 || (window.location.href.indexOf("baidu.com") > -1 && isMobile())) {//手机百度 GM_add_box_style(2) addBothStyle() keyEvent() appendBox(6).then((res) => { pivElemAddEventAndValue(2) }) } //俄罗斯yandex if (window.location.href.indexOf("yandex.ru\/search") > -1 || window.location.href.indexOf("yandex.com\/search") > -1) { GM_add_box_style(1) addBothStyle() keyEvent() appendBox(3).then((res) => { pivElemAddEventAndValue(3) }) } //360so if (window.location.href.indexOf("so.com\/s") > -1) { GM_add_box_style(1) addBothStyle() keyEvent() appendBox(4).then((res) => { pivElemAddEventAndValue(4) }) } //fsoufsou if (window.location.href.indexOf("fsoufsou.com\/search") > -1) { setTimeout(()=>{ GM_add_box_style(1) addBothStyle() keyEvent() appendBox(5).then((res) => { pivElemAddEventAndValue(5) }) },3000) } //顶级函数 function uuid() { //uuid 产生 var s = []; var hexDigits = "0123456789abcdef"; for (var i = 0; i < 36; i++) { s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1); } s[14] = "4"; // bits 12-15 of the time_hi_and_version field to 0010 s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1); // bits 6-7 of the clock_seq_hi_and_reserved to 01 s[8] = s[13] = s[18] = s[23] = "-"; var uuid = s.join(""); return uuid; } function GM_add_box_style(case_web) { switch (case_web) { case 0: //bing GM_addStyle(` #gptAnswer{ margin: 15px; border-top: solid; border-bottom: solid; } #gptInput{ width:74%; border-radius: 4px; } #gptInputBox{ display: flex; justify-content: space-around; } #button_GPT:hover{ background:#ffffffcc; } #gptDiv{ border-radius: 8px; padding: 10px; margin-bottom: 9px; width:452px; translate:-20px; background:#ffffffcc; backdrop-filter: blur(5px); display: flex; flex-direction: column; } #button_GPT{ } #button_GPT{ background: transparent; border-radius: 4px; } #gptCueBox{ translate: 3px; } p{white-space: pre-line} `) break; case 1: //google GM_addStyle(` #gptAnswer{ margin: 15px; border-top: solid; border-bottom: solid; } #gptInput{ border-radius: 4px; width: 68%; } #button_GPT:hover{ background:#dcdcdccc; } #gptDiv{ width:452px; flex: 1; display: flex; flex-direction: column; height: fit-content; } #gptInputBox{ display:flex; justify-content: space-around; } #button_GPT{ background: transparent; border-radius: 3px; font-size: 14px; } #gptStatus{ margin-left: 7px; } p{white-space: pre-line} `) break; //baidu case 2: GM_addStyle(` #gptAnswer{ margin: 15px; border-top: solid; border-bottom: solid; } #gptInput{ border-radius: 4px; width: 68%; } #button_GPT:hover{ background:#4e6ef2; } #gptDiv{ width:452px; flex: 1; display: flex; flex-direction: column; height: fit-content; } #gptInputBox{ display:flex; justify-content: space-around; } #button_GPT{ background: #4460d4; border-radius: 3px; font-size: 14px; } #gptStatus{ margin-left: 7px; } p{white-space: pre-line} `) break; default: alert("参数没设定") } } function do_it() { let finalResult let normalArray let nowResult document.getElementById('gptAnswer').innerHTML = `
加载中
`; const now = Date.now(); console.log(now); generateSignature({ t: now, m: your_qus || "" }).then(sign => { console.log(sign) abortXml = GM_xmlhttpRequest({ method: "POST", //url: "https://chat.openai.com/backend-api/conversation", url: "https://chatforai.net/api/generate", headers: { "Content-Type": "application/json" // Authorization: `Bearer `, }, data: JSON.stringify({ messages: [{ role: "user", content: your_qus }], time: now, pass: null, sign: sign, key: "", usage: 0 }), // data: JSON.stringify({ // prompt: "Human:"+your_qus+"\nAI:", // tokensLength: your_qus.length // }), onload: function(res) { if (res.status === 200) { console.log('成功....') console.log(res.response) let rest = res.response //console.log(rest.choices[0].text.replaceAll("\n","
")) try { log(mdConverter(rest.replaceAll(/\\n+/g, "\n"))) document.getElementById('gptAnswer').innerHTML = `${mdConverter(rest.replaceAll(/\\n+/g,"\n"))}` } catch (e) { //TODO handle the exception document.getElementById('gptAnswer').innerHTML = `${rest}` } for (let i = 0; i <= document.getElementsByTagName("code").length - 1; i++) { document.getElementsByTagName("code")[i].setAttribute("class", "language-javascript hljs"); hljs.highlightAll() //奇怪,为什么不行 } } else { console.log('失败') console.log(res) document.getElementById('gptAnswer').innerHTML = '访问失败了' } }, responseType: "application/json;charset=UTF-8", onprogress: function(msg) { //console.log(msg) //Todo }, onerror: function(err) { document.getElementById('gptAnswer').innerHTML = `
some err happends,errinfo :
${err.messages}
` }, ontimeout: function(err) { document.getElementById('gptAnswer').innerHTML = `
Opps!TimeOut,Please try again,errinfo:
${err.messages}
` } }); }); } function creatBox() { return new Promise((resolve) => { var divE = document.createElement('div'); var divId = document.createAttribute("id"); //创建属性 divId.value = 'gptDiv'; //设置属性值 divE.setAttributeNode(divId); //给div添加属性 var pE = document.createElement('p'); var pClass = document.createAttribute('class'); pClass.value = 'textClass'; pE.setAttributeNode(pClass) var pText = document.createTextNode("chatGPT tools Plus 已启动"); pE.appendChild(pText); divE.appendChild(pE); divE.innerHTML = `

  openAI 已就绪,请输入你的问题

chatGPT tools Plus 已启动

` resolve(divE) }) } async function pivElemAddEventAndValue(append_case) { var search_content if (append_case === 5) { search_content = document.getElementById("search-input").value } if (append_case === 4) { search_content = document.getElementById("keyword").value } if (append_case === 3) { search_content = document.querySelectorAll("input")[0].value } if (append_case === 2) { search_content = document.getElementById('kw').value } if (append_case === 1) { search_content = document.querySelector( "#tsf > div:nth-child(1) > div.A8SBwf > div.RNNXgb > div > div.a4bIc > input:nth-child(3)" ).value } if (append_case === 0) { search_content = document.getElementsByClassName('b_searchbox')[0].value } document.getElementById("gptInput").value = search_content document.getElementById('button_GPT').addEventListener('click', () => { your_qus = document.getElementById("gptInput").value do_it() }) } async function appendBox(append_case) { return new Promise((resolve, reject) => { creatBox().then((divE) => { switch (append_case) { case 0: //bing if (divE) { document.getElementById('b_context').prepend(divE) } break; case 1: //google if (document.getElementsByClassName('TQc1id ')[0]) { document.getElementsByClassName('TQc1id ')[0].prepend(divE); } else { document.getElementById("rcnt").appendChild(divE); } break; case 2://baidu if (document.getElementById('content_right')) { document.getElementById('content_right').prepend(divE) } break; case 3://yandex if (document.getElementById('search-result-aside')) { document.getElementById('search-result-aside').prepend(divE) } break; case 4://360 if (document.getElementById('side')) { document.getElementById('side').prepend(divE) } break; case 5://fsoufsou let frow = document.querySelectorAll(".flex-row")[2] if(frow.children.length == 2){ frow.children.item(1).prepend(divE) }else{ frow.innerHTML = frow.innerHTML + `
${divE.innerHTML}
` } break; case 6://手机百度 if (document.getElementById('page-bd')) { document.getElementById('page-bd').prepend(divE) //调整css try{ document.querySelector("#gptDiv").style.setProperty("width","100%") document.querySelector("#gptInput").setAttribute("class","se-input adjust-input") }catch(e){ //TODO handle the exception } setTimeout(()=>{ document.getElementById("button_GPT").click();//自动点击 },1500) } break; default: if (divE) { console.log(`啥情况${divE}`) } } }).catch((err) => { throw new Error(err) }) resolve("finished") }) } //焦点函数 function isBlur() { var myInput = document.getElementById('gptInput'); if (myInput == document.activeElement) { return 1 } else { return 0 } } function keyEvent() { document.onkeydown = function(e) { var keyNum = window.event ? e.keyCode : e.which; if (13 == keyNum) { if (isBlur()) { document.getElementById('button_GPT').click() } else { console.log("失焦不执行") } } } } function addBothStyle() { GM_addStyle(` #dot{ height: 4px; width: 4px; display: inline-block; border-radius: 2px; animation: dotting 2.4s infinite step-start; } @keyframes dotting { 25%{ box-shadow: 4px 0 0 #71777D; } 50%{ box-shadow: 4px 0 0 #71777D ,14px 0 0 #71777D; } 75%{ box-shadow: 4px 0 0 #71777D ,14px 0 0 #71777D, 24px 0 0 #71777D; } } pre{ overflow-x: scroll; overflow-y: hidden; background: #fffaec; border-radius: 4px; padding: 14px 3px; } pre::-webkit-scrollbar { } `) } function creatBox_and_addEventlis(append_case) { var divE = document.createElement('div'); var divId = document.createAttribute("id"); //创建属性 divId.value = 'gptDiv'; //设置属性值 divE.setAttributeNode(divId); //给div添加属性 var pE = document.createElement('p'); var pClass = document.createAttribute('class'); pClass.value = 'textClass'; pE.setAttributeNode(pClass) var pText = document.createTextNode("chatGPT tools Plus 已启动"); pE.appendChild(pText); divE.appendChild(pE); switch (append_case) { case 0: if (divE) { document.getElementById('b_context').prepend(divE) } break; case 1: if (document.getElementsByClassName('TQc1id ')[0]) { document.getElementsByClassName('TQc1id ')[0].prepend(divE); } else { document.getElementById("rcnt").appendChild(divE); } break; case 2: if (document.getElementById('content_right')) { document.getElementById('content_right').prepend(divE) } break; default: if (divE) { document.getElementById('b_context').prepend(divE) } } document.getElementById('gptDiv').innerHTML = `

  openAI已就绪,请输入你的问题

chatGPT tools Plus 免费版已启动

` var search_content if (append_case === 2) { search_content = document.getElementById('kw').value } if (append_case === 1) { search_content = document.querySelector( "#tsf > div:nth-child(1) > div.A8SBwf > div.RNNXgb > div > div.a4bIc > input:nth-child(3)") .value } if (append_case === 0) { search_content = document.getElementsByClassName('b_searchbox')[0].value } document.getElementById("gptInput").value = search_content document.getElementById('button_GPT').addEventListener('click', () => { your_qus = document.getElementById("gptInput").value do_it() }) } function log(a) { console.log(a) } function Uint8ArrayToString(fileData) { var dataString = ""; for (var i = 0; i < fileData.length; i++) { dataString += String.fromCharCode(fileData[i]); } return dataString } function decodeUnicode(str) { str = str.replace(/\\/g, "%"); //转换中文 str = unescape(str); //将其他受影响的转换回原来 str = str.replace(/%/g, "\\"); //对网址的链接进行处理 str = str.replace(/\\/g, ""); return str; } function mdConverter(rawData) { var converter = new showdown.Converter(); //增加拓展table converter.setOption('tables', true); //启用表格选项。从showdown 1.2.0版开始,表支持已作为可选功能移入核心拓展,showdown.table.min.js扩展已被弃用 var view = converter.makeHtml(rawData); return view; } //实时监控百度,360按钮消失 setInterval(()=>{ //百度 if (window.location.href.indexOf("https:\/\/www.baidu.com\/s") > -1 && !isMobile()) { if(!document.getElementById("gptDiv") && document.getElementById("mybtn")){ document.getElementById("mybtn").click() } if(!document.getElementById("gptDiv") && !document.getElementById("mybtn")){ addChatBtn(); document.getElementById("mybtn").click() } } //360 注意请如果你在360相关浏览器上使用插件。360搜索将不会生效,因为已被浏览器禁用在so.com网址上使用 if (window.location.href.indexOf("so.com\/s") > -1 && !document.getElementById("gptDiv")) { GM_add_box_style(1) addBothStyle() keyEvent() appendBox(4).then((res) => { pivElemAddEventAndValue(4) }) } },2000) })();