1Kahoot Custom Mods - ViolentMonkey Compatible Ultra super

Currently only highlight answer works more will come soon.The Code for the mod menu is (9854).Custom mods for Kahoot with a menu and cheat features, including Name Glitcher, Scoreboard Skip, and Kick Player functionality.

// ==UserScript==
// @name         1Kahoot Custom Mods - ViolentMonkey Compatible Ultra super
// @namespace    http://tampermonkey.net/
// @version      1.5
// @description  Currently only highlight answer works more will come soon.The Code for the mod menu is (9854).Custom mods for Kahoot with a menu and cheat features, including Name Glitcher, Scoreboard Skip, and Kick Player functionality.
// @author       You
// @match        https://kahoot.it/*
// @match        https://play.kahoot.it/v2*
// @grant        GM_xmlhttpRequest
// @run-at       document-idle
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';

    // Main menu HTML creation with cartoony rainbow background and emojis
    const menuHTML = `
        <div id="menu" style="position: fixed; top: 20px; left: 20px; padding: 15px; color: white; font-family: 'Comic Sans MS', cursive, sans-serif; z-index: 9999; border-radius: 10px; box-shadow: 0px 5px 10px rgba(0,0,0,0.5); background: linear-gradient(45deg, #ff0000, #ff7f00, #ffff00, #00ff00, #0000ff, #4b0082, #9400d3); animation: rainbow-background 5s infinite linear;">
            <h3 style="color: #FF6347; font-size: 20px;">Ownership of Rylan Rude 🎮</h3>
            <p style="font-size: 16px;">Staff: Enick, Alaric 🤝</p>
            <p style="font-size: 14px; font-style: italic;">Beta Testers: Colton 🧪</p>
            <input type="text" id="accessCode" placeholder="Enter Code 🔑" style="width: 100%; padding: 5px; margin-bottom: 10px; border-radius: 5px;" />
            <button id="submitCode" style="width: 100%; padding: 10px; background-color: #FF4500; border: none; border-radius: 5px; color: white; font-size: 16px; cursor: pointer;">Submit Code 💥</button>
        </div>
        <div id="custom-menu" style="display: none; position: fixed; top: 100px; left: 20px; padding: 15px; color: white; font-family: 'Comic Sans MS', cursive, sans-serif; z-index: 9999; border-radius: 10px; box-shadow: 0px 5px 10px rgba(0,0,0,0.5); background: linear-gradient(45deg, #ff0000, #ff7f00, #ffff00, #00ff00, #0000ff, #4b0082, #9400d3); animation: rainbow-background 5s infinite linear;">
            <h3 style="color: #FF6347; font-size: 20px;">Kahoot Mods 🎉</h3>
            <button id="auto-answer" style="width: 100%; margin-bottom: 10px; padding: 10px; background-color: #32CD32; border: none; border-radius: 5px; font-size: 16px; cursor: pointer;">Auto Answer ✅</button>
            <button id="rainbow-bg" style="width: 100%; margin-bottom: 10px; padding: 10px; background-color: #FFD700; border: none; border-radius: 5px; font-size: 16px; cursor: pointer;">Rainbow Background 🌈</button>
            <button id="crash-gun" style="width: 100%; margin-bottom: 10px; padding: 10px; background-color: #DC143C; border: none; border-radius: 5px; font-size: 16px; cursor: pointer;">Crash Gun 💥</button>
            <button id="flood-lobby" style="width: 100%; margin-bottom: 10px; padding: 10px; background-color: #8A2BE2; border: none; border-radius: 5px; font-size: 16px; cursor: pointer;">Flood Lobby 🌊</button>
            <button id="name-glitcher" style="width: 100%; margin-bottom: 10px; padding: 10px; background-color: #00CED1; border: none; border-radius: 5px; font-size: 16px; cursor: pointer;">Name Glitcher ✨</button>
            <button id="scoreboard-skip" style="width: 100%; margin-bottom: 10px; padding: 10px; background-color: #FF69B4; border: none; border-radius: 5px; font-size: 16px; cursor: pointer;">Skip Scoreboard 🚀</button>
            <button id="kick-player" style="width: 100%; margin-top: 10px; padding: 10px; background-color: #FF1493; border: none; border-radius: 5px; font-size: 16px; cursor: pointer;">Kick Player (Beta) ⚡</button>
        </div>
    `;
    // Add menu HTML to the document
    document.body.insertAdjacentHTML('beforeend', menuHTML);

    // CSS for rainbow flowing effect
    const style = document.createElement('style');
    style.textContent = `
        @keyframes rainbow-background {
            0% { background: linear-gradient(45deg, #ff0000, #ff7f00, #ffff00, #00ff00, #0000ff, #4b0082, #9400d3); }
            25% { background: linear-gradient(45deg, #ffff00, #ff7f00, #ff0000, #00ff00, #0000ff, #4b0082, #9400d3); }
            50% { background: linear-gradient(45deg, #00ff00, #ff0000, #ff7f00, #ffff00, #0000ff, #4b0082, #9400d3); }
            75% { background: linear-gradient(45deg, #0000ff, #00ff00, #ff0000, #ff7f00, #ffff00, #4b0082, #9400d3); }
            100% { background: linear-gradient(45deg, #4b0082, #0000ff, #00ff00, #ff0000, #ff7f00, #ffff00, #9400d3); }
        }
    `;
    document.head.appendChild(style);

    // Submit code to display custom menu
    document.getElementById('submitCode').addEventListener('click', function() {
        const code = document.getElementById('accessCode').value.trim();
        if (code === '9854') {
            document.getElementById('custom-menu').style.display = 'block';
        } else {
            alert('Invalid code. ❌');
        }
    });

    // Toggle visibility of both menus when pressing 'Z'
    document.addEventListener('keydown', function(event) {
        if (event.key.toLowerCase() === 'z') {
            const menu = document.getElementById('menu');
            const customMenu = document.getElementById('custom-menu');
            const isMenuVisible = menu.style.display === 'block' || menu.style.display === '';
            const isCustomMenuVisible = customMenu.style.display === 'block' || customMenu.style.display === '';

            if (isMenuVisible || isCustomMenuVisible) {
                // If either menu is visible, hide both
                menu.style.display = 'none';
                customMenu.style.display = 'none';
            } else {
                // If both menus are hidden, show them
                menu.style.display = 'block';
                customMenu.style.display = 'block';
            }
        }
    });

    // Kick Player (Beta) functionality: Identify user by username and Game PIN
