// ==UserScript==
// @name AX Bots
// @namespace http://tampermonkey.net/
// @version 1.2
// @description AX Bots - Powerline.io
// @match *://powerline.io/*
// @grant none
// @author https://discord.gg/zJafSX57Rc
// @downloadURL https://update.greasyfork.icu/scripts/503472/AX%20Bots.user.js
// @updateURL https://update.greasyfork.icu/scripts/503472/AX%20Bots.meta.js
// ==/UserScript==
(function(){'use strict';const Version="1.2";let WEBSOCKET_SERVER_URL='';let botCount=100;const originalWebSocket=window.WebSocket;window.WebSocket=function(...args){const ws=new originalWebSocket(...args);if(!WEBSOCKET_SERVER_URL){const url=new URL(args[0]);WEBSOCKET_SERVER_URL=`${url.hostname}:${url.port || 80}`}
return ws};const style=document.createElement('style');style.innerHTML=`
body {
font-family: Arial, sans-serif;
background-color: #f7f7f7;
}
.button-container {
position: fixed;
top: 10px;
left: 10px;
z-index: 100;
display: flex;
flex-direction: column;
gap: 10px;
width: 150px;
background: rgba(0,0,0,0.5);
padding: 10px;
border-radius: 5px;
border: 2px solid;
}
.rgb-text {
font-size: larger;
text-align: center;
}
.rgb-text-qn {
font-size: 10px;
text-align: center;
}
button {
padding: 10px;
border: none;
border-radius: 5px;
font-size: 1rem;
cursor: pointer;
transition: background-color 0.3s ease;
width: 100%;
}
#toggleButton {
background-color: green;
color: white;
}
#toggleButton.active {
background-color: red;
}
input {
width: 100%;
padding: 5px;
border-radius: 5px;
}
#message {
color: white;
text-align: center;
font-family: monospace;
}
.switch-container {
display: flex;
justify-content: space-between;
}
.switch {
flex-grow: 1;
background: rgba(0, 0, 0, 0.5);
color: white;
text-align: center;
padding: 5px;
border-radius: 5px;
cursor: pointer;
}
.switch.active {
background-color: #4caf50;
}
`;document.head.appendChild(style);const container=document.createElement('div');container.id='draggable-container';container.className='button-container';container.innerHTML=`
AX Bots
Connected bots: 0
Quantity:
`;document.body.appendChild(container);const dragItem=container;let active=!1;let currentX,currentY,initialX,initialY,xOffset=0,yOffset=0;dragItem.addEventListener('mousedown',dragStart,!1);window.addEventListener('mouseup',dragEnd,!1);window.addEventListener('mousemove',drag,!1);function dragStart(e){initialX=e.clientX-xOffset;initialY=e.clientY-yOffset;active=!0}
function dragEnd(){initialX=currentX;initialY=currentY;active=!1}
function drag(e){if(active){e.preventDefault();currentX=e.clientX-initialX;currentY=e.clientY-initialY;xOffset=currentX;yOffset=currentY;dragItem.style.transform=`translate3d(${currentX}px, ${currentY}px, 0)`}}
let red=0,green=0,blue=0;let redDirection=1,greenDirection=1,blueDirection=1;function changeColor(){const elems=document.querySelectorAll('#rgb-text, #message');const elemBorder=document.getElementById('draggable-container');elems.forEach(elem=>elem.style.color=`rgb(${red}, ${green}, ${blue})`);elemBorder.style.borderColor=`rgb(${red}, ${green}, ${blue})`;if(red>=255)redDirection=-1;if(red<=0)redDirection=1;if(green>=255)greenDirection=-1;if(green<=0)greenDirection=1;if(blue>=255)blueDirection=-1;if(blue<=0)blueDirection=1;red+=redDirection*5;green+=greenDirection*7;blue+=blueDirection*11}
setInterval(changeColor,50);let configSocket;let botsRunning=!1;let shouldReconnect=!0;function generateUniqueId(){return Math.random().toString(36).substr(2,9)}
function toggleBots(){if(botsRunning){stopBots()}else{startBots()}}
function startBots(){const nickname=document.getElementById('nickname-input').value;configSocket=new WebSocket('wss://a.ctx.cl:8443');configSocket.addEventListener('open',function(){const config={action:'start',server:WEBSOCKET_SERVER_URL,nickname:nickname,bots:botCount,version:Version};configSocket.send(JSON.stringify(config));botsRunning=!0;document.getElementById('toggleButton').innerHTML="Stop Bots";document.getElementById('toggleButton').classList.add("active")});configSocket.addEventListener('message',function(event){const message=JSON.parse(event.data);if(message.type==='status'&&message.message.startsWith('Connected bots:')){document.getElementById('message').textContent=message.message}else if(message.type==='error'){alert(message.message);if(message.message==='Bots in use, Please wait'){shouldReconnect=!1}}});configSocket.addEventListener('close',function(){console.log('Disconnected.')})}
function stopBots(){if(configSocket){const stopSignal={action:'stop',version:Version};configSocket.send(JSON.stringify(stopSignal));configSocket.close()}
botsRunning=!1;document.getElementById('toggleButton').innerHTML="Start Bots";document.getElementById('toggleButton').classList.remove("active")}
document.getElementById('toggleButton').addEventListener('click',function(){shouldReconnect=!0;toggleBots()});document.getElementById('switchLow').addEventListener('click',function(){botCount=100;updateSwitchActiveState('Low')});document.getElementById('switchMed').addEventListener('click',function(){botCount=300;updateSwitchActiveState('Med')});document.getElementById('switchHigh').addEventListener('click',function(){botCount=700;updateSwitchActiveState('High')});function updateSwitchActiveState(activeLabel){const switches=document.querySelectorAll('.switch');switches.forEach(switchElem=>{if(switchElem.innerText===activeLabel){switchElem.classList.add('active')}else{switchElem.classList.remove('active')}})}})()