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("
🧠 ZenkaMind
") with gr.Group(): btn_chat = gr.Button("≡ Sohbet Botu", variant="primary") btn_earn = gr.Button("≡ Para Kazanma Paneli", variant="secondary") btn_about = gr.Button("ℹ️ Hakkımızda", variant="secondary") btn_vision = gr.Button("🌍 Misyon & Vizyon", variant="secondary") gr.HTML("
") gr.Markdown("**Paket:** Free • Premium (₺699) — Reklamsız, 2x ödül, 30 ek görev") with gr.Column(scale=5): # --- CHAT PAGE --- with gr.Group(visible=True) as page_chat: gr.HTML("Sohbet") chat = gr.ChatInterface( fn=chat_respond, textbox=gr.Textbox(placeholder="Bir şey yaz…", autofocus=True, container=False), title="", description="Burada yapay zekâ asistanıyla sohbet edebilirsiniz.", fill_height=True, ) # --- EARN PAGE --- with gr.Group(visible=False) as page_earn: gr.HTML("Para Kazanma Paneli") with gr.Tab("Free Görevler"): gr.Markdown( "\n".join([f"- {t}" for t in FREE_TASKS]) + f"\n\n**Minimum Para Çekimi:** {MIN_WITHDRAW} TL\n\n_Not: Free’de günde 14 görev, 24 saatte yenilenir; 4 reklam izleme görevi zorunludur._" ) with gr.Tab("Premium Görevler (₺699 – Reklamsız)"): gr.Markdown( "\n".join([f"- {t}" for t in PREMIUM_TASKS]) + "\n\n**Not:** Premium’da ödüller 2x; tüm özelliklere sınırsız erişim." ) gr.Markdown("---") gr.Markdown("### 💳 Ödeme Çek Talebi") with gr.Row(): name = gr.Textbox(label="Ad Soyad", placeholder="Adınız Soyadınız") bank = gr.Textbox(label="Banka", placeholder="Örn: Ziraat") iban = gr.Textbox(label="IBAN", placeholder="TRXX XXXX XXXX XXXX XXXX XXXX XX") note = gr.Textbox(label="Not (opsiyonel)", placeholder="Eklemek istediğiniz bir not var mı?") btn_withdraw = gr.Button("🧾 Talebi Gönder", variant="primary") out_info = gr.Markdown() btn_withdraw.click( send_withdraw, inputs=[name, iban, bank, note], outputs=[gr.State(), out_info], ) # --- ABOUT PAGE --- with gr.Group(visible=False) as page_about: gr.HTML("Hakkımızda") gr.Markdown( "ZenkaMind, herkesin **yapay zekâ ile üretken olmasını** ve " "**gerçek kazanç fırsatlarına** ulaşmasını amaçlayan topluluk odaklı bir girişimdir. " "Hızlı demo, şeffaf kurallar ve kullanıcıya değer sağlayan görevler ana odaklarımızdır." ) # --- VISION PAGE --- with gr.Group(visible=False) as page_vision: gr.HTML("Misyon & Vizyon") gr.Markdown( "**Misyonumuz:** İnsanlara yapay zekâyı güvenli ve erişilebilir şekilde sunmak; " "topluluğumuzla birlikte **yeni gelir akışları** oluşturmak.\n\n" "**Vizyonumuz:** ZenkaMind’i içerik üretimi, mikro görevler ve akıllı otomasyonların " "buluştuğu bölgenin en güvenilir platformu haline getirmek." ) # --- Butonlar arası geçiş --- btn_chat.click(lambda: "chat", outputs=current).then(show_page, inputs=current, outputs=[page_chat, page_earn, page_about, page_vision]) btn_earn.click(lambda: "earn", outputs=current).then(show_page, inputs=current, outputs=[page_chat, page_earn, page_about, page_vision]) btn_about.click(lambda: "about", outputs=current).then(show_page, inputs=current, outputs=[page_chat, page_earn, page_about, page_vision]) btn_vision.click(lambda: "vision", outputs=current).then(show_page, inputs=current, outputs=[page_chat, page_earn, page_about, page_vision]) gr.HTML("") if __name__ == "__main__": demo.launch()