understanding commited on
Commit
8f12934
Β·
verified Β·
1 Parent(s): 69a35bd

Update bot/handlers.py

Browse files
Files changed (1) hide show
  1. bot/handlers.py +33 -46
bot/handlers.py CHANGED
@@ -9,7 +9,7 @@ from typing import Dict
9
  from hydrogram import Client, filters
10
  from hydrogram.types import Message, CallbackQuery
11
 
12
- from bot.config import Telegram, Workers
13
  from bot.ui import texts
14
  from bot.ui.keyboards import profiles_keyboard, auth_menu_keyboard
15
  from bot.ui.callbacks import parse_cb, AUTH_JSON, AUTH_CI, CANCEL
@@ -78,6 +78,10 @@ def _pick_login_url(j: dict) -> str:
78
  )
79
 
80
 
 
 
 
 
81
  def setup_handlers(app: Client) -> None:
82
  @app.on_message(filters.command(["start"]) & filters.private)
83
  async def start_handler(_: Client, m: Message):
@@ -103,7 +107,7 @@ def setup_handlers(app: Client) -> None:
103
  return await safe_reply(m, "⏳ Wait 30s then try again.")
104
  _SPEED_COOLDOWN[uid] = now
105
 
106
- msg = await safe_reply(m, "⚑ Running speedtest…")
107
 
108
  # uptime
109
  up_sec = int(max(0, time.time() - _STARTED_AT))
@@ -111,47 +115,39 @@ def setup_handlers(app: Client) -> None:
111
 
112
  # disk
113
  d = disk_total_free("/")
114
- total_gb = d["total"] / (1024**3)
115
- free_gb = d["free"] / (1024**3)
116
 
117
  # run parallel
118
  dl_task = asyncio.create_task(net_download_test())
119
  up_task = asyncio.create_task(net_upload_test())
120
  p_task = asyncio.create_task(ping_ms())
121
 
122
- dl = await dl_task
123
- up = await up_task
124
- p = await p_task
125
 
126
- ping_val = int(round(p)) if p is not None else None
127
 
128
- dl_bps = float(dl.get("bps") or 0.0)
129
- dl_bytes = float(dl.get("bytes") or 0.0)
130
- dl_sec = float(dl.get("seconds") or 0.0)
131
 
132
- up_bps = float(up.get("bps") or 0.0)
133
- up_bytes = float(up.get("bytes") or 0.0)
134
- up_sec = float(up.get("seconds") or 0.0)
135
-
136
- dl_mb_s = bytes_per_sec_to_mb_s(dl_bps)
137
- up_mb_s = bytes_per_sec_to_mb_s(up_bps)
138
 
139
  txt = (
140
- "⚑ **Server Speed Test**\n\n"
141
- "πŸ•’ **Uptime**\n"
142
- f"β€’ {up_txt}\n\n"
143
- "πŸ“‘ **Network**\n"
144
- f"β€’ 🟒 Ping : {ping_val if ping_val is not None else 'N/A'} ms\n"
145
- f"β€’ ⬇️ Download : {dl_mb_s:.2f} MB/s\n"
146
- f" ↳ {bytes_to_mb(dl_bytes):.2f} MB in {dl_sec:.2f}s\n"
147
- f"β€’ ⬆️ Upload : {up_mb_s:.2f} MB/s\n"
148
- f" ↳ {bytes_to_mb(up_bytes):.2f} MB in {up_sec:.2f}s\n\n"
149
- "πŸ’Ύ **Storage**\n"
150
- f"β€’ Total Space : {total_gb:.1f} GB\n"
151
- f"β€’ Free Space : {free_gb:.1f} GB\n\n"
152
- "πŸ§ͺ _Measured directly from server (real MB/s, not Mbps)_"
153
  )
154
-
155
  await safe_edit(msg, txt)
156
 
157
  # -------- OWNER allow/disallow via forward OR id --------
@@ -171,9 +167,7 @@ def setup_handlers(app: Client) -> None:
171
  target = int(parts[1])
