Agar.io clone bots! And .io Bots 2021!

The best bots for agario clones! NOW OPEN SOURCED!

当前为 2021-11-12 提交的版本,查看 最新版本

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

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

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         Agar.io clone bots! And .io Bots 2021!
// @namespace    Bots
// @version      v.18
// @description  The best bots for agario clones! NOW OPEN SOURCED!
// @author       Tatsuya & Raze
// @match        *.agario.boston/*
// @match        *.es.agar.live/*
// @match        *.aquar.io/*
// @match        *.agarz.com/*
// @match        *.oceanar.io/*
// @match        *.agarabi.net/*
// @match        *.agarblack.com/*
// @match        *.tr.agar.live/*
// @match        *.agar-io.live/*
// @match        *.agars.live/*
// @match        *.www.inciagario.net/*
// @match        *.agariott.com/*
// @match        *.agarr.live/*
// @match        *.agar.live/*
// @match        *.agario.zafer2.com/*
// @match        *.agario.work/*
// @match        *.agario.network/*
// @match        *.agar.rip/*
// @match        *.agar.chat/*
// @match        *.agario.nl/*
// @match        *.agariomoddedserver.com/*
// @match        *.agario.in/*
// @match        *.agario.id/*
// @match        *.agarplay.club/*
// @match        *.agariomodded.com/*
// @match        *.bestagario.org/*
// @match        *.agarprivateserver.com/*
// @match        *.agariohub.cc/*
// @match        *.agarr.live/*
// @match        *.agarprivateservers.org/*
// @match        *.agar.cc/*
// @match        *.agario.one/*
// @match        *.agar.team/*
// @match        *.agar.club/*
// @match        *.agarprivateservers.net/*
// @match        *.agario.tube/*
// @match        *.agarprivateserver.com/*
// @match        *.agario.cc/*
// @match        *.easyagario.icu/*
// @match        *.agario.red/*
// @run-at       document-end
// @icon         https://static.wikia.nocookie.net/jacksepticeye/images/2/2e/Agar.io_logo.png/revision/latest?cb=20190228055524
// @grant        none
// ==/UserScript==

class User {
    constructor() {
        this.BotAmount = 0;
        this.botamt = 0;
        window.started = false;
        this.verify();
    }

    verify() {
        // Removed verify code.
        this.addEssentials();
    }

    powerlineinject() {
        // removed.
    }

    addEssentials() {
        var parseOrigin = /(\w+)\:\/\/(\w+.\w+)/gi.exec(window.location.origin)[2];
        this.inject();
        this.HookInfo();
        if(parseOrigin == "oceanar.io") {
            this.addOceanarUI();
        } else if(parseOrigin == "aquar.io") {
            this.addAquarUI();
        } else {
            this.addUI();
        }
    }

