xosski

Telegram

Nov 11th, 2024 (edited)
3
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.20 KB | None | 0 0
  1. import random
  2. import asyncio
  3. import logging
  4. import socks
  5. import json
  6. from telethon import TelegramClient, errors
  7. from telethon.tl.functions.messages import GetHistoryRequest
  8. from telethon.tl.functions.channels import JoinChannelRequest
  9.  
  10. # הגדרת Log
  11. logging.basicConfig(level=logging.INFO)
  12. logger = logging.getLogger(__name__)
  13.  
  14. # פרטי ה-API
  15. api_id = '4394862'
  16. api_hash = 'd71971e3f9a0c0d164893803d97f5091'
  17. phone_number = '12494295802'
  18.  
  19. # Proxy settings
  20. proxy_host = 'ca.smartproxy.com'
  21. proxy_port = 20000
  22. proxy_username = 'spe3j0irud'
  23. proxy_password = 'HttFt8zTI~gt7lf8j3'
  24.  
  25. # יצירת חיבור ל-Telegram
  26. client = TelegramClient(
  27. '12494295802',
  28. api_id,
  29. api_hash,
  30. proxy=(socks.HTTP, proxy_host, proxy_port, True, proxy_username, proxy_password)
  31. )
  32.  
  33. # רשימת קבוצות פתוחות שהסקריפט יפרסם אליהן
  34. group_ids = []
  35.  
  36. # פונקציה לקריאת רשימת הקבוצות מתוך קובץ JSON
  37. def load_groups_from_json():
  38. with open('groups.json', 'r') as file:
  39. return json.load(file).get("groups", [])
  40.  
  41. # פונקציה לשמירת האינדקס הנוכחי בקובץ JSON
  42. def save_current_index(index):
  43. with open('group_index.json', 'w') as file:
  44. json.dump({"current_index": index}, file)
  45.  
  46. # פונקציה לטעינת האינדקס הנוכחי מקובץ JSON
  47. def load_current_index():
  48. try:
  49. with open('group_index.json', 'r') as file:
  50. return json.load(file).get("current_index", 0)
  51. except FileNotFoundError:
  52. return 0
  53.  
  54. # פונקציה לשליפת קבוצות פתוחות שאינן בארכיון
  55. async def get_open_groups():
  56. global group_ids
  57. async for dialog in client.iter_dialogs():
  58. if dialog.is_group and not dialog.archived: # התעלמות מקבוצות בארכיון
  59. entity = dialog.entity
  60. if hasattr(entity, 'megagroup') and entity.megagroup:
  61. if dialog.id not in group_ids:
  62. group_ids.append(dialog.id)
  63. print(f"נמצאו {len(group_ids)} קבוצות פתוחות שאינן בארכיון.")
  64.  
  65. # פונקציה לשליפת שתי ההודעות האחרונות מההודעות השמורות
  66. async def get_last_two_saved_messages():
  67. me = await client.get_me()
  68. result = await client(GetHistoryRequest(
  69. peer=me.id,
  70. limit=2, # שינוי ל-2 כדי לקבל שתי הודעות אחרונות
  71. offset_date=None,
  72. offset_id=0,
  73. max_id=0,
  74. min_id=0,
  75. add_offset=0,
  76. hash=0
  77. ))
  78. messages = result.messages if result.messages else []
  79. print(f"הודעות שמורות שנמצאו: {len(messages)}")
  80. return messages
  81.  
  82. # פונקציה להעברת הודעות לכל הקבוצות עם עיכובים בין מחזורים
  83. async def forward_to_all_groups():
  84. saved_messages = await get_last_two_saved_messages()
  85. last_group_index = 0
  86. groups_to_remove = []
  87.  
  88. while True:
  89. if group_ids and saved_messages:
  90. for i in range(last_group_index, len(group_ids)):
  91. group_id = group_ids[i]
  92. try:
  93. # שליחת כל הודעה מההודעות השמורות
  94. for message in saved_messages:
  95. await client.forward_messages(group_id, message.id, message.peer_id)
  96. print(f"הודעה הועברה לקבוצה {group_id}")
  97. await asyncio.sleep(random.uniform(2, 6)) # עיכוב בין הודעות
  98.  
  99. except errors.FloodWaitError as e:
  100. print(f"FloodWait: המתנה של {e.seconds} שניות עקב מגבלת Telegram.")
  101. last_group_index = i
  102. await asyncio.sleep(e.seconds)
  103.  
  104. except errors.ChatWriteForbiddenError:
  105. print(f"לא ניתן לשלוח הודעות בקבוצה {group_id}. הוספה לרשימת ההסרה.")
  106. groups_to_remove.append(group_id)
  107.  
  108. except Exception as e:
  109. print(f"שגיאה כללית בהעברת הודעה לקבוצה {group_id}: {e}")
  110.  
  111. # עדכון רשימת הקבוצות לאחר הסבב
  112. last_group_index = 0
  113. for group_id in groups_to_remove:
  114. if group_id in group_ids:
  115. group_ids.remove(group_id)
  116. groups_to_remove.clear()
  117.  
  118. print("סבב הושלם. המתנה של 10 עד 15 דקות לפני הסבב הבא.")
  119. await asyncio.sleep(random.uniform(600, 900)) # המתנה בין סבבים (10 עד 15 דקות)
  120. await Join_Groups()
  121.  
  122. async def Join_Groups():
  123. groups = load_groups_from_json()
  124. current_index = load_current_index()
  125.  
  126. # קבלת 5 קבוצות להתחברות בסבב הנוכחי
  127. groups_to_join = groups[current_index:current_index + 5]
  128.  
  129. for group in groups_to_join:
  130. try:
  131. await client(JoinChannelRequest(group))
  132. logger.info(f"הצטרפת בהצלחה לקבוצה {group}")
  133. await asyncio.sleep(random.uniform(6, 12))
  134. except errors.FloodWaitError as e:
  135. logger.warning(f"FloodWait: המתנה של {e.seconds} שניות עקב מגבלת Telegram.")
  136. await asyncio.sleep(e.seconds)
  137. except errors.ChatWriteForbiddenError:
  138. logger.warning(f"לא ניתן להצטרף לקבוצה {group}.")
  139. except Exception as e:
  140. logger.error(f"שגיאה כללית בהצטרפות לקבוצה {group}: {e}")
  141.  
  142. # עדכון האינדקס לסבב הבא
  143. current_index = (current_index + 5) % len(groups)
  144. save_current_index(current_index)
  145.  
  146. await get_open_groups()
  147. await forward_to_all_groups()
  148.  
  149.  
  150. # הפעלת הסקריפט לשליחת הודעות לכל הקבוצות עם מחזורים קבועים
  151. async def main():
  152. print("starting client")
  153. await client.start(phone=phone_number)
  154. print("client started")
  155. await Join_Groups()
  156.  
  157.  
  158. # הרצת הסקריפט
  159. with client:
  160. client.loop.run_until_complete(main())
  161.  
Add Comment
Please, Sign In to add comment