您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Cheat do CMSP by marco10pc, modificado
// ==UserScript== // @name Cheat para CMSP // @namespace https://cmspweb.ip.tv/ // @version 1.1 // @description Cheat do CMSP by marco10pc, modificado // @connect cmsp.ip.tv // @connect edusp-api.ip.tv // @author Rafael Gustavo Nogueira (marco10pc) // @match https://cmsp.ip.tv/* // @icon https://edusp-static.ip.tv/permanent/66aa8b3a1454f7f2b47e21a3/full.x-icon // @license GNU Affero General Public License v3.0 // ==/UserScript== (function() { 'use strict'; let lesson_regex = /https:\/\/cmsp\.ip\.tv\/mobile\/tms\/task\/\d+\/apply/; console.log("-- STARTING CMSP CHEETO By marcos10pc --"); function transformJson(jsonOriginal) { let novoJson = { status: "submitted", accessed_on: jsonOriginal.accessed_on, executed_on: jsonOriginal.executed_on, answers: {} }; for (let questionId in jsonOriginal.answers) { let question = jsonOriginal.answers[questionId]; let taskQuestion = jsonOriginal.task.questions.find(q => q.id === parseInt(questionId)); if (taskQuestion.type === "order-sentences") { let answer = taskQuestion.options.sentences.map(sentence => sentence.value); novoJson.answers[questionId] = { question_id: question.question_id, question_type: taskQuestion.type, answer: answer }; } else if (taskQuestion.type === "fill-words") { let pre_anwser = taskQuestion.options let anwser = pre_anwser.phrase.map(item => item.value); //console.log(`[DEBUG] ${JSON.stringify(anwser)}`) novoJson.answers[questionId] = { question_id: question.question_id, question_type: taskQuestion.type, answer: anwser }; } else if (taskQuestion.type === "text_ai") { let answer = taskQuestion.comment.replace(/<\/?p>/g, ''); novoJson.answers[questionId] = { question_id: question.question_id, question_type: taskQuestion.type, answer: { "0": answer } }; } else if (taskQuestion.type === "fill-letters") { let answer = taskQuestion.options.answer; novoJson.answers[questionId] = { question_id: question.question_id, question_type: taskQuestion.type, answer: answer }; } else if (taskQuestion.type === "cloud") { let answer = taskQuestion.options.ids; novoJson.answers[questionId] = { question_id: question.question_id, question_type: taskQuestion.type, answer: answer }; } else { let answer = Object.fromEntries( Object.keys(taskQuestion.options).map(optionId => [optionId, taskQuestion.options[optionId].answer]) ); novoJson.answers[questionId] = { question_id: question.question_id, question_type: taskQuestion.type, answer: answer }; } } return novoJson; } let oldHref = document.location.href; const observer = new MutationObserver(() => { if (oldHref !== document.location.href) { oldHref = document.location.href; if (lesson_regex.test(oldHref)) { console.log("[DEBUG] LESSON DETECTED"); let x_auth_key = JSON.parse(sessionStorage.getItem("cmsp.ip.tv:iptvdashboard:state")).auth.auth_token; let room_name = JSON.parse(sessionStorage.getItem("cmsp.ip.tv:iptvdashboard:state")).room.room.name; let id = oldHref.split("/")[6]; console.log(`[DEBUG] LESSON_ID: ${id} ROOM_NAME: ${room_name}`); let draft_body = { status: "draft", accessed_on: "room", executed_on: room_name, answers: {} }; const sendRequest = (method, url, data, callback) => { const xhr = new XMLHttpRequest(); xhr.open(method, url); xhr.setRequestHeader("X-Api-Key", x_auth_key); xhr.setRequestHeader("Content-Type", "application/json"); xhr.onload = () => callback(xhr); xhr.onerror = () => console.error('Request failed'); xhr.send(data ? JSON.stringify(data) : null); }; sendRequest("POST", `https://edusp-api.ip.tv/tms/task/${id}/answer`, draft_body, (response) => { console.log("[DEBUG] DRAFT_DONE, RESPONSE: ", response.responseText); let response_json = JSON.parse(response.responseText); let task_id = response_json.id; let get_anwsers_url = `https://edusp-api.ip.tv/tms/task/${id}/answer/${task_id}?with_task=true&with_genre=true&with_questions=true&with_assessed_skills=true`; console.log("[DEBUG] Getting Answers..."); sendRequest("GET", get_anwsers_url, null, (response) => { console.log(`[DEBUG] Get Answers request received response`); console.log(`[DEBUG] GET ANSWERS RESPONSE: ${response.responseText}`); let get_anwsers_response = JSON.parse(response.responseText); let send_anwsers_body = transformJson(get_anwsers_response); console.log(`[DEBUG] Sending Answers... BODY: ${JSON.stringify(send_anwsers_body)}`); sendRequest("PUT", `https://edusp-api.ip.tv/tms/task/${id}/answer/${task_id}`, send_anwsers_body, (response) => { if (response.status !== 200) { alert(`[ERROR] An error occurred while sending the answers. RESPONSE: ${response.responseText}`); } console.log(`[DEBUG] Answers Sent! RESPONSE: ${response.responseText}`); const watermark = document.querySelector('.MuiTypography-root.MuiTypography-body1.css-1exusee'); if (watermark) { watermark.textContent = 'Rafael G. Nogueira'; watermark.style.fontSize = '70px'; setTimeout(() => { document.querySelector('button.MuiButtonBase-root.MuiButton-root.MuiLoadingButton-root.MuiButton-contained.MuiButton-containedInherit.MuiButton-sizeMedium.MuiButton-containedSizeMedium.MuiButton-colorInherit.css-prsfpd').click(); }, 500); } }); }); }); } } }); observer.observe(document.body, { childList: true, subtree: true }); })();