const kickPlayer = () => {
    const username = prompt('Enter the username of the player to kick:');
    const gamePin = prompt('Enter the Game PIN:');

    if (!username || !gamePin) {
        alert('Username and/or Game PIN missing. ❌');
        return;
    }

    // Find the game iframe and its window
    const targetIframe = document.querySelector('iframe');
    if (!targetIframe) {
        alert('Unable to find the game iframe. ❌');
        return;
    }

    const targetWindow = targetIframe.contentWindow;

    // Injecting a function into the iframe to identify and manipulate players
    targetWindow.postMessage({ type: 'kickPlayer', username: username, gamePin: gamePin }, '*');

    // Provide feedback
    alert(`Attempting to kick player ${username}... 💥❄️`);
};

// Listen for the custom message from the iframe (in case we need to perform an action inside the iframe)
window.addEventListener('message', function(event) {
    if (event.origin !== 'https://play.kahoot.it') return;  // Ensure we’re dealing with the Kahoot iframe

    const data = event.data;

    if (data.type === 'kickPlayer') {
        const username = data.username;
        const gamePin = data.gamePin;

        // Now we need to identify the player in the game.
        const players = document.querySelectorAll('.player');  // Assuming class 'player' holds player data
        let foundPlayer = null;

        players.forEach(player => {
            const playerName = player.querySelector('.player-name').innerText; // Assuming the player's name is in '.player-name'

            if (playerName === username) {
                foundPlayer = player;
                console.log(`Player ${username} found! Kicking out...`);

                // Simulate the action to "kick" the player
                player.style.display = 'none'; // Hides the player from the UI

                // Optionally, disable further actions (simulate a freeze)
                player.setAttribute('disabled', 'true');

                // Log or alert as necessary
                alert(`Player ${username} has been kicked from the game! ❌`);
            }
        });

        if (!foundPlayer) {
            alert(`Player with username ${username} not found! ❌`);
        }
    }
});

    // Name Glitcher Functionality (Bypass Name Restrictions)
    const nameGlitcher = () => {
        let nick = "";

        const nativeSend = XMLHttpRequest.prototype.send;
        XMLHttpRequest.prototype.send = function() {
            const oldCallback = this.onreadystatechange;

            this.onreadystatechange = function() {
                if (this.readyState === 4) {
                    try {
                        const response = JSON.parse(this.responseText);

                        if (response.namerator === true)
                            response.namerator = false;

                        Object.defineProperty(this, "responseText",{
                            writable: false,
                            configurable: true,
                            value: JSON.stringify(response)
                        });
                    } catch (e) {
                        console.error(e);
                    }
                }

                if (oldCallback)
                    return oldCallback.apply(this, arguments);
            };

            return nativeSend.apply(this, arguments);
        };

        const nativeWebSocket = window.WebSocket;
        window.WebSocket = function() {
            const ws = new nativeWebSocket(...arguments);
            const nativeSend = ws.send;

            ws.send = function() {
                const interceptedMessage = JSON.parse(arguments[0]);

                if (interceptedMessage[0] && interceptedMessage[0].data) {
                    if (JSON.parse(interceptedMessage[0].data.content).usingNamerator === false)
                        interceptedMessage[0].data.content = JSON.stringify({ ...JSON.parse(interceptedMessage[0].data.content), usingNamerator: true });

                    if (nick && interceptedMessage[0].data.name) {
                        interceptedMessage[0].data.name = nick;
                        nick = "";
                        console.log("Name Glitcher applied the nickname:", interceptedMessage[0].data.name); // Feedback
                        alert("Name Glitcher applied the nickname successfully!"); // User feedback
                    }
                }

                return nativeSend.apply(this, [JSON.stringify(interceptedMessage)]);
            };

            return ws;
        };

        const nativePushState = history.pushState;
        history.pushState = function() {
            const ret = nativePushState.apply(history, arguments);

            if (location.href.includes("kahoot.it/join")) {
                const observer = new MutationObserver(function() {
                    if (document.getElementById("nickname")) {
                        const input = document.createElement("input");
                        const nickname = document.getElementById("nickname");
                        const reactProps = Object.keys(nickname).find(v => v.includes("reactProps"));

                        if (nickname[reactProps] && nickname[reactProps].value) {
                            nick = nickname[reactProps].value;

                            input.value = ` glitcher_${Math.floor(Math.random() * 1000)}`;
                            nickname.value = input.value;
                            console.log("Attempted to apply the name:", nickname.value); // Feedback
                            alert("Attempted to apply a glitched nickname: " + nickname.value); // User feedback
                        }
                    }
                });

                observer.observe(document.body, {
                    childList: true,
                    subtree: true
                });
            }

            return ret;
        };
    };

    // Auto Answer Function
    let autoAnswerActive = false;
