Update main.py
Browse files
main.py
CHANGED
|
@@ -24,16 +24,9 @@ from pydub import AudioSegment
|
|
| 24 |
# --- کد مدیریت برای ارتقای کاربران بدون نیاز به لاگین ---
|
| 25 |
ADMIN_CODE = "3011"
|
| 26 |
|
| 27 |
-
# متغیر سراسری برای ذخیره آیدی خود ربات
|
| 28 |
BOT_GUID = None
|
| 29 |
|
| 30 |
-
# =======================================================
|
| 31 |
-
# 🔥 متغیرهای سیستم جاروبرقی و ضد رگبار استارتآپ 🔥
|
| 32 |
-
# =======================================================
|
| 33 |
-
BOT_START_TIME = time.time()
|
| 34 |
-
STARTUP_PHASE = True
|
| 35 |
-
LAST_UPDATE_TIME = time.time()
|
| 36 |
-
|
| 37 |
# =======================================================
|
| 38 |
# 🔥 سیستم کنترل سرعت و ضد رگبار (Burst Controller) 🔥
|
| 39 |
# =======================================================
|
|
@@ -51,7 +44,7 @@ def is_backlog_burst():
|
|
| 51 |
return False
|
| 52 |
else:
|
| 53 |
global_burst_count += 1
|
| 54 |
-
if global_burst_count >
|
| 55 |
return True
|
| 56 |
return False
|
| 57 |
|
|
@@ -1025,7 +1018,7 @@ async def process_image_edit(client, chat_id, image_bytes, prompt):
|
|
| 1025 |
if proc_msg:
|
| 1026 |
msg_id = getattr(proc_msg, 'message_id', None)
|
| 1027 |
if isinstance(proc_msg, dict): msg_id = proc_msg.get('message_update', {}).get('message_id') or proc_msg.get('message_id')
|
| 1028 |
-
if msg_id: await client.delete_messages(chat_id,[msg_id])
|
| 1029 |
except Exception: pass
|
| 1030 |
|
| 1031 |
if not generated_image:
|
|
@@ -1577,22 +1570,7 @@ else:
|
|
| 1577 |
|
| 1578 |
@bot.on_update(filters.private)
|
| 1579 |
async def main_handler(client, update):
|
| 1580 |
-
|
| 1581 |
-
# 🔥 لایه دفاعی جاروبرقی استارتآپ (نابودی رگبار قدیمی) 🔥
|
| 1582 |
-
# =============================================================
|
| 1583 |
-
global BOT_GUID, STARTUP_PHASE, LAST_UPDATE_TIME
|
| 1584 |
-
|
| 1585 |
-
now = time.time()
|
| 1586 |
-
time_since_last = now - LAST_UPDATE_TIME
|
| 1587 |
-
LAST_UPDATE_TIME = now
|
| 1588 |
-
|
| 1589 |
-
if STARTUP_PHASE:
|
| 1590 |
-
# خروج از فاز استارتآپ اگر 20 ثانیه گذشته باشه یا اینکه 2 ثانیه هیچ پیامی نیومده باشه
|
| 1591 |
-
if (now - BOT_START_TIME) > 20.0 or (time_since_last > 2.0 and (now - BOT_START_TIME) > 5.0):
|
| 1592 |
-
STARTUP_PHASE = False
|
| 1593 |
-
else:
|
| 1594 |
-
return # دراپ کردن سریع پیامهای رگباری قدیمی در همون صدم ثانیه اول
|
| 1595 |
-
# =============================================================
|
| 1596 |
|
| 1597 |
if is_backlog_burst():
|
| 1598 |
return
|
|
@@ -1607,35 +1585,6 @@ else:
|
|
| 1607 |
pass
|
| 1608 |
|
| 1609 |
msg_obj = getattr(update, "message", None) or getattr(update, "new_message", None)
|
| 1610 |
-
|
| 1611 |
-
# =============================================================
|
| 1612 |
-
# 🔥 لایه دفاعی دوم: بررسی بیرحمانه زمان پیام (تایماستمپ) 🔥
|
| 1613 |
-
# =============================================================
|
| 1614 |
-
try:
|
| 1615 |
-
msg_ts = None
|
| 1616 |
-
if hasattr(msg_obj, "to_dict"):
|
| 1617 |
-
d = msg_obj.to_dict()
|
| 1618 |
-
msg_ts = d.get("timestamp") or d.get("time") or d.get("date")
|
| 1619 |
-
if not msg_ts and hasattr(update, "to_dict"):
|
| 1620 |
-
d = update.to_dict()
|
| 1621 |
-
msg_ts = d.get("timestamp") or d.get("time") or d.get("date")
|
| 1622 |
-
if not msg_ts and "message" in d:
|
| 1623 |
-
msg_ts = d["message"].get("timestamp") or d["message"].get("time") or d["message"].get("date")
|
| 1624 |
-
if not msg_ts:
|
| 1625 |
-
msg_ts = getattr(msg_obj, "timestamp", None) or getattr(msg_obj, "time", None)
|
| 1626 |
-
if not msg_ts:
|
| 1627 |
-
msg_ts = getattr(update, "timestamp", None) or getattr(update, "time", None)
|
| 1628 |
-
|
| 1629 |
-
if msg_ts:
|
| 1630 |
-
ts_val = int(msg_ts)
|
| 1631 |
-
if ts_val > 9999999999: # تبدیل میلیثانیه به ثانیه در صورت نیاز
|
| 1632 |
-
ts_val = ts_val // 1000
|
| 1633 |
-
# اگر پیام برای بیش از 10 ثانیه قبل از روشن شدن ربات است، نادیده بگیر
|
| 1634 |
-
if ts_val < BOT_START_TIME - 10:
|
| 1635 |
-
return
|
| 1636 |
-
except Exception:
|
| 1637 |
-
pass
|
| 1638 |
-
# =============================================================
|
| 1639 |
|
| 1640 |
author_id = getattr(update, 'author_guid', None)
|
| 1641 |
if not author_id and msg_obj:
|
|
@@ -1937,7 +1886,7 @@ else:
|
|
| 1937 |
|
| 1938 |
if user_text_str in["/referral", "ثبت کد هدیه 🎫"]:
|
| 1939 |
if creds.get("used_referral", False):
|
| 1940 |
-
await send_with_keyboard(client, chat_id, "❌ شما قبلاً کد هدیه یک نفر را ثبت کردهاید و فقط یکبار مجاز به استفاده از این امکان
|
| 1941 |
return
|
| 1942 |
user_states[str_chat_id]["mode"] = "waiting_for_referral_code"
|
| 1943 |
msg = "🎫 **ثبت کد هدیه**\n\nکد هدیه 8 رقمی (اعداد) که از دوست خود دریافت کردهاید را اینجا وارد کنید تا در همان لحظه **10 سهمیه تبدیل رایگان متن به صدا** هدیه بگیرید!\n\n(برای انصراف دکمه «برگشت♻️» را بزنید)"
|
|
|
|
| 24 |
# --- کد مدیریت برای ارتقای کاربران بدون نیاز به لاگین ---
|
| 25 |
ADMIN_CODE = "3011"
|
| 26 |
|
| 27 |
+
# متغیر سراسری برای ذخیره آیدی خود ربات (جلوگیری از جواب دادن ربات به خودش)
|
| 28 |
BOT_GUID = None
|
| 29 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 30 |
# =======================================================
|
| 31 |
# 🔥 سیستم کنترل سرعت و ضد رگبار (Burst Controller) 🔥
|
| 32 |
# =======================================================
|
|
|
|
| 44 |
return False
|
| 45 |
else:
|
| 46 |
global_burst_count += 1
|
| 47 |
+
if global_burst_count > 6000:
|
| 48 |
return True
|
| 49 |
return False
|
| 50 |
|
|
|
|
| 1018 |
if proc_msg:
|
| 1019 |
msg_id = getattr(proc_msg, 'message_id', None)
|
| 1020 |
if isinstance(proc_msg, dict): msg_id = proc_msg.get('message_update', {}).get('message_id') or proc_msg.get('message_id')
|
| 1021 |
+
if msg_id: await client.delete_messages(chat_id, [msg_id])
|
| 1022 |
except Exception: pass
|
| 1023 |
|
| 1024 |
if not generated_image:
|
|
|
|
| 1570 |
|
| 1571 |
@bot.on_update(filters.private)
|
| 1572 |
async def main_handler(client, update):
|
| 1573 |
+
global BOT_GUID
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1574 |
|
| 1575 |
if is_backlog_burst():
|
| 1576 |
return
|
|
|
|
| 1585 |
pass
|
| 1586 |
|
| 1587 |
msg_obj = getattr(update, "message", None) or getattr(update, "new_message", None)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1588 |
|
| 1589 |
author_id = getattr(update, 'author_guid', None)
|
| 1590 |
if not author_id and msg_obj:
|
|
|
|
| 1886 |
|
| 1887 |
if user_text_str in["/referral", "ثبت کد هدیه 🎫"]:
|
| 1888 |
if creds.get("used_referral", False):
|
| 1889 |
+
await send_with_keyboard(client, chat_id, "❌ شما قبلاً کد هدیه یک نفر را ثبت کردهاید و فقط یکبار مجاز به استفاده از این امکان هستید.", True)
|
| 1890 |
return
|
| 1891 |
user_states[str_chat_id]["mode"] = "waiting_for_referral_code"
|
| 1892 |
msg = "🎫 **ثبت کد هدیه**\n\nکد هدیه 8 رقمی (اعداد) که از دوست خود دریافت کردهاید را اینجا وارد کنید تا در همان لحظه **10 سهمیه تبدیل رایگان متن به صدا** هدیه بگیرید!\n\n(برای انصراف دکمه «برگشت♻️» را بزنید)"
|