Spaces:
Paused
Paused
Update app.py
Browse files
app.py
CHANGED
|
@@ -10,9 +10,9 @@ import psutil
|
|
| 10 |
from telegram import Update
|
| 11 |
from telegram.ext import ApplicationBuilder, MessageHandler, filters, ContextTypes
|
| 12 |
|
| 13 |
-
# --- AYARLAR
|
| 14 |
TOKEN = "8669709095:AAFRPWdZ9gaVX8PXuVsPJMFlUtOHicjyoyg" # Senin tokenın
|
| 15 |
-
ALLOWED_USERS = [7671497065, 6518828406]
|
| 16 |
COMMAND_HISTORY_FILE = "badtime_history.csv"
|
| 17 |
|
| 18 |
# --- STORAGE MANTIĞI ---
|
|
@@ -26,7 +26,6 @@ def save_command(user, cmd, status):
|
|
| 26 |
|
| 27 |
# --- TERMİNAL MOTORU ---
|
| 28 |
def run_shell(command):
|
| 29 |
-
# Kapsamlı Kara Liste
|
| 30 |
blacklist = ["rm -rf", "shred", "mkfs", "dd ", "shutdown", "reboot", ":(){ :|:& };:"]
|
| 31 |
if any(b in command.lower() for b in blacklist):
|
| 32 |
save_command("Sistem", command, "YASAKLANDI")
|
|
@@ -45,76 +44,71 @@ def run_shell(command):
|
|
| 45 |
save_command("Admin", command, f"Hata: {str(e)}")
|
| 46 |
return f"Sistem Hatası: {str(e)}"
|
| 47 |
|
| 48 |
-
# --- GRADIO
|
| 49 |
def get_dashboard_data():
|
| 50 |
if os.path.exists(COMMAND_HISTORY_FILE):
|
| 51 |
df = pd.read_csv(COMMAND_HISTORY_FILE)
|
| 52 |
-
|
| 53 |
-
|
| 54 |
-
# Grafik: Başarı vs Hata
|
| 55 |
-
fig = px.pie(df, names='Durum', title="BadTiMe İşlem Dağılımı", color_discrete_sequence=px.colors.sequential.RdBu)
|
| 56 |
return recent, fig
|
| 57 |
return pd.DataFrame(columns=['Tarih', 'Kullanıcı', 'Komut', 'Durum']), None
|
| 58 |
|
| 59 |
def get_system_stats():
|
| 60 |
cpu = psutil.cpu_percent()
|
| 61 |
ram = psutil.virtual_memory().percent
|
| 62 |
-
|
| 63 |
-
return f"CPU: %{cpu} | RAM: %{ram} | DISK: %{disk}"
|
| 64 |
|
| 65 |
# --- TELEGRAM BRIDGE ---
|
| 66 |
async def telegram_bridge(update: Update, context: ContextTypes.DEFAULT_TYPE):
|
| 67 |
user_id = update.effective_chat.id
|
| 68 |
if user_id not in ALLOWED_USERS:
|
| 69 |
-
await update.message.reply_text("🚫 Yetkisiz erişim denemesi loglandı.")
|
| 70 |
save_command(f"Korsan:{user_id}", update.message.text, "REDDEDİLDİ")
|
| 71 |
return
|
| 72 |
|
| 73 |
cmd = update.message.text
|
| 74 |
response = run_shell(cmd)
|
| 75 |
-
|
| 76 |
-
# Telegram'a özet bilgi gönder
|
| 77 |
-
await update.message.reply_text(f"💀 *BadTiMe İşlendi*\n\nÇıktı Dashboard'a gönderildi.", parse_mode='Markdown')
|
| 78 |
|
| 79 |
def run_tg_bot():
|
| 80 |
-
"""Telegram botunu ayrı bir thread'de çalıştırmak için"""
|
| 81 |
loop = asyncio.new_event_loop()
|
| 82 |
asyncio.set_event_loop(loop)
|
| 83 |
app = ApplicationBuilder().token(TOKEN).build()
|
| 84 |
app.add_handler(MessageHandler(filters.TEXT & (~filters.COMMAND), telegram_bridge))
|
| 85 |
app.run_polling(stop_signals=None)
|
| 86 |
|
| 87 |
-
# --- GRADIO
|
| 88 |
-
|
|
|
|
| 89 |
gr.Markdown("# 💀 BadTiMe Command & Storage Center")
|
| 90 |
|
| 91 |
with gr.Row():
|
| 92 |
-
stats_box = gr.Textbox(value=get_system_stats(), label="
|
| 93 |
-
refresh_stats = gr.Button("
|
| 94 |
|
| 95 |
with gr.Tab("🚀 Canlı Terminal"):
|
| 96 |
with gr.Row():
|
| 97 |
-
cmd_input = gr.Textbox(label="Komut
|
| 98 |
run_btn = gr.Button("ÇALIŞTIR", variant="primary", scale=1)
|
| 99 |
-
|
|
|
|
| 100 |
|
| 101 |
-
with gr.Tab("📁 Storage Bucket
|
| 102 |
-
|
| 103 |
-
history_refresh = gr.Button("Kayıtları Getir", variant="primary")
|
| 104 |
-
|
| 105 |
with gr.Row():
|
| 106 |
-
history_table = gr.DataFrame(label="Komut Geçmişi"
|
| 107 |
-
stats_plot = gr.Plot(label="Analiz
|
| 108 |
|
| 109 |
-
# Eventler
|
| 110 |
run_btn.click(run_shell, inputs=cmd_input, outputs=output_display)
|
| 111 |
refresh_stats.click(get_system_stats, outputs=stats_box)
|
| 112 |
history_refresh.click(get_dashboard_data, outputs=[history_table, stats_plot])
|
| 113 |
|
| 114 |
-
# --- BAŞLATICI ---
|
| 115 |
if __name__ == "__main__":
|
| 116 |
-
# Telegram Botunu Arka Planda Başlat
|
| 117 |
threading.Thread(target=run_tg_bot, daemon=True).start()
|
| 118 |
|
| 119 |
-
#
|
| 120 |
-
badtime_ui.launch(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 10 |
from telegram import Update
|
| 11 |
from telegram.ext import ApplicationBuilder, MessageHandler, filters, ContextTypes
|
| 12 |
|
| 13 |
+
# --- AYARLAR ---
|
| 14 |
TOKEN = "8669709095:AAFRPWdZ9gaVX8PXuVsPJMFlUtOHicjyoyg" # Senin tokenın
|
| 15 |
+
ALLOWED_USERS = [7671497065, 6518828406]
|
| 16 |
COMMAND_HISTORY_FILE = "badtime_history.csv"
|
| 17 |
|
| 18 |
# --- STORAGE MANTIĞI ---
|
|
|
|
| 26 |
|
| 27 |
# --- TERMİNAL MOTORU ---
|
| 28 |
def run_shell(command):
|
|
|
|
| 29 |
blacklist = ["rm -rf", "shred", "mkfs", "dd ", "shutdown", "reboot", ":(){ :|:& };:"]
|
| 30 |
if any(b in command.lower() for b in blacklist):
|
| 31 |
save_command("Sistem", command, "YASAKLANDI")
|
|
|
|
| 44 |
save_command("Admin", command, f"Hata: {str(e)}")
|
| 45 |
return f"Sistem Hatası: {str(e)}"
|
| 46 |
|
| 47 |
+
# --- GRADIO FONKSİYONLARI ---
|
| 48 |
def get_dashboard_data():
|
| 49 |
if os.path.exists(COMMAND_HISTORY_FILE):
|
| 50 |
df = pd.read_csv(COMMAND_HISTORY_FILE)
|
| 51 |
+
recent = df.tail(15).iloc[::-1]
|
| 52 |
+
fig = px.pie(df, names='Durum', title="BadTiMe İşlem Dağılımı")
|
|
|
|
|
|
|
| 53 |
return recent, fig
|
| 54 |
return pd.DataFrame(columns=['Tarih', 'Kullanıcı', 'Komut', 'Durum']), None
|
| 55 |
|
| 56 |
def get_system_stats():
|
| 57 |
cpu = psutil.cpu_percent()
|
| 58 |
ram = psutil.virtual_memory().percent
|
| 59 |
+
return f"CPU: %{cpu} | RAM: %{ram}"
|
|
|
|
| 60 |
|
| 61 |
# --- TELEGRAM BRIDGE ---
|
| 62 |
async def telegram_bridge(update: Update, context: ContextTypes.DEFAULT_TYPE):
|
| 63 |
user_id = update.effective_chat.id
|
| 64 |
if user_id not in ALLOWED_USERS:
|
|
|
|
| 65 |
save_command(f"Korsan:{user_id}", update.message.text, "REDDEDİLDİ")
|
| 66 |
return
|
| 67 |
|
| 68 |
cmd = update.message.text
|
| 69 |
response = run_shell(cmd)
|
| 70 |
+
await update.message.reply_text(f"💀 *BadTiMe İşlendi*\n\nDashboard güncellendi.", parse_mode='Markdown')
|
|
|
|
|
|
|
| 71 |
|
| 72 |
def run_tg_bot():
|
|
|
|
| 73 |
loop = asyncio.new_event_loop()
|
| 74 |
asyncio.set_event_loop(loop)
|
| 75 |
app = ApplicationBuilder().token(TOKEN).build()
|
| 76 |
app.add_handler(MessageHandler(filters.TEXT & (~filters.COMMAND), telegram_bridge))
|
| 77 |
app.run_polling(stop_signals=None)
|
| 78 |
|
| 79 |
+
# --- GRADIO ARAYÜZÜ (v6.0 Uyumlu) ---
|
| 80 |
+
# Title parametresi Blocks'tan kaldırıldı, launch içine alınacak.
|
| 81 |
+
with gr.Blocks() as badtime_ui:
|
| 82 |
gr.Markdown("# 💀 BadTiMe Command & Storage Center")
|
| 83 |
|
| 84 |
with gr.Row():
|
| 85 |
+
stats_box = gr.Textbox(value=get_system_stats(), label="Sistem Durumu", interactive=False)
|
| 86 |
+
refresh_stats = gr.Button("Yenile")
|
| 87 |
|
| 88 |
with gr.Tab("🚀 Canlı Terminal"):
|
| 89 |
with gr.Row():
|
| 90 |
+
cmd_input = gr.Textbox(label="Komut", placeholder="ls -la", scale=4)
|
| 91 |
run_btn = gr.Button("ÇALIŞTIR", variant="primary", scale=1)
|
| 92 |
+
# Dil 'bash' yerine 'shell' olarak güncellendi (Hata veren satır)
|
| 93 |
+
output_display = gr.Code(label="Terminal Çıktısı", language="shell", lines=15)
|
| 94 |
|
| 95 |
+
with gr.Tab("📁 Storage Bucket"):
|
| 96 |
+
history_refresh = gr.Button("Kayıtları Getir", variant="primary")
|
|
|
|
|
|
|
| 97 |
with gr.Row():
|
| 98 |
+
history_table = gr.DataFrame(label="Komut Geçmişi")
|
| 99 |
+
stats_plot = gr.Plot(label="Analiz")
|
| 100 |
|
|
|
|
| 101 |
run_btn.click(run_shell, inputs=cmd_input, outputs=output_display)
|
| 102 |
refresh_stats.click(get_system_stats, outputs=stats_box)
|
| 103 |
history_refresh.click(get_dashboard_data, outputs=[history_table, stats_plot])
|
| 104 |
|
|
|
|
| 105 |
if __name__ == "__main__":
|
|
|
|
| 106 |
threading.Thread(target=run_tg_bot, daemon=True).start()
|
| 107 |
|
| 108 |
+
# Theme ve Title artık burada (v6.0 standardı)
|
| 109 |
+
badtime_ui.launch(
|
| 110 |
+
server_name="0.0.0.0",
|
| 111 |
+
server_port=7860,
|
| 112 |
+
theme=gr.themes.Monochrome(),
|
| 113 |
+
title="BadTiMe Control"
|
| 114 |
+
)
|