Update bot.py
Browse files
bot.py
CHANGED
|
@@ -25,16 +25,13 @@ API_HASH = os.getenv("API_HASH", "")
|
|
| 25 |
SESSION_STRING = os.getenv("SESSION_STRING", "")
|
| 26 |
SOURCE_CHANNEL = os.getenv("SOURCE_CHANNEL", "")
|
| 27 |
TARGET_CHANNEL = os.getenv("TARGET_CHANNEL", "")
|
| 28 |
-
LIMIT = int(os.getenv("LIMIT", "50"))
|
| 29 |
-
BASE_DELAY = int(os.getenv("DELAY_SECONDS", "300"))
|
| 30 |
|
| 31 |
if not API_ID or not API_HASH or not SESSION_STRING:
|
| 32 |
raise ValueError("❌ تأكد من إضافة API_ID و API_HASH و SESSION_STRING في الـ Secrets")
|
| 33 |
|
| 34 |
-
# إ
|
| 35 |
-
if SESSION_STRING:
|
| 36 |
-
SESSION_STRING += "=" * ((4 - len(SESSION_STRING) % 4) % 4)
|
| 37 |
-
|
| 38 |
client = TelegramClient(StringSession(SESSION_STRING), API_ID, API_HASH)
|
| 39 |
|
| 40 |
# دالة لقراءة الأشخاص الذين تم سحبهم سابقاً لتجنب التكرار
|
|
@@ -73,7 +70,6 @@ async def main():
|
|
| 73 |
actual_processed = 0
|
| 74 |
|
| 75 |
for member in members:
|
| 76 |
-
# التوقف إذا وصلنا للعدد المطلوب إضافته
|
| 77 |
if actual_processed >= LIMIT:
|
| 78 |
break
|
| 79 |
|
|
@@ -87,18 +83,16 @@ async def main():
|
|
| 87 |
if str_id in added_users_memory:
|
| 88 |
continue
|
| 89 |
|
| 90 |
-
# 3. فلترة: جلب الأعضاء النشطين فقط
|
| 91 |
-
# هذا يقلل الحظر بشكل كبيييير جداً
|
| 92 |
is_active = isinstance(member.status, (UserStatusOnline, UserStatusRecently))
|
| 93 |
if not is_active:
|
| 94 |
continue
|
| 95 |
|
| 96 |
-
# إذا وصل هنا، يعني عضو مناسب جداً للسحب!
|
| 97 |
actual_processed += 1
|
| 98 |
name = member.first_name or "مستخدم"
|
| 99 |
logger.info(f"[{actual_processed}/{LIMIT}] 📩 جاري محاولة إضافة: {name}")
|
| 100 |
|
| 101 |
-
# حفظه في الذاكرة
|
| 102 |
save_added_user(str_id)
|
| 103 |
added_users_memory.add(str_id)
|
| 104 |
|
|
@@ -109,7 +103,7 @@ async def main():
|
|
| 109 |
success += 1
|
| 110 |
logger.info(f"✅ تمت إضافة {name} بنجاح!")
|
| 111 |
|
| 112 |
-
# تأخير ذكي
|
| 113 |
smart_delay = BASE_DELAY + random.randint(10, 60)
|
| 114 |
logger.info(f"⏳ انتظار {smart_delay} ثانية للتمويه...")
|
| 115 |
await asyncio.sleep(smart_delay)
|
|
|
|
| 25 |
SESSION_STRING = os.getenv("SESSION_STRING", "")
|
| 26 |
SOURCE_CHANNEL = os.getenv("SOURCE_CHANNEL", "")
|
| 27 |
TARGET_CHANNEL = os.getenv("TARGET_CHANNEL", "")
|
| 28 |
+
LIMIT = int(os.getenv("LIMIT", "50"))
|
| 29 |
+
BASE_DELAY = int(os.getenv("DELAY_SECONDS", "300"))
|
| 30 |
|
| 31 |
if not API_ID or not API_HASH or not SESSION_STRING:
|
| 32 |
raise ValueError("❌ تأكد من إضافة API_ID و API_HASH و SESSION_STRING في الـ Secrets")
|
| 33 |
|
| 34 |
+
# إنشاء العميل بدون اللعب في الـ SESSION_STRING
|
|
|
|
|
|
|
|
|
|
| 35 |
client = TelegramClient(StringSession(SESSION_STRING), API_ID, API_HASH)
|
| 36 |
|
| 37 |
# دالة لقراءة الأشخاص الذين تم سحبهم سابقاً لتجنب التكرار
|
|
|
|
| 70 |
actual_processed = 0
|
| 71 |
|
| 72 |
for member in members:
|
|
|
|
| 73 |
if actual_processed >= LIMIT:
|
| 74 |
break
|
| 75 |
|
|
|
|
| 83 |
if str_id in added_users_memory:
|
| 84 |
continue
|
| 85 |
|
| 86 |
+
# 3. فلترة: جلب الأعضاء النشطين فقط
|
|
|
|
| 87 |
is_active = isinstance(member.status, (UserStatusOnline, UserStatusRecently))
|
| 88 |
if not is_active:
|
| 89 |
continue
|
| 90 |
|
|
|
|
| 91 |
actual_processed += 1
|
| 92 |
name = member.first_name or "مستخدم"
|
| 93 |
logger.info(f"[{actual_processed}/{LIMIT}] 📩 جاري محاولة إضافة: {name}")
|
| 94 |
|
| 95 |
+
# حفظه في الذاكرة
|
| 96 |
save_added_user(str_id)
|
| 97 |
added_users_memory.add(str_id)
|
| 98 |
|
|
|
|
| 103 |
success += 1
|
| 104 |
logger.info(f"✅ تمت إضافة {name} بنجاح!")
|
| 105 |
|
| 106 |
+
# تأخير ذكي
|
| 107 |
smart_delay = BASE_DELAY + random.randint(10, 60)
|
| 108 |
logger.info(f"⏳ انتظار {smart_delay} ثانية للتمويه...")
|
| 109 |
await asyncio.sleep(smart_delay)
|