import os import gradio as gr from huggingface_hub import InferenceClient # -------------------- # MODEL / TOKEN # -------------------- HF_TOKEN = os.getenv("HF_TOKEN") if not HF_TOKEN: raise RuntimeError("HF_TOKEN secret bulunamadı. Settings → Variables and secrets → New secret ile ekleyin.") MODEL = "mistralai/Mixtral-8x7B-Instruct-v0.1" client = InferenceClient(model=MODEL, token=HF_TOKEN) # -------------------- # Güvenlik filtresi # -------------------- BANNED = [ "intihar", "kendimi öldür", "çocuk istismarı", "pornografi", "tecavüz", "nefret suçu", "silah yapımı", "uyuşturucu üretimi" ] def is_blocked(txt: str): low = (txt or "").lower() for w in BANNED: if w in low: return True, w return False, None # -------------------- # Sohbet motoru (chat_completion) # -------------------- def chat_respond(message, history): bad, hit = is_blocked(message) if bad: return f"⚠️ Bu içerik politikamıza aykırı ({hit})." msgs = [{"role": "system", "content": "Türkçe konuşan, nazik ve yardımcı bir asistansın."}] for u, a in history or []: if u: msgs.append({"role": "user", "content": u}) if a: msgs.append({"role": "assistant", "content": a}) msgs.append({"role": "user", "content": message}) try: out = client.chat_completion( messages=msgs, max_tokens=350, temperature=0.7, top_p=0.9, ) text = None if getattr(out, "choices", None): ch = out.choices[0] if hasattr(ch, "message") and getattr(ch.message, "content", None): text = ch.message.content elif getattr(ch, "text", None): text = ch.text return (text or str(out)).strip() except Exception as e: return f"❌ Hata: {e}" # -------------------- # PARA KAZANMA PANELİ # -------------------- FREE_TASKS = [ "Instagram @Zenkamind sayfasını takip et — Kanıt ekranı yükle (2 TL)", "TikTok @Zenkamind hesabını takip et — Kanıt ekranı yükle (2 TL)", "YouTube kanalımıza abone ol — Kanıt ekranı yükle (2 TL)", "X (Twitter) hesabımızı takip et — Kanıt ekranı yükle (2 TL)", "Arkadaşını davet et (davet linki ile) — Onaylanınca (50 TL)", "Günlük görev: Postu beğen + yorum (1 TL)", "Günlük görev: Story mention (1 TL)", "Discord’a katıl — Kanıt ekranı yükle (2 TL)", ] PREMIUM_TASKS = [ "Instagram @Zenkamind — Takip (4 TL)", "TikTok @Zenkamind — Takip (4 TL)", "YouTube — Abone (4 TL)", "X (Twitter) — Takip (4 TL)", "Arkadaşını davet et — Onay (100 TL)", "Günlük: Post beğen + yorum (2 TL)", "Günlük: İçerik paylaş (3 TL)", "Discord’a katıl (4 TL)", ] MIN_WITHDRAW = 500 # TL def send_withdraw(name, iban, bank, note): if not name or not iban or not bank: return gr.Info("Lütfen Ad Soyad, IBAN ve Banka alanlarını doldurun."), "❌ Talep gönderilemedi." if not (iban.startswith("TR") and len(iban.replace(" ", "")) >= 24): return gr.Warning("IBAN formatı hatalı görünüyor. ‘TR’ ile başlamalıdır."), "❌ IBAN hatası." msg = f"✅ Talebiniz alındı!\n\nAd-Soyad: {name}\nBanka: {bank}\nIBAN: {iban}\nNot: {note or '-'}\n\nÖdemeler **1–3 iş günü** içinde sonuçlanır." return gr.Info("Talep başarıyla iletildi."), msg # -------------------- # SAYFA GEÇİŞLERİ # -------------------- def show_page(which): return ( gr.update(visible=(which == "chat")), gr.update(visible=(which == "earn")), gr.update(visible=(which == "about")), gr.update(visible=(which == "vision")), ) # -------------------- # ARAYÜZ # -------------------- with gr.Blocks( theme=gr.themes.Soft(primary_hue="blue", neutral_hue="slate"), css=""" .zen-footer {text-align:center; opacity:.75; padding: 12px 0;} .zen-title {font-weight:800; font-size:22px;} .zen-pill {display:inline-block; padding:6px 10px; border-radius:12px; background:#0ea5e9; color:white; font-weight:600;} """ ) as demo: current = gr.State("chat") with gr.Row(): with gr.Column(scale=1, min_width=260): gr.HTML("