BadTiMe / app.py
RootKernelTR's picture
Update app.py
9aaae91 verified
Raw
History Blame Contribute Delete
4.68 kB
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)