    addAquarUI() {
        let cssStyles = document.createElement('head');
        let ui = document.createElement('div');
        ui.id = 'botcanvas';
        ui.style.background = 'rgba(0, 0, 0, 0.7)';
        ui.style.top = '-8px';
        ui.style.left = '-8px';
        ui.style.display = 'block';
        ui.style.position = 'absolute';
        ui.style['text-align'] = 'center';
        ui.style['font-size'] = '15px';
        ui.style.color = '#FFFFFF';
        ui.style.padding = '12px';
        ui.style['padding-right'] = '12px';
        ui.style['padding-top'] = '9px';
        ui.style['padding-bottom'] = '9px';
        ui.style.margin = '1%';
        ui.style['z-index'] = '1000000';
        ui.style['.sides'] = '12px';
        ui.style.border = '2px solid #ffffff';
        cssStyles.innerHTML +=
            '<script src="https://code.jquery.com/jquery-3.4.1.slim.min.js" integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n" crossorigin="anonymous"></script><script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script><link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">';
        ui.innerHTML +=
            '<div id="tzfst">.io Bots!</div> <div id="u2ub1">Discord.gg/bAstbAfem9</div> <div id="u2ub1eqe">Loading...</div> <input type="submit" value="Start" div id = "Startbots"> <input type="submit" value="Stop" div id = "Stopbots">';
        document.body.appendChild(ui);
        var styles = `
        #fname {
        padding: 4px 0px;
        margin: 0 0 5px;
        width: 120px;
        }
        #u2ub1eqe {
        margin: 0 0 5px;
        font-family: Ubuntu;
        font-weight: bold;
        font-size: 15px;
        margin-top: 0px;
        color: #00ff00;
        }
        #u2ub1 {
        margin: 1px 0 5px;
        font-family: Ubuntu;
	    font-weight: bold;
	    font-size: 13px;
	    COLOR: #afafb6;
        cursor: pointer;
        }
        #tzfst {
        font-family: Ubuntu;
	    font-weight: bold;
	    font-size: 15px;
	    COLOR: WHITE;
        }
        #Startbots {
        margin: 1px 0 5px;
        border: none;
        padding: 1px 16px;
        border-radius: 4px;
        background-color: #4CAF50;
        color: white;
        cursor: pointer;
        }
        #Stopbots {
        margin: 1px 0 5px;
        border: none;
        padding: 1px 16px;
        border-radius: 4px;
        background-color: #DA2600;
        color: white;
        cursor: pointer;
        }
`
        var styleSheet = document.createElement("style")
        styleSheet.type = "text/css"
        styleSheet.innerText = styles
        document.head.appendChild(styleSheet);
        document.getElementById('Startbots').onclick = () => {
            if(!window.started) {
                startBots();
            }
        };
        document.getElementById('Stopbots').onclick = () => {
            if(window.started == true) {
                stopBots();
            }
        };
        document.getElementById('u2ub1').onclick = () => {
            location.href = 'https://discord.gg/bAstbAfem9';
        };
        setInterval(() => {
            document.getElementById('u2ub1eqe').innerText = `${this.botamt}/${this.BotAmount}`;
        }, 1000);
    }

    addOceanarUI() {
        let cssStyles = document.createElement('head');
        let ui = document.createElement('div');
        ui.id = 'botcanvas';
        ui.style.background = 'rgba(0, 0, 0, 0.7)';
        ui.style.top = '-8px';
        ui.style.left = '-8px';
        ui.style.display = 'block';
        ui.style.position = 'absolute';
        ui.style['text-align'] = 'center';
        ui.style['font-size'] = '15px';
        ui.style.color = '#FFFFFF';
        ui.style.padding = '12px';
        ui.style['padding-right'] = '12px';
        ui.style['padding-top'] = '9px';
        ui.style['padding-bottom'] = '9px';
        ui.style.margin = '1%';
        ui.style['z-index'] = '1000000';
        ui.style['.sides'] = '12px';
        ui.style.border = '2px solid #ffffff';
        cssStyles.innerHTML +=
            '<script src="https://code.jquery.com/jquery-3.4.1.slim.min.js" integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n" crossorigin="anonymous"></script><script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script><link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">';
        ui.innerHTML +=
            '<div id="tzfst">.io Bots!</div> <div id="u2ub1">Discord.gg/bAstbAfem9</div> <div id="u2ub1eqe">Loading...</div> <input type="text" div id="fname" name="firstname" placeholder="Bot name..."><br> <input type="submit" value="Start" div id = "Startbots"> <input type="submit" value="Stop" div id = "Stopbots">';
        document.body.appendChild(ui);
        var styles = `
        #fname {
        padding: 4px 0px;
        margin: 0 0 5px;
        width: 120px;
        }
        #u2ub1eqe {
        margin: 0 0 5px;
        font-family: Ubuntu;
        font-weight: bold;
        font-size: 15px;
        margin-top: 0px;
        color: #00ff00;
        }
        #u2ub1 {
        margin: 1px 0 5px;
        font-family: Ubuntu;
	    font-weight: bold;
	    font-size: 13px;
	    COLOR: #afafb6;
        cursor: pointer;
        }
        #tzfst {
        font-family: Ubuntu;
	    font-weight: bold;
	    font-size: 15px;
	    COLOR: WHITE;
        }
        #Startbots {
        margin: 1px 0 5px;
        border: none;
        padding: 1px 16px;
        border-radius: 4px;
        background-color: #4CAF50;
        color: white;
        cursor: pointer;
        }
        #Stopbots {
        margin: 1px 0 5px;
        border: none;
        padding: 1px 16px;
        border-radius: 4px;
        background-color: #DA2600;
        color: white;
        cursor: pointer;
        }
`
        var styleSheet = document.createElement("style")
        styleSheet.type = "text/css"
        styleSheet.innerText = styles
        document.head.appendChild(styleSheet);
        document.getElementById('Startbots').onclick = () => {
            if(!window.started) {
                startBots();
            }
        };
        document.getElementById('Stopbots').onclick = () => {
            if(window.started == true) {
                stopBots();
            }
        };
        document.getElementById('u2ub1').onclick = () => {
            location.href = 'https://discord.gg/bAstbAfem9';
        };
        setInterval(() => {
            document.getElementById('u2ub1eqe').innerText = `${this.botamt}/${this.BotAmount}`;
        }, 1000);
    }