172
 
173
  if not target:
174
- return await safe_reply(
175
- m, "Usage:\nβ€’ Reply/forward user msg then /allow\nβ€’ or /allow <user_id>"
176
- )
177
 
178
  j = await allow_user(target)
179
  await safe_reply(m, f"βœ… allowed: `{target}`\n`{j}`")
@@ -229,7 +223,7 @@ def setup_handlers(app: Client) -> None:
229
 
230
  @app.on_message(filters.command(["cancel"]) & filters.private)
231
  async def cancel_cmd(_: Client, m: Message):
232
- _AWAIT_AUTH.pop(m.from_user.id if m.from_user else 0, None)
233
  await safe_reply(m, texts.CANCELLED)
234
 
235
  @app.on_callback_query()
@@ -314,17 +308,12 @@ def setup_handlers(app: Client) -> None:
314
  if not isinstance(j, dict):
315
  return await safe_reply(m, f"❌ profile_add bad response: `{j}`")
316
 
317
- if not j.get("ok") and not (
318
- isinstance(j.get("data"), dict) and j["data"].get("ok")
319
- ):
320
  return await safe_reply(m, texts.PROFILE_ADD_FAIL.format(j))
321
 
322
  login_url = _pick_login_url(j)
323
  if not login_url:
324
- return await safe_reply(
325
- m,
326
- f"❌ profile_add OK but login link missing.\nBackend response:\n`{j}`",
327
- )
328
 
329
  _AWAIT_AUTH.pop(uid, None)
330
  await safe_reply(m, texts.SENT_AUTH_LINK + login_url)
@@ -352,9 +341,7 @@ def setup_handlers(app: Client) -> None:
352
  ch = (p.get("channel_title") or "β€”").strip()
353
  cid = p.get("client_id_hint") or "β€”"
354
  sec = p.get("client_secret_hint") or "****…****"
355
- connected = (
356
- "βœ… Connected" if (p.get("has_refresh") and p.get("channel_id")) else "⏳ Pending"
357
- )
358
  cur = "🟒 Current" if pid == default_id else ""
359
  txt += f"[{i}] {ch} | {cur} | id: {cid} | secret: {sec} | {connected}\n"
360
 
@@ -415,7 +402,7 @@ def setup_handlers(app: Client) -> None:
415
  dl_sec = max(0.001, time.time() - dl_t0)
416
 
417
  # fallback size from disk if TG didn't give it
418
- if (not file_size) and file_path and os.path.exists(file_path):
419
  try:
420
  file_size = os.path.getsize(file_path)
421
  except Exception:
 
9
  from hydrogram import Client, filters
10
  from hydrogram.types import Message, CallbackQuery
11
 
12
+ from bot.config import Workers
13
  from bot.ui import texts
14
  from bot.ui.keyboards import profiles_keyboard, auth_menu_keyboard
15
  from bot.ui.callbacks import parse_cb, AUTH_JSON, AUTH_CI, CANCEL
 
78
  )
79
 
80
 
81
+ def _fmt_gb(b: float) -> float:
82
+ return float(b) / (1024.0**3)
83
+
84
+
85
  def setup_handlers(app: Client) -> None:
86
  @app.on_message(filters.command(["start"]) & filters.private)
87
  async def start_handler(_: Client, m: Message):
 
107
  return await safe_reply(m, "⏳ Wait 30s then try again.")
108
  _SPEED_COOLDOWN[uid] = now
109
 
110
+ msg = await safe_reply(m, "⚑ Running speed test…")
111
 
112
  # uptime
113
  up_sec = int(max(0, time.time() - _STARTED_AT))
 
115
 
116
  # disk
117
  d = disk_total_free("/")
118
+ total_gb = _fmt_gb(d["total"])
119
+ free_gb = _fmt_gb(d["free"])
120
 
121
  # run parallel
122
  dl_task = asyncio.create_task(net_download_test())
123
  up_task = asyncio.create_task(net_upload_test())