let autoAnswerInterval = null;

const toggleAutoAnswer = async () => {
    autoAnswerActive = !autoAnswerActive;

    if (autoAnswerActive) {
        document.getElementById('auto-answer').style.backgroundColor = '#FF0000'; // Indicate active mode
        document.getElementById('auto-answer').innerText = 'highlight Answer (ON) ✅';

        autoAnswerInterval = setInterval(autoAnswer, 3000); // Run every 3 seconds
    } else {
        document.getElementById('auto-answer').style.backgroundColor = '#32CD32'; // Reset button color
        document.getElementById('auto-answer').innerText = 'highlight Answer (OFF) ❌';

        clearInterval(autoAnswerInterval);
    }
};

const autoAnswer = async () => {
    const selectors = ['answer-0', 'answer-1', 'answer-2', 'answer-3'];
    const questionSelector = '.question-title__Title-sc-12qj0yr-1';
    let quizData = null;

    const fetchQuizData = (query) => {
        return new Promise((resolve, reject) => {
            const apiUrl = `https://create.kahoot.it/rest/kahoots/?query=${encodeURIComponent(query)}&limit=20`;
            GM_xmlhttpRequest({
                method: 'GET',
                url: apiUrl,
                onload: function(response) {
                    try {
                        const jsonResponse = JSON.parse(response.responseText);
                        if (jsonResponse.entities && jsonResponse.entities.length > 0) {
                            const quizId = jsonResponse.entities[0].card.uuid;
                            const quizDetailsUrl = `https://create.kahoot.it/rest/kahoots/${quizId}/card/?includeKahoot=true`;
                            GM_xmlhttpRequest({
                                method: 'GET',
                                url: quizDetailsUrl,
                                onload: function(quizResponse) {
                                    try {
                                        const quizDetails = JSON.parse(quizResponse.responseText);
                                        resolve(quizDetails);
                                    } catch (err) {
                                        console.error('Error parsing quiz details:', err);
                                        reject(err);
                                    }
                                },
                                onerror: function(err) {
                                    console.error('Error fetching quiz details:', err);
                                    reject(err);
                                }
                            });
                        } else {
                            console.warn('No matching quizzes found.');
                            reject('No quizzes found.');
                        }
                    } catch (err) {
                        console.error('Error parsing search response:', err);
                        reject(err);
                    }
                },
                onerror: function(err) {
                    console.error('Error making API request:', err);
                    reject(err);
                }
            });
        });
    };

    const questionElement = document.querySelector(questionSelector);
    const answerElements = selectors
        .map(selector => document.querySelector(`[data-functional-selector="${selector}"]`))
        .filter(el => el);

    if (!questionElement || answerElements.length === 0) {
        console.log('No question or answers detected yet.');
        return;
    }

    const question = questionElement.innerText.trim();
    const answers = answerElements.map(el => el.innerText.trim());

    if (!quizData) {
        try {
            console.log('Fetching quiz data...');
            quizData = await fetchQuizData(question);
            console.log('Quiz data loaded:', quizData);
        } catch (err) {
            console.warn('Failed to load quiz data.');
            return;
        }
    }

    const matchedQuestion = quizData.kahoot.questions.find(q => q.question.trim() === question);
    if (!matchedQuestion) {
        console.warn('No matching question found in quiz data.');
        return;
    }

    const correctChoice = matchedQuestion.choices.find(choice => choice.correct);
    if (correctChoice) {
        const correctAnswerText = correctChoice.answer.trim();
        const correctAnswerElement = answerElements.find(el => el.innerText.trim() === correctAnswerText);
        if (correctAnswerElement) {
            correctAnswerElement.style.border = '5px solid green';
            correctAnswerElement.click(); // Automatically click the correct answer
            console.log(`Auto-answered: ${correctAnswerText}`);
        } else {
            console.warn('Correct answer not found among visible options.');
        }
    } else {
        console.warn('No correct answer found for this question.');
    }
};

