main.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. """
  2. @ Author: Mr.Hat
  3. @ Date: 2024/3/30 14:05
  4. @ Description:
  5. @ History:
  6. """
  7. import asyncio
  8. import random
  9. import sys
  10. import traceback
  11. import aiohttp
  12. from core import Grass
  13. from core.autoreger import AutoReger
  14. from core.utils import logger
  15. from core.utils.exception import LowProxyScoreException, ProxyScoreNotFoundException, ProxyForbiddenException
  16. from core.utils.generate.person import Person
  17. from data.config import ACCOUNTS_FILE_PATH, PROXIES_FILE_PATH, REGISTER_ACCOUNT_ONLY, THREADS
  18. async def worker_task(_id, account: str, proxy: str = None):
  19. consumables = account.split(":")[:2]
  20. if len(consumables) == 1:
  21. email = consumables[0]
  22. password = Person().random_string(8)
  23. else:
  24. email, password = consumables
  25. grass = None
  26. sleep_time = 20
  27. await asyncio.sleep(random.uniform(1, 1.5) * _id)
  28. logger.info(f"Starting №{_id} | {email} | {password} | {proxy}")
  29. for _ in range(1000):
  30. try:
  31. grass = Grass(_id, email, password, proxy)
  32. if REGISTER_ACCOUNT_ONLY:
  33. await grass.create_account()
  34. else:
  35. await grass.start()
  36. return True
  37. except ProxyForbiddenException as e:
  38. logger.info(f"{_id} | {e}")
  39. break
  40. except ProxyScoreNotFoundException as e:
  41. logger.info(f"Waiting {sleep_time} minutes. {e}")
  42. await asyncio.sleep(sleep_time * 60) # wait 20 minutes for proxy rotation
  43. except LowProxyScoreException as e:
  44. logger.info(f"Waiting {sleep_time} minutes. {e}")
  45. await asyncio.sleep(sleep_time * 60) # wait 20 minutes for proxy rotation
  46. except aiohttp.ClientError as e:
  47. log_msg = str(e) if "</html>" not in str(e) else "Html page response, 504"
  48. logger.error(f"{_id} | Server not responding | Error: {log_msg}")
  49. await asyncio.sleep(5)
  50. except Exception as e:
  51. logger.error(f"{_id} | not handled exception | error: {e} {traceback.format_exc()}")
  52. finally:
  53. if grass:
  54. await grass.session.close()
  55. async def main():
  56. autoreger = AutoReger.get_accounts(
  57. ACCOUNTS_FILE_PATH, PROXIES_FILE_PATH,
  58. with_id=True
  59. )
  60. if REGISTER_ACCOUNT_ONLY:
  61. msg = "Register account only mode!"
  62. threads = THREADS
  63. else:
  64. msg = "Mining mode ON"
  65. threads = len(autoreger.accounts)
  66. logger.info(f"Threads: {threads} | {msg} ")
  67. await autoreger.start(worker_task, threads)
  68. if __name__ == "__main__":
  69. if sys.platform == 'win32':
  70. asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
  71. loop = asyncio.ProactorEventLoop()
  72. asyncio.set_event_loop(loop)
  73. loop.run_until_complete(main())
  74. else:
  75. asyncio.run(main())