main.py 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. from aiohttp import ClientSession
  2. from imbox import Imbox
  3. from re import findall
  4. from os.path import exists
  5. from loguru import logger
  6. import asyncio
  7. providers = {
  8. "imap.rambler.ru": [
  9. 'rambler.ru',
  10. 'lenta.ru',
  11. 'autorambler.ru',
  12. 'myrambler.ru',
  13. 'ro.ru',
  14. 'rambler.ua'],
  15. "imap.mail.ru": ['mail.ru', 'internet.ru', 'bk.ru', 'inbox.ru', 'list.ru'],
  16. "imap.gmail.com": 'gmail.com',
  17. "imap.yandex.ru": 'yandex.ru',
  18. }
  19. def _get_email_provider(provider: str):
  20. pr = provider.split("@")[-1]
  21. for key, value in providers.items():
  22. if pr in value:
  23. return key
  24. return f"imap.{pr}"
  25. def _get_imap(provider: str, login: str, password: str):
  26. return Imbox(
  27. provider,
  28. username=login,
  29. password=password,
  30. ssl=True,
  31. ssl_context=None,
  32. starttls=None)
  33. async def recv_message(imbox: Imbox):
  34. folder = "Spam"
  35. for _, message in imbox.messages(folder=folder)[::-1]:
  36. if message.sent_from[0]["email"] == "hello@slingshot.finance":
  37. return findall(r"<a.*href=\"(.*?)\".*>VERIFY<\/a >",
  38. message.body["plain"][0])[0]
  39. return await recv_message(imbox)
  40. async def get_code_email(email: str, password: str):
  41. imbox = _get_imap(_get_email_provider(email), email, password)
  42. return await recv_message(imbox)
  43. async def register_account(client: ClientSession, proxy: str, email: str, referrer: str):
  44. response = await client.post(
  45. "https://us-central1-slingshot-waitlist.cloudfunctions.net/signUp",
  46. json={
  47. "data": {
  48. "email": email,
  49. "referralCode": referrer
  50. }
  51. },
  52. proxy=proxy)
  53. data = await response.json()
  54. if "error" in data:
  55. raise Exception(data["error"]["message"])
  56. return True
  57. async def verify_account(client: ClientSession, proxy: str, url: str, email: str):
  58. response = await client.get(
  59. url,
  60. proxy=proxy,
  61. allow_redirects=True)
  62. code = str(response.url).split("/")[-1]
  63. response = await client.post(
  64. "https://www.googleapis.com/identitytoolkit/v3/relyingparty/signupNewUser"
  65. "?key=AIzaSyAyHBgnYzpg9md9ysHkhekv1mYqq_zlFkE",
  66. json={
  67. 'email': email,
  68. 'password': code,
  69. 'returnSecureToken': True,
  70. },
  71. proxy=proxy)
  72. data = await response.json()
  73. if "idToken" not in data:
  74. raise Exception("Хуета какая-то при реге я хуй знает че")
  75. client.headers.update({"Authorization": "Bearer " + data["idToken"]})
  76. response = await client.post(
  77. "https://us-central1-slingshot-waitlist.cloudfunctions.net/verifyEmail",
  78. json={
  79. "data": {
  80. "verificationCode": code
  81. }
  82. },
  83. proxy=proxy)
  84. data = await response.json()
  85. if "result" not in data:
  86. raise Exception("Не удалось верифнуть почту")
  87. return True
  88. async def worker(referrer: str, q: asyncio.Queue):
  89. while True:
  90. proxy, email = await q.get()
  91. email, password = email.split(":")
  92. try:
  93. async with ClientSession() as client:
  94. logger.info("Регистрация аккаунта")
  95. await register_account(client, proxy, email, referrer)
  96. logger.info("Получение кода с почты")
  97. code = await get_code_email(email, password)
  98. logger.info("Подтверждение кода")
  99. await verify_account(client, proxy, code, email)
  100. logger.info("Аккаунт успешно зарегистрирован")
  101. except Exception:
  102. logger.exception("Ошибка при реге")
  103. else:
  104. logger.info("Сохранение аккаунта")
  105. open("accounts.txt", "a+").write(f"{email}:{password}:{code}\n")
  106. async def main():
  107. if not all([exists("proxy.txt"), exists("emails.txt")]):
  108. return logger.error("Не найдены файлы proxy.txt, emails.txt")
  109. proxy = open("proxy.txt", "r+").read().strip().split("\n")
  110. emails = open("emails.txt", "r+").read().strip().split("\n")
  111. referrer = input("реф код -> ")
  112. q = asyncio.Queue()
  113. for account in zip(proxy, emails):
  114. q.put_nowait(account)
  115. tasks = [asyncio.create_task(worker(referrer, q))
  116. for _ in range(int(input("Потоков -> ")))]
  117. await asyncio.gather(*tasks)
  118. if __name__ == "__main__":
  119. loop = asyncio.new_event_loop()
  120. asyncio.set_event_loop(loop)
  121. loop.run_until_complete(main())