first commit
This commit is contained in:
129
button_api.py
Normal file
129
button_api.py
Normal file
@@ -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
|
||||
})
|
||||
78
buttonabuse.py
Normal file
78
buttonabuse.py
Normal file
@@ -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
|
||||
145
buttonui3.py
Normal file
145
buttonui3.py
Normal file
@@ -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())
|
||||
|
||||
Reference in New Issue
Block a user