    addUI() {
        let cssStyles = document.createElement('head');
        let ui = document.createElement('div');
        ui.id = 'botcanvas';
        ui.style.background = 'rgba(0, 0, 0, 0.7)';
        ui.style.top = '-8px';
        ui.style['border-radius'] = '3px';
        ui.style.left = '-8px';
        ui.style.display = 'block';
        ui.style.position = 'absolute';
        ui.style['text-align'] = 'center';
        ui.style['font-size'] = '15px';
        ui.style.color = '#FFFFFF';
        ui.style.padding = '7px';
        ui.style['padding-right'] = '7px';
        ui.style['padding-top'] = '7px';
        ui.style['padding-bottom'] = '7px';
        ui.style.margin = '1%';
        ui.style['z-index'] = '1000000';
        ui.style['.sides'] = '12px';
        ui.style.border = '2px solid #ffffff';
        cssStyles.innerHTML +=
            '<script src="https://code.jquery.com/jquery-3.4.1.slim.min.js" integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n" crossorigin="anonymous"></script><script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script><link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">';
        ui.innerHTML +=
            '<div id="tzfst">Clone Bots</div> <div id="u2ub1">Discord.gg/bAstbAfem9</div> <div id="u2ub1eqe">Loading...</div> <input type="text" div id="fname" name="firstname" placeholder="Bot name..."><br> <input type="submit" value="Start" div id = "Startbots"> <input type="submit" value="Stop" div id = "Stopbots">';
        document.body.appendChild(ui);
        var styles = `
        #fname {
        color: #808080;
        border: 2px solid WHITE;
        border-radius: 4px;
        box-sizing: border-box;
        padding: 0px 0px;
        margin: 0 0 5px;
        width: 120px;
        }
        #u2ub1eqe {
        margin: 0 0 4px;
        font-family: Ubuntu;
        font-weight: bold;
        font-size: 15px;
        margin-top: 0px;
        color: #00ff00;
        }
        #u2ub1 {
        margin: -8px 0px 0px;
        font-family: Ubuntu;
	    font-weight: bold;
	    font-size: 13px;
	    COLOR: rgb(182, 186, 183);
        cursor: pointer;
        }
        #tzfst {
        margin: -5px 0px 0px;
        font-family: Ubuntu;
	    font-weight: bold;
	    font-size: 15px;
	    COLOR: WHITE;
        }
        #Startbots {
        margin: 1px 0 -7px;
        border: none;
        padding: 1px 22px;
        border-radius: 3px;
        background-color: #4CAF50;
        color: white;
        cursor: pointer;
        }
        #Stopbots {
        margin: 1px 0 -7px;
        border: none;
        padding: 1px 22px;
        border-radius: 3px;
        background-color: #DA2600;
        color: white;
        cursor: pointer;
        }
`
        var styleSheet = document.createElement("style")
        styleSheet.type = "text/css"
        styleSheet.innerText = styles
        document.head.appendChild(styleSheet);
        document.getElementById('Startbots').onclick = () => {
            if(!window.started) {
                startBots();
            }
        };
        document.getElementById('Stopbots').onclick = () => {
            if(window.started == true) {
                stopBots();
            }
        };
        document.getElementById('u2ub1').onclick = () => {
            location.href = 'https://discord.gg/bAstbAfem9';
        };
        setInterval(() => {
            document.getElementById('u2ub1eqe').innerText = `${this.botamt}/${this.BotAmount}`;
        }, 1000);
    }
    HookInfo() {
        window.addEventListener('keypress', (event) => {
            switch(event.key) {
                case 'e':
                    window.split();
                    break;
                case 'r':
                    window.eject();
                    break;
                case 'm':
                    window.chat();
                    break;
            }
        });
        let parseOrigin = /(\w+)\:\/\/(\w+.\w+)/gi.exec(window.location.origin)[2];
        if(parseOrigin == 'tr.agar' || parseOrigin == 'agars.live' || parseOrigin == 'agarr.live' || parseOrigin == 'agarplay.club' || parseOrigin ==
            'es.agar' || parseOrigin == 'agar.live' || parseOrigin == 'agar-io') {
            this.BotAmount = 65;
        } else if(parseOrigin == "www.inciagario" || parseOrigin == "agariott.com") {
            this.BotAmount = 10;
        } else if(parseOrigin == "oceanar.io" || parseOrigin == "aquar.io") {
            this.BotAmount = 100;
        } else if(parseOrigin == "agario.zafer2") {
            this.BotAmount = 70;
        } else {
            this.BotAmount = 60;
        }
    }
    inject() {
        let parseOrigin = /(\w+)\:\/\/(\w+.\w+)/gi.exec(window.location.origin)[2];
        if(parseOrigin == "aquar.io") {
            WebSocket.prototype.reaSend = WebSocket.prototype.send;
            WebSocket.prototype.send = function(pkt) {
                this.reaSend(pkt);
                if(typeof pkt == 'string') return;
                if(this.url.includes('localhost')) return;
                if(pkt instanceof ArrayBuffer) pkt = new DataView(pkt);
                else if(pkt instanceof DataView) pkt = pkt;
                else pkt = new DataView(pkt.buffer);
                let offset = 0;
                switch(pkt.getUint8(0, true)) {
                    case 14:
                        window.mousepos = pkt.buffer;
                        break;
                }
                window.CurrentWs = this.url;
            }
        } else if(parseOrigin == "www.inciagario" || parseOrigin == "agariott.com") {
            WebSocket.prototype.reaSend = WebSocket.prototype.send;
            WebSocket.prototype.send = function(pkt) {
                this.reaSend(pkt);
                if(typeof pkt == 'string') return;
                if(this.url.includes('localhost')) return;
                if(pkt instanceof ArrayBuffer) pkt = new DataView(pkt);
                else if(pkt instanceof DataView) pkt = pkt;
                else pkt = new DataView(pkt.buffer);
                let offset = 0;
                switch(pkt.getUint8(0, true)) {
                    case 104:
                        window.xpos = pkt.getFloat64(1, true);
                        window.ypos = pkt.getFloat64(9, true);
                        break;
                }
                window.CurrentWs = this.url;
            }
        } else if(parseOrigin == "oceanar.io") {
            WebSocket.prototype.reaSend = WebSocket.prototype.send;
            WebSocket.prototype.send = function(pkt) {
                this.reaSend(pkt);
                if(typeof pkt == 'string') return;
                if(this.url.includes('localhost')) return;
                if(pkt instanceof ArrayBuffer) pkt = new DataView(pkt);
                else if(pkt instanceof DataView) pkt = pkt;
                else pkt = new DataView(pkt.buffer);
                let offset = 0;
                switch(pkt.getUint8(0, true)) {
                    case 5:
                        window.mousepos = pkt.buffer;
                        break;
                }
                window.CurrentWs = this.url;
            }
        } else {
            console.log("Using default inject.");
            WebSocket.prototype.reaSend = WebSocket.prototype.send;
            WebSocket.prototype.send = function(pkt) {
                this.reaSend(pkt);
                if(typeof pkt == 'string') return;
                if(this.url.includes('localhost')) return;
                if(pkt instanceof ArrayBuffer) pkt = new DataView(pkt);
                else if(pkt instanceof DataView) pkt = pkt;
                else pkt = new DataView(pkt.buffer);
                let offset = 0;
                switch(pkt.getUint8(0, true)) {
                    case 16:
                        window.xpos = pkt.getFloat64(1, true);
                        window.ypos = pkt.getFloat64(9, true);
                        break;
                }
                window.CurrentWs = this.url;
            }
        }
    }
}

