Skip to content

Commit e81bab1

Browse files
committed
Full functional Done
1 parent a8943e7 commit e81bab1

File tree

2 files changed

+57
-14
lines changed

2 files changed

+57
-14
lines changed

bot/config/config.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@ class Settings(BaseSettings):
1010
MIN_AVAILABLE_ENERGY: int = 80
1111
SLEEP_BY_MIN_ENERGY: list[int] = [250, 400]
1212

13-
SLEEP_BETWEEN_FIGHT: list[int] = [7, 10]
13+
SLEEP_BETWEEN_TASK: list[int] = [5, 10]
1414

15-
RELOGIN_DELAY: list[int] = [5, 7]
15+
RELOGIN_DELAY: list[int] = [100, 500]
1616

1717
USE_PROXY_FROM_FILE: bool = False
1818

bot/core/tapper.py

+55-12
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import asyncio
2+
from random import randint
23
from typing import Any
34
from urllib.parse import unquote
45
from http import HTTPStatus
@@ -10,7 +11,7 @@
1011
from pyrogram.errors import AuthKeyUnregistered, FloodWait, Unauthorized, UserDeactivated
1112
from pyrogram.raw.functions.messages.request_web_view import RequestWebView
1213

13-
from bot.config import InvalidSession
14+
from bot.config import InvalidSession, settings
1415
from .headers import headers
1516
from bot.utils import logger
1617

@@ -47,7 +48,7 @@ async def get_tg_web_data(self, proxy: str | None) -> str:
4748

4849
while True:
4950
try:
50-
peer = await self.tg_client.resolve_peer('Yumify_Bot')
51+
peer = await self.tg_client.resolve_peer('GHArenaBot')
5152
break
5253
except FloodWait as fl:
5354
fls = fl.value
@@ -100,7 +101,6 @@ async def get_me(self, http_client: ClientSession) -> dict:
100101
await asyncio.sleep(delay=3)
101102

102103
async def change_settings(self, http_client: ClientSession, key: str, value: bool | Any) -> True:
103-
"""TODO skipTutorial:true"""
104104
try:
105105
response = await http_client.post(url='https://game.gh-arena.com/settings/',
106106
json={key: value})
@@ -122,7 +122,6 @@ async def get_quests(self, http_client: ClientSession) -> list[dict]:
122122
await asyncio.sleep(delay=3)
123123

124124
async def get_quest_tasks(self, http_client: ClientSession, quest_id: int) -> dict:
125-
"""for task in resp['tasks']: ... | там лежат id и completed"""
126125
try:
127126
response = await http_client.get(url=f'https://game.gh-arena.com/quest/{quest_id}/tasks/')
128127
response.raise_for_status()
@@ -132,14 +131,22 @@ async def get_quest_tasks(self, http_client: ClientSession, quest_id: int) -> di
132131
logger.error(f"{self.session_name} | Unknown error when get quest tasks: {error}")
133132
await asyncio.sleep(delay=3)
134133

135-
async def complete_task(self, http_client: ClientSession, task_id: int) -> bool:
136-
"""for task in resp['tasks']: ... | там лежат id и completed"""
134+
async def complete_task(self, http_client: ClientSession, task_id: int) -> dict:
137135
try:
138136
response = await http_client.post(url=f'https://game.gh-arena.com/task/{task_id}/complete/')
139137

140-
return True if response.status == HTTPStatus.OK else False
138+
return await response.json()
141139
except Exception as error:
142-
logger.error(f"{self.session_name} | Unknown error when get quest tasks: {error}")
140+
logger.error(f"{self.session_name} | Unknown error when complete task: {error}")
141+
await asyncio.sleep(delay=3)
142+
143+
async def complete_quest(self, http_client: ClientSession, quest_id: int) -> dict:
144+
try:
145+
response = await http_client.post(url=f'https://game.gh-arena.com/quest/{quest_id}/complete/')
146+
147+
return await response.json()
148+
except Exception as error:
149+
logger.error(f"{self.session_name} | Unknown error when complete quest: {error}")
143150
await asyncio.sleep(delay=3)
144151

145152
async def check_proxy(self, http_client: ClientSession, proxy: Proxy) -> None:
@@ -159,20 +166,56 @@ async def run(self, proxy: str | None) -> None:
159166
if proxy:
160167
await self.check_proxy(http_client=http_client, proxy=proxy)
161168

169+
170+
tg_web_data = await self.get_tg_web_data(proxy=proxy)
171+
login = await self.login(http_client=http_client, tg_web_data=tg_web_data)
172+
user = await self.get_me(http_client)
173+
balance_gold = user['balance']
174+
balance_gem = user['gem']
175+
logger.success(f"{self.session_name} | Login! Balance: {balance_gold} gold | {balance_gem} gems")
176+
await asyncio.sleep(0.5)
177+
await self.change_settings(http_client, 'skipTutorial', True)
178+
179+
attempt = 1
180+
while login is not True:
181+
sleep_time = randint(*settings.RELOGIN_DELAY)
182+
logger.info(f"{self.session_name} | Problems when login, sleep {sleep_time}s before attempt #{attempt + 1}")
183+
await asyncio.sleep(sleep_time)
184+
tg_web_data = await self.get_tg_web_data(proxy=proxy)
185+
login = await self.login(http_client=http_client, tg_web_data=tg_web_data)
186+
attempt += 1
187+
if attempt > 5:
188+
return logger.info(f"{self.session_name} | All login attempts spent")
189+
190+
162191
quests = await self.get_quests(http_client)
163192
await asyncio.sleep(1)
164193
for quest in quests:
194+
quest_name = quest['name']
195+
quest_rewards = quest['gold'] if quest['gold'] is not None else quest['gem']
196+
quest_rewards_type = 'gems' if quest['gem'] is not None else 'gold'
165197
quest_tasks = (await self.get_quest_tasks(http_client, quest_id=quest['id'])).get('tasks')
198+
await asyncio.sleep(1.5)
166199
for task in quest_tasks:
167200
task_name = task['name']
168201
if task['completed'] is True:
169202
logger.info(f"{self.session_name} | Task '{task_name}' is already completed, Skip..")
170203
continue
171-
success_completed = await self.complete_task(http_client, task_id=task['id'])
172-
if success_completed is True:
173-
logger.success(f"{self.session_name} | Successfully completed task '{task_name}'!")
204+
complete = await self.complete_task(http_client, task_id=task['id'])
205+
sleep_time = randint(*settings.SLEEP_BETWEEN_TASK)
206+
await asyncio.sleep(sleep_time)
207+
if (complete_error := complete.get('error', None)) is not None:
208+
logger.warning(f"{self.session_name} | Error when complete task '{task_name}': '{complete_error}'")
174209
else:
175-
logger.warning(f"{self.session_name} | Problems when complete task '{task_name}'..")
210+
logger.success(f"{self.session_name} | Successfully completed task '{task_name}'!")
211+
212+
complete_quest = await self.complete_quest(http_client, quest_id=quest['id'])
213+
sleep_time = randint(*settings.SLEEP_BETWEEN_TASK)
214+
await asyncio.sleep(sleep_time)
215+
if (complete_error := complete_quest.get('error', None)) is not None:
216+
logger.warning(f"{self.session_name} | Problems when complete quest '{quest_name}': '{complete_error}'")
217+
else:
218+
logger.success(f"{self.session_name} | Successfully completed quest '{quest_name}'! +{quest_rewards} {quest_rewards_type}")
176219

177220

178221
async def run_tapper(tg_client: Client, proxy: str | None):

0 commit comments

Comments
 (0)