🎉 欢迎访问GreasyFork.Org 镜像站!本镜像站由公众号【爱吃馍】搭建,用于分享脚本。联系邮箱📮

Greasy fork 爱吃馍镜像

慕课题目搜搜搜

超星慕课题库聚合查询小工具,【快捷查询】【高级搜索模式】【OCR识别】

θα χρειαστεί να εγκαταστήσετε μια επέκταση όπως το Tampermonkey, το Greasemonkey ή το Violentmonkey για να εγκαταστήσετε αυτόν τον κώδικα.

You will need to install an extension such as Tampermonkey to install this script.

θα χρειαστεί να εγκαταστήσετε μια επέκταση όπως το Tampermonkey ή το Violentmonkey για να εγκαταστήσετε αυτόν τον κώδικα.

θα χρειαστεί να εγκαταστήσετε μια επέκταση όπως το Tampermonkey ή το Userscripts για να εγκαταστήσετε αυτόν τον κώδικα.

You will need to install an extension such as Tampermonkey to install this script.

Θα χρειαστεί να εγκαταστήσετε μια επέκταση διαχείρισης κώδικα χρήστη για να εγκαταστήσετε αυτόν τον κώδικα.

(Έχω ήδη έναν διαχειριστή κώδικα χρήστη, επιτρέψτε μου να τον εγκαταστήσω!)

🚀 安装遇到问题?关注公众号获取帮助

公众号二维码

扫码关注【爱吃馍】

回复【脚本】获取最新教程和防失联地址

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(Έχω ήδη έναν διαχειριστή στυλ χρήστη, επιτρέψτε μου να τον εγκαταστήσω!)

🚀 安装遇到问题?关注公众号获取帮助

公众号二维码

扫码关注【爱吃馍】

回复【脚本】获取最新教程和防失联地址