function startBots() {
    if(window.started == false) {
        window.bots = [];
        console.log("Starting Bots...");
        let parseOrigin = /(\w+)\:\/\/(\w+.\w+)/gi.exec(window.location.origin)[2];
        console.log(parseOrigin);
        if(parseOrigin == 'tr.agar' || parseOrigin == 'agars.live' || parseOrigin == 'agarr.live' || parseOrigin == 'agarplay.club' || parseOrigin ==
            'es.agar' || parseOrigin == 'agar.live' || parseOrigin == 'agar-io') {
                setInterval(() => {
                    this.bots.push(new AgarLive());
                }, 4000);
            window.started = true;
        } else if(parseOrigin == 'www.inciagario' || parseOrigin == "agariott.com") {
            for(let i = 0; i < usr.BotAmount; i++) {
                this.bots.push(new Inci());
            }
            window.started = true;
        } else if(parseOrigin == 'agarz.com') {
            for(let i = 0; i < usr.BotAmount; i++) {
                this.bots.push(new Agarz());
            }
            window.started = true;
        } else if(parseOrigin == "oceanar.io") {
            for(let i = 0; i < usr.BotAmount; i++) {
                this.bots.push(new Oceanar());
            }
            window.started = true;
        } else if(parseOrigin == "aquar.io") {
            for(let i = 0; i < usr.BotAmount; i++) {
                this.bots.push(new Aquar());
            }
            window.started = true;
        } else {
            console.log("Using Default Protocol")
            for(let i = 0; i < usr.BotAmount; i++) {
                this.bots.push(new Proto5());
            }
            window.started = true;
        }
    }
}

