Skibidi Toilet approved, made by floidAI
当前为
// ==UserScript==
// @name Kahoot Cheat (Beta) (Working Dec 2024)
// @namespace http://tampermonkey.net/
// @version 0.01
// @description Skibidi Toilet approved, made by floidAI
// @author You
// @match https://kahoot.it/*
// @grant GM.xmlHttpRequest
// @run-at document-idle
// @license Unlicense
// ==/UserScript==
(function () {
'use strict';
const selectors = [
'answer-0',
'answer-1',
'answer-2',
'answer-3'
];
const questionSelector = '.question-title__Title-sc-12qj0yr-1';
const questionCounterSelector = '.visually-hidden__SROnly-sc-18gl3eq-0';
const currentQuestionSelector = 'question-index-counter';
let quizData = null;
let currentUrl = location.href;
const observeUrlChange = () => {
setInterval(() => {
if (location.href !== currentUrl) {
currentUrl = location.href;
if (currentUrl === 'https://kahoot.it/gameblock') {
extractAndSendData();
}
}
}, 500);
};
const getTotalQuestions = () => {
const counterElement = document.getElementsByClassName("visually-hidden__SROnly-sc-18gl3eq-0")[1];
if (counterElement) {
const text = counterElement.innerText;
const match = text.match(/of (\d+)/);
if (match && match[1]) {
return parseInt(match[1], 10);
}
}
return null;
};
const extractAndSendData = () => {
const questionElement = document.querySelector(questionSelector);
const answerElements = selectors
.map(selector => document.querySelector(`[data-functional-selector="${selector}"]`))
.filter(el => el);
const totalQuestions = getTotalQuestions();
if (!totalQuestions) {
return;
}
if (questionElement && answerElements.length > 0) {
const question = questionElement.innerText;
const answers = answerElements.map(el => el.innerText);
const curQuestion = document.querySelector(`[data-functional-selector="${currentQuestionSelector}"]`).innerText;
if (quizData) {
processQuestionData(question, answers, totalQuestions);
} else {
const query = question;
const apiUrl = `https://create.kahoot.it/rest/kahoots/?query=${encodeURIComponent(query)}&limit=20&orderBy=relevance&cursor=0&searchCluster=1&includeExtendedCounters=false&inventoryItemId=ANY`;
GM.xmlHttpRequest({
method: 'GET',
url: apiUrl,
onload: function (response) {
const jsonResponse = JSON.parse(response.responseText);
const filteredResults = jsonResponse.entities.filter(quiz => quiz.card.number_of_questions === totalQuestions);
if (filteredResults.length > 0) {
const quizId = filteredResults[0].card.uuid;
const quizDetailsUrl = `https://create.kahoot.it/rest/kahoots/${quizId}/card/?includeKahoot=true`;
GM.xmlHttpRequest({
method: 'GET',
url: quizDetailsUrl,
onload: function (response) {
quizData = JSON.parse(response.responseText);
processQuestionData(question, answers, totalQuestions);
},
onerror: function (error) {
console.error('Error fetching quiz details:', error);
}
});
} else {
console.error(`No quizzes found with ${totalQuestions} questions.`);
}
},
onerror: function (error) {
console.error('Error making API request:', error);
}
});
}
} else {
console.error('Required elements not found or no answers available.');
}
};
const processQuestionData = (question, answers, totalQuestions) => {
const questionData = quizData.kahoot.questions.find(questionInData => questionInData.question == question);
const correctChoice = questionData.choices.find(choice => choice.correct);
if (correctChoice) {
const correctAnswerText = correctChoice.answer;
answers.forEach((answerText, index) => {
if (answerText.trim() === correctAnswerText.trim()) {
const answerElement = document.querySelector(`[data-functional-selector="answer-${index}"]`);
if (answerElement) {
answerElement.innerText = answerText.trim() + '.';
}
}
});
}
};
observeUrlChange();
})();