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
});
})();