window.eject = function() {
    if(window.started == true) {
        this.bots.forEach(bot => {
            bot.eject();
        });
    }
}

window.chat = function() {
    let msg = prompt('What do you want the bots to say?', 'Type here then press ok or enter');
    if(window.started = true) {
        this.bots.forEach(bot => {
            if(msg) bot.sendchat(msg);
        });
    }
}

window.split = function() {
    if(window.started == true) {
        this.bots.forEach(bot => {
            bot.split();
        });
    }
}

function stopBots() {
    if(window.started = true) {
        console.log("Stopping Bots...");
        this.bots.forEach(bot => {
            bot.ws.close()
        });
        window.bots.length = 0;
        window.started = false;
    }
}

const usr = new User();

class Oceanar {
    constructor() {
        usr.botamt++

        this.ws = null;
        this.connect();
    }
    connect() {
        this.ws = new WebSocket(window.CurrentWs);
        this.ws.binaryType = "arraybuffer";
        this.ws.onopen = this.onopen.bind(this);
        this.ws.onmessage = this.onmessage.bind(this);
        this.ws.onerror = this.onerror.bind(this);
        this.ws.onclose = this.onclose.bind(this);
    }

    Buffer(arr) {
        return new DataView(new ArrayBuffer(arr));
    }

    onopen() {
        this.spawn();
        this.ping();
        this.sendmouse();
        setInterval(() => {
            this.sendmouse();
        }, 200);
    }

    sendchat(msg) {}

    sendmouse() {
        this.send(window.mousepos);
    }

    ping() {
        let time = 268435455 & Date.now();
        var n = new ArrayBuffer(5);
        var i = new DataView(n);
        i.setUint8(0, 1)
        i.setUint32(1, time, true)
        this.send(n);
    }

    split() {}

    eject() {}

    spawn() {
        let name = document.getElementById("fname").value;
        let appearance = 255;
        var n = new ArrayBuffer(52);
        var i = new DataView(n);
        i.setUint8(0, 22);
        var o = 0;
        for(; o < 25; ++o) {
            i.setUint16(1 + 2 * o, o < name.length ? name.charCodeAt(o) : 0, true);
        }
        i.setUint8(51, appearance)
        this.send(n);
    }


    send(msg) {
        if(this.ws && this.ws.readyState === WebSocket.OPEN) this.ws.send(msg);
    }
    onmessage(msg) {}

    onclose(e) {
        usr.botamt--
        console.log("Disconnected");

    }

    onerror(e) {}
}

