您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
通过ai快速地,全自动刷智慧树问答,半自动化可选择地提问,并且自动添加防提问重复机制,添加防止无效问题提问机制,嘎嘎好用。
// ==UserScript== // @name 知到智慧树全自动刷问答平时分助手 // @version 1.0.8 // @description 通过ai快速地,全自动刷智慧树问答,半自动化可选择地提问,并且自动添加防提问重复机制,添加防止无效问题提问机制,嘎嘎好用。 // @author fenda // @match *://*.zhihuishu.com/* // @grant GM_xmlhttpRequest // @grant GM_setValue // @grant GM_getValue // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAfMAAAH0CAYAAAApCsTzAAAAAXNSR0IArs4c6QAAIABJREFUeAHsvQd8HdWd953dfbY9u9messm75d3ked538+4mAVvSrZKwDbio3aYudwghgSSEYkm3SnIHU5MsSYCEDQFLNiGhJAGbkgKEXkKHhJqAsY27dO+dmd/7/M7oyOOLruqVbOn+rz/j6WfOfGf0/83/nP855wMfkJ8QEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEDgxCEQikT+qrE7+Q2Uk+Ul/pP1T/kjyU/byug99KpL8kxMjl5ILISAEhIAQEAJC4H0EPrnonD9116w5qbSm/UJfOHZbRSj2bEW4462KcPytykjqRX+wa6enLrGxtDo6b07kor9+XwKyQQgIASEgBISAEDh+BOYsuuATpTXxr/tCsdd84WTGG0nBFYzBG4nBG4qjNNSJ0nAM3kDc8AYTb322Jvrd/6xu/3+PX47lykJACAgBISAEhIBNIJn8w7KaC0856dTznvMEo5Y7lIA73AVXKAV3fRLuSAyeYBfc9QmUNXTCG0nAE0iitDZm/ceir7xYUrum4QPJ5B8KTiEgBISAEBACQuA4EfCHU/MrwtHfeEKd8ITXwBvphC8UhaeuE966TvjrovCH4qgIdMBb2w5PJAlPJIby0Bq4QglUNETfdoU66o9T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AggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCJyuAv8HuXkDGH4YH9IAAAAASUVORK5CYII= // @grant GM_notification // @grant GM_registerMenuCommand // @license MIT // @namespace http://fenda.github.io/ // ==/UserScript== (function () { 'use strict'; const defaultAPIKey = "sk-zt3dcYmk8D4FECtgDa7427F7E71444B589D6FbD6CcC44b30"; const defaultAPIUrl = "https://api.gpt.ge/v1/chat/completions"; const defaultModel = "glm-4-flash"; const intervalTime = GM_getValue("intervalTime", 2000); const initialCountdownTime = GM_getValue("countdownTime", 20); let requestLock = false; let noAnswerButtonCount = 0; let countdownInterval; const inputEvent = new Event("input", { bubbles: true, cancelable: true }); function debounce(fn, delay) { let timeout; return function () { clearTimeout(timeout); timeout = setTimeout(() => fn.apply(this, arguments), delay); }; } function initMutationObserver() { const debouncedUpdate = debounce(() => { console.log("DOM 变化检测到,更新问题列表..."); addQuestionStatus(); if (GM_getValue("isAutoScrolling", false)) { const isAutoScrolling = GM_getValue("isAutoScrolling", false); if (isAutoScrolling) { scrollToLastUnansweredQuestion(); } } checkHomeRegex(); }, 500); const observer = new MutationObserver((mutations) => { debouncedUpdate(); }); const config = { attributes: true, childList: true, subtree: true, characterData: true }; observer.observe(document.body, config); console.log("MutationObserver 已启动,正在监听 DOM 变化..."); } function createQuestionManagementModal() { const modal = document.createElement('div'); modal.className = 'question-management-modal'; modal.style = ` position: fixed; top: 50px; left: 5%; width: 90%; height: 80%; background: linear-gradient(145deg, #ffffff, #e6e6e6); box-shadow: 0px 10px 20px rgba(0, 0, 0, 0.1); border-radius: 15px; z-index: 1000; padding: 20px; overflow: hidden; `; let questionsData = GM_getValue("questionsData", {}); const lastViewedCourseIndex = GM_getValue("lastViewedCourseIndex", 0); let questionsPerPage = GM_getValue("questionsPerPage", 10); const coursetabs = document.createElement('div'); coursetabs.style = ` display: flex; justify-content: center; margin-bottom: 15px; border-bottom: 1px solid #e0e0e0; `; const contentArea = document.createElement('div'); contentArea.style.height = 'calc(100% - 100px)'; Object.keys(questionsData).forEach((courseName, index) => { const courseTab = document.createElement('div'); courseTab.textContent = courseName; courseTab.style = ` padding: 10px 15px; cursor: pointer; background: ${index === lastViewedCourseIndex ? 'linear-gradient(145deg, #4c88d6, #3b5998)' : 'transparent'}; color: ${index === lastViewedCourseIndex ? 'white' : 'black'}; border-radius: 5px 5px 0 0; margin-right: 5px; `; const courseTable = document.createElement('div'); courseTable.style = ` display: ${index === lastViewedCourseIndex ? 'block' : 'none'}; width: 100%; height: 100%; overflow-y: auto; `; const tableContainer = document.createElement('div'); tableContainer.style = ` width: 100%; overflow-x: auto; `; const table = document.createElement('table'); table.style = ` width: 100%; border-collapse: collapse; table-layout: fixed; `; const thead = document.createElement('thead'); thead.style = ` position: sticky; top: 0; background: linear-gradient(145deg, #4c88d6, #3b5998); color: white; z-index: 1; `; thead.innerHTML = ` <tr> <th style="padding: 10px; text-align: left; width: 60%;">题目 <input type="text" placeholder="搜索..." class="filter-input" style="margin-left: 5px; padding: 3px; border-radius: 5px; border: 1px solid #ccc; color: black;"> </th> <th style="padding: 10px; text-align: center; width: 20%;">状态</th> <th style="padding: 10px; text-align: center; width: 20%;">操作</th> </tr> `; const tbody = document.createElement('tbody'); let questions = Object.entries(questionsData[courseName]); let currentPage = GM_getValue(`lastViewedPage_${courseName}`, 1); let totalPages = Math.ceil(questions.length / questionsPerPage); let isSearchMode = false; function displayQuestions(page, filteredQuestions = null) { tbody.innerHTML = ''; const questionsToDisplay = filteredQuestions || questions; const startIndex = (page - 1) * questionsPerPage; const endIndex = Math.min(startIndex + questionsPerPage, questionsToDisplay.length); for (let i = startIndex; i < endIndex; i++) { const [question, status] = questionsToDisplay[i]; const questionIndex = questions.findIndex(([q]) => q === question); const questionPage = Math.ceil((questionIndex + 1) / questionsPerPage); const row = document.createElement('tr'); row.setAttribute('data-question', question); let questionHTML = question; if (isSearchMode && filteredQuestions) { questionHTML += ` <span style="color: orange;">(第${questionPage}页)</span>`; } row.innerHTML = ` <td style="padding: 10px; border-bottom: 1px solid #e0e0e0; white-space: normal; word-break: break-word;">${questionHTML}</td> <td style="padding: 10px; border-bottom: 1px solid #e0e0e0; text-align: center; color: ${status === '已回答' ? 'green' : 'red'}; white-space: nowrap;"> ${status} </td> <td style="padding: 10px; border-bottom: 1px solid #e0e0e0; text-align: center; white-space: nowrap;"> <button class="set-answered" data-course="${courseName}" data-question="${question}" style=" margin-right: 5px; padding: 5px 10px; background: green; color: white; border: none; border-radius: 5px; ">设为已答</button> <button class="set-unanswered" data-course="${courseName}" data-question="${question}" style=" padding: 5px 10px; background: red; color: white; border: none; border-radius: 5px; ">设为未答</button> </td> `; tbody.appendChild(row); } } displayQuestions(currentPage); thead.querySelector('.filter-input').addEventListener('input', function () { const filterValue = this.value.toLowerCase(); isSearchMode = filterValue.length > 0; const filteredQuestions = Object.entries(questionsData[courseName]).filter(([question, status]) => { return question.toLowerCase().includes(filterValue); }); totalPages = Math.ceil(filteredQuestions.length / questionsPerPage); currentPage = 1; displayQuestions(currentPage, filteredQuestions); updatePagination(); }); table.addEventListener('click', function (event) { const target = event.target; const courseName = target.dataset.course; const question = target.dataset.question; const questionsData = GM_getValue("questionsData", {}); if (target.classList.contains('set-answered')) { questionsData[courseName][question] = '已回答'; GM_setValue("questionsData", questionsData); refreshQuestionManagementModal(courseName, currentPage); } if (target.classList.contains('set-unanswered')) { questionsData[courseName][question] = '未回答'; GM_setValue("questionsData", questionsData); refreshQuestionManagementModal(courseName, currentPage); } }); table.appendChild(thead); table.appendChild(tbody); tableContainer.appendChild(table); courseTable.appendChild(tableContainer); courseTab.addEventListener('click', () => { Array.from(coursetabs.children).forEach((tab, idx) => { tab.style.background = 'transparent'; tab.style.color = 'black'; contentArea.children[idx].style.display = 'none'; }); courseTab.style.background = 'linear-gradient(145deg, #4c88d6, #3b5998)'; courseTab.style.color = 'white'; courseTable.style.display = 'block'; GM_setValue("lastViewedCourseIndex", index); currentPage = GM_getValue(`lastViewedPage_${courseName}`, 1); displayQuestions(currentPage); updatePagination(); isSearchMode = false; }); courseTab.setAttribute('data-course', courseName); coursetabs.appendChild(courseTab); contentArea.appendChild(courseTable); const paginationContainer = document.createElement('div'); paginationContainer.style = ` display: flex; justify-content: space-between; align-items: center; padding: 10px; background: #f0f0f0; border-radius: 0 0 15px 15px; position: absolute; bottom: 0; left: 0; width: 100%; box-sizing: border-box; `; const questionsPerPageContainer = document.createElement('div'); questionsPerPageContainer.style = ` display: flex; align-items: center; `; const questionsPerPageLabel = document.createElement('span'); questionsPerPageLabel.textContent = '每页显示:'; questionsPerPageLabel.style = ` margin-right: 5px; `; const questionsPerPageInput = document.createElement('input'); questionsPerPageInput.type = 'number'; questionsPerPageInput.value = questionsPerPage; questionsPerPageInput.style = ` width: 60px; padding: 5px; border-radius: 5px; border: 1px solid #ccc; margin-right: 5px; `; const saveButton = document.createElement('button'); saveButton.textContent = '保存'; saveButton.style = ` padding: 5px 10px; border: none; border-radius: 5px; background: #4CAF50; color: white; cursor: pointer; margin-right: 5px; `; saveButton.addEventListener('click', () => { const newQuestionsPerPage = parseInt(questionsPerPageInput.value); if (!isNaN(newQuestionsPerPage) && newQuestionsPerPage > 0) { GM_setValue("questionsPerPage", newQuestionsPerPage); questionsPerPage = newQuestionsPerPage; totalPages = Math.ceil(Object.keys(questionsData[courseName]).length / questionsPerPage); displayQuestions(currentPage); updatePagination(); } else { showAlert('请输入有效的每页显示数量'); questionsPerPageInput.value = questionsPerPage; } }); const setPageAnsweredButton = document.createElement('button'); setPageAnsweredButton.textContent = '一键已答'; setPageAnsweredButton.style = ` padding: 5px 10px; background: green; color: white; border: none; border-radius: 5px; cursor: pointer; margin-right: 5px; `; setPageAnsweredButton.addEventListener('click', () => { setQuestionsStatusForCurrentPage(courseName, '已回答', currentPage, questionsPerPage); refreshQuestionManagementModal(courseName, currentPage); }); const setPageUnansweredButton = document.createElement('button'); setPageUnansweredButton.textContent = '一键本页未答'; setPageUnansweredButton.style = ` padding: 5px 10px; background: red; color: white; border: none; border-radius: 5px; cursor: pointer; `; setPageUnansweredButton.addEventListener('click', () => { setQuestionsStatusForCurrentPage(courseName, '未回答', currentPage, questionsPerPage); refreshQuestionManagementModal(courseName, currentPage); }); questionsPerPageContainer.appendChild(questionsPerPageLabel); questionsPerPageContainer.appendChild(questionsPerPageInput); questionsPerPageContainer.appendChild(saveButton); questionsPerPageContainer.appendChild(setPageAnsweredButton); questionsPerPageContainer.appendChild(setPageUnansweredButton); const paginationControls = document.createElement('div'); paginationControls.style = ` display: flex; align-items: center; `; const prevButton = document.createElement('button'); prevButton.textContent = '上一页'; prevButton.style = ` padding: 5px 10px; margin: 0 5px; border: none; border-radius: 5px; background: #ddd; cursor: pointer; `; prevButton.addEventListener('click', () => { if (currentPage > 1) { currentPage--; GM_setValue(`lastViewedPage_${courseName}`, currentPage); displayQuestions(currentPage); updatePagination(); } }); const nextButton = document.createElement('button'); nextButton.textContent = '下一页'; nextButton.style = ` padding: 5px 10px; margin: 0 5px; border: none; border-radius: 5px; background: #ddd; cursor: pointer; `; nextButton.addEventListener('click', () => { if (currentPage < totalPages) { currentPage++; GM_setValue(`lastViewedPage_${courseName}`, currentPage); displayQuestions(currentPage); updatePagination(); } }); const pageInfo = document.createElement('span'); pageInfo.style = ` margin: 0 10px; `; const gotoPageContainer = document.createElement('div'); gotoPageContainer.style = ` display: flex; align-items: center; margin-left: auto; `; const gotoPageInput = document.createElement('input'); gotoPageInput.type = 'number'; gotoPageInput.placeholder = '页码'; gotoPageInput.style = ` width: 50px; padding: 5px; border-radius: 5px; border: 1px solid #ccc; margin-right: 5px; `; const gotoPageButton = document.createElement('button'); gotoPageButton.textContent = '未答'; gotoPageButton.style = ` padding: 5px 10px; border: none; border-radius: 5px; background: #4CAF50; color: white; cursor: pointer; `; gotoPageButton.addEventListener('click', () => { const pageNumber = parseInt(gotoPageInput.value); if (!isNaN(pageNumber) && pageNumber >= 1 && pageNumber <= totalPages) { currentPage = pageNumber; GM_setValue(`lastViewedPage_${courseName}`, currentPage); displayQuestions(currentPage); updatePagination(); } else { alert('请输入有效的页码'); gotoPageInput.value = ''; } }); gotoPageContainer.appendChild(gotoPageInput); gotoPageContainer.appendChild(gotoPageButton); function updatePagination() { pageInfo.textContent = `第 ${currentPage} 页 / 共 ${totalPages} 页`; } updatePagination(); paginationControls.appendChild(prevButton); paginationControls.appendChild(pageInfo); paginationControls.appendChild(nextButton); paginationContainer.appendChild(questionsPerPageContainer); paginationContainer.appendChild(paginationControls); paginationContainer.appendChild(gotoPageContainer); courseTable.appendChild(paginationContainer); currentPage = GM_getValue(`lastViewedPage_${courseName}`, 1); displayQuestions(currentPage); updatePagination(); }); const closeButton = document.createElement('button'); closeButton.textContent = '关闭'; closeButton.style = ` position: absolute; top: 10px; right: 10px; padding: 5px 10px; background: red; color: white; border: none; border-radius: 5px; `; closeButton.addEventListener('click', () => modal.remove()); modal.appendChild(coursetabs); modal.appendChild(contentArea); modal.appendChild(closeButton); document.body.appendChild(modal); } function setQuestionsStatusForCurrentPage(courseName, status, currentPage, questionsPerPage) { let questionsData = GM_getValue("questionsData", {}); if (questionsData[courseName]) { const questions = Object.keys(questionsData[courseName]); const startIndex = (currentPage - 1) * questionsPerPage; const endIndex = Math.min(startIndex + questionsPerPage, questions.length); for (let i = startIndex; i < endIndex; i++) { const question = questions[i]; questionsData[courseName][question] = status; } GM_setValue("questionsData", questionsData); } } function refreshQuestionManagementModal(courseName, currentPage) { GM_setValue(`lastViewedPage_${courseName}`, currentPage); const scrollTop = document.querySelector('.question-management-modal')?.scrollTop || 0; const existingModal = document.querySelector('.question-management-modal'); if (existingModal) { existingModal.remove(); } createQuestionManagementModal(); document.querySelector('.question-management-modal').scrollTop = scrollTop; } function displayCountdown(countdown) { let participatoryDiv = document.querySelector('.MyParticipatory-div'); let qrCodeDiv = document.querySelector('.QRcode-div'); let countdownElement = document.querySelector('.new-neumorphic-card'); const linkClicked = GM_getValue("linkClicked", false); if (participatoryDiv && qrCodeDiv) { const { answeredCount, totalCount } = calculateAnsweredQuestions(); if (!countdownElement) { countdownElement = createCountdownElement(countdown, linkClicked, answeredCount, totalCount); qrCodeDiv.parentNode.insertBefore(countdownElement, qrCodeDiv); setupEventListeners(countdownElement); } else { updateCountdownElement(countdownElement, countdown, answeredCount, totalCount); } } } function calculateAnsweredQuestions() { let answeredCount = 0; let totalCount = 0; const questionItems = document.querySelectorAll('.question-item'); questionItems.forEach(item => { const spanElement = item.querySelector('.question-content span'); const questionText = spanElement ? spanElement.title.trim() : ''; if (questionText) { const courseNameElement = document.querySelector(".course-name"); if (courseNameElement) { const courseName = courseNameElement.innerText.trim(); const questionsData = GM_getValue("questionsData", {}); if (questionsData[courseName] && questionsData[courseName][questionText] === "已回答") { answeredCount++; } totalCount++; } } }); return { answeredCount, totalCount }; } function createCountdownElement(countdown, linkClicked, answeredCount, totalCount) { const element = document.createElement('div'); element.className = 'new-neumorphic-card'; element.style = ` padding: 15px; border-radius: 15px; background: linear-gradient(145deg, #ffffff, #e6e6e6); box-shadow: 6px 6px 12px #aaaaaa, -6px -6px 12px #ffffff; display: inline-block; max-width: 300px; `; const modelDropdownHTML = createModelDropdownHTML(); element.innerHTML = ` <div class="Participatorytitle-div" style="white-space: normal; overflow-wrap: break-word; display: flex; flex-direction: column;"> <div style="margin-bottom: 10px; font-weight: bold;">倒计时 <i class="el-tooltip item" tabindex="0" style="margin-left: 4px; cursor: pointer; position: relative;" id="infoIcon"> ℹ️ </i> <span style="margin-left: 10px; white-space: nowrap;">${countdown} 秒</span> <button id="toggleCountdownButton" style=" margin-left: 10px; padding: 10px 20px; border: none; border-radius: 10px; background: linear-gradient(145deg, #4c88d6, #3b5998); box-shadow: 2px 2px 4px #2f4686, -2px -2px 4px #507bcf; color: white; font-weight: bold; cursor: pointer; ">${countdownInterval ? '暂停' : '继续'}</button> </div> ${!linkClicked ? `<a href="#" id="purchaseLink" target="_blank" style="margin-top: 10px; text-decoration: none; color: #0066cc; position: relative;">注册(不可用)购买API</a>` : ''} <div style="display: flex; flex-direction: column; align-items: start; margin-top: 10px;"> <label style="margin-bottom: 15px; display: flex; align-items: center; white-space: nowrap;">API_KEY: <input type="text" id="apiKeyInput" style=" margin-left: 10px; width: 100%; padding: 10px; border-radius: 10px; border: none; outline: none; background: linear-gradient(145deg, #e6e6e6, #ffffff); box-shadow: inset 2px 2px 4px #cccccc, inset -2px -2px 4px #ffffff; "> </label> <label style="margin-bottom: 15px; display: flex; align-items: center; white-space: nowrap;">API_URL: <input type="text" id="apiUrlInput" style=" margin-left: 10px; width: 100%; padding: 10px; border-radius: 10px; border: none; outline: none; background: linear-gradient(145deg, #e6e6e6, #ffffff); box-shadow: inset 2px 2px 4px #cccccc, inset -2px -2px 4px #ffffff; "> </label> <label style="margin-bottom: 15px; display: flex; align-items: center; white-space: nowrap;">倒计时范围: <input type="number" id="countdownMinInput" style=" margin-left: 10px; width: 48%; padding: 10px; border-radius: 10px; border: none; outline: none; background: linear-gradient(145deg, #e6e6e6, #ffffff); box-shadow: inset 2px 2px 4px #cccccc, inset -2px -2px 4px #ffffff;" placeholder="最小值"> <input type="number" id="countdownMaxInput" style=" margin-left: 10px; width: 48%; padding: 10px; border-radius: 10px; border: none; outline: none; background: linear-gradient(145deg, #e6e6e6, #ffffff); box-shadow: inset 2px 2px 4px #cccccc, inset -2px -2px 4px #ffffff;" placeholder="最大值"> </label> ${modelDropdownHTML} </div> <div style="margin-top: 15px; text-align: right;"> <button id="manageButton" style=" margin-right: 10px; padding: 10px 20px; border: none; border-radius: 10px; background: linear-gradient(145deg, #4c88d6, #3b5998); box-shadow: 2px 2px 4px #2f4686, -2px -2px 4px #507bcf; color: white; font-weight: bold; cursor: pointer; ">管理答题列表</button> <button id="saveButton" style=" padding: 10px 20px; border: none; border-radius: 10px; background: linear-gradient(145deg, #4c88d6, #3b5998); box-shadow: 2px 2px 4px #2f4686, -2px -2px 4px #507bcf; color: white; font-weight: bold; cursor: pointer; ">保存</button> </div> <div style="margin-top: 20px; text-align: center; font-size: 12px; color: #666;"> <span>当前版本:1.0.8(最新:</span><span id="latestVersion">加载中...</span><span>)</span> </div> </div> `; return element; } function createModelDropdownHTML() { const defaultModels = ["gemini-1.5-flash", "glm-4-flash"]; let customModels = GM_getValue("customModels", []); let allModels = [...defaultModels, ...customModels]; let selectedModel = GM_getValue("aimodel", "glm-4-flash"); return ` <label style="display: flex; align-items: center; white-space: nowrap; margin-bottom: 15px;">模型: <div class="custom-dropdown" style="position: relative; margin-left: 10px; width: 100%;"> <div class="dropdown-selected" style=" padding: 10px; border-radius: 10px; background: linear-gradient(145deg, #e6e6e6, #ffffff); box-shadow: inset 4px 4px 8px #cccccc, inset -4px -4px 8px #ffffff; cursor: pointer; width: 100%; box-sizing: border-box; text-align: left; ">${selectedModel}</div> <div class="dropdown-options" style=" position: absolute; top: 100%; left: 0; background: linear-gradient(145deg, #ffffff, #e6e6e6); border-radius: 10px; box-shadow: 4px 4px 8px #aaaaaa, -4px -4px 8px #ffffff; z-index: 1; display: none; overflow: hidden; min-width: 200px; "> ${allModels.map(model => ` <div class="dropdown-item" data-model="${model}" style=" padding: 10px; cursor: pointer; ${defaultModels.includes(model) ? '' : 'display: flex; justify-content: space-between; align-items: center;'} background: linear-gradient(145deg, #ffffff, #e6e6e6); border-bottom: 1px solid #e0e0e0; "> ${model} ${defaultModels.includes(model) ? '' : `<span class="remove-model" data-model="${model}" style="cursor: pointer; color: red;">×</span>`} </div> `).join('')} <div class="add-model-container" style="padding: 10px; display: flex; align-items: center;"> <input type="text" id="newModelInput" placeholder="输入模型名称" style=" padding: 8px; border-radius: 5px; border: none; background: linear-gradient(145deg, #e6e6e6, #ffffff); box-shadow: inset 2px 2px 4px #cccccc, inset -2px -2px 4px #ffffff; width: 70%; box-sizing: border-box; height: 32px; "> <button id="saveModelButton" style=" border: none; border-radius: 8px; background: linear-gradient(145deg, #4c88d6, #3b5998); box-shadow: 2px 2px 4px #2f4686, -2px -2px 4px #507bcf; color: white; cursor: pointer; width: 25%; text-align: center; margin-left: 5px; height: 32px; display: flex; justify-content: center; align-items: center; ">保存</button> </div> </div> </div> </label> <div class="answer-counter" style=" margin-top: 10px; padding: 10px; border-radius: 10px; background: linear-gradient(145deg, #e6e6e6, #ffffff); box-shadow: inset 4px 4px 8px #cccccc, inset -4px -4px 8px #ffffff; text-align: center; font-weight: bold; color: #4B5563; display: flex; flex-direction: column; align-items: center; justify-content: center; "> <div style="display: flex; align-items: center; justify-content: space-between;"> <div style="display: flex; flex-direction: column; border: 1px solid #ccc; padding: 5px; border-radius: 5px;"> <div>已答: ${0}</div> <div>总数: ${0}</div> </div> <div style="display: flex; flex-direction: row; align-items: center;"> <button id="jumpToUnansweredButton" style=" margin-left: 10px; margin-bottom: 5px; padding: 5px 10px; border: none; border-radius: 8px; background: linear-gradient(145deg, #4c88d6, #3b5998); box-shadow: 2px 2px 4px #2f4686, -2px -2px 4px #507bcf; color: white; cursor: pointer; white-space: normal; line-height: 1.2; text-align: center; width: 60px; height: 100%; "> 跳转<br>未答 </button> <button id="autoScrollButton" style=" margin-left: 10px; padding: 5px 10px; border: none; border-radius: 8px; background: linear-gradient(145deg, #4c88d6, #3b5998); box-shadow: 2px 2px 4px #2f4686, -2px -2px 4px #507bcf; color: white; cursor: pointer; white-space: normal; line-height: 1.2; text-align: center; width: 60px; height: 100%; "> 自动<br>滚动 </button> </div> </div> </div> `; } function updateCountdownElement(countdownElement, countdown, answeredCount, totalCount) { countdownElement.querySelector('.Participatorytitle-div div span').innerText = `${countdown} 秒`; const toggleButton = countdownElement.querySelector('#toggleCountdownButton'); toggleButton.textContent = countdownInterval ? "暂停" : "继续"; updateAnswerCounter(countdownElement, answeredCount, totalCount); } function updateAnswerCounter(countdownElement, answeredCount, totalCount) { const counterElement = countdownElement.querySelector('.answer-counter'); const isAutoScrolling = GM_getValue("isAutoScrolling", false); if (counterElement) { counterElement.innerHTML = ` <div style="display: flex; align-items: center; justify-content: space-between;"> <div style="display: flex; flex-direction: column; border: 1px solid #ccc; padding: 5px; border-radius: 5px;"> <div>已答: ${answeredCount}</div> <div>总数: ${totalCount}</div> </div> <div style="display: flex; flex-direction: row; align-items: center;"> <button id="jumpToUnansweredButton" style=" margin-left: 10px; margin-bottom: 5px; padding: 5px 10px; border: none; border-radius: 8px; background: linear-gradient(145deg, #4c88d6, #3b5998); box-shadow: 2px 2px 4px #2f4686, -2px -2px 4px #507bcf; color: white; cursor: pointer; white-space: normal; line-height: 1.2; text-align: center; width: 60px; height: 100%; "> 跳转<br>未答 </button> <button id="autoScrollButton" style=" margin-left: 10px; padding: 5px 10px; border: none; border-radius: 8px; background: linear-gradient(145deg, #4c88d6, #3b5998); box-shadow: 2px 2px 4px #2f4686, -2px -2px 4px #507bcf; color: white; cursor: pointer; white-space: normal; line-height: 1.2; text-align: center; width: 60px; height: 100%; "> ${isAutoScrolling ? '关闭<br>滚动' : '自动<br>滚动'} </button> </div> </div> `; const jumpButton = counterElement.querySelector('#jumpToUnansweredButton'); setupJumpButton(jumpButton); const autoScrollButton = counterElement.querySelector('#autoScrollButton'); setupAutoScrollButton(autoScrollButton); } } function setupAutoScrollButton(autoScrollButton) { autoScrollButton.addEventListener('click', () => { const isAutoScrolling = GM_getValue("isAutoScrolling", false); if (isAutoScrolling) { GM_setValue("isAutoScrolling", false); autoScrollButton.innerHTML = '自动<br>滚动'; showAlert("自动滚动已关闭"); } else { GM_setValue("isAutoScrolling", true); autoScrollButton.innerHTML = '关闭<br>滚动'; showAlert("自动滚动已开启,将持续滚动未答题目到最上方"); scrollToLastUnansweredQuestion(); } }); setupButtonShadowEffects(autoScrollButton); } function setupEventListeners(countdownElement) { const dropdown = countdownElement.querySelector('.custom-dropdown'); const dropdownSelected = dropdown.querySelector('.dropdown-selected'); const dropdownOptions = dropdown.querySelector('.dropdown-options'); dropdownSelected.addEventListener('click', () => { dropdownOptions.style.display = dropdownOptions.style.display === 'block' ? 'none' : 'block'; }); dropdownOptions.addEventListener('click', (event) => { if (event.target.classList.contains('dropdown-item')) { const model = event.target.dataset.model; GM_setValue("aimodel", model); const defaultModels = ["gemini-1.5-flash", "glm-4-flash"]; let customModels = GM_getValue("customModels", []); let allModels = [...defaultModels, ...customModels]; let selectedModel = model; dropdownSelected.textContent = model; dropdownOptions.style.display = 'none'; } else if (event.target.classList.contains('remove-model')) { const modelToRemove = event.target.dataset.model; let customModels = GM_getValue("customModels", []); customModels = customModels.filter(model => model !== modelToRemove); GM_setValue("customModels", customModels); const defaultModels = ["gemini-1.5-flash", "glm-4-flash"]; let allModels = [...defaultModels, ...customModels]; renderDropdownItems(dropdownOptions, allModels, defaultModels, dropdownSelected); } }); const defaultModels = ["gemini-1.5-flash", "glm-4-flash"]; let customModels = GM_getValue("customModels", []); let allModels = [...defaultModels, ...customModels]; renderDropdownItems(dropdownOptions, allModels, defaultModels, dropdownSelected); document.addEventListener('click', (event) => { if (!dropdown.contains(event.target)) { dropdownOptions.style.display = 'none'; } }); document.getElementById("manageButton").addEventListener('click', createQuestionManagementModal); document.getElementById("apiKeyInput").value = GM_getValue("API_KEY", defaultAPIKey); document.getElementById("apiUrlInput").value = GM_getValue("API_URL", defaultAPIUrl); document.getElementById("countdownMinInput").value = GM_getValue("countdownMin", 20); document.getElementById("countdownMaxInput").value = GM_getValue("countdownMax", 30); document.getElementById("saveButton").addEventListener('click', function () { showAlert("保存参数成功"); GM_setValue("API_KEY", document.getElementById("apiKeyInput").value); GM_setValue("API_URL", document.getElementById("apiUrlInput").value); GM_setValue("countdownMin", parseInt(document.getElementById("countdownMinInput").value)); GM_setValue("countdownMax", parseInt(document.getElementById("countdownMaxInput").value)); const newModel = dropdownOptions.querySelector('#newModelInput').value.trim(); if (newModel && !getAllModels().includes(newModel)) { let customModels = GM_getValue("customModels", []); customModels.push(newModel); GM_setValue("customModels", customModels); const defaultModels = ["gemini-1.5-flash", "glm-4-flash"]; let allModels = [...defaultModels, ...customModels]; renderDropdownItems(dropdownOptions, allModels, defaultModels, dropdownSelected); } const selectedModel = dropdownSelected.textContent; GM_setValue("aimodel", selectedModel); alert('设置已保存'); }); const toggleButton = document.getElementById("toggleCountdownButton"); setupButtonShadowEffects(toggleButton); toggleButton.addEventListener('click', () => { if (countdownInterval) { clearInterval(countdownInterval); countdownInterval = null; toggleButton.textContent = "继续"; } else { const savedCountdown = GM_getValue("currentCountdown", GM_getValue("countdownTime", initialCountdownTime)); startCountdown(savedCountdown); toggleButton.textContent = "暂停"; } }); const saveButton = document.getElementById("saveButton"); setupButtonShadowEffects(saveButton); const manageButton = document.getElementById("manageButton"); setupButtonShadowEffects(manageButton); const jumpButton = document.getElementById("jumpToUnansweredButton"); setupJumpButton(jumpButton); checkForLatestVersion(); setupPurchaseLink(countdownElement); setupInfoIcon(countdownElement); } function setupPurchaseLink(countdownElement) { const linkClicked = GM_getValue("linkClicked", false); if (!linkClicked) { const purchaseLink = countdownElement.querySelector("#purchaseLink"); purchaseLink.addEventListener('mouseenter', function (event) { const tooltipText = "非作者运营勿找,点击后刷新不再显示"; const tooltip = document.createElement('div'); tooltip.id = 'purchaseLinkTooltip'; tooltip.style = ` position: absolute; top: 100%; left: 0; background: #333; color: #fff; padding: 8px; border-radius: 5px; font-size: 12px; white-space: pre-wrap; width: 200px; height: auto; z-index: 1000; box-sizing: border-box; overflow: hidden; `; tooltip.textContent = tooltipText; purchaseLink.appendChild(tooltip); }); purchaseLink.addEventListener('mouseleave', function (event) { const tooltip = document.getElementById('purchaseLinkTooltip'); if (tooltip) { purchaseLink.removeChild(tooltip); } }); purchaseLink.addEventListener('click', function (event) { event.preventDefault(); GM_setValue("linkClicked", true); window.open("https://api.v3.cm/register?aff=25L7", "_blank"); }); } } function setupInfoIcon(countdownElement) { const infoIcon = countdownElement.querySelector("#infoIcon"); infoIcon.addEventListener("mouseenter", function () { const tooltip = document.createElement('div'); tooltip.id = 'tooltip'; tooltip.style = ` position: absolute; top: 25px; left: 0; background: #333; color: #fff; padding: 8px; border-radius: 5px; font-size: 12px; white-space: pre-wrap; width: 200px; height: auto; z-index: 1000; box-sizing: border-box; overflow: hidden; `; tooltip.innerText = `1.由于答题太快会导致被禁言,故倒计时不要太低。\n2.作者提供的API仅供测试,不要用于其他用途。\n3.被屏蔽的问题会显示下划线,未回答问题显示红色,回答过显示黑色。\n4.大部分课程回答50条,问30条问题即可满分。不要一天刷几百条。`; infoIcon.appendChild(tooltip); }); infoIcon.addEventListener("mouseleave", function () { const tooltip = document.getElementById("tooltip"); if (tooltip) tooltip.remove(); }); } function setupJumpButton(jumpButton) { jumpButton.addEventListener('click', () => { scrollToLastUnansweredQuestion(); }); setupButtonShadowEffects(jumpButton); } function setupButtonShadowEffects(button) { button.addEventListener('mousedown', () => { button.style.boxShadow = 'inset 2px 2px 4px #2f4686, inset -2px -2px 4px #507bcf'; }); button.addEventListener('mouseup', () => { button.style.boxShadow = '2px 2px 4px #2f4686, -2px -2px 4px #507bcf'; }); button.addEventListener('mouseleave', () => { button.style.boxShadow = '2px 2px 4px #2f4686, -2px -2px 4px #507bcf'; }); } function renderDropdownItems(dropdownOptions, allModels, defaultModels, dropdownSelected) { dropdownOptions.innerHTML = ` ${allModels.map(model => ` <div class="dropdown-item" data-model="${model}" style=" padding: 10px; cursor: pointer; ${defaultModels.includes(model) ? '' : 'display: flex; justify-content: space-between; align-items: center;'} background: linear-gradient(145deg, #ffffff, #e6e6e6); border-bottom: 1px solid #e0e0e0; "> ${model} ${defaultModels.includes(model) ? '' : `<span class="remove-model" data-model="${model}" style="cursor: pointer; color: red;">×</span>`} </div> `).join('')} <div class="add-model-container" style="padding: 10px; display: flex; align-items: center;"> <input type="text" id="newModelInput" placeholder="输入模型名称" style=" padding: 8px; border-radius: 5px; border: none; background: linear-gradient(145deg, #e6e6e6, #ffffff); box-shadow: inset 2px 2px 4px #cccccc, inset -2px -2px 4px #ffffff; width: 70%; box-sizing: border-box; height: 32px; "> <button id="saveModelButton" style=" border: none; border-radius: 8px; background: linear-gradient(145deg, #4c88d6, #3b5998); box-shadow: 2px 2px 4px #2f4686, -2px -2px 4px #507bcf; color: white; cursor: pointer; width: 25%; text-align: center; margin-left: 5px; height: 32px; ">保存</button> </div> `; const newModelInput = dropdownOptions.querySelector('#newModelInput'); const saveModelButton = dropdownOptions.querySelector('#saveModelButton'); saveModelButton.addEventListener('click', () => { const newModel = newModelInput.value.trim(); if (newModel && !getAllModels().includes(newModel)) { let customModels = GM_getValue("customModels", []); customModels.push(newModel); GM_setValue("customModels", customModels); const defaultModels = ["gemini-1.5-flash", "glm-4-flash"]; let allModels = [...defaultModels, ...customModels]; renderDropdownItems(dropdownOptions, allModels, defaultModels, dropdownSelected); } }); dropdownOptions.addEventListener('click', (event) => { if (event.target.classList.contains('dropdown-item')) { const model = event.target.dataset.model; GM_setValue("aimodel", model); const defaultModels = ["gemini-1.5-flash", "glm-4-flash"]; let customModels = GM_getValue("customModels", []); let allModels = [...defaultModels, ...customModels]; let selectedModel = model; dropdownSelected.textContent = model; dropdownOptions.style.display = 'none'; } else if (event.target.classList.contains('remove-model')) { const modelToRemove = event.target.dataset.model; let customModels = GM_getValue("customModels", []); customModels = customModels.filter(model => model !== modelToRemove); GM_setValue("customModels", customModels); const defaultModels = ["gemini-1.5-flash", "glm-4-flash"]; let allModels = [...defaultModels, ...customModels]; renderDropdownItems(dropdownOptions, allModels, defaultModels, dropdownSelected); } }); } function getAllModels() { const defaultModels = ["gemini-1.5-flash", "glm-4-flash"]; let customModels = GM_getValue("customModels", []); return [...defaultModels, ...customModels]; } let scrolling = false; function scrollToLastUnansweredQuestion() { if (scrolling) { console.log("正在滚动,请稍后..."); showAlert("正在滚动,请稍后..."); return; } scrolling = true; let scrollContainer = document.querySelector('.el-scrollbar__wrap'); if (!scrollContainer) { scrolling = false; return; } const questionItems = document.querySelectorAll('.question-item'); const courseNameElement = document.querySelector(".course-name"); const courseName = courseNameElement ? courseNameElement.innerText.trim() : ''; const questionsData = GM_getValue("questionsData", {}); function performScroll(targetElement) { const targetOffsetTop = targetElement.offsetTop; scrollContainer.scrollTo({ top: targetOffsetTop, behavior: 'smooth' }); const checkScrollInterval = setInterval(() => { const currentScrollTop = scrollContainer.scrollTop; const offsetDifference = Math.abs(currentScrollTop - targetOffsetTop); if (offsetDifference <= 5) { console.log("滚动完成,位于目标位置!"); clearInterval(checkScrollInterval); scrolling = false; } else { console.log("滚动未完全到达目标位置,继续等待..."); } }, 200); setTimeout(() => { clearInterval(checkScrollInterval); scrolling = false; console.log("滚动超时,停止检查。"); }, 5000); } for (let i = 0; i < questionItems.length; i++) { const item = questionItems[i]; const spanElement = item.querySelector('.question-content span'); const questionText = spanElement ? spanElement.title.trim() : ''; if (questionText && courseName && questionsData[courseName]) { const status = questionsData[courseName][questionText] || "未回答"; const isExcluded = spanElement.style.textDecoration === 'line-through'; if (status === "未回答" && !isExcluded) { console.log(`找到第一个未回答且未排除的问题,索引: ${i},问题内容: ${questionText}`); performScroll(item); return; } } } console.log("没有找到未回答且未排除的问题,滚动到最底部..."); scrollContainer.scrollTo({ top: scrollContainer.scrollHeight, behavior: 'smooth' }); const scrollEvent = new Event('scroll', { bubbles: true }); scrollContainer.dispatchEvent(scrollEvent); let lastQuestionCount = questionItems.length; const checkNewQuestions = setInterval(() => { const newQuestionItems = document.querySelectorAll('.question-item'); if (newQuestionItems.length > lastQuestionCount) { console.log("检测到新问题,重新查找未回答问题..."); clearInterval(checkNewQuestions); scrolling = false; scrollToLastUnansweredQuestion(); } }, 1000); setTimeout(() => { clearInterval(checkNewQuestions); scrolling = false; console.log("未检测到新问题,停止监控。"); showAlert("未检测到新问题,请稍后重试。"); }, 10000); } function showAlert(message) { console.log('Alert:', message); if (document.hidden) { return; } const stackId = 'alert-stack'; let alertStack = document.getElementById(stackId); if (!alertStack) { alertStack = document.createElement('div'); alertStack.id = stackId; Object.assign(alertStack.style, { position: 'fixed', bottom: '10px', left: '50%', transform: 'translateX(-50%)', zIndex: '9999999', display: 'flex', flexDirection: 'column-reverse', gap: '10px' }); document.body.appendChild(alertStack); } const alertBox = document.createElement('div'); Object.assign(alertBox.style, { backgroundColor: '#E0E5EC', padding: '20px', borderRadius: '12px', boxShadow: '10px 10px 15px #AEBEC7, -5px -5px 10px #FFFFFF', opacity: '0', transition: 'opacity 0.3s', position: 'relative', width: 'fit-content' }); const alertText = document.createElement('div'); Object.assign(alertText.style, { margin: '0', fontSize: '16px', fontWeight: 'bold', textAlign: 'center', textShadow: '2px 2px 3px rgba(0, 0, 0, 0.2)', color: '#4B5563' }); alertText.innerText = message; alertBox.appendChild(alertText); alertStack.appendChild(alertBox); requestAnimationFrame(() => { alertBox.style.opacity = '1'; }); setTimeout(() => { alertBox.style.opacity = '0'; setTimeout(() => { if (alertStack.contains(alertBox)) { alertStack.removeChild(alertBox); } if (alertStack.childNodes.length === 0 && document.body.contains(alertStack)) { document.body.removeChild(alertStack); } }, 300); }, 2500); } function checkForLatestVersion() { const lastChecked = GM_getValue("lastVersionCheck", 0); const currentTime = new Date().getTime(); const oneHourMillis = 60 * 60 * 1000; let retryAttempts = 0; const maxRetries = 5; const retryDelay = 1000; function requestVersion() { GM_xmlhttpRequest({ method: "GET", url: "https://update.greasyfork.dpdns.org/scripts/519662/知到智慧树全自动刷问答平时分助手.meta.js", onload: function (response) { const match = response.responseText.match(/@version\s+([\d.]+)/); if (match) { const latestVersion = match[1]; GM_setValue("lastVersionCheck", currentTime); GM_setValue("lastCheckedVersion", latestVersion); document.getElementById("latestVersion").innerText = latestVersion; } else { if (retryAttempts < maxRetries) { retryAttempts++; setTimeout(requestVersion, retryDelay); } else { document.getElementById("latestVersion").innerText = "获取失败"; } } } }); } if (currentTime - lastChecked > oneHourMillis) { requestVersion(); } else { const lastCheckedVersion = GM_getValue("lastCheckedVersion", "未检测"); document.getElementById("latestVersion").innerText = lastCheckedVersion; } } function startCountdown(restartCount = null) { if (countdownInterval) { clearInterval(countdownInterval); } const minTime = GM_getValue("countdownMin", 20); const maxTime = GM_getValue("countdownMax", 30); let countdown = restartCount !== null ? restartCount : Math.floor(Math.random() * ((maxTime + 1) - minTime)) + minTime; GM_setValue("countdownTime", countdown); displayCountdown(countdown); countdownInterval = setInterval(() => { countdown--; displayCountdown(countdown); GM_setValue("currentCountdown", countdown); if (countdown <= 0) { clearInterval(countdownInterval); countdownInterval = null; clickTheUnansweredLink(); console.log(`${GM_getValue("countdownTime", initialCountdownTime)}秒已过,点击动作触发。`); startCountdown(); } }, 1000); } function clickTheUnansweredLink() { const questionItems = document.querySelectorAll('.question-item'); const unansweredQuestions = Array.from(questionItems).filter(item => { const spanElement = item.querySelector('.question-content span'); const questionText = spanElement ? spanElement.title.trim() : ''; const courseNameElement = document.querySelector(".course-name"); const courseName = courseNameElement ? courseNameElement.innerText.trim() : ''; const status = GM_getValue("questionsData", {})[courseName]?.[questionText]; return status === "未回答"; }); if (unansweredQuestions.length > 0) { const firstUnansweredQuestionSpan = unansweredQuestions[0].querySelector('.question-content span'); if (firstUnansweredQuestionSpan) { firstUnansweredQuestionSpan.click(); console.log(`已点击第一个未回答的问题: ${firstUnansweredQuestionSpan.title}`); } else { console.log("未找到未回答问题的链接元素"); } } else { console.log("目前无未回答问题."); } } function checkHomeRegex() { const homePattern = /^https:\/\/qah5\.zhihuishu\.com\/qa\.html#\/web\/home/; const currentURL = window.location.href; if (homePattern.test(currentURL)) { console.log("正在获取问题列表..."); const items = document.querySelectorAll(".question-item .question-content span"); const courseNameElement = document.querySelector(".course-name"); if (courseNameElement && items.length) { const courseName = courseNameElement.innerText.trim(); let questionsData = GM_getValue("questionsData", {}); if (!questionsData[courseName]) { questionsData[courseName] = {}; } items.forEach(item => { const questionTitle = item.getAttribute("title").trim(); if (!questionsData[courseName][questionTitle]) { questionsData[courseName][questionTitle] = "未回答"; } }); GM_setValue("questionsData", questionsData); console.log("问题列表已更新:", questionsData); } } } function markQuestionAsAnswered(questionText) { const courseNameElement = document.querySelector(".course-name"); if (courseNameElement) { const courseName = courseNameElement.innerText.trim(); let questionsData = GM_getValue("questionsData", {}); if (questionsData[courseName] && questionsData[courseName][questionText] === "未回答") { questionsData[courseName][questionText] = "已回答"; GM_setValue("questionsData", questionsData); console.log(`问题“${questionText}”状态已更新为“已回答”。`); } } } function waitForAnswerButton() { const answerButton = document.querySelector("div.my-answer-btn.ZHIHUISHU_QZMD.tool-show span"); if (answerButton && answerButton.textContent.trim() === "我来回答") { console.log("找到‘我来回答’按钮,点击..."); answerButton.click(); noAnswerButtonCount = 0; setTimeout(() => { const inputElement = document.querySelector("textarea"); if (inputElement) { console.log("文本框已出现,准备回答问题..."); startChecking(); } else { console.log("文本框未出现,继续检测‘我来回答’按钮..."); waitForAnswerButton(); } }, intervalTime); } else { checkHomeRegex(); console.log("未找到‘我来回答’按钮或按钮状态不符合条件,稍后重试..."); noAnswerButtonCount++; const currentURL = window.location.href; const pattern = /^https:\/\/qah5\.zhihuishu\.com\/qa\.html#\/web\/questionDetail\/\d+/; if (noAnswerButtonCount > 1) { if (pattern.test(currentURL)) { const questionElement = document.querySelector(".question-content span"); const questionText = questionElement ? questionElement.innerText.trim() : ''; if (questionText) { markQuestionAsAnswered(questionText); } console.log("当前页面符合特定模式,关闭网页..."); showAlert("答题完毕,准备关闭网页") window.close(); } else { console.log("当前页面不符合关闭条件,继续检测..."); noAnswerButtonCount = 0; } } else { setTimeout(waitForAnswerButton, intervalTime); } } } function addQuestionStatus() { const questionItems = document.querySelectorAll('.question-item'); questionItems.forEach(item => { const spanElement = item.querySelector('.question-content span'); const questionText = spanElement ? spanElement.title.trim() : ''; if (questionText) { const courseNameElement = document.querySelector(".course-name"); if (courseNameElement) { const courseName = courseNameElement.innerText.trim(); let status = "未获取"; const questionsData = GM_getValue("questionsData", {}); if (questionsData[courseName] && questionsData[courseName][questionText]) { status = questionsData[courseName][questionText]; } const invalidPatterns = [ /什么是.+/, /.+是什么/, /.+是什么意思/, /.+的含义/, /指什么/, /是不是/, /对不对/, /好不好/, /好吗/, /近吗/, /远吗/, /对吗/, /可以吗/, /可以.+吗/, /是否可以/, /有没有/, /能不能/, /应该.+吗/, /是否应该/, /必须.+吗/, /是否必须/, /需要.+吗/, /是否需要/, /一定.+吗/, /是否一定/, /是否合理/, /是否相同/, /是否不同/, /有意义吗/, /意义大吗/, /喜欢.+吗/, /如何翻译.+/ ]; const isInvalidQuestion = invalidPatterns.some(pattern => pattern.test(questionText)); if (isInvalidQuestion) { spanElement.style.textDecoration = 'line-through'; status = "已回答"; questionsData[courseName] = questionsData[courseName] || {}; questionsData[courseName][questionText] = status; GM_setValue("questionsData", questionsData); } else if (status === "未回答") { spanElement.style.color = 'red'; } else if (status === "已回答") { spanElement.style.color = 'green'; } } } }); } function startChecking() { setInterval(() => { console.log("检查问题和输入框是否存在..."); const questionElement = document.querySelector(".question-content span"); if (!questionElement) { console.log("未找到问题元素。"); return; } const questionText = questionElement.innerText.trim(); if (!questionText) { console.log("问题内容为空。"); return; } const inputElement = document.querySelector("textarea"); if (!inputElement) { console.log("未找到输入框元素。"); return; } addQuestionStatus(); const answerButton = document.querySelector("div.my-answer-btn.ZHIHUISHU_QZMD.tool-show span"); const modalExists = document.querySelector(".yidun_modal"); if (modalExists) { console.log("检测到二维码,需要手动验证。10秒后关闭窗口。"); GM_notification("检测到二维码,请手动验证。10秒后关闭窗口。", "安全验证"); setTimeout(() => { window.close(); }, 10000); return; } if (!answerButton || answerButton.textContent.trim() !== "我来回答") { const currentURL = window.location.href; const pattern = /^https:\/\/qah5\.zhihuishu\.com\/qa\.html#\/web\/questionDetail/; if (pattern.test(currentURL)) { console.log("未找到'我来回答'按钮且当前页面符合特定模式,关闭当前窗口。"); markQuestionAsAnswered(questionText); window.close(); } else { console.log("未找到'我来回答'按钮且当前页面不符合特定模式,停止回答逻辑。"); } return; } if (inputElement.value.trim() !== "") { console.log("输入框中已有数据,检查是否需要点击立即发布..."); startPublishChecking(); return; } console.log("找到问题并准备回答:", questionText); if (!requestLock) { requestLock = true; answerQuestion(questionText, inputElement); showAlert("正在回答问题") } else { console.log("请求进行中,跳过此次回答逻辑。"); showAlert("正在回答问题"); } }, intervalTime); } function checkAndAddGenerateQuestionButton() { const dialog = document.querySelector('div[role="dialog"][aria-modal="true"][aria-label="提问"].el-dialog'); if (dialog) { const publishButton = dialog.querySelector('.dialog-bottom .up-btn'); if (publishButton) { if (!dialog.querySelector('#generateQuestionButton')) { const generateQuestionButton = document.createElement('div'); generateQuestionButton.id = 'generateQuestionButton'; generateQuestionButton.textContent = '生成问题'; generateQuestionButton.style.cssText = ` display: inline-block; margin-right: 40px; /* 添加 40px 的右侧外边距 */ padding: 10px 20px; border: none; border-radius: 10px; background: linear-gradient(145deg, #4c88d6, #3b5998); box-shadow: 2px 2px 4px #2f4686, -2px -2px 4px #507bcf; color: white; font-weight: bold; cursor: pointer; `; generateQuestionButton.addEventListener('click', () => { generateQuestion(dialog); }); generateQuestionButton.addEventListener('mousedown', () => { generateQuestionButton.style.boxShadow = 'inset 2px 2px 4px #2f4686, inset -2px -2px 4px #507bcf'; }); generateQuestionButton.addEventListener('mouseup', () => { generateQuestionButton.style.boxShadow = '2px 2px 4px #2f4686, -2px -2px 4px #507bcf'; }); generateQuestionButton.addEventListener('mouseleave', () => { generateQuestionButton.style.boxShadow = '2px 2px 4px #2f4686, -2px -2px 4px #507bcf'; }); const dialogBottom = publishButton.parentNode; dialogBottom.style.display = 'flex'; dialogBottom.style.justifyContent = 'flex-end'; dialogBottom.insertBefore(generateQuestionButton, publishButton); } } } } const observer = new MutationObserver(checkAndAddGenerateQuestionButton); observer.observe(document.body, { childList: true, subtree: true, attributes: false, characterData: false }); function generateQuestion(dialog) { const courseNameElement = document.querySelector(".course-name"); const courseName = courseNameElement ? courseNameElement.innerText.trim() : '当前课程'; const inputElement = dialog.querySelector('textarea'); if (!inputElement) { showAlert('未找到提问输入框!'); return; } const questionElements = document.querySelectorAll(".question-content.ZHIHUISHU_QZMD span"); const recentQuestions = Array.from(questionElements) .map((element, index) => `${index + 1}. ${element.textContent.trim()}`) .slice(0, 20) .join("\n"); const prompt = `针对${courseName},请生成一个与以下30个问题**完全不同**的开放式问题,字数限制在50字以内。务必不同句式 **以下是最近别人发送的1o个问题,请**务必避免句式重复或者句式相似**: ${recentQuestions} \n不要一直用"如何怎么样"的句式,你需要随便地提问,只要关于这个主题就行,发散思维。只回复你想到的问题即可,只需要回复一个问题即可,不要换行。`; console.log(prompt); showAlert(`正在生成问题...`) GM_xmlhttpRequest({ method: "POST", url: GM_getValue("API_URL", defaultAPIUrl), headers: { "Content-Type": "application/json", "Authorization": `Bearer ${GM_getValue("API_KEY", defaultAPIKey)}` }, data: JSON.stringify({ model: "gemini-1.5-flash", messages: [ { role: "user", content: prompt } ], max_tokens: 10240, temperature: 1, top_p: 1, stream: false }), onload: function (response) { console.log("请求成功:", response.responseText); if (response.status === 200) { const jsonResponse = JSON.parse(response.responseText); const generatedQuestion = jsonResponse.choices[0].message.content.trim(); inputElement.value = generatedQuestion; inputElement.dispatchEvent(new Event('input', { 'bubbles': true })); showAlert('问题已生成并填充到提问框!'); } else { console.error("API 请求失败,状态码:", response.status); showAlert("问题生成失败,请检查API设置或稍后重试。"); } }, onerror: function () { console.error("API 请求出错。"); showAlert("问题生成出错,请检查网络连接。"); } }); } function startPublishChecking() { console.log("检查是否需要点击立即发布按钮..."); const publishButton = document.querySelector('.dialog-bottom .up-btn.ZHIHUISHU_QZMD.set-btn'); const inputElement = document.querySelector('textarea'); if ( inputElement && inputElement.value.trim() !== "" && publishButton && publishButton.textContent.trim() === "立即发布" ) { console.log("找到立即发布按钮,自动点击..."); publishButton.click(); } } function answerQuestion(questionText, inputElement) { GM_xmlhttpRequest({ method: "POST", url: GM_getValue("API_URL", defaultAPIUrl), headers: { "Content-Type": "application/json", "Authorization": `Bearer ${GM_getValue("API_KEY", defaultAPIKey)}` }, data: JSON.stringify({ model: GM_getValue("aimodel", defaultModel), messages: [ { role: "user", content: `智慧树问题回答,你比如我提问:音乐剧与民歌在曲风、表现形式和情感表达上有何不同?如何在声乐演唱中体现这些差异?你只需要给出简介30字以内或者左右的回答即可。只需要输出回答,不需要其他,也不需要markdown格式,回答中严禁出现下面三个词连在一起:“学习通”。且回答至少超过10个字。问题如下:${questionText}` } ], max_tokens: 1688, temperature: 0.5, stream: false }), onload: function (response) { requestLock = false; console.log("请求成功:", response.responseText); if (response.status === 200) { const jsonResponse = JSON.parse(response.responseText); const answer = jsonResponse.choices[0].message.content.trim(); console.log("获取到的回答:", answer); inputElement.value = answer; inputElement.dispatchEvent(inputEvent); showAlert("成功填入问题答案"); } else { console.error("API 请求失败,状态码:", response.status); showAlert("申请答题链接失败,请刷新网页或稍后再试。") } }, onerror: function () { requestLock = false; console.error("API 请求出错。"); } }); } window.onload = () => { console.log("启动智慧树自动回答器..."); waitForAnswerButton(); initMutationObserver(); startCountdown(); }; })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址