Compare commits
4 Commits
Author | SHA1 | Date | |
---|---|---|---|
7f3bd9b864 | |||
9154d2e493 | |||
8e8b882ace | |||
d7b020c7ea |
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
__author__ = """Eriks Karls"""
|
__author__ = """Eriks Karls"""
|
||||||
__email__ = 'eriks@72.lv'
|
__email__ = 'eriks@72.lv'
|
||||||
__version__ = '0.24.0.1'
|
__version__ = '0.24.0.3'
|
||||||
|
|
||||||
from erepublik import classes, constants, utils
|
from erepublik import classes, constants, utils
|
||||||
from erepublik.citizen import Citizen
|
from erepublik.citizen import Citizen
|
||||||
|
@ -141,6 +141,25 @@ class CitizenBaseAPI:
|
|||||||
url = f'http://{username}:{password}@{host}:{port}' if username and password else f'socks5://{host}:{port}'
|
url = f'http://{username}:{password}@{host}:{port}' if username and password else f'socks5://{host}:{port}'
|
||||||
self._req.proxies = dict(http=url)
|
self._req.proxies = dict(http=url)
|
||||||
|
|
||||||
|
def _get_main_session_captcha(self) -> Response:
|
||||||
|
return self.get(f'{self.url}/main/sessionCaptcha')
|
||||||
|
|
||||||
|
def _get_main_session_unlock_popup(self) -> Response:
|
||||||
|
return self.get(f'{self.url}/main/sessionUnlockPopup')
|
||||||
|
|
||||||
|
def _post_main_session_get_challenge(self, captcha_id: int) -> Response:
|
||||||
|
env = dict(l=['tets', ], s=[], c=["l_chathwe", "l_chatroom"], m=0)
|
||||||
|
data = dict(_token=self.token, captchaId=captcha_id, env=utils.b64json(env))
|
||||||
|
return self.post(f'{self.url}/main/sessionGetChallenge', data=data)
|
||||||
|
|
||||||
|
def _post_main_session_unlock(
|
||||||
|
self, captcha: int, image: str, challenge: str, coords: List[Dict[str, int]], src: str
|
||||||
|
) -> Response:
|
||||||
|
env = dict(l=['tets', ], s=[], c=["l_chathwe", "l_chatroom"], m=0)
|
||||||
|
data = dict(_token=self.token, captchaId=captcha, imageId=image, challengeId=challenge,
|
||||||
|
clickMatrix=coords, isMobile=0, env=utils.b64json(env), src=src)
|
||||||
|
return self.post(f'{self.url}/main/sessionUnlock', data=data)
|
||||||
|
|
||||||
|
|
||||||
class ErepublikAnniversaryAPI(CitizenBaseAPI):
|
class ErepublikAnniversaryAPI(CitizenBaseAPI):
|
||||||
def _post_main_collect_anniversary_reward(self) -> Response:
|
def _post_main_collect_anniversary_reward(self) -> Response:
|
||||||
@ -470,24 +489,6 @@ class ErepublikMilitaryAPI(CitizenBaseAPI):
|
|||||||
weaponQuality=weapon, totalEnergy=energy, **kwargs)
|
weaponQuality=weapon, totalEnergy=energy, **kwargs)
|
||||||
return self.post(f"{self.url}/military/fightDeploy-startDeploy", data=data)
|
return self.post(f"{self.url}/military/fightDeploy-startDeploy", data=data)
|
||||||
|
|
||||||
def _get_main_session_captcha(self) -> Response:
|
|
||||||
return self.get(f'{self.url}/main/sessionCaptcha')
|
|
||||||
|
|
||||||
def _get_main_session_unlock_popup(self) -> Response:
|
|
||||||
return self.get(f'{self.url}/main/sessionUnlockPopup')
|
|
||||||
|
|
||||||
def _post_main_session_get_challenge(self, captcha_id: int) -> Response:
|
|
||||||
env = dict(l=['tets', ], s=[], c=["l_chathwe", "l_chatroom"], m=0)
|
|
||||||
data = dict(_token=self.token, captchaId=captcha_id, env=utils.b64json(env))
|
|
||||||
return self.post(f'{self.url}/main/sessionGetChallenge', data=data)
|
|
||||||
|
|
||||||
def _post_main_session_unlock(
|
|
||||||
self, captcha: int, image: str, challenge: str, coords: List[Dict[str, int]], src: str
|
|
||||||
) -> Response:
|
|
||||||
env = dict(l=['tets', ], s=[], c=["l_chathwe", "l_chatroom"], m=0)
|
|
||||||
data = dict(_token=self.token, captchaId=captcha, imageId=image, challengeId=challenge,
|
|
||||||
clickMatrix=utils.json.dumps(coords), isMobile=0, env=utils.b64json(env), src=src)
|
|
||||||
return self.post(f'{self.url}/main/sessionUnlock', data=data)
|
|
||||||
|
|
||||||
|
|
||||||
class ErepublikPoliticsAPI(CitizenBaseAPI):
|
class ErepublikPoliticsAPI(CitizenBaseAPI):
|
||||||
|
@ -242,6 +242,28 @@ class BaseCitizen(access_points.CitizenAPI):
|
|||||||
"""
|
"""
|
||||||
self._update_inventory_data(self._get_economy_inventory_items().json())
|
self._update_inventory_data(self._get_economy_inventory_items().json())
|
||||||
|
|
||||||
|
def do_captcha_challenge(self, retry: int = 0) -> bool:
|
||||||
|
r = self._get_main_session_captcha()
|
||||||
|
data = re.search(r'\$j\.extend\(SERVER_DATA,([^)]+)\)', r.text)
|
||||||
|
if data:
|
||||||
|
data = utils.json_loads(utils.normalize_html_json(data.group(1)))
|
||||||
|
captcha_id = data.get('sessionValidation', {}).get("captchaId")
|
||||||
|
captcha_data = self._post_main_session_get_challenge(captcha_id).json()
|
||||||
|
coordinates = self.solve_captcha(captcha_data.get('src'))
|
||||||
|
r = self._post_main_session_unlock(
|
||||||
|
captcha_id, captcha_data['imageId'], captcha_data['challengeId'], coordinates, captcha_data['src']
|
||||||
|
).json()
|
||||||
|
if not r.get('error') and r.get('verified'):
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
self.report_error('Captcha failed!')
|
||||||
|
if retry < 6:
|
||||||
|
return self.do_captcha_challenge(retry+1)
|
||||||
|
return False
|
||||||
|
|
||||||
|
def solve_captcha(self, src: str) -> List[Dict[str, int]]:
|
||||||
|
raise NotImplemented
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def inventory(self) -> classes.Inventory:
|
def inventory(self) -> classes.Inventory:
|
||||||
return self.get_inventory()
|
return self.get_inventory()
|
||||||
@ -740,6 +762,9 @@ class BaseCitizen(access_points.CitizenAPI):
|
|||||||
pass
|
pass
|
||||||
if response.status_code >= 400:
|
if response.status_code >= 400:
|
||||||
self.r = response
|
self.r = response
|
||||||
|
if response.text == 'Please verify your account.':
|
||||||
|
self.do_captcha_challenge()
|
||||||
|
return True
|
||||||
if response.status_code >= 500:
|
if response.status_code >= 500:
|
||||||
if self.restricted_ip:
|
if self.restricted_ip:
|
||||||
self._req.cookies.clear()
|
self._req.cookies.clear()
|
||||||
@ -2233,27 +2258,6 @@ class CitizenMilitary(CitizenTravel):
|
|||||||
if self.config.telegram:
|
if self.config.telegram:
|
||||||
self.telegram.report_fight(battle, invader, division, damage, hits)
|
self.telegram.report_fight(battle, invader, division, damage, hits)
|
||||||
|
|
||||||
def do_captcha_challenge(self) -> bool:
|
|
||||||
r = self._get_main_session_captcha()
|
|
||||||
data = re.search(r'\$j\.extend\(SERVER_DATA,([^)]+)\)', r.text)
|
|
||||||
if data:
|
|
||||||
data = utils.json_loads(utils.normalize_html_json(data.group(1)))
|
|
||||||
captcha_id = data.get('sessionValidation', {}).get("captchaId")
|
|
||||||
captcha_data = self._post_main_session_get_challenge(captcha_id).json()
|
|
||||||
coordinates = self.solve_captcha(captcha_data.get('src'))
|
|
||||||
r = self._post_main_session_unlock(
|
|
||||||
captcha_id, captcha_data['imageId'], captcha_data['challengeId'], coordinates, captcha_data['src']
|
|
||||||
).json()
|
|
||||||
if not r.get('error') and r.get('verified'):
|
|
||||||
return True
|
|
||||||
else:
|
|
||||||
self.report_error('Captcha failed!')
|
|
||||||
return self.do_captcha_challenge()
|
|
||||||
return False
|
|
||||||
|
|
||||||
def solve_captcha(self, src: str) -> List[Dict[str, int]]:
|
|
||||||
raise NotImplemented
|
|
||||||
|
|
||||||
def get_deploy_inventory(self, division: classes.BattleDivision, side: classes.BattleSide):
|
def get_deploy_inventory(self, division: classes.BattleDivision, side: classes.BattleSide):
|
||||||
ret = self._post_fight_deploy_get_inventory(division.battle.id, side.id, division.id).json()
|
ret = self._post_fight_deploy_get_inventory(division.battle.id, side.id, division.id).json()
|
||||||
# if ret.get('recoverableEnergyBuyFood'):
|
# if ret.get('recoverableEnergyBuyFood'):
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
[bumpversion]
|
[bumpversion]
|
||||||
current_version = 0.24.0.1
|
current_version = 0.24.0.3
|
||||||
commit = True
|
commit = True
|
||||||
tag = True
|
tag = True
|
||||||
parse = (?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)\.?(?P<dev>\d+)?
|
parse = (?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)\.?(?P<dev>\d+)?
|
||||||
|
2
setup.py
2
setup.py
@ -50,6 +50,6 @@ setup(
|
|||||||
test_suite='tests',
|
test_suite='tests',
|
||||||
tests_require=test_requirements,
|
tests_require=test_requirements,
|
||||||
url='https://github.com/eeriks/erepublik/',
|
url='https://github.com/eeriks/erepublik/',
|
||||||
version='0.24.0.1',
|
version='0.24.0.3',
|
||||||
zip_safe=False,
|
zip_safe=False,
|
||||||
)
|
)
|
||||||
|
Reference in New Issue
Block a user