Spaces:
Paused
Paused
| import os | |
| import subprocess | |
| import asyncio | |
| import threading | |
| import pandas as pd | |
| import plotly.express as px | |
| import gradio as gr | |
| from datetime import datetime | |
| import psutil | |
| from telegram import Update | |
| from telegram.ext import ApplicationBuilder, MessageHandler, filters, ContextTypes | |
| # --- AYARLAR --- | |
| TOKEN = "8669709095:AAFRPWdZ9gaVX8PXuVsPJMFlUtOHicjyoyg" # Burayı kontrol et | |
| ALLOWED_USERS = [7671497065, 6518828406] | |
| COMMAND_HISTORY_FILE = "badtime_history.csv" | |
| # --- STORAGE MANTIĞI --- | |
| def save_command(user, cmd, status): | |
| now = datetime.now().strftime("%Y-%m-%d %H:%M:%S") | |
| new_data = pd.DataFrame([[now, user, cmd, status]], columns=['Tarih', 'Kullanıcı', 'Komut', 'Durum']) | |
| if not os.path.isfile(COMMAND_HISTORY_FILE): | |
| new_data.to_csv(COMMAND_HISTORY_FILE, index=False) | |
| else: | |
| new_data.to_csv(COMMAND_HISTORY_FILE, mode='a', header=False, index=False) | |
| # --- TERMİNAL MOTORU --- | |
| def run_shell(command): | |
| blacklist = ["rm -rf", "shred", "mkfs", "dd ", "shutdown", "reboot", ":(){ :|:& };:"] | |
| if any(b in command.lower() for b in blacklist): | |
| save_command("Sistem", command, "YASAKLANDI") | |
| return "❌ GÜVENLİK İHLALİ: Bu komut BadTiMe tarafından engellendi!" | |
| try: | |
| process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True) | |
| stdout, stderr = process.communicate() | |
| output = stdout if stdout else stderr | |
| if not output or output.strip() == "": | |
| output = "Komut çalıştırıldı (Çıktı boş)." | |
| save_command("Admin", command, "Başarılı") | |
| return output | |
| except Exception as e: | |
| save_command("Admin", command, f"Hata: {str(e)}") | |
| return f"Sistem Hatası: {str(e)}" | |
| # --- GRADIO FONKSİYONLARI --- | |
| def get_dashboard_data(): | |
| if os.path.exists(COMMAND_HISTORY_FILE): | |
| df = pd.read_csv(COMMAND_HISTORY_FILE) | |
| recent = df.tail(15).iloc[::-1] | |
| fig = px.pie(df, names='Durum', title="BadTiMe İşlem Dağılımı") | |
| return recent, fig | |
| return pd.DataFrame(columns=['Tarih', 'Kullanıcı', 'Komut', 'Durum']), None | |
| def get_system_stats(): | |
| cpu = psutil.cpu_percent() | |
| ram = psutil.virtual_memory().percent | |
| return f"CPU: %{cpu} | RAM: %{ram}" | |
| # --- TELEGRAM BRIDGE --- | |
| async def telegram_bridge(update: Update, context: ContextTypes.DEFAULT_TYPE): | |
| user_id = update.effective_chat.id | |
| if user_id not in ALLOWED_USERS: | |
| save_command(f"Korsan:{user_id}", update.message.text, "REDDEDİLDİ") | |
| return | |
| cmd = update.message.text | |
| response = run_shell(cmd) | |
| # Telegram'a terminal çıktısını gönderiyoruz | |
| if len(response) > 4000: | |
| response = response[:4000] + "\n...(devamı Dashboard'da)" | |
| await update.message.reply_text(f"```\n{response}\n```", parse_mode='Markdown') | |
| def run_tg_bot(): | |
| """Telegram botunu yanıt verebilir şekilde başlatır""" | |
| loop = asyncio.new_event_loop() | |
| asyncio.set_event_loop(loop) | |
| app = ApplicationBuilder().token(TOKEN).build() | |
| app.add_handler(MessageHandler(filters.TEXT & (~filters.COMMAND), telegram_bridge)) | |
| print("🚀 Telegram Hattı Dinleniyor...") | |
| app.run_polling(close_loop=False) | |
| # --- GRADIO ARAYÜZÜ (Gradio 6.0 Uyumlu) --- | |
| with gr.Blocks(theme=gr.themes.Monochrome()) as badtime_ui: | |
| gr.HTML("<title>BadTiMe Control</title>") | |
| gr.Markdown("# 💀 BadTiMe Command & Storage Center") | |
| with gr.Row(): | |
| stats_box = gr.Textbox(value=get_system_stats(), label="Sistem Durumu", interactive=False) | |
| refresh_stats = gr.Button("Yenile") | |
| with gr.Tab("🚀 Canlı Terminal"): | |
| with gr.Row(): | |
| cmd_input = gr.Textbox(label="Komut", placeholder="ls -la", scale=4) | |
| run_btn = gr.Button("ÇALIŞTIR", variant="primary", scale=1) | |
| output_display = gr.Code(label="Terminal Çıktısı", language="shell", lines=15) | |
| with gr.Tab("📁 Storage Bucket"): | |
| history_refresh = gr.Button("Kayıtları Getir", variant="primary") | |
| with gr.Row(): | |
| history_table = gr.DataFrame(label="Komut Geçmişi") | |
| stats_plot = gr.Plot(label="Analiz") | |
| run_btn.click(run_shell, inputs=cmd_input, outputs=output_display) | |
| refresh_stats.click(get_system_stats, outputs=stats_box) | |
| history_refresh.click(get_dashboard_data, outputs=[history_table, stats_plot]) | |
| if __name__ == "__main__": | |
| # Telegram Botunu Arka Planda Başlat | |
| tg_thread = threading.Thread(target=run_tg_bot, daemon=True) | |
| tg_thread.start() | |
| # Gradio Arayüzünü Başlat | |
| badtime_ui.launch(server_name="0.0.0.0", server_port=7860) | |