// ==UserScript==
// @name         慕课题目搜搜搜
// @namespace    http://tampermonkey.net/
// @version      1.5.4
// @description   超星慕课题库聚合查询小工具,【快捷查询】【高级搜索模式】【OCR识别】
// @author       Onion
// @match     https://www.icourse163.org/*
// @match     https://i.chaoxing.com/*
// @match     https://mooc2-ans.chaoxing.com/*
// @match     https://mooc1.chaoxing.com/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=icourse163.org
// @grant        GM_addStyle
// @grant        GM_xmlhttpRequest
// @grant        unsafeWindow
// @connect    cx.icodef.com
// @connect    huawei-cdn.lyck6.cn
// @connect    tk.enncy.cn
// @connect    web.baimiaoapp.com
// @connect    lyck6.cn
// @connect    cx.gocos.cn
// @connect    api.muketool.com
// @connect    43.143.249.139
// @run-at       document-start
// @license      MPL2.0
// ==/UserScript==
function mainTop() {

    'use strict';
    /////////全/////////局/////////变/////////量
    var ocrToken = new Object()
    var requestDst = new Array()
    var GM_abort = new Array()
    let ocrSumResults = ""
    let isCtrl=false
    let isAdvanced=false
    const document = unsafeWindow.document;
    const window = unsafeWindow

    //////////【配////////置////////区】//////////////
    var yzggToken = `ddMyyyPEhfHSzQBy`
    var enncyToken = ``
    ocrToken.cookie = ``
    ocrToken.xauthToken = ``
    ocrToken.xauthUuid = ``
    requestDst = [
        "cx.icodef.com",//yzgg
        "huawei-cdn.lyck6.cn",//万能1
        "lyck6.cn",//万能2
        "tk.enncy.cn",//enncy
        "cx.gocos.cn",//Ne-21
        "api.muketool.com",//山楂树1
        "api2.muketool.com",//山楂树2
        "43.143.249.139",//蛋炒饭
    ]
    //////【题/////////目/////////配////////置/////////区】//////
    let formedQues = ""
    let quesType = 0 //0:单选题 (必填) 1:多选题 2:判断题 (int)
    let quesWorkType = "zj" //zj:章节测验 zy:作业 ks:考试
    let quesOptions = new Array()
    let quesSrc = "https://mooc1.chaoxing.com/mycourse/studentstudy?chapterId=636516658&courseId=227751756&clazzid=61817745&cpi=169857532&enc=6431fbd689555ba100515caefc783235&mooc2=1&openc=0737a9a35dcb1f96af6ce927f5cdd739"
    quesOptions = [
        "发展生产力",
        "以经济建设为中心",
        "走向共同富裕",
        "全面建成小康社会"
    ]

    ///////////开///////////源///////////区////////////
    let namespaceURL = [
        "https://greasyfork.org/zh-CN/scripts/451356-%E4%B8%87%E8%83%BD-%E5%85%A8%E5%B9%B3%E5%8F%B0%E8%87%AA%E5%8A%A8%E7%AD%94%E9%A2%98%E8%84%9A%E6%9C%AC",
        "https://afdian.net/a/enncy",
        "https://scriptcat.org/",
        "https://scriptcat.org/script-show-page/10",
        "https://scriptcat.org/script-show-page/639",
        "https://greasyfork.org/zh-CN/scripts/450614-%E5%85%A8%E5%B9%B3%E5%8F%B0%E8%87%AA%E5%8A%A8%E7%AD%94%E9%A2%98%E8%84%9A%E6%9C%AC-%E8%B6%85%E6%98%9F%E5%AD%A6%E4%B9%A0%E9%80%9A-%E6%99%BA%E6%85%A7%E6%A0%91-%E6%89%A7%E6%95%99%E4%BA%91-%E6%9B%B4%E6%96%B02022-11-09",
        "https://greasyfork.org/zh-CN/scripts/455607-%E8%B6%85%E6%98%9F%E5%AD%A6%E4%B9%A0%E9%80%9A%E5%B0%8F%E5%8A%A9%E6%89%8B-%E7%AD%94%E9%A2%98%E4%B8%93%E7%89%88/code",

    ]
    ////////////外//////////部//////////资///////源//////区////////////
    /*
// @require    https://cdn.bootcdn.net/ajax/libs/react/18.2.0/umd/react.production.min.js
// @require    https://cdn.bootcdn.net/ajax/libs/react-dom/18.2.0/umd/react-dom.production.min.js
// @require    https://unpkg.com/[email protected]/babel.min.js
    @react
*/
    function importReact() {
        return new Promise((resolve) => {
            let scriptReact = document.createElement('script');
            scriptReact.setAttribute('type', 'text/javascript');
            scriptReact.src = "https://cdn.bootcdn.net/ajax/libs/react/18.2.0/umd/react.production.min.js";
            document.documentElement.appendChild(scriptReact);
            let scriptReactDom = document.createElement('script');
            scriptReactDom.setAttribute('type', 'text/javascript');
            scriptReactDom.src = "https://cdn.bootcdn.net/ajax/libs/react-dom/18.2.0/umd/react-dom.production.min.js";
            document.documentElement.appendChild(scriptReactDom);
            resolve("import end")
        })
    }
    /*
    @react
    */
    /*
    babel

    let babelScript = document.createElement('script');
    babelScript.setAttribute('type', 'text/javascript');
    babelScript.src = "https://unpkg.com/[email protected]/babel.min.js";
    document.documentElement.appendChild(babelScript);
    /*
    babel
    */

    ////////////////////////////////////////////////////////////////////////////


    if (window.location.href.indexOf(".") > -1) {
        addBothStyle()
    }
    if (window.location.href.indexOf("www.icourse163.org") > -1) {
        createBox()
            .then((divE) => {
            return appendBox(0, divE)
        }).then(() => {
            //do Sth
        }).then(() => {
            //babelJsxAndRun()
            //   createBoxReact()  页面重写了React和Babel原型,先暂时使用原生添加,后续再来解决React冲突
            initBox()
            addBoxEvent()
            addMoveEvent()
            appendQuesEvent()
            addSearchEvent()
            pic2WordsEvent()
            keyEvent()
        })
    }
    if (window.location.href.indexOf("i.chaoxing.com/base") > -1) {
        doItBoth()
    }
    if (window.location.href.indexOf("mooc1.chaoxing.com/mycourse/studentstudy") > -1) {
        doItBoth()
    }
    function doItBoth() {
        importReact().then(() => {
            sleep(30).then(() => {
                createBox()
                    .then((divE) => {
                    return appendBox(0, divE)
                }).then(() => {
                    //
                }).then(() => {
                    //babelJsxAndRun()
                    createBoxReact()
                    initBox()
                    addBoxEvent()
                    addMoveEvent()
                    appendQuesEvent()
                    addSearchEvent()
                    pic2WordsEvent()
                    keyEvent()
                })
            })
        })
    }
    function createBoxJsx() {
        return `
        ReactDOM.render(<div>
  <div id="gptInputBox">
    <textarea id="gptInput" type="text" defaultValue={""} />
    <button id="button_GPT">搜一下</button>
  </div>
  <div id="gptCueBox">
    <div id="gptAnswer" className="markdown-body">
      <div id="gptAnswer_inner">慕课题目搜搜搜v1.5.4已启动</div>
      <div id="loadingBox">
        加载中
        <span className="dot" />
      </div>
      <div id="loadingBoxImg">
        图片转文字中,请稍等
        <span className="dot" />
      </div>
    </div>
  </div>
  <div id="gptSettingBox">
    <div id="moveIt">
      <svg
        t={1671455942102}
        className="icon"
        viewBox="0 0 1024 1024"
        version="1.1"
        xmlns="http://www.w3.org/2000/svg"
        p-id={2728}
        width={200}
        height={200}
      >
        <path
          d="M486.4 776.533333v-213.333333H247.466667v106.666667L85.333333 512l162.133334-162.133333V512h238.933333V247.466667H349.866667L512 85.333333l162.133333 162.133334h-132.266666V512h238.933333V349.866667L938.666667 512l-162.133334 162.133333v-106.666666h-238.933333v213.333333h132.266667L512 938.666667l-162.133333-162.133334h136.533333z"
          p-id={2729}
        />
      </svg>
    </div>
    <div id="spreadOrShrink">⇥</div>
  </div>
</div>, document.getElementById('gptDiv'))
`
    }
    function babelJsxAndRun() {
        let { code } = window.Babel.transform(createBoxJsx(), { presets: ['es2015', 'react'] });
        let functionReactJsx = new Function(code)
        functionReactJsx()
    }
    function createBoxReact() {
        return new Promise((resolve) => {
            ReactDOM.render( /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
                id: "gptInputBox"
            }, /*#__PURE__*/React.createElement("textarea", {
                id: "gptInput",
                type: "text",
                defaultValue: ""
            }), /*#__PURE__*/React.createElement("button", {
                id: "button_GPT"
            }, "\u641C\u4E00\u4E0B")), /*#__PURE__*/React.createElement("div", {
                id: "gptCueBox"
            }, /*#__PURE__*/React.createElement("div", {
                id: "gptAnswer",
                className: "markdown-body"
            }, /*#__PURE__*/React.createElement("div", {
                id: "gptAnswer_inner"
            }, "\u6155\u8BFE\u9898\u76EE\u641C\u641C\u641Cv1.2.1\u5DF2\u542F\u52A8"), /*#__PURE__*/React.createElement("div", {
                id: "loadingBox"
            }, "\u52A0\u8F7D\u4E2D", /*#__PURE__*/React.createElement("span", {
                className: "dot"
            })), /*#__PURE__*/React.createElement("div", {
                id: "loadingBoxImg"
            }, "\u56FE\u7247\u8F6C\u6587\u5B57\u4E2D,\u8BF7\u7A0D\u7B49", /*#__PURE__*/React.createElement("span", {
                className: "dot"
            })))), /*#__PURE__*/React.createElement("div", {
                id: "gptSettingBox"
            }, /*#__PURE__*/React.createElement("div", {
                id: "moveIt"
            }, /*#__PURE__*/React.createElement("svg", {
                t: 1671455942102,
                className: "icon",
                viewBox: "0 0 1024 1024",
                version: "1.1",
                xmlns: "http://www.w3.org/2000/svg",
                "p-id": 2728,
                width: 200,
                height: 200
            }, /*#__PURE__*/React.createElement("path", {
                d: "M486.4 776.533333v-213.333333H247.466667v106.666667L85.333333 512l162.133334-162.133333V512h238.933333V247.466667H349.866667L512 85.333333l162.133333 162.133334h-132.266666V512h238.933333V349.866667L938.666667 512l-162.133334 162.133333v-106.666666h-238.933333v213.333333h132.266667L512 938.666667l-162.133333-162.133334h136.533333z",
                "p-id": 2729
            }))), /*#__PURE__*/React.createElement("div", {
                id: "spreadOrShrink"
            }, "\u21E5"))), document.getElementById('gptDiv'));
            //ReactDOM.render( /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("h2", null, "Hello World")), document.getElementById('gptDiv'));
            resolve("createEnded")
        })
    }
    /*
                <div id="gptInputBox">
                   <textarea id="gptInput" type=text></textarea>
                   <button id="button_GPT">搜一下</button>
                </div>
                <div id=gptCueBox>
                    <div id="gptAnswer" class="markdown-body">
                        <div id="gptAnswer_inner">慕课题目搜搜搜v1.2.1已启动</div>
                        <div id="loadingBox">加载中<span class="dot"></span></div>
                        <div id="loadingBoxImg">图片转文字中,请稍等<span class="dot"></span></div>
                    </div>
                </div>
                <div id="gptSettingBox">
                    <div id="moveIt"><svg t="1671455942102" class="icon" viewBox="0 0 1024 1024" version="1.1"
                            xmlns="http://www.w3.org/2000/svg" p-id="2728" width="200" height="200">
                            <path
                                d="M486.4 776.533333v-213.333333H247.466667v106.666667L85.333333 512l162.133334-162.133333V512h238.933333V247.466667H349.866667L512 85.333333l162.133333 162.133334h-132.266666V512h238.933333V349.866667L938.666667 512l-162.133334 162.133333v-106.666666h-238.933333v213.333333h132.266667L512 938.666667l-162.133333-162.133334h136.533333z"
                                p-id="2729"></path>
                        </svg></div>
                    <div id="spreadOrShrink">⇥</div>
                </div>
*/

    function createBox() {
        return new Promise((resolve) => {
            var divE = document.createElement('div');
            var divId = document.createAttribute("id"); //创建属性
            divId.value = 'gptDiv'; //设置属性值
            divE.setAttributeNode(divId); //给div添加属性
            divE.innerHTML = `
            <div id="gptInputBox">
            <textarea id="gptInput" type=text></textarea>
            <button id="button_GPT">搜一下</button>
         </div>
         <div id=gptCueBox>
             <div id="gptAnswer" class="markdown-body">
                 <div id="gptAnswer_inner">慕课题目搜搜搜v1.2.1已启动</div>
                 <div id="loadingBox">加载中<span class="dot"></span></div>
                 <div id="loadingBoxImg">图片转文字中,请稍等<span class="dot"></span></div>
             </div>
         </div>
         <div id="gptSettingBox">
             <div id="moveIt"><svg t="1671455942102" class="icon" viewBox="0 0 1024 1024" version="1.1"
                     xmlns="http://www.w3.org/2000/svg" p-id="2728" width="200" height="200">
                     <path
                         d="M486.4 776.533333v-213.333333H247.466667v106.666667L85.333333 512l162.133334-162.133333V512h238.933333V247.466667H349.866667L512 85.333333l162.133333 162.133334h-132.266666V512h238.933333V349.866667L938.666667 512l-162.133334 162.133333v-106.666666h-238.933333v213.333333h132.266667L512 938.666667l-162.133333-162.133334h136.533333z"
                         p-id="2729"></path>
                 </svg></div>
             <div id="spreadOrShrink">⇥</div>
         </div>`
            resolve(divE)
        })
    }
    async function pivElemAddEventAndValue(append_case) {
        var search_content
        if (append_case === 3) {
            search_content = document.getElementById('q').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, divE) {
        return new Promise((resolve, reject) => {
            switch (append_case) {
                case 0: //bing
                    if (divE) {
                        document.body.prepend(divE)
                    }
                    break;
                case 1://google
                    if (document.getElementsByClassName('TQc1id ')[0]) {
                        document.getElementsByClassName('TQc1id ')[0].prepend(divE);
                    }
                    else {
                        document.getElementById("rcnt").appendChild(divE);
                    }
                    break;
                default:
                    if (divE) {
                        console.log(`啥情况${divE}`)
                    }
            }
            resolve("finished")
        })
    }
    function addBothStyle() {
        GM_addStyle(`
     b{
     font-weight: bold;
     }
     #moveIt{
     justify-content: right;
     display: flex;
     cursor: move;
}
 .icon{
     width: 100%;
     height: 100%;
}
 #gptSettingBox{
     display: flex;
     flex-direction: row;
     width: 8%;
}
 #spreadOrShrink{
     justify-content: space-evenly;
     display: flex;
     align-items: center;
     border: solid;
     border-top: none;
     border-bottom: none;
     caret-color: transparent;
}
 #gptAnswer{
     margin: 4px;
     border-top: solid;
     border-bottom: solid;
    height: fit-content;
    overflow-y: auto;
    align-items: center;
      text-align: center;
}
 #gptInput{
     width: 81%;
     border-radius: 4px;
     border: solid;
     resize: vertical;
}
 #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;
     display: flex;
     flex-direction: row;
     position: fixed;
     top: 80px;
     border: solid;
     right: 51px;
     z-index: 9999;
     background: white;
     color: black;
     transition: all 0.5s ease 0s;
}
 #button_GPT{
}
 #button_GPT{
     background: transparent;
     border-radius: 3px;
}
 #gptCueBox{
      width: 68%;
}
 #gptAnswer_inner{

 }
/*dots*/
  .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;
    }
}
    `)
    }
    function addBoxEvent() {
        if (getCookie("isShrink") == "") {
            setCookie("isShrink", 0, 30)
        }
        else {
            document.getElementById('spreadOrShrink').addEventListener("click", () => {
                if (getCookie("isShrink") == 0) {
                    document.getElementById('gptInputBox').style.display = "none"
                    document.getElementById('gptCueBox').style.display = "none"
                    document.getElementById('gptDiv').style.width = "1.5vh"
                    document.getElementById('spreadOrShrink').innerHTML = "\u21e4"
                    setCookie("isShrink", 1, 30)
                }
                else {
                    document.getElementById('gptInputBox').style.display = "flex"
                    document.getElementById('gptCueBox').style.display = "block"
                    document.getElementById('gptDiv').style.width = "452px"
                    document.getElementById('spreadOrShrink').innerHTML = "\u21e5"
                    setCookie("isShrink", 0, 30)
                }
            })
        }
    }
    function controlBoxDisplay(id, way) {
        document.getElementById(`${id}`).style.display = `${way}`
    }
    function initBox() {
        if (getCookie("isShrink") == 0) {
            document.getElementById('gptInputBox').style.display = "flex"
            document.getElementById('gptCueBox').style.display = "block"
            document.getElementById('gptDiv').style.width = "452px"
            document.getElementById('spreadOrShrink').innerHTML = "\u21e5"
        }
        else {
            document.getElementById('gptInputBox').style.display = "none"
            document.getElementById('gptCueBox').style.display = "none"
            document.getElementById('gptDiv').style.width = "1.5vh"
            document.getElementById('spreadOrShrink').innerHTML = "\u21e4"
        }
        controlBoxDisplay("loadingBox", "none")//默认不展示
        controlBoxDisplay("loadingBoxImg", "none")//默认不展示
    }
    function setCookie(cname, cvalue, exdays) {
        var d = new Date();
        d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
        var expires = "expires=" + d.toGMTString();
        document.cookie = cname + "=" + cvalue + "; " + expires;
    }
    //原生cookie函数
    function getCookieObject() {
        let cookieString = document.cookie;
        cookieString = cookieString.substring(0, cookieString.length - 1);
        let tempCookieArray = cookieString.split('; ');

        let cookieObject = {}; // 存放 cookie 键值对

        tempCookieArray.forEach(item => {
            let name = item.substring(0, item.indexOf('='));
            let value = item.substring(item.indexOf('=') + 1);
            value = decodeURIComponent(value); // 还原字符串
            cookieObject[name] = value; // 将键值插入中这个对象中
        });

        return cookieObject // 返回包含 cookie 键值对的对象
    }
    function getCookie(cname) {
        var name = cname + "=";
        var ca = document.cookie.split(';');
        for (var i = 0; i < ca.length; i++) {
            var c = ca[i].trim();
            if (c.indexOf(name) == 0) return c.substring(name.length, c.length);
        }
        return "";
    }
    function moveIt(controlEle, movedEle) {
        //var demo = document.getElementById(`${settings}`)
        var canitmove = false
        var x = 0,
            y = 0
        controlEle.onmousedown = function (e) {
            e.preventDefault()
            x = e.pageX - movedEle.offsetLeft
            y = e.pageY - movedEle.offsetTop
            canitmove = true
            document.getElementById("gptDiv").style.transition = "none"
            //  console.log(e.pageX)
        }
        controlEle.onmouseup = function (e) {
            e.preventDefault()
            x = e.pageX - movedEle.offsetLeft
            y = e.pageY - movedEle.offsetTop
            canitmove = false
            document.getElementById("gptDiv").style.transition = "all 0.5s ease 0s"
            //  console.log(movedEle.offsetLeft)
            console.log(e.pageX)
        }
        window.onmouseup = function () {
            canitmove = false
        }
        window.onmousemove = function (e) {

            if (canitmove) {
                movedEle.style.left = e.pageX - x + 'px'
                movedEle.style.top = e.pageY - y + 'px'
            }
        }
    }
    function addMoveEvent() {
        moveIt(document.getElementById('moveIt'), document.getElementById('gptDiv'))
    }

    //搜题部分
    function getRawQues(){
        return document.getElementById('gptInput').value.trim().replace(/(\s)|(\\n)/g, "")
    }
    function getQues() {
        if (getRawQues().match(/\[.+\]/g)) {
            return getRawQues().match(/(?<=\[).*?(?=\])/g)[0]
        }else{
            return getRawQues()
        }
    }
    function getFullQues() {
        if (getRawQues().match(/\[.+\]/g)) {
            formedQues = getRawQues().match(/(?<=\[).*?(?=\])/g)[0]
            quesOptions[0] = getRawQues().match(/(?<=\[).*?(?=\])/g)[1]
            quesOptions[1] = getRawQues().match(/(?<=\[).*?(?=\])/g)[2]
            quesOptions[2] = getRawQues().match(/(?<=\[).*?(?=\])/g)[3]
            quesOptions[3] = getRawQues().match(/(?<=\[).*?(?=\])/g)[4]
            return true
        }
    }
    function appendQuesEvent() {
        document.addEventListener("mouseup", () => {
            if (unsafeWindow.getSelection().toString().replace(/(\s)|(\\n)/g, "") !== "" && !isActive("gptInput")&&isCtrl) {
                document.getElementById('gptInput').value = unsafeWindow.getSelection().toString().replace(/(\s)|(\\n)/g, "")
            }
            else if(isAdvanced){
                document.getElementById('gptInput').value +=`[${unsafeWindow.getSelection().toString().replace(/(\s)|(\\n)/g, "")}]\n`
            }
        });
    }
    function getAllAnswer() {
        if (getQues() !== "") {
            controlBoxDisplay("loadingBox", "block")
            log(``)
            getAnswer(1)
                .then(() => {
                return getAnswer(0)
            })
                .then(() => {
                return getAnswer(3)
            })
                .then(() => {
                return getAnswer(4)
            })
                .then(() => {
                if (enncyToken !== "") {
                    return getAnswer(2)
                }
            })
                .then(() => {
                if (getFullQues()) {
                    getFullQues()
                    return getAnswer(5)
                }
            })
                .then(() => {
                controlBoxDisplay("loadingBox", "none")
                console.log("finished");
            })
                .catch((err) => {
                log(err)
            })
        }
        else {
            document.getElementById('gptAnswer_inner').innerHTML = `<div>搜索内容不能为空</div>`
        }
    }
    function getAnswer(chooseCase) {
        return new Promise((resolve) => {
            if (document.getElementById('gptInput').value !== "") {
                switch (chooseCase) {
                    case 0:
                        GM_abort[0] = GM_xmlhttpRequest({
                            method: "POST",
                            url: `https://${requestDst[0]}/wyn-nb`,
                            headers: {
                                "Content-Type": "application/x-www-form-urlencoded",
                                Authorization: `${yzggToken}`,
                            },
                            data: `question=${getQues()}`,
                            onloadend: function (data) {
                                try {
                                    let parsedAnswer = JSON.parse(data.response).data
                                    resolve(data.response)
                                    if (parsedAnswer.match(/http.+/g)) {
                                        logAdd(`<br><b>一之哥哥</b>:<img src="${parsedAnswer}" alt="">`)
                                    }
                                    else if(parsedAnswer.match(/#+/g)){
                                        logAdd(`<br><b>一之哥哥(多选)</b>:<br>`)
                                        parsedAnswer.split("#").forEach((ele,index)=>{logAdd(`<b>${index+1}</b>:${ele}<br>`)})
                                    }
                                    else {
                                        logAdd(`<br><b>一之哥哥</b>:${parsedAnswer}<br>`)
                                    }
                                } catch (err) {
                                    logAdd(`<br><b>一之哥哥err</b>:${err}`)
                                }
                            },
                            onerror: function (err) {
                                throw new Error('Error while executing the code');
                            },
                            ontimeout: function (err) {
                                throw new Error('Error while executing the code');
                            }
                        })
                        break;
                    case 1:
                        GM_abort[1] = GM_xmlhttpRequest({
                            method: "POST",
                            url: `http://${requestDst[1]}/api/autoFreeAnswer`,
                            headers: {
                                "Content-Type": "application/json",
                            },
                            data: `{"question": "${getQues()}"}`,
                            onloadend: function (data) {
                                try {
                                    console.log(data.response)
                                    if (JSON.parse(data.response).code !== 200) {
                                        logAdd(`<b>【万能】全平台</b>:${JSON.parse(data.response).msg}<br>`)
                                    }
                                    else {
                                        let allAns = ""
                                        for (let i = 0; i <= 2; i++) {
                                            allAns += `<b>${i}</b>:${JSON.parse(data.response).data.list[i]}\n\n`
                                        }
                                        logAdd(`<b>【万能】全平台</b>:${allAns}<br>`)
                                    }
                                } catch (err) {
                                    logAdd(`<b>【万能】全平台</b>:点的太快了gg,再试一次;<br><b>错误信息</b>:"${err}"<br>`)
                                }
                                resolve(data.response)
                            },
                            onerror: function (err) {
                                throw new Error('Error while executing the code');
                            },
                            ontimeout: function (err) {
                                throw new Error('Error while executing the code');
                            }
                        })
                        break;
                    case 2:
                        GM_abort[2] = GM_xmlhttpRequest({
                            method: "GET",
                            url: `https://${requestDst[3]}/query?title=${getQues()}&token=${enncyToken}`,
                            headers: {
                                "Content-Type": "application/json",
                            },
                            onloadend: function (data) {
                                try {
                                    logAdd(`<br><b>enncy题库</b>:${JSON.parse(data.response).data.answer}<br>`)
                                } catch (err) {
                                    logAdd(`<br><b>enncyERR</b>:${err}<br>`);
                                }
                                resolve(data.response)
                            },
                            onerror: function (err) {
                                throw new Error('Error while executing the code');
                            },
                            ontimeout: function (err) {
                                throw new Error('Error while executing the code');
                            }
                        })
                        break;
                    case 3:
                        GM_abort[3] = GM_xmlhttpRequest({
                            method: "POST",
                            url: `https://${requestDst[4]}/api/v1/cx?v=1.7.8`,
                            headers: {
                                "Content-Type": "application/x-www-form-urlencoded",
                            },
                            data: `question=${getQues()}`,
                            onloadend: function (data) {
                                try {
                                    if (JSON.parse(data.response).data.answer == "") {
                                        logAdd(`<br><b>Ne-21题库</b>:${JSON.parse(data.response).msg}<br>`)
                                    }
                                    else {
                                        logAdd(`<br><b>Ne-21题库</b>:${JSON.parse(data.response).data.answer}<br>`)
                                    }
                                } catch (err) {
                                    logAdd(`<br><b>Ne-21题库ERR</b>:${err}<br>`);
                                }
                                resolve(data.response)
                            },
                            onerror: function (err) {
                                throw new Error('Error while executing the code');
                            },
                            ontimeout: function (err) {
                                throw new Error('Error while executing the code');
                            }
                        })
                        break;
                    case 4:
                        GM_abort[4] = GM_xmlhttpRequest({
                            method: "POST",
                            url: `http://${requestDst[5]}/v1/cx`,
                            headers: {
                                "Content-Type": "application/x-www-form-urlencoded",
                            },
                            data: 'question=' + encodeURIComponent(getQues()) + '&script=v1cx',
                            onloadend: function (res) {
                                try {
                                    if (JSON.parse(res.response).code) {
                                        logAdd(`<br><b>山楂树题库</b>:${JSON.parse(res.response).data}<br>`)
                                    }
                                    else {
                                        logAdd(`<br><b>山楂树题库(failed)</b>:${JSON.parse(res.response).data}<br>`)
                                    }
                                } catch (err) {
                                    logAdd(`<br><b>山楂树题库ERR</b>:${err}<br>`);
                                }
                                resolve(res.response)
                            },
                            onerror: function (err) {
                                throw new Error('Error while executing the code');
                            },
                            ontimeout: function (err) {
                                throw new Error('Error while executing the code');
                            }
                        })
                        break;
                    case 5:
                        GM_abort[5] = GM_xmlhttpRequest({
                            method: "POST",
                            url: `http://${requestDst[7]}/answer?z=${quesWorkType}&t=${quesType}`,
                            headers: {
                                "Content-Type": "application/json",
                                "v": "1.4.3",
                                "referer": `${quesSrc}`
                            },
                            data: `
                            {
                                "question":"${formedQues}",
                                "options":[
                                    "${quesOptions[0]}",
                                    "${quesOptions[1]}",
                                    "${quesOptions[2]}",
                                    "${quesOptions[3]}"
                                ],
                                "type":"${quesType}",
                                "questionData":"",
                                "workType":"${quesWorkType}"
                            }
                            `,
                            onloadend: function (res) {
                                try {
                                    console.log(res.response)
                                    if (JSON.parse(res.response).code == 200) {
                                        logAdd(`<br><b>蛋炒饭</b>:${JSON.parse(res.response).data.answer[0]}<br>`)
                                    }
                                    else if (JSON.parse(res.response).code == -1) {
                                        logAdd(`<br><b>蛋炒饭</b>:${JSON.parse(res.response).msg}<br>`)
                                    }
                                } catch (err) {
                                    logAdd(`<br><b>蛋炒饭题库ERR</b>:${err}<br>`);
                                }
                                resolve(res.response)
                            },
                            onerror: function (err) {
                                throw new Error('Error while executing the code');
                            },
                            ontimeout: function (err) {
                                throw new Error('Error while executing the code');
                            }
                        })
                        break;
                    default:
                        GM_abort[5] = GM_xmlhttpRequest({
                            method: "POST",
                            url: "https://cx.icodef.com/wyn-nb",
                            headers: {
                                "Content-Type": "application/x-www-form-urlencoded",
                                Authorization: `${yzggToken}`,
                            },
                            data: `question=${getQues()}`,
                            onloadend: function (data) {
                                document.getElementById('gptAnswer').innerHTML = JSON.parse(data.response).data
                            },
                            onerror: function (err) {
                                throw new Error('Error while executing the code');
                            },
                            ontimeout: function (err) {
                                throw new Error('Error while executing the code');
                            }
                        })

                }
            }
            else {
                document.getElementById('gptAnswer_inner').innerHTML = `<div>搜索内容不能为空</div>`
            }
        })




    }
    function pic2WordsEvent() {
        document.getElementById('gptInput').addEventListener('paste', (e) => {
            pic2base64(e).then((base64data) => {
                if (base64data) {
                    if (!ocrToken.xauthToken || !ocrToken.xauthUuid || !ocrToken.cookie) {
                        log(`你妹有白描cookie(悲<br><a href="https://web.baimiaoapp.com/">点我去白描官网买</a>`)
                    }
                    else {
                        console.log(base64data.toString());
                        log(`尊贵的白描黄金VIP,欢迎`)
                        controlBoxDisplay("loadingBoxImg", "block")
                        sendOcrMode()
                            .then((sendOcrModeRes) => {
                            console.log(sendOcrModeRes);
                            return sendOcrData(JSON.parse(sendOcrModeRes).data.token, base64data)
                        })
                            .then((sendOcrDataRes) => {
                            // console.log(JSON.parse(sendOcrDataRes).data.jobStatusId);
                            return JSON.parse(sendOcrDataRes).data.jobStatusId
                        })
                            .then((jobStatusId) => {
                            console.log(jobStatusId);
                            sleep(2500).then(() => {
                                getOcrResults(jobStatusId)
                                    .then((finalRes) => {
                                    console.log(finalRes)
                                    if (JSON.parse(finalRes).code === 1) {
                                        for (let i = 0; i <= JSON.parse(finalRes).data.ydResp.data.lines.length - 1; i++) {
                                            ocrSumResults += JSON.parse(finalRes).data.ydResp.data.lines[i].text
                                        }
                                    }
                                    else {
                                        logAdd(`<br>emmm,网络有点卡,再试一次吧!`)
                                        return JSON.parse(finalRes).code
                                    }
                                }).then((statusCode) => {
                                    if (ocrSumResults == "" && statusCode !== 0) {
                                        logAdd(`<br>识别的内容居然是空的(惊`)
                                    }
                                    else { document.getElementById('gptInput').value = `${ocrSumResults.trim()}` }
                                }).then(() => {
                                    ocrSumResults = ""
                                }).then(() => {
                                    controlBoxDisplay("loadingBoxImg", "none")
                                })
                            })


                        })
                    }

                }
                else {
                    console.log("原来只是正常的复制而已(*~*)");
                }

            })
        })
    }
    function pic2base64(e) {
        return new Promise((resolve) => {
            e.stopPropagation();
            // e.preventDefault();
            // 阻止粘贴
            // 获取剪贴板信息
            var clipboardData = e.clipboardData || window.clipboardData;
            var items = clipboardData.items;
            for (var i = 0; i < items.length; i++) {
                var item = items[i];
                if (item.kind == 'file') {
                    var pasteFile = item.getAsFile();
                    var reader = new FileReader();
                    reader.onload = function (event) {
                        // 将结果显示在<textarea>中
                        resolve(event.target.result)
                        //  console.log(event.target.result);
                    }
                    // 将文件读取为BASE64格式字符串
                    reader.readAsDataURL(pasteFile);
                    break;
                }
                else {
                    resolve(0)
                }
            }
        })
    }
    const sleep = (time) => {
        return new Promise(resolve => setTimeout(resolve, time))
    }
    function getOcrResults(jobStatusId) {
        return new Promise((resolve) => {
            GM_xmlhttpRequest({
                method: "GET",
                url: `https://web.baimiaoapp.com/api/ocr/image/xunfei/status?jobStatusId=${jobStatusId}`,
                headers: {
                    "Content-Type": "application/json;charset=UTF-8",
                    "x-auth-token": ocrToken.xauthToken,
                    "x-auth-uuid": ocrToken.xauthUuid,
                    "Cookie": ocrToken.cookie,
                    "Connection": "keep-alive",
                    "Accept": "*/*"
                },
                onloadend: function (data) {
                    try {
                        resolve(data.response)
                    } catch (err) {
                        logAdd(`err:${err}`)
                    }
                },
                onerror: function (err) {
                    logAdd(`err:${err}`)
                },
                ontimeout: function (err) {
                    logAdd(`err:${err}`)
                }
            })
        })

    }
    function sendOcrData(nextToken, base64data) {
        return new Promise((resolve) => {
            GM_xmlhttpRequest({
                method: "POST",
                url: "https://web.baimiaoapp.com/api/ocr/image/xunfei",
                headers: {
                    "Content-Type": "application/json;charset=UTF-8",
                    "x-auth-token": ocrToken.xauthToken,
                    "x-auth-uuid": ocrToken.xauthUuid,
                    "Cookie": ocrToken.cookie,
                    "Connection": "keep-alive",
                    "Accept": "*/*"
                },
                data: `{"token":"${nextToken}","hash":"3f9c056379f0457c564290f6e15a9c232f1e5557","name":"image.png","size":13764,"dataUrl":"${base64data}","result":{},"status":"processing","isSuccess":false}`,
                onloadend: function (data) {
                    try {
                        resolve(data.response)
                    } catch (err) {
                        logAdd(`err:${err}`)
                    }
                },
                onerror: function (err) {
                    logAdd(`err:${err}`)
                },
                ontimeout: function (err) {
                    logAdd(`err:${err}`)
                }
            })
        })

    }
    function sendOcrMode() {
        return new Promise((resolve) => {
            GM_xmlhttpRequest({
                method: "POST",
                url: "https://web.baimiaoapp.com/api/perm/single",
                headers: {
                    "Content-Type": "application/json;charset=UTF-8",
                    "x-auth-token": ocrToken.xauthToken,
                    "x-auth-uuid": ocrToken.xauthUuid,
                    cookie: ocrToken.cookie
                },
                data: `{"mode": "single"}`,
                onloadend: function (data) {
                    try {
                        resolve(data.response)
                    } catch (err) {
                        logAdd(`err:${err}`)
                    }
                },
                onerror: function (err) {
                    logAdd(`err:${err}`)
                },
                ontimeout: function (err) {
                    logAdd(`err:${err}`)
                }
            })
        })

    }
    function addSearchEvent() {
        document.getElementById('button_GPT').addEventListener("click", () => {
            getAllAnswer()
        })
    }
    function keyEvent() {
        document.onkeydown = function (e) {
        //   console.log(e)
            var keyNum = window.event ? e.keyCode : e.which;
            if (13 == keyNum && e.ctrlKey) {
                console.log(isAdvanced)
                if (isActive("gptInput")) {
                    document.getElementById('button_GPT').click()
                }
                else {
                    console.log("失焦不执行")
                }
            }
            else if(e.ctrlKey){
                isCtrl=true
            }
            else{
                isCtrl=false
            }
        }
        document.addEventListener("keydown", (e)=>{
             var keyNum = window.event ? e.keyCode : e.which;
            if(65 == keyNum && e.altKey){
                isAdvanced=true
                console.log(isAdvanced)
            }
        });
        document.onkeyup= function (e) {
            isCtrl=false
            isAdvanced=false
        }

    }
    function isActive(id) {
        var myInput = document.getElementById(id);
        if (myInput == document.activeElement) {
            return 1
        } else {
            return 0
        }
    }
    function getBase64Size(base64) {//获取base64字符串的大小
        /*
            参考:https://www.jb51.net/article/172316.htm
            并优化后代码
        */
        if (base64) { // 获取base64图片byte大小
            base64 = base64.split(",")[1].split("=")[0];
            var strLength = base64.length;
            var fileLength = strLength - (strLength / 8) * 2;
            return Math.floor(fileLength); // 向下取整
        } else {
            return null
        }
    };
    function log(temp_1) {
        document.getElementById('gptAnswer_inner').innerHTML = temp_1
    }
    function logAdd(temp_1) {
        document.getElementById('gptAnswer_inner').innerHTML += temp_1
    }

}
(function () { window.onload = mainTop })()