class Inci {
    constructor() {
        this.connect();
        usr.botamt++
        this.ws = null;
    }
    async GetWebSocketCaptcha() {
        return new Promise(resolve => {
            grecaptcha.execute('6LcnrKQUAAAAADohV5Cksikz89WSP-ZPHNA7ViZm', {
                action: 'playbutton'
            }).then(function(token) {
                if(token) {
                    var CurrentWs = window.CurrentWs.substr(0, 34)
                    var sCodes = SCodes_Original;
                    var chal = "&challenge=";
                    var precd = '?SCode=';
                    var scodesprefix = CurrentWs + precd + sCodes + chal;
                    let WebsocketCaptcha = scodesprefix + token;
                    resolve(WebsocketCaptcha)
                }
            });
        });
    }
    async connect() {
        const result = await this.GetWebSocketCaptcha();
        window.CurrentWs = result;
        this.ws = new WebSocket(window.CurrentWs);
        this.ws.binaryType = "arraybuffer";
        this.ws.onopen = this.onopen.bind(this);
        this.ws.onmessage = this.onmessage.bind(this);
        this.ws.onerror = this.onerror.bind(this);
        this.ws.onclose = this.onclose.bind(this);
    }

    Buffer(arr) {
        return new DataView(new ArrayBuffer(arr));
    }

    onopen() {
        let init = this.Buffer(5);
        init.setUint8(0, 87);
        init.setUint32(1, 1, true);
        this.send(init);
        init = this.Buffer(5);
        init.setUint8(0, 100);
        init.setUint32(1, 1332175218, true);
        this.send(init)
        this.spawn();
        setInterval(() => {
            this.sendmouse();
        }, 100);
        setInterval(() => {
            this.spawn();
        }, 5000);
    }

    sendchat(msg) {
        var spawnbuf = this.Buffer(2 + 2 * msg.length);
        var zz = 0;
        var gg = 0;
        gg = 1;
        spawnbuf.setUint8(zz++, 99);
        spawnbuf.setUint8(zz++, 0);
        for(var i = 0; i < msg.length; ++i) {
            spawnbuf.setUint16(zz, msg.charCodeAt(i), 1);
            zz += 2;
        };
        this.send(spawnbuf);
    }

    sendmouse() {
        let movebuf = this.Buffer(21);
        movebuf.setUint8(0, 104);
        movebuf.setFloat64(1, window.xpos, true);
        movebuf.setFloat64(9, window.ypos, true);
        movebuf.setUint32(17, 0, true);
        this.send(movebuf);
    }

    split() {
        this.send(new Uint8Array([17]));
    }

    eject() {
        this.send(new Uint8Array([21]));
    }

    spawn() {
        let name = document.getElementById("fname").value;
        var spawnbuf = this.Buffer(1 + 2 * name.length);
        spawnbuf.setUint8(0, 101);
        for(var i = 0; i < name.length; ++i) {
            spawnbuf.setUint16(1 + 2 * i, name.charCodeAt(i), 1);
        };
        this.send(spawnbuf);
    }


    send(msg) {
        if(this.ws && this.ws.readyState === WebSocket.OPEN) this.ws.send(msg);
    }
    onmessage(msg) {}

    onclose(e) {
        usr.botamt--
        console.log("Disconnected");

    }

    onerror(e) {}
}

class Agarz {
    constructor() {
        usr.botamt++
        this.connect();
    }
    connect() {
        this.ws = new WebSocket(window.CurrentWs);
        this.ws.binaryType = "arraybuffer";
        this.ws.onopen = this.onopen.bind(this);
        this.ws.onmessage = this.onmessage.bind(this);
        this.ws.onerror = this.onerror.bind(this);
        this.ws.onclose = this.onclose.bind(this);
    }

    Buffer(arr) {
        return new DataView(new ArrayBuffer(arr));
    }

    onopen() {
        let init = this.Buffer(5);
        init.setUint8(0, 255);
        init.setUint32(1, 1000, true);
        this.send(init);
        this.spawn();
        let mouseinterval = setInterval(() => {
            this.sendmouse();
        }, 100);
        let spawninterval = setInterval(() => {
            this.spawn();
        }, 10000);
    }

    sendchat(msg) {
        var spawnbuf = this.Buffer(2 + 2 * msg.length);
        var zz = 0;
        var gg = 0;
        gg = 1;
        spawnbuf.setUint8(zz++, 206);
        spawnbuf.setUint8(zz++, gg);
        for(var i = 0; i < msg.length; ++i) {
            spawnbuf.setUint16(zz, msg.charCodeAt(i), true);
            zz += 2;
        };
        this.send(spawnbuf);
    }

