commit 594adde6ff25f9522e955019d9418636a39b1a61 Author: usernames122 Date: Tue Aug 26 11:42:33 2025 +0200 first commit diff --git a/button_api.py b/button_api.py new file mode 100644 index 0000000..083a4aa --- /dev/null +++ b/button_api.py @@ -0,0 +1,129 @@ +import requests + +class ButtonAPIClient: + def __init__(self, base_url: str = "https://buttonapi.nonamesoft.xyz/"): + self.base_url = base_url.rstrip("/") + + def _post(self, endpoint: str, data: dict): + url = f"{self.base_url}{endpoint}" + response = requests.post(url, json=data) + print(response.text) + return response.status_code, response.json() + + # 1. User management + def register(self, username, password): + return self._post("/api/v3/register/", { + "username": username, + "password": password + }) + + def login(self, username, password): + return self._post("/api/v3/login/", { + "username": username, + "password": password + }) + + # 2. Token system + def generate_token(self, username, password): + return self._post("/api/v3/generatetoken/", { + "username": username, + "password": password + }) + + def get_token(self, username, password): + return self._post("/api/v3/gettoken/", { + "username": username, + "password": password + }) + + # 3. Messaging system + def send_discord_message(self, token, message): + return self._post("/api/v3/senddcmsgwithtoken/", { + "token": token, + "message": message + }) + + def get_messages_for_everyone(self, token, count): + return self._post("/api/v3/getmessagesforeveryone/", { + "token": token, + "count": count + }) + + def get_my_sent_messages(self, token): + return self._post("/api/v3/getmysentmessages/", { + "token": token + }) + + def read_message_by_id(self, token, message_id): + return self._post("/api/v3/readmessagesfromchannel/", { + "token": token, + "message_id": message_id + }) + + def delete_message(self, token, message_id): + return self._post("/api/v3/deletemessage/", { + "token": token, + "message_id": message_id + }) + + # 4. Channel system + def create_channel(self, token, name): + return self._post("/api/v3/makechannel/", { + "token": token, + "name": name + }) + + def add_user_to_channel(self, token, channel_name, username): + return self._post("/api/v3/addusertochannel/", { + "token": token, + "name": channel_name, + "username": username + }) + + def read_messages_from_channel(self, token, name, count): + return self._post("/api/v3/readmessagesfromchannel/", { + "token": token, + "name": name, + "count": count + }) + + def send_message_to_channel(self, token, message, channel): + return self._post("/api/v3/sendmessage/", { + "token": token, + "message": message, + "channel": channel + }) + + def get_user_channels(self, token): + return self._post("/api/v3/getchannels/", { + "token": token + }) + + # 5. DM system + def get_dms(self, token, count): + return self._post("/api/v3/getdms/", { + "token": token, + "count": count + }) + + def send_dm(self, token, username, message): + return self._post("/api/v3/senddm/", { + "token": token, + "username": username, + "message": message + }) + + # 6. Discord Bot system (Beta) + def send_dc_channel_message(self, token, channel, message): + return self._post("/api/v3/senddcmsg/", { + "token": token, + "channel": channel, + "message": message + }) + + def send_dc_dm_message(self, token, user, message): + return self._post("/api/v3/senddcmsg/", { + "token": token, + "channel": user, + "message": message + }) diff --git a/buttonabuse.py b/buttonabuse.py new file mode 100644 index 0000000..97d5b44 --- /dev/null +++ b/buttonabuse.py @@ -0,0 +1,78 @@ +import button_api +from random_username.generate import generate_username +import secrets +import json +from tqdm import tqdm + +class ButtonAbuser: # Botfarm for buttonapi + def __init__(self): + self.buttons = [] # List of buttons to abuse + self.api = button_api.ButtonAPIClient() # API + + def startAccountNum(self,num,prefix="bot",aaa=True): # Create num accounts + buttons = [] + for i in tqdm(range(num)): + bbb = generate_username(1)[0] if aaa else str(i) + username = f"{prefix}{bbb}" + password = secrets.token_hex(8) + "@A1!" + status, response = self.api.register(username, password) # Register account + if "success" in response["message"]: + aaaa,token = self.api.generate_token(username, password) + token = token["token"] + buttons.append({"username": username, "password": password, "token": token}) + #print("Registered",username) + else: + print(f"Failed to register {username}. error:",response["message"]) + self.buttons = buttons + + def loginAccountNum(self,file="accounts.json"): + buttons = [] + with open(file,"r") as f: + data = json.load(f) + for account in tqdm(data): + status, response = self.api.login(account["username"],account["password"]) + if "success" in response["message"]: + token = None + if "token" in account: + token = account["token"] + else: + #print("Genning token...") + _,token = self.api.generate_token(account["username"], account["password"]) + token = token["token"] + buttons.append({"username": account["username"], "password": account["password"], "token": token}) + #print("Verified",account["username"]) + else: + print(f"Failed to login {account['username']}") + self.buttons = buttons + + def saveAccounts(self,file="accounts.json"): # Save accounts to file + with open(file,"w") as f: + json.dump(self.buttons,f) + + def spamDM(self,targetUsername, message): # Spam DMs to someone + for button in tqdm(self.buttons,desc="Sending DMs...."): + status, response = self.api.send_dm(button["token"], targetUsername, message) + + def spamDiscordDM(self,targetId, message): # Spam DMs to someone on DISCORD + for button in tqdm(self.buttons,desc="Sending DMs...."): + status, response = self.api.send_dc_dm_message(button["token"], targetId, message) + + def spamChannel(self,targetId, message): # Spam messages to a channel on DISCORD + for button in tqdm(self.buttons,desc="Sending MSGs...."): + try: + status, response = self.api.send_message_to_channel(button["token"], message, targetId) + print(status) + except: + pass # ignore errors + + def spamUnknownChannel(self,targetId, message): # Spam messages to some channel idk + for button in tqdm(self.buttons,desc="Sending MSGs...."): + status, response = self.api.send_discord_message(button["token"], message) + + def addBotsToChannel(self,ownerToken,id): + for button in tqdm(self.buttons,desc="Adding Bots to Channel...."): + try: + status = self.api.add_user_to_channel(ownerToken, id,button["username"]) + print(status) + except: + pass \ No newline at end of file diff --git a/buttonui3.py b/buttonui3.py new file mode 100644 index 0000000..a2f235c --- /dev/null +++ b/buttonui3.py @@ -0,0 +1,145 @@ +import sys +from PySide6.QtWidgets import ( + QApplication, QMainWindow, QWidget, QVBoxLayout, QLabel, QLineEdit, + QPushButton, QTextEdit, QStackedWidget, QMessageBox, QListWidget, QHBoxLayout +) +from button_api import ButtonAPIClient +import socketio + +API_URL = "https://buttonapi.nonamesoft.xyz" # change to your server + +class LoginPage(QWidget): + def __init__(self, client, stacked_widget): + super().__init__() + self.client = client + self.stacked_widget = stacked_widget + + layout = QVBoxLayout(self) + self.username_input = QLineEdit() + self.username_input.setPlaceholderText("Username") + self.password_input = QLineEdit() + self.password_input.setPlaceholderText("Password") + self.password_input.setEchoMode(QLineEdit.Password) + + self.login_btn = QPushButton("Login") + self.register_btn = QPushButton("Register") + + layout.addWidget(QLabel("Login or Register")) + layout.addWidget(self.username_input) + layout.addWidget(self.password_input) + layout.addWidget(self.login_btn) + layout.addWidget(self.register_btn) + + self.login_btn.clicked.connect(self.login) + self.register_btn.clicked.connect(self.register) + + def login(self): + username = self.username_input.text() + password = self.password_input.text() + code, resp = self.client.login(username, password) + if code == 200: + code, token_resp = self.client.get_token(username, password) + if 'token' in token_resp: + self.stacked_widget.main_page.set_user(username, token_resp['token']) + self.stacked_widget.setCurrentWidget(self.stacked_widget.main_page) + else: + QMessageBox.warning(self, "Login Failed", resp['message']) + + def register(self): + username = self.username_input.text() + password = self.password_input.text() + code, resp = self.client.register(username, password) + QMessageBox.information(self, "Register", resp.get("message", "Unknown error")) + + +class MainPage(QWidget): + def __init__(self, client): + super().__init__() + self.client = client + self.username = None + self.token = None + + layout = QVBoxLayout(self) + self.label = QLabel("Welcome!") + self.message_input = QLineEdit() + self.message_input.setPlaceholderText("Type message to send as DM to self") + + self.send_btn = QPushButton("Send Message") + self.message_list = QListWidget() + + self.logout_btn = QPushButton("Logout") + + layout.addWidget(self.label) + layout.addWidget(self.message_input) + layout.addWidget(self.send_btn) + layout.addWidget(self.message_list) + layout.addWidget(self.logout_btn) + + self.send_btn.clicked.connect(self.send_message) + self.logout_btn.clicked.connect(self.logout) + + self.sio = socketio.Client() + self.sio.on("ready", self.on_ready) + self.sio.on("new_dm", self.on_new_dm) + + def set_user(self, username, token): + self.username = username + self.token = token + self.label.setText(f"Welcome {username}") + self.connect_socket() + + def connect_socket(self): + try: + self.sio.connect(f"{API_URL}") + self.sio.emit("api_v3_connect", {"token_api_v3": self.token}) + except Exception as e: + QMessageBox.critical(self, "Socket Error", str(e)) + + def on_ready(self, data): + self.message_list.addItem(f"Socket Ready: {data}") + + def on_new_dm(self, data): + sender = data.get('sender') + message = data.get('message') + self.message_list.addItem(f"{sender}: {message}") + + def send_message(self): + message = self.message_input.text() + if message: + self.client.send_dm(self.token, self.username, message) + self.message_list.addItem(f"You: {message}") + self.message_input.clear() + + def logout(self): + self.sio.disconnect() + self.parent().setCurrentIndex(0) + + +class ButtonApp(QStackedWidget): + def __init__(self): + super().__init__() + self.client = ButtonAPIClient(API_URL) + + self.login_page = LoginPage(self.client, self) + self.main_page = MainPage(self.client) + + self.addWidget(self.login_page) + self.addWidget(self.main_page) + + +class MainWindow(QMainWindow): + def __init__(self): + super().__init__() + self.setWindowTitle("ButtonAPI V3 GUI") + self.setFixedSize(400, 400) + + self.stack = ButtonApp() + self.setCentralWidget(self.stack) + + +if __name__ == "__main__": + app = QApplication(sys.argv) + window = MainWindow() + window.show() + sys.exit(app.exec()) +