Greasy Fork is available in English.

Bonk.io Ultimate Enhanced Script

Adds rainbow styles, custom skins, and auto-join functionality to Bonk.io. Activated via commands.

// ==UserScript==
// @name         Bonk.io Ultimate Enhanced Script
// @namespace    http://tampermonkey.net/
// @version      18.7
// @description  Adds rainbow styles, custom skins, and auto-join functionality to Bonk.io. Activated via commands.
// @author       YourActualName
// @match        https://bonk.io/*
// @grant        none
// ==/UserScript==

(function () {
    'use strict';

    // States for various features
    let isRainbowActive = false;
    let isAutoJoinActive = false;
    let customSkinColor = null;

    let hue = 0; // For rainbow style

    /**
     * Command listener
     * Listens for commands typed in the chat and executes the associated functionality.
     */
    function setupCommandListener() {
        const chatInput = document.querySelector('#chatinput');
        if (!chatInput) return;

        chatInput.addEventListener('keydown', (e) => {
            if (e.key === 'Enter') {
                const command = chatInput.value.trim().toLowerCase();
                chatInput.value = ''; // Clear input after processing

                switch (command) {
                    case '/rainbowstyle':
                        isRainbowActive = !isRainbowActive;
                        console.log(`Rainbow Style: ${isRainbowActive ? 'Enabled' : 'Disabled'}`);
                        break;

                    case '/autojoin':
                        isAutoJoinActive = !isAutoJoinActive;
                        console.log(`Auto-Join: ${isAutoJoinActive ? 'Enabled' : 'Disabled'}`);
                        break;

                    case '/setskin':
                        setCustomSkin();
                        break;

                    default:
                        console.log(`Unknown command: ${command}`);
                }
            }
        });
    }

    /**
     * Rainbow effect for rectangle
     * Continuously updates the rectangle color and applies opposite colors to level and name.
     */
    function applyRainbowEffect() {
        function updateRainbow() {
            if (!isRainbowActive) return;

            hue = (hue + 5) % 360; // Increment hue for a smooth rainbow effect
            const rectangleColor = `hsl(${hue}, 100%, 50%)`;
            const oppositeColor = `hsl(${(hue + 180) % 360}, 100%, 50%)`;

            try {
                // Update rectangle colors
                if (window.bonkHost && window.bonkHost.p) {
                    window.bonkHost.p.color = rectangleColor;
                    window.bonkHost.p.outline = rectangleColor;
                }

                // Update name and level colors
                const playerName = document.querySelector('.playerName');
                const levelText = document.querySelector('.levelText');
                if (playerName) playerName.style.color = oppositeColor;
                if (levelText) levelText.style.color = oppositeColor;

            } catch (e) {
                console.error('Error applying rainbow effect:', e);
            }

            requestAnimationFrame(updateRainbow);
        }

        updateRainbow();
    }

    /**
     * Auto-join games
     * Automatically joins available games when the feature is enabled.
     */
    function autoJoinGames() {
        function checkJoinButton() {
            if (!isAutoJoinActive) return;

            try {
                const joinButton = document.querySelector('.joinGameButton');
                if (joinButton && joinButton.disabled === false) {
                    joinButton.click();
                    console.log('Auto-Joined a game!');
                }
            } catch (e) {
                console.error('Error with Auto-Join:', e);
            }

            setTimeout(checkJoinButton, 1000);
        }

        checkJoinButton();
    }

    /**
     * Set custom skin color
     * Prompts the user to enter a hex code for their rectangle color.
     */
    function setCustomSkin() {
        const inputColor = prompt('Enter a hex color for your skin (e.g., #ff0000):');
        if (inputColor && /^#([0-9A-F]{3}|[0-9A-F]{6})$/i.test(inputColor)) {
            customSkinColor = inputColor;
            applyCustomSkin();
        } else {
            alert('Invalid hex color! Please try again.');
        }
    }

    /**
     * Apply custom skin color
     * Applies the custom skin color to the game elements.
     */
    function applyCustomSkin() {
        if (window.bonkHost && window.bonkHost.p) {
            window.bonkHost.p.color = customSkinColor;
            window.bonkHost.p.outline = customSkinColor;
            console.log(`Custom skin set to: ${customSkinColor}`);
        } else {
            // If game elements are not yet available, wait and try again
            setTimeout(applyCustomSkin, 100);
        }
    }

    /**
     * Initialize the script
     * Waits for Bonk.io to load before activating features.
     */
    const waitForGame = setInterval(() => {
        if (typeof window.bonkHost !== 'undefined' && window.bonkHost.p !== undefined) {
            clearInterval(waitForGame); // Stop checking once the game is ready
            setupCommandListener(); // Set up commands
            applyRainbowEffect(); // Apply rainbow effects if toggled
            autoJoinGames(); // Auto-join games if toggled
        }
    }, 100);
})();