    sendmouse() {
        let movebuf = this.Buffer(21);
        movebuf.setUint8(0, 16);
        movebuf.setFloat64(1, window.xpos, true);
        movebuf.setFloat64(9, window.ypos, true);
        movebuf.setUint32(17, 0, true);
        this.send(movebuf);
    }

    split() {
        this.send(new Uint8Array([17]));
    }

    eject() {
        this.send(new Uint8Array([21]));
    }

    spawn() {
        let name = document.getElementById("fname").value;
        var buffer = this.Buffer(1 + 2 * name.length);
        buffer.setUint8(0, 9);
        for(var e = 0; e < name.length; ++e) {
            buffer.setUint16(1 + 2 * e, name.charCodeAt(e), true);
        };
        this.send(buffer);
    }


    send(msg) {
        if(this.ws && this.ws.readyState === WebSocket.OPEN) this.ws.send(msg);
    }
    onmessage(msg) {}

    onclose(e) {
        console.log("Disconnected");
        usr.botamt--
    }

    onerror(e) {}
}

class Proto5 {
    constructor() {
        usr.botamt++

        this.connect();
    }
    connect() {
        this.ws = new WebSocket(window.CurrentWs);
        this.ws.binaryType = "arraybuffer";
        this.ws.onopen = this.onopen.bind(this);
        this.ws.onmessage = this.onmessage.bind(this);
        this.ws.onerror = this.onerror.bind(this);
        this.ws.onclose = this.onclose.bind(this);
    }

    Buffer(arr) {
        return new DataView(new ArrayBuffer(arr));
    }

    onopen() {
        let init = this.Buffer(5);
        init.setUint8(0, 254);
        init.setUint32(1, 5, true);
        this.send(init);
        init = this.Buffer(5);
        init.setUint8(0, 255);
        init.setUint32(1, 123456789, true);
        this.send(init)
        this.spawn();
        let mouseinterval = setInterval(() => {
            this.sendmouse();
        }, 100);
        let spawninterval = setInterval(() => {
            this.spawn();
        }, 10000);
    }

    sendchat(msg) {
        var spawnbuf = this.Buffer(2 + 2 * msg.length);
        var zz = 0;
        var gg = 0;
        gg = 1;
        spawnbuf.setUint8(zz++, 206);
        spawnbuf.setUint8(zz++, gg);
        for(var i = 0; i < msg.length; ++i) {
            spawnbuf.setUint16(zz, msg.charCodeAt(i), true);
            zz += 2;
        };
        this.send(spawnbuf);
    }

    sendmouse() {
        let movebuf = this.Buffer(21);
        movebuf.setUint8(0, 16);
        movebuf.setFloat64(1, window.xpos, true);
        movebuf.setFloat64(9, window.ypos, true);
        movebuf.setUint32(17, 0, true);
        this.send(movebuf);
    }

    split() {
        this.send(new Uint8Array([17]));
    }

    eject() {
        this.send(new Uint8Array([21]));
    }

    spawn() {
        let name = document.getElementById("fname").value;
        var skins = ['26', '30', '32', '40', '60', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19',
            '20', '21', '22', '23'
        ];
        var skin = skins[~~(Math.random() * skins.length)];
        name = `{${skin}}` + name;
        var spawnbuf = this.Buffer(1 + 2 * name.length);
        spawnbuf.setUint8(0, 192);
        for(var i = 0; i < name.length; ++i) {
            spawnbuf.setUint16(1 + 2 * i, name.charCodeAt(i), true);
        };
        this.send(spawnbuf);
    }


    send(msg) {
        if(this.ws && this.ws.readyState === WebSocket.OPEN) this.ws.send(msg);
    }
    onmessage(msg) {}

    onclose(e) {
        console.log("Disconnected");
        usr.botamt--
    }

    onerror(e) {}
}

class AgarLive {
    constructor() {
        this.connect();
        usr.botamt++
        this.ws = null;
    }
    async GetWebSocketCaptcha() {
        return new Promise(resolve => {
            // grecaptcha.execute('6LcnrKQUAAAAADohV5Cksikz89WSP-ZPHNA7ViZm', {
            //   action: 'playbutton'
            //}).then(function(token) {
            //  if (token) {
            var CurrentWs = window.CurrentWs.substr(0, 31) + "?SCode="
            var WS = CurrentWs + SCodes_Original;
            console.log(WS);
            resolve(WS)
            //}
            //});
        });
    }
    async connect() {
        //connect() {
        const result = await this.GetWebSocketCaptcha();
        window.CurrentWs = result;
        this.ws = new WebSocket(window.CurrentWs);
        this.ws.binaryType = "arraybuffer";
        this.ws.onopen = this.onopen.bind(this);
        this.ws.onmessage = this.onmessage.bind(this);
        this.ws.onerror = this.onerror.bind(this);
        this.ws.onclose = this.onclose.bind(this);
    }