124
  p_task = asyncio.create_task(ping_ms())
125
 
126
+ dl, up, p = await asyncio.gather(dl_task, up_task, p_task)
 
 
127
 
128
+ ping_line = f"{p:.0f} ms" if p is not None else "N/A"
129
 
130
+ dl_mb_s = bytes_per_sec_to_mb_s(dl["bps"])
131
+ up_mb_s = bytes_per_sec_to_mb_s(up["bps"])
 
132
 
133
+ dl_mb = bytes_to_mb(dl["bytes"])
134
+ up_mb = bytes_to_mb(up["bytes"])
 
 
 
 
135
 
136
  txt = (
137
+ "⚑ Server Speed Test\n\n"
138
+ "πŸ•’ Uptime\n"
139
+ f"β”” {up_txt}\n\n"
140
+ "πŸ“‘ Network\n"
141
+ f"β”œ 🟒 Ping: {ping_line}\n"
142
+ f"β”œ ⬇️ Download: {dl_mb_s:.2f} MB/s\n"
143
+ f"β”‚ β”” {dl_mb:.2f} MB in {dl['seconds']:.2f}s\n"
144
+ f"β”” ⬆️ Upload: {up_mb_s:.2f} MB/s\n"
145
+ f" β”” {up_mb:.2f} MB in {up['seconds']:.2f}s\n\n"
146
+ "πŸ’Ύ Storage\n"
147
+ f"β”œ Total: {total_gb:.1f} GB\n"
148
+ f"β”” Free : {free_gb:.1f} GB\n\n"
149
+ "πŸ§ͺ Measured from server (real MB/s, not Mbps)"
150
  )
 
151
  await safe_edit(msg, txt)
152
 
153
  # -------- OWNER allow/disallow via forward OR id --------
 
167
  target = int(parts[1])
168
 
169
  if not target:
170
+ return await safe_reply(m, "Usage:\nβ€’ Reply/forward user msg then /allow\nβ€’ or /allow <user_id>")
 
 
171
 
172
  j = await allow_user(target)
173
  await safe_reply(m, f"βœ… allowed: `{target}`\n`{j}`")
 
223
 
224
  @app.on_message(filters.command(["cancel"]) & filters.private)
225
  async def cancel_cmd(_: Client, m: Message):
226
+ _AWAIT_AUTH.pop(m.from_user.id, None)
227
  await safe_reply(m, texts.CANCELLED)
228
 
229
  @app.on_callback_query()
 
308
  if not isinstance(j, dict):
309
  return await safe_reply(m, f"❌ profile_add bad response: `{j}`")
310
 
311
+ if not j.get("ok") and not (isinstance(j.get("data"), dict) and j["data"].get("ok")):
 
 
312
  return await safe_reply(m, texts.PROFILE_ADD_FAIL.format(j))
313
 
314
  login_url = _pick_login_url(j)
315
  if not login_url:
316
+ return await safe_reply(m, f"❌ profile_add OK but login link missing.\nBackend response:\n`{j}`")
 
 
 
317
 
318
  _AWAIT_AUTH.pop(uid, None)
319
  await safe_reply(m, texts.SENT_AUTH_LINK + login_url)
 
341
  ch = (p.get("channel_title") or "β€”").strip()
342
  cid = p.get("client_id_hint") or "β€”"
343
  sec = p.get("client_secret_hint") or "****…****"
344
+ connected = "βœ… Connected" if (p.get("has_refresh") and p.get("channel_id")) else "⏳ Pending"
 
 
345
  cur = "🟒 Current" if pid == default_id else ""
346
  txt += f"[{i}] {ch} | {cur} | id: {cid} | secret: {sec} | {connected}\n"
347
 
 
402
  dl_sec = max(0.001, time.time() - dl_t0)
403
 
404
  # fallback size from disk if TG didn't give it
405
+ if not file_size and file_path and os.path.exists(file_path):
406
  try:
407
  file_size = os.path.getsize(file_path)
408
  except Exception: