Kanhshsh commited on
Commit
bea787a
Β·
verified Β·
1 Parent(s): e77b868

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +37 -39
app.py CHANGED
@@ -1,71 +1,69 @@
1
  import os
2
  import gradio as gr
3
- import asyncio
4
  import logging
 
5
  from pyrogram import Client, filters
6
- from threading import Thread
7
  from io import StringIO
 
8
 
9
- # ---------- CONFIGURATION ----------
10
- API_ID = int(os.environ.get("API_ID", "6")) # replace with real values
11
  API_HASH = os.environ.get("API_HASH", "eb06d4abfb49dc3eeb1aeb98ae0f581e")
12
  BOT_TOKEN = os.environ.get("BOT_TOKEN", "7510817339:AAHFZoFzPkUO_-nAwfh9bjY_qHsWMprM2PI")
13
 
14
- # ---------- LOGGING SETUP ----------
15
  log_stream = StringIO()
16
- logging.basicConfig(level=logging.INFO, stream=log_stream, format="%(asctime)s - %(message)s")
17
  logger = logging.getLogger()
18
 
19
- # ---------- TELEGRAM BOT SETUP ----------
20
- app = Client("simple_bot", api_id=API_ID, api_hash=API_HASH, bot_token=BOT_TOKEN)
 
21
 
22
- @app.on_message(filters.command("start") & filters.private)
23
- async def start(client, message):
24
- await message.reply("hi")
25
- logger.info(f"Replied to /start from: {message.from_user.id}")
26
 
27
- # ---------- CONTROL ----------
28
- bot_thread = None
 
29
 
30
- def start_bot():
31
- global bot_thread
32
 
33
- if bot_thread and bot_thread.is_alive():
 
 
34
  return "Bot is already running."
35
-
36
- def run():
37
- logger.info("Bot started.")
38
- app.run()
39
-
40
- bot_thread = Thread(target=run)
41
- bot_thread.start()
42
  return "βœ… Bot started."
43
 
44
  def stop_bot():
45
- try:
46
- app.stop()
47
- logger.info("Bot stopped.")
 
 
48
  return "πŸ›‘ Bot stopped."
49
- except Exception as e:
50
- logger.error(f"Error stopping bot: {e}")
51
- return f"❌ Error: {e}"
52
 
53
- def show_logs():
54
- return log_stream.getvalue()[-20000:] # show last 20,000 characters
55
 
56
  # ---------- GRADIO UI ----------
57
- with gr.Blocks() as demo:
58
  gr.Markdown("## πŸ€– Telegram Bot Control Panel")
59
  start_btn = gr.Button("πŸš€ Start Bot")
60
  stop_btn = gr.Button("πŸ›‘ Stop Bot")
61
- logs_box = gr.Textbox(label="πŸ“œ Logs", lines=20)
 
62
 
63
  start_btn.click(fn=start_bot, outputs=logs_box)
64
  stop_btn.click(fn=stop_bot, outputs=logs_box)
 
65
 
66
- gr.Button("πŸ”„ Refresh Logs").click(fn=show_logs, outputs=logs_box)
67
-
68
- # ---------- RUN GRADIO ----------
69
  if __name__ == "__main__":
70
- demo.launch()
71
-
 
1
  import os
2
  import gradio as gr
 
3
  import logging
4
+ from multiprocessing import Process
5
  from pyrogram import Client, filters
 
6
  from io import StringIO
7
+ from time import sleep
8
 
9
+ # ---------- FIXED CONFIG ----------
10
+ API_ID = int(os.environ.get("API_ID", "6"))
11
  API_HASH = os.environ.get("API_HASH", "eb06d4abfb49dc3eeb1aeb98ae0f581e")
12
  BOT_TOKEN = os.environ.get("BOT_TOKEN", "7510817339:AAHFZoFzPkUO_-nAwfh9bjY_qHsWMprM2PI")
13
 
14
+ # ---------- LOGGING ----------
15
  log_stream = StringIO()
16
+ logging.basicConfig(stream=log_stream, level=logging.INFO, format="%(asctime)s - %(message)s")
17
  logger = logging.getLogger()
18
 
19
+ # ---------- BOT FUNCTION ----------
20
+ def run_bot():
21
+ app = Client("my_bot", api_id=API_ID, api_hash=API_HASH, bot_token=BOT_TOKEN)
22
 
23
+ @app.on_message(filters.command("start") & filters.private)
24
+ async def start_cmd(client, message):
25
+ await message.reply("hi")
26
+ logger.info(f"Replied to /start from user ID: {message.from_user.id}")
27
 
28
+ logger.info("Bot started.")
29
+ app.run()
30
+ logger.info("Bot stopped.")
31
 
32
+ # ---------- PROCESS CONTROL ----------
33
+ bot_process = None
34
 
35
+ def start_bot():
36
+ global bot_process
37
+ if bot_process and bot_process.is_alive():
38
  return "Bot is already running."
39
+ bot_process = Process(target=run_bot)
40
+ bot_process.start()
41
+ sleep(2)
 
 
 
 
42
  return "βœ… Bot started."
43
 
44
  def stop_bot():
45
+ global bot_process
46
+ if bot_process and bot_process.is_alive():
47
+ bot_process.terminate()
48
+ bot_process.join()
49
+ logger.info("Bot manually stopped.")
50
  return "πŸ›‘ Bot stopped."
51
+ return "Bot is not running."
 
 
52
 
53
+ def get_logs():
54
+ return log_stream.getvalue()[-20000:]
55
 
56
  # ---------- GRADIO UI ----------
57
+ with gr.Blocks() as ui:
58
  gr.Markdown("## πŸ€– Telegram Bot Control Panel")
59
  start_btn = gr.Button("πŸš€ Start Bot")
60
  stop_btn = gr.Button("πŸ›‘ Stop Bot")
61
+ refresh_btn = gr.Button("πŸ”„ Refresh Logs")
62
+ logs_box = gr.Textbox(label="πŸ“œ Bot Logs", lines=25)
63
 
64
  start_btn.click(fn=start_bot, outputs=logs_box)
65
  stop_btn.click(fn=stop_bot, outputs=logs_box)
66
+ refresh_btn.click(fn=get_logs, outputs=logs_box)
67
 
 
 
 
68
  if __name__ == "__main__":
69
+ ui.launch()