// Attach toggle function to the button
document.getElementById('auto-answer').addEventListener('click', toggleAutoAnswer);


    // Rainbow Background Toggle
    const enableRainbowBackground = () => {
        document.body.style.background = 'linear-gradient(45deg, #ff0000, #ff7f00, #ffff00, #00ff00, #0000ff, #4b0082, #9400d3)';
    };

    // Crash Gun functionality (Causing page crash)
    const crashGun = () => {
        while (true) {
            alert('Game Crashed!');
        }
    };

    // Flood Lobby functionality
    const floodLobby = () => {
        const bots = prompt('How many bots would you like to flood the lobby with?', 10);
        const pin = prompt('Enter the Game PIN:');

        if (!pin) {
            alert('Game PIN is required.');
            return;
        }

        for (let i = 0; i < bots; i++) {
            const botIframe = document.createElement('iframe');
            botIframe.src = `https://kahoot.it/join/${pin}`;
            botIframe.style.display = 'none';
            document.body.appendChild(botIframe);
        }
    };

    // Event listeners for buttons
    document.getElementById('auto-answer').addEventListener('click', autoAnswer);
    document.getElementById('rainbow-bg').addEventListener('click', enableRainbowBackground);
    document.getElementById('crash-gun').addEventListener('click', crashGun);
    document.getElementById('flood-lobby').addEventListener('click', floodLobby);
    document.getElementById('name-glitcher').addEventListener('click', nameGlitcher);
    document.getElementById('kick-player').addEventListener('click', kickPlayer);
})();