    Buffer(arr) {
        return new DataView(new ArrayBuffer(arr));
    }

    onopen() {
        let init = this.Buffer(5);
        init.setUint8(0, 254);
        init.setUint32(1, 5, true);
        this.send(init);
        init = this.Buffer(5);
        init.setUint8(0, 255);
        init.setUint32(1, 154669603, true);
        this.send(init)
        this.spawn();
        setInterval(() => {
            this.sendmouse();
        }, 100);
        setInterval(() => {
            this.spawn();
        }, 10000);
    }

    sendchat(msg) {
        var spawnbuf = this.Buffer(2 + 2 * msg.length);
        var zz = 0;
        var gg = 0;
        gg = 1;
        spawnbuf.setUint8(zz++, 99);
        spawnbuf.setUint8(zz++, 0);
        for(var i = 0; i < msg.length; ++i) {
            spawnbuf.setUint16(zz, msg.charCodeAt(i), 1);
            zz += 2;
        };
        this.send(spawnbuf);
    }

    sendmouse() {
        let movebuf = this.Buffer(21);
        movebuf.setUint8(0, 16);
        movebuf.setFloat64(1, window.xpos, true);
        movebuf.setFloat64(9, window.ypos, true);
        movebuf.setUint32(17, 0, true);
        this.send(movebuf);
    }

    split() {
        this.send(new Uint8Array([17]));
    }

    eject() {
        this.send(new Uint8Array([21]));
    }

    spawn() {
        let name = document.getElementById("fname").value;
        var spawnbuf = this.Buffer(1 + 2 * name.length);
        spawnbuf.setUint8(0, 0);
        for(var i = 0; i < name.length; ++i) {
            spawnbuf.setUint16(1 + 2 * i, name.charCodeAt(i), 1);
        };
        this.send(spawnbuf);
    }


    send(msg) {
        if(this.ws && this.ws.readyState === WebSocket.OPEN) this.ws.send(msg);
    }
    onmessage(msg) {}

    onclose(e) {
        usr.botamt--
        console.log("Disconnected");

    }

    onerror(e) {}
}

class Aquar {
    constructor() {
        usr.botamt++

        this.ws = null;
        this.connect();
    }
    connect() {
        this.ws = new WebSocket(window.CurrentWs);
        this.ws.binaryType = "arraybuffer";
        this.ws.onopen = this.onopen.bind(this);
        this.ws.onmessage = this.onmessage.bind(this);
        this.ws.onerror = this.onerror.bind(this);
        this.ws.onclose = this.onclose.bind(this);
    }

    Buffer(arr) {
        return new DataView(new ArrayBuffer(arr));
    }

    onopen() {
        this.spawn();
        this.ping();
        this.sendmouse();
        setInterval(() => {
            this.sendmouse();
        }, 200);
    }

    sendchat(msg) {}

    sendmouse() {
        this.send(window.mousepos);
    }

    ping() {
        let time = 268435455 & Date.now();
        var n = new ArrayBuffer(5);
        var i = new DataView(n);
        i.setUint8(0, 1)
        i.setUint32(1, time, true)
        this.send(n);
    }

    split() {}

    eject() {}

    spawn() {
        let name = "test";
        let appearance = 255;
        var n = new ArrayBuffer(52);
        var i = new DataView(n);
        i.setUint8(0, 22);
        var o = 0;
        for(; o < 25; ++o) {
            i.setUint16(1 + 2 * o, o < name.length ? name.charCodeAt(o) : 0, true);
        }
        i.setUint8(51, appearance)
        this.send(n);
    }


    send(msg) {
        if(this.ws && this.ws.readyState === WebSocket.OPEN) this.ws.send(msg);
    }
    onmessage(msg) {}

    onclose(e) {
        usr.botamt--
        console.log("Disconnected");

    }

    onerror(e) {}
}