Kanhshsh commited on
Commit
fad3637
Β·
verified Β·
1 Parent(s): 68e716f

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +27 -10
app.py CHANGED
@@ -5,10 +5,11 @@ import threading
5
  from queue import Queue
6
  import os
7
  import shlex
 
8
  from telegram import Update
9
  from telegram.ext import ApplicationBuilder, CommandHandler, ContextTypes
10
 
11
- BOT_TOKEN = os.environ.get("BOT_TOKEN")
12
 
13
  log_queue = Queue()
14
  MAX_LOGS = 20000
@@ -19,6 +20,9 @@ bot_running = False
19
  bot_thread = None
20
  current_dir = os.getcwd()
21
 
 
 
 
22
  # --- Logging ---
23
  def add_terminal_log(entry):
24
  terminal_logs.append(entry)
@@ -32,9 +36,21 @@ def add_bot_log(entry):
32
 
33
  # --- Command Execution ---
34
  def execute_command(cmd):
35
- global current_dir
36
  output = []
37
  add_terminal_log(f"$ {cmd}")
 
 
 
 
 
 
 
 
 
 
 
 
38
  if cmd.strip().startswith("cd"):
39
  parts = shlex.split(cmd)
40
  if len(parts) > 1:
@@ -53,14 +69,15 @@ def execute_command(cmd):
53
  output.append(msg)
54
  add_terminal_log(msg)
55
  else:
56
- proc = subprocess.Popen(cmd, cwd=current_dir, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True)
57
- for line in iter(proc.stdout.readline, ''):
58
  line = line.strip()
59
  if line:
60
  output.append(line)
61
  add_terminal_log(line)
62
- proc.stdout.close()
63
- proc.wait()
 
64
  return "\n".join(output)
65
 
66
  # --- Telegram Bot Handlers ---
@@ -83,7 +100,7 @@ async def bash_command(update: Update, context: ContextTypes.DEFAULT_TYPE):
83
 
84
  # --- Bot Start/Stop Logic ---
85
  def start_bot():
86
- global bot_app, bot_running, bot_thread
87
  if bot_running or not BOT_TOKEN:
88
  add_bot_log("[Bot] Already running or token missing.")
89
  return
@@ -139,9 +156,9 @@ with gr.Blocks() as demo:
139
  gr.Markdown("## πŸ–₯️ Interactive Terminal")
140
 
141
  with gr.Row():
142
- terminal_output = gr.Textbox(label="πŸ“Ÿ Terminal Output", lines=20, interactive=False)
143
  with gr.Row():
144
- cmd_input = gr.Textbox(placeholder="Enter shell command", label="Command Input")
145
  run_btn = gr.Button("▢️ Run Command")
146
 
147
  run_btn.click(fn=live_terminal, inputs=cmd_input, outputs=terminal_output)
@@ -151,7 +168,7 @@ with gr.Blocks() as demo:
151
  gr.Markdown("## πŸ€– Telegram Bot Controls")
152
 
153
  with gr.Row():
154
- bot_output = gr.Textbox(label="πŸ€– Telegram Bot Logs", lines=20, interactive=False)
155
  with gr.Row():
156
  token_box = gr.Textbox(label="Bot Token", placeholder="Enter Telegram Bot Token")
157
  with gr.Row():
 
5
  from queue import Queue
6
  import os
7
  import shlex
8
+ import signal
9
  from telegram import Update
10
  from telegram.ext import ApplicationBuilder, CommandHandler, ContextTypes
11
 
12
+ BOT_TOKEN = ""
13
 
14
  log_queue = Queue()
15
  MAX_LOGS = 20000
 
20
  bot_thread = None
21
  current_dir = os.getcwd()
22
 
23
+ # Track current running subprocess for Ctrl+C
24
+ current_proc = None
25
+
26
  # --- Logging ---
27
  def add_terminal_log(entry):
28
  terminal_logs.append(entry)
 
36
 
37
  # --- Command Execution ---
38
  def execute_command(cmd):
39
+ global current_dir, current_proc
40
  output = []
41
  add_terminal_log(f"$ {cmd}")
42
+
43
+ if cmd.strip() == "ctrl+c":
44
+ if current_proc:
45
+ current_proc.send_signal(signal.SIGINT)
46
+ msg = "[Info] Sent Ctrl+C to running process."
47
+ add_terminal_log(msg)
48
+ return msg
49
+ else:
50
+ msg = "[Info] No running process to interrupt."
51
+ add_terminal_log(msg)
52
+ return msg
53
+
54
  if cmd.strip().startswith("cd"):
55
  parts = shlex.split(cmd)
56
  if len(parts) > 1:
 
69
  output.append(msg)
70
  add_terminal_log(msg)
71
  else:
72
+ current_proc = subprocess.Popen(cmd, cwd=current_dir, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True)
73
+ for line in iter(current_proc.stdout.readline, ''):
74
  line = line.strip()
75
  if line:
76
  output.append(line)
77
  add_terminal_log(line)
78
+ current_proc.stdout.close()
79
+ current_proc.wait()
80
+ current_proc = None
81
  return "\n".join(output)
82
 
83
  # --- Telegram Bot Handlers ---
 
100
 
101
  # --- Bot Start/Stop Logic ---
102
  def start_bot():
103
+ global bot_app, bot_running, bot_thread, BOT_TOKEN
104
  if bot_running or not BOT_TOKEN:
105
  add_bot_log("[Bot] Already running or token missing.")
106
  return
 
156
  gr.Markdown("## πŸ–₯️ Interactive Terminal")
157
 
158
  with gr.Row():
159
+ terminal_output = gr.Textbox(label="πŸ“Ÿ Terminal Output", lines=25, interactive=False)
160
  with gr.Row():
161
+ cmd_input = gr.Textbox(placeholder="Enter shell command (use 'ctrl+c' to cancel)", label="Command Input")
162
  run_btn = gr.Button("▢️ Run Command")
163
 
164
  run_btn.click(fn=live_terminal, inputs=cmd_input, outputs=terminal_output)
 
168
  gr.Markdown("## πŸ€– Telegram Bot Controls")
169
 
170
  with gr.Row():
171
+ bot_output = gr.Textbox(label="πŸ€– Telegram Bot Logs", lines=25, interactive=False)
172
  with gr.Row():
173
  token_box = gr.Textbox(label="Bot Token", placeholder="Enter Telegram Bot Token")
174
  with gr.Row():