您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
The best bots for popular agar.io clone games.
当前为
- // ==UserScript==
- // @name Xero-Bots | .io Bots 2022
- // @namespace https://discord.com/invite/bAstbAfem9
- // @version 30.0.1
- // @description The best bots for popular agar.io clone games.
- // @author Tatsuya & Enes
- // @match *.oceanar.io/*
- // @match *.aquar.io/*
- // @match *.agar.live/*
- // @run-at document-start
- // @icon https://www.google.com/s2/favicons?sz=64&domain=cellcraft.io
- // @grant none
- // ==/UserScript==
- function _classCallCheck(instance, Constructor) {
- if(!(instance instanceof Constructor)) {
- throw new TypeError("Cannot call a class as a function");
- }
- }
- var _createClass = function() {
- function defineProperties(target, props) {
- for(var i = 0; i < props.length; i++) {
- var descriptor = props[i];
- descriptor.enumerable = descriptor.enumerable || false;
- descriptor.configurable = true;
- if("value" in descriptor) descriptor.writable = true;
- Object.defineProperty(target, descriptor.key, descriptor);
- }
- }
- return function(Constructor, protoProps, staticProps) {
- if(protoProps) defineProperties(Constructor.prototype, protoProps);
- if(staticProps) defineProperties(Constructor, staticProps);
- return Constructor;
- };
- }();
- function _defineProperty(obj, key, value) {
- if(key in obj) {
- Object.defineProperty(obj, key, {
- value: value,
- enumerable: true,
- configurable: true,
- writable: true
- });
- } else {
- obj[key] = value;
- }
- return obj;
- }
- var Client = new(function() {
- function _class41() {
- _classCallCheck(this, _class41);
- }
- _createClass(_class41, [{
- key: 'init',
- value: function init() {
- this.bots = [];
- this.BotAmount = this.hookAmt;
- this.serverIP = '';
- this.positioning = {
- 'x': 0,
- 'y': 0
- };
- this.movebuf = null;
- this.started = false;
- this.gui = GUI.init(this.startBots.bind(this), this.stopBots.bind(this), this.split.bind(this), this.eject.bind(this));
- this.setup();
- }
- }, {
- key: 'hookAmt',
- get: function hookAmt() {
- let url = /(\w+)\:\/\/(\w+.\w+)/gi.exec(window.location.origin)[2];
- if(url == "agma.io" || url == "cellcraft.io" || url == "oceanar.io" || url == "aquar.io" || url == 'agar.live') {
- return 50;
- } else {
- return 15;
- }
- }
- }, {
- key: 'spawned',
- get: function spawned() {
- return this.bots.filter(b => b.ws && b.ws.readyState === WebSocket.OPEN).length;
- }
- }, {
- key: 'setup',
- value: function setup() {
- for(let i = 0; i < this.BotAmount; i++) {
- this.bots.push(new Bot())
- };
- this.UpdateCount();
- }
- }, {
- key: 'UpdateCount',
- value: function UpdateCount() {
- this.updateCounter = setInterval(() => {
- GUI.updateCount(this.spawned, this.BotAmount)
- }, 1000)
- }
- }, {
- key: 'split',
- value: function split() {
- this.bots.forEach((bot, i) => {
- bot.split()
- })
- }
- }, {
- key: 'eject',
- value: function eject() {
- this.bots.forEach((bot, i) => {
- bot.eject()
- })
- }
- }, {
- key: 'startBots',
- value: function startBots() {
- if(this.started || !this.serverIP) return;
- if(this.serverIP == undefined) return;
- this.bots.forEach((bot, i) => {
- bot.connect(this.serverIP)
- });
- this.started = true
- }
- }, {
- key: 'stopBots',
- value: function stopBots() {
- if(!this.started) return;
- this.bots.forEach((bot, i) => {
- bot.disconnect()
- });
- this.started = false
- }
- }]);
- return _class41;
- }())();
- var GUI = new(function() {
- function _class3() {
- _classCallCheck(this, _class3);
- }
- _createClass(_class3, [{
- key: 'init',
- value: function init(start, stop, split, eject) {
- this.IDs = {
- 'startButton': 'startB',
- 'stopButton': 'stopB',
- 'botCount': 'casteramount',
- 'DiscordURL': 'title'
- };
- this.injected = false;
- this.startBots = start;
- this.stopBots = stop;
- this.splitBots = split;
- this.ejectBots = eject;
- this.inject();
- this.setupKeys();
- }
- }, {
- key: 'inject',
- value: async function inject() {
- this.uiCode = await this.getGUI();
- if(!this.uiCode) {
- return alert('Failed to load bot GUI. If this keeps happening, contact a developer.');
- }
- this.append(this.uiCode);
- }
- }, {
- key: 'getGUI',
- value: async function getGUI() {
- const UI = await fetch('https://uttermost-inky-aardvark.glitch.me/');
- if(!UI.ok) {
- return console.log('[GUI STATUS]', UI);
- }
- return await UI.text();
- }
- }, {
- key: 'append',
- value: function append(html) {
- const BOTUI = document.createElement('div');
- BOTUI.innerHTML = html;
- document.body.appendChild(BOTUI);
- this.injected = true;
- this.divScramble('startB', 'startButton');
- this.divScramble('stopB', 'stopButton');
- this.divScramble('casteramount', 'botCount');
- this.divScramble('title', 'DiscordURL');
- document.getElementById(this.IDs.startButton).onclick = () => {
- this.startBots();
- document.getElementById(this.IDs.stopButton).style.display = 'block';
- document.getElementById(this.IDs.startButton).style.display = 'none';
- };
- document.getElementById(this.IDs.stopButton).onclick = () => {
- this.stopBots();
- document.getElementById(this.IDs.stopButton).style.display = 'none';
- document.getElementById(this.IDs.startButton).style.display = 'block';
- };
- document.getElementById(this.IDs.DiscordURL).onclick = () => {
- window.location.href = 'https://discord.gg/bAstbAfem9'
- };
- document.querySelector("#okbtn").onclick = () => {
- document.querySelector("#popup").style.display = "none";
- document.querySelector("#blackout").style.display = "none";
- };
- this.showPopUp(
- "Webpack Module Successfully initiated. Bypass injected. 𝙉𝙞𝙘𝙚 𝙥𝙖𝙩𝙘𝙝 𝘼𝙜𝙖𝙧.𝙡𝙞𝙫𝙚 𝙙𝙚𝙫𝙨, 𝙩𝙧𝙮 𝙩𝙤 𝙗𝙡𝙤𝙘𝙠 𝙢𝙮 𝙂𝙐𝙄 𝙖𝙜𝙖𝙞𝙣 :)"
- );
- }
- }, {
- key: 'setupKeys',
- value: function setupKeys() {
- window.addEventListener('keypress', (event) => {
- switch(event.key) {
- case 'q':
- this.splitBots();
- break;
- case 'w':
- this.ejectBots();
- break;
- }
- });
- }
- }, {
- key: 'divScramble',
- value: function GenerateScrambledID(div, callback) {
- const scrambledID = (((1 + Math.random()) * 0x10000) | 0);
- document.getElementById(div).id = scrambledID;
- this.IDs[callback] = scrambledID;
- }
- }, {
- key: 'updateCount',
- value: function updateCount(spawned, max) {
- document.getElementById(this.IDs.botCount).innerText = spawned + " / " + max
- }
- }, {
- key: 'showPopUp',
- value: function showPopUp(msg) {
- document.getElementById("msgpop").innerHTML = msg;
- document.querySelector("#popup").style.display = "block";
- document.querySelector("#blackout").style.display = "block";
- }
- }]);
- return _class3;
- }())();
- class Bot {
- constructor() {
- this.origin = /(\w+)\:\/\/(\w+.\w+)/gi.exec(window.location.origin)[2];
- this.Hooks = {
- botNames: ["discord.gg/bAstbAfem9", "rb.gy/kafgsw", "Xero-Bots", "Nice try devs!"],
- getBotName() {
- return this.botNames[Math.floor(Math.random() * this.botNames.length)]
- }
- }
- }
- connect(url) {
- this.serverUrl = url;
- this.ws = new WebSocket(url);
- this.ws.binaryType = "arraybuffer";
- this.ws.onmessage = this.onMessage.bind(this);
- this.ws.onopen = this.onOpen.bind(this);
- this.ws.onclose = this.onClose.bind(this);
- this.ws.onerror = this.onError.bind(this);
- this.randomMovement = false;
- this.id = Math.floor(Math.pow(2, 14) * Math.random()).toString(36);
- this.name = this.Hooks.getBotName() + ' | ' + this.id;
- }
- disconnect() {
- if(this.ws) {
- this.ws.close();
- delete this.ws;
- }
- clearInterval(this.moveInterval);
- clearInterval(this.pingInterval);
- clearTimeout(this.spawnTimeout);
- }
- onMessage(message) {
- if (this.dependency == 3) {
- var view = new DataView(message.data);
- var offset = 0;
- switch(240 == view.getUint8(offset) && (offset = offset + 5), view.getUint8(offset++)) {
- case 64:
- offset += 34;
- var next = view.getUint32(offset, true);
- offset += 4;
- var code = view.getUint32(offset, true);
- if(next === code) {
- if(70 > 60) {
- this.buildKey.xor = next;
- this.Auth(33000);
- }
- } else {
- this.ws.close();
- console.log("Err in 64!");
- }
- break;
- case 244:
- this.readyToSpawn = true;
- this.send(new Uint8Array([0x04, 0x07, 0x01]))
- this.send(new Uint8Array([0x04, 0x08, 0x00]))
- this.send(new Uint8Array([0x04, 0x03, 0x01]))
- break;
- }
- }
- }
- Auth(secretKey) {
- var xorKey = this.Buffer(13);
- xorKey.setUint8(0, 2 * (100 + 30) - (this.buildKey.xor - 5) % 10 - 5);
- xorKey.setUint32(1, ~~(this.buildKey.xor / 1.84 + 100 / 2 - 2 * (0 ? 0.5 : 1)) + ~~(~~(21.2 * (~~(this.buildKey.xor + 4.42 * this.buildKey.zn + 555) % --secretKey + 36360)) / 4.2), true)
- xorKey.setUint32(5, this.offsetKey() + 103, true);
- xorKey.setUint32(9, this.buildKey.vd(xorKey, 0, 9, 255), true);
- this.send(xorKey, true);
- }
- offsetKey() {
- for (var d = 0, b = 0; b < this.On.length; b++) {
- d += ~~(this.buildKey.xor / this.On[b] - this.On[b] % 103);
- }
- return d;
- }
- get On() {
- var wrapper = "~9B\\x$";
- return [
- wrapper.charCodeAt(0),
- wrapper.charCodeAt(1),
- wrapper.charCodeAt(2) + 73,
- wrapper.charCodeAt(3),
- wrapper.charCodeAt(4) + 227,
- wrapper.charCodeAt(5)
- ];
- }
- onOpen() {
- if(this.dependency == 1) {
- this.spawn();
- this.ping();
- } else if (this.dependency == 2) {
- let Init = this.Buffer(5);
- Init.setUint8(0, 254);
- Init.setUint32(1, 5, true);
- this.send(Init, true);
- Init = this.Buffer(5);
- Init.setUint8(0, 255);
- Init.setUint32(1, 123456789, true);
- this.send(Init, true);
- this.spawn();
- this.pingInterval = setInterval(this.sendlatency.bind(this), 1e3);
- } else if (this.dependency == 3) {
- this.buildKey = {
- zn: 8730,
- xor: -1,
- vd(d, b, x, _) {
- b + x > d.byteLength && (x = 0);
- for (var e = 12345678 + _, t = 0; x > t; t++) {
- e += d.getUint8(b + t) * (t + 1);
- }
- return e;
- }
- };
- const Init = this.Buffer(13);
- Init.setUint8(0, 245);
- Init.setUint16(1, 22, true);
- Init.setUint16(3, 118, true);
- Init.setUint32(5, this.buildKey.zn, true);
- Init.setUint32(9, this.buildKey.vd(Init, 0, 9, 245), true);
- this.send(Init, true);
- this.pingInterval = setInterval(() => { if(this.readyToSpawn) this.send([0x5f])}, 18e3);
- } else if (this.dependency == 0) {
- }
- this.spawnTimeout = setInterval(this.spawn.bind(this), 3000);
- this.moveInterval = setInterval(this.move.bind(this), 150);
- }
- onClose() {
- clearInterval(this.moveInterval);
- clearInterval(this.pingInterval);
- clearTimeout(this.spawnTimeout);
- }
- onError() {}
- spawn() {
- if(this.dependency == 1) {
- let spawnBuf = this.Buffer(52);
- spawnBuf.setUint8(0, 22);
- var o = 0;
- for(; o < 25; ++o) {
- spawnBuf.setUint16(1 + 2 * o, o < this.name.length ? this.name.charCodeAt(o) : 0, true);
- }
- spawnBuf.setUint8(51, 255)
- this.send(spawnBuf);
- } else if (this.dependency == 2) {
- var rassan = this.Buffer(1 + 2 * this.name.length);
- rassan.setUint8(0, 129);
- for (var i = 0; i < this.name.length; ++i) {
- rassan.setUint16(1 + 2 * i, this.name.charCodeAt(i), true);
- }
- this.send(rassan, true);
- } else if (this.dependency == 3) {
- if(!this.readyToSpawn) return;
- var es = [1], _s = 0;
- var spawnBuf = this.Buffer(4 + 2 * es.length + 2 * this.name.length);
- spawnBuf.setUint8(0, 1);
- for(var b = 4, x = 0; x < es.length; x++) spawnBuf.setUint16(b, 0, true);
- for(x = 0; x < this.name.length; ++x) spawnBuf.setUint16(b + 2 * x, this.name.charCodeAt(x), true);
- this.sendUint8(34);
- this.send(spawnBuf, true);
- this.sendUint8(34);;
- } else if (this.dependency == 0) {
- }
- }
- sendUint8(offset) {
- var singleByte = this.Buffer(1);
- singleByte.setUint8(0, offset);
- this.send(singleByte);
- }
- sendlatency() {
- const latency = this.Buffer(5);
- latency.setUint8(0, 90);
- latency.setUint32(1, 123456789, true);
- this.send(latency, true);
- }
- ping() {
- let ParseTime = 268435455 & Date.now();
- let oneByte = this.Buffer(0x5);
- oneByte.setUint8(0x0, 0x1);
- oneByte.setUint32(0x1, ParseTime);
- this.send(oneByte);
- }
- split() {
- this.send(new Uint8Array([0x11]))
- }
- eject() {
- this.send(new Uint8Array([0x24]))
- }
- chat(message) {
- if (this.dependency == 2) {
- var haowen = this.Buffer(4 + 2 * message.length);
- var kydan = 0;
- haowen.setUint8(kydan++, 199);
- haowen.setUint8(kydan++, 0);
- for (var hiya = 0; hiya < message.length; ++hiya) {
- haowen.setUint16(kydan, message.charCodeAt(hiya), true);
- kydan += 2;
- }
- haowen.setUint16(kydan, 57344, true);
- this.send(haowen)
- } else if (this.dependency == 3) {
- var b = this.Buffer(2 + 2 * message.length);
- var x = 0;
- b.setUint8(x++, 98);
- b.setUint8(x++, 1);
- for(var _ = 0; _ < message.length; ++_) {
- b.setUint16(x, message.charCodeAt(_), true)
- }
- x += 2;
- this.send(b, true);
- } else if (this.dependency == 0) {
- }
- }
- move() {
- if(this.dependency == 1 || this.dependency == 3) {
- this.send(Client.movebuf)
- } else if (this.dependency == 2) {
- const mouseBuf = this.Buffer(21);
- mouseBuf.setUint8(0, 185);
- mouseBuf.setFloat64(1, Client.positioning.x, true);
- mouseBuf.setFloat64(9, Client.positioning.y, true);
- mouseBuf.setUint32(17, 0, true);
- this.send(mouseBuf, true);
- } else if (this.dependency == 0) {
- }
- }
- Buffer(buf) {
- return new DataView(new ArrayBuffer(!buf ? 1 : buf))
- }
- get active() {
- return this.ws && this.ws.readyState === WebSocket.OPEN;
- }
- get dependency() {
- switch(true) {
- case /oceanar.io/.test(this.origin):
- case /aquar.io/.test(this.origin):
- return 1;
- case /agar.live/.test(this.origin):
- return 2;
- case /cellcraft.io/.test(this.origin):
- return 3;
- }
- return 0;
- }
- send(data, encrypt) {
- if(this.active) {
- if(encrypt) {
- this.ws.send(data.buffer);
- } else this.ws.send(data);
- }
- }
- }
- if (location.host.includes('agma.io') || location.host.includes('cellcraft.io')) {
- window.WebSocket = class extends WebSocket {
- constructor() {
- let ws = super(...arguments);
- window.sockets?.push(this);
- setTimeout(() => {
- ws.onmessage = new Proxy(ws.onmessage, {
- apply(target, thisArg, argArray) {
- let data = argArray[0].data;
- return target.apply(thisArg, argArray);
- }
- });
- });
- }
- }
- WebSocket.prototype.send = new Proxy(WebSocket.prototype.send, {
- apply(target, thisArg, argArray) {
- var res = target.apply(thisArg, argArray);
- let pkt = argArray[0];
- if (typeof pkt == 'string') return res;
- if (pkt instanceof ArrayBuffer) pkt = new DataView(pkt);
- else if (pkt instanceof DataView) pkt = pkt;
- else pkt = new DataView(pkt.buffer);
- switch (pkt.getUint8(0, true)) {
- case 0:
- switch (pkt.byteLength) {
- case 9:
- Client.movebuf = pkt;
- break;
- }
- break;
- }
- if (Client.serverIP !== thisArg.url) {
- Client.serverIP = thisArg.url;
- }
- return res;
- }
- });
- window.addEventListener('load', () => {
- Client.init();
- });
- } else {
- window.addEventListener('load', () => {
- Client.init();
- WebSocket.prototype.send = new Proxy(WebSocket.prototype.send, {
- apply(target, thisArg, argArray) {
- var res = target.apply(thisArg, argArray);
- let pkt = argArray[0];
- if(!Client) return;
- if(typeof pkt == 'string') return res;
- if(thisArg.url.includes('localhost')) return res;
- if(pkt instanceof ArrayBuffer) pkt = new DataView(pkt);
- else if(pkt instanceof DataView) pkt = pkt;
- else pkt = new DataView(pkt.buffer);
- switch(pkt.getUint8(0, true)) {
- case 16:
- case 185:
- Client.positioning.x = pkt.getFloat64(1, true);
- Client.positioning.y = pkt.getFloat64(9, true);
- break;
- case 5:
- case 14:
- case 239:
- Client.movebuf = pkt.buffer;
- break;
- }
- if(Client.serverIP !== thisArg.url) {
- Client.serverIP = thisArg.url;
- }
- return res;
- }
- });
- })
- }