Compare commits
11 Commits
Author | SHA1 | Date | |
---|---|---|---|
a1d10bb427 | |||
ec701396d9 | |||
d8035b42e3 | |||
42320a14a4 | |||
de4b059b7d | |||
dc106cc87d | |||
bb2c13d63a | |||
ea48fbe7e1 | |||
65a3a9f678 | |||
0757345e17 | |||
6f4b32b12c |
@ -2,10 +2,8 @@
|
|||||||
|
|
||||||
language: python
|
language: python
|
||||||
python:
|
python:
|
||||||
|
- 3.7
|
||||||
- 3.6
|
- 3.6
|
||||||
- 3.5
|
|
||||||
- 3.4
|
|
||||||
- 2.7
|
|
||||||
|
|
||||||
# Command to install dependencies, e.g. pip install -r requirements.txt --use-mirrors
|
# Command to install dependencies, e.g. pip install -r requirements.txt --use-mirrors
|
||||||
install: pip install -U tox-travis
|
install: pip install -U tox-travis
|
||||||
|
@ -6,3 +6,9 @@ History
|
|||||||
------------------
|
------------------
|
||||||
|
|
||||||
* First release on PyPI.
|
* First release on PyPI.
|
||||||
|
|
||||||
|
|
||||||
|
0.14.4 (2019-07-23)
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
* Wall post comment endpoints updated with comment create endpoints
|
||||||
|
8
Makefile
8
Makefile
@ -51,7 +51,7 @@ clean-test: ## remove test and coverage artifacts
|
|||||||
rm -fr .pytest_cache
|
rm -fr .pytest_cache
|
||||||
|
|
||||||
lint: ## check style with flake8
|
lint: ## check style with flake8
|
||||||
flake8 erepublik_script tests
|
flake8 erepublik tests
|
||||||
|
|
||||||
test: ## run tests quickly with the default Python
|
test: ## run tests quickly with the default Python
|
||||||
python setup.py test
|
python setup.py test
|
||||||
@ -60,15 +60,15 @@ test-all: ## run tests on every Python version with tox
|
|||||||
tox
|
tox
|
||||||
|
|
||||||
coverage: ## check code coverage quickly with the default Python
|
coverage: ## check code coverage quickly with the default Python
|
||||||
coverage run --source erepublik_script setup.py test
|
coverage run --source erepublik setup.py test
|
||||||
coverage report -m
|
coverage report -m
|
||||||
coverage html
|
coverage html
|
||||||
$(BROWSER) htmlcov/index.html
|
$(BROWSER) htmlcov/index.html
|
||||||
|
|
||||||
docs: ## generate Sphinx HTML documentation, including API docs
|
docs: ## generate Sphinx HTML documentation, including API docs
|
||||||
rm -f docs/erepublik_script.rst
|
rm -f docs/erepublik.rst
|
||||||
rm -f docs/modules.rst
|
rm -f docs/modules.rst
|
||||||
sphinx-apidoc -o docs/ erepublik_script
|
sphinx-apidoc -o docs/ erepublik
|
||||||
$(MAKE) -C docs clean
|
$(MAKE) -C docs clean
|
||||||
$(MAKE) -C docs html
|
$(MAKE) -C docs html
|
||||||
$(BROWSER) docs/_build/html/index.html
|
$(BROWSER) docs/_build/html/index.html
|
||||||
|
@ -3,10 +3,10 @@ eRepublik script
|
|||||||
================
|
================
|
||||||
|
|
||||||
|
|
||||||
.. image:: https://img.shields.io/pypi/v/erepublik_script.svg
|
.. image:: https://img.shields.io/pypi/v/erepublik.svg
|
||||||
:target: https://pypi.python.org/pypi/erepublik_script
|
:target: https://pypi.python.org/pypi/erepublik
|
||||||
|
|
||||||
.. image:: https://readthedocs.org/projects/erepublik-script/badge/?version=latest
|
.. image:: https://readthedocs.org/projects/erepublik/badge/?version=latest
|
||||||
:target: https://erepublik-script.readthedocs.io/en/latest/?badge=latest
|
:target: https://erepublik-script.readthedocs.io/en/latest/?badge=latest
|
||||||
:alt: Documentation Status
|
:alt: Documentation Status
|
||||||
|
|
||||||
@ -15,7 +15,7 @@ Python package for automated eRepublik playing
|
|||||||
|
|
||||||
|
|
||||||
* Free software: MIT license
|
* Free software: MIT license
|
||||||
* Documentation: https://erepublik-script.readthedocs.io.
|
* Documentation: https://erepublik.readthedocs.io.
|
||||||
|
|
||||||
|
|
||||||
Features
|
Features
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
# You can set these variables from the command line.
|
# You can set these variables from the command line.
|
||||||
SPHINXOPTS =
|
SPHINXOPTS =
|
||||||
SPHINXBUILD = python -msphinx
|
SPHINXBUILD = python -msphinx
|
||||||
SPHINXPROJ = erepublik_script
|
SPHINXPROJ = erepublik
|
||||||
SOURCEDIR = .
|
SOURCEDIR = .
|
||||||
BUILDDIR = _build
|
BUILDDIR = _build
|
||||||
|
|
||||||
|
16
docs/conf.py
16
docs/conf.py
@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
#
|
#
|
||||||
# erepublik_script documentation build configuration file, created by
|
# erepublik documentation build configuration file, created by
|
||||||
# sphinx-quickstart on Fri Jun 9 13:47:02 2017.
|
# sphinx-quickstart on Fri Jun 9 13:47:02 2017.
|
||||||
#
|
#
|
||||||
# This file is execfile()d with the current directory set to its
|
# This file is execfile()d with the current directory set to its
|
||||||
@ -22,7 +22,7 @@ import os
|
|||||||
import sys
|
import sys
|
||||||
sys.path.insert(0, os.path.abspath('..'))
|
sys.path.insert(0, os.path.abspath('..'))
|
||||||
|
|
||||||
import erepublik_script
|
import erepublik
|
||||||
|
|
||||||
# -- General configuration ---------------------------------------------
|
# -- General configuration ---------------------------------------------
|
||||||
|
|
||||||
@ -56,9 +56,9 @@ author = u"Eriks Karls"
|
|||||||
# the built documents.
|
# the built documents.
|
||||||
#
|
#
|
||||||
# The short X.Y version.
|
# The short X.Y version.
|
||||||
version = erepublik_script.__version__
|
version = erepublik.__version__
|
||||||
# The full version, including alpha/beta/rc tags.
|
# The full version, including alpha/beta/rc tags.
|
||||||
release = erepublik_script.__version__
|
release = erepublik.__version__
|
||||||
|
|
||||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||||
# for a list of supported languages.
|
# for a list of supported languages.
|
||||||
@ -128,7 +128,7 @@ latex_elements = {
|
|||||||
# (source start file, target name, title, author, documentclass
|
# (source start file, target name, title, author, documentclass
|
||||||
# [howto, manual, or own class]).
|
# [howto, manual, or own class]).
|
||||||
latex_documents = [
|
latex_documents = [
|
||||||
(master_doc, 'erepublik_script.tex',
|
(master_doc, 'erepublik.tex',
|
||||||
u'eRepublik script Documentation',
|
u'eRepublik script Documentation',
|
||||||
u'Eriks Karls', 'manual'),
|
u'Eriks Karls', 'manual'),
|
||||||
]
|
]
|
||||||
@ -139,7 +139,7 @@ latex_documents = [
|
|||||||
# One entry per manual page. List of tuples
|
# One entry per manual page. List of tuples
|
||||||
# (source start file, name, description, authors, manual section).
|
# (source start file, name, description, authors, manual section).
|
||||||
man_pages = [
|
man_pages = [
|
||||||
(master_doc, 'erepublik_script',
|
(master_doc, 'erepublik',
|
||||||
u'eRepublik script Documentation',
|
u'eRepublik script Documentation',
|
||||||
[author], 1)
|
[author], 1)
|
||||||
]
|
]
|
||||||
@ -151,10 +151,10 @@ man_pages = [
|
|||||||
# (source start file, target name, title, author,
|
# (source start file, target name, title, author,
|
||||||
# dir menu entry, description, category)
|
# dir menu entry, description, category)
|
||||||
texinfo_documents = [
|
texinfo_documents = [
|
||||||
(master_doc, 'erepublik_script',
|
(master_doc, 'erepublik',
|
||||||
u'eRepublik script Documentation',
|
u'eRepublik script Documentation',
|
||||||
author,
|
author,
|
||||||
'erepublik_script',
|
'erepublik',
|
||||||
'One line description of project.',
|
'One line description of project.',
|
||||||
'Miscellaneous'),
|
'Miscellaneous'),
|
||||||
]
|
]
|
||||||
|
@ -12,7 +12,7 @@ To install eRepublik script, run this command in your terminal:
|
|||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ pip install erepublik_script
|
$ pip install erepublik
|
||||||
|
|
||||||
This is the preferred method to install eRepublik script, as it will always install the most recent stable release.
|
This is the preferred method to install eRepublik script, as it will always install the most recent stable release.
|
||||||
|
|
||||||
|
@ -4,4 +4,4 @@ Usage
|
|||||||
|
|
||||||
To use eRepublik script in a project::
|
To use eRepublik script in a project::
|
||||||
|
|
||||||
import erepublik_script
|
import erepublik
|
||||||
|
10
erepublik/__init__.py
Normal file
10
erepublik/__init__.py
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
"""Top-level package for eRepublik script."""
|
||||||
|
|
||||||
|
__author__ = """Eriks Karls"""
|
||||||
|
__email__ = 'eriks@72.lv'
|
||||||
|
__version__ = '0.14.5'
|
||||||
|
|
||||||
|
from erepublik import classes, utils
|
||||||
|
from erepublik.citizen import Citizen
|
@ -9,7 +9,7 @@ from typing import Dict, List, Tuple, Any, Union
|
|||||||
import requests
|
import requests
|
||||||
from requests import Response, RequestException
|
from requests import Response, RequestException
|
||||||
|
|
||||||
from erepublik_script import classes, utils
|
from erepublik import classes, utils
|
||||||
|
|
||||||
|
|
||||||
class Citizen(classes.CitizenAPI):
|
class Citizen(classes.CitizenAPI):
|
||||||
@ -94,6 +94,8 @@ class Citizen(classes.CitizenAPI):
|
|||||||
ret = super().__dict__.copy()
|
ret = super().__dict__.copy()
|
||||||
ret.pop('reporter', None)
|
ret.pop('reporter', None)
|
||||||
ret.pop('stop_threads', None)
|
ret.pop('stop_threads', None)
|
||||||
|
ret.pop('_Citizen__last_war_update_data', None)
|
||||||
|
ret.update(all_battles=self.all_battles)
|
||||||
|
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
@ -440,6 +442,7 @@ class Citizen(classes.CitizenAPI):
|
|||||||
self.update_citizen_info()
|
self.update_citizen_info()
|
||||||
|
|
||||||
resp_json = self.get_military_campaigns().json()
|
resp_json = self.get_military_campaigns().json()
|
||||||
|
self.all_battles = {}
|
||||||
if resp_json.get("countries"):
|
if resp_json.get("countries"):
|
||||||
for c_id, c_data in resp_json.get("countries").items():
|
for c_id, c_data in resp_json.get("countries").items():
|
||||||
if int(c_id) not in self.countries:
|
if int(c_id) not in self.countries:
|
||||||
@ -619,10 +622,8 @@ class Citizen(classes.CitizenAPI):
|
|||||||
battle_id = r.get("citizen_contribution")[0].get("battle_id", 0)
|
battle_id = r.get("citizen_contribution")[0].get("battle_id", 0)
|
||||||
ret_battles.append(battle_id)
|
ret_battles.append(battle_id)
|
||||||
|
|
||||||
ret_battles += (cs_battles_air + cs_battles_ground +
|
ret_battles += cs_battles_air + cs_battles_ground + deployed_battles_air + deployed_battles_ground + \
|
||||||
deployed_battles_air + deployed_battles_ground +
|
ally_battles_air + ally_battles_ground + other_battles_air + other_battles_ground
|
||||||
ally_battles_air + ally_battles_ground +
|
|
||||||
other_battles_air + other_battles_ground)
|
|
||||||
return ret_battles
|
return ret_battles
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@ -643,8 +644,8 @@ class Citizen(classes.CitizenAPI):
|
|||||||
if battle.is_rw:
|
if battle.is_rw:
|
||||||
side_id = battle.defender.id if self.config.rw_def_side else battle.invader.id
|
side_id = battle.defender.id if self.config.rw_def_side else battle.invader.id
|
||||||
else:
|
else:
|
||||||
side_id = battle.defender.id if (self.details.current_country in battle.defender.allies +
|
side = self.details.current_country in battle.defender.allies + [battle.defender.id, ]
|
||||||
[battle.defender.id, ]) else battle.invader.id
|
side_id = battle.defender.id if side else battle.invader.id
|
||||||
try:
|
try:
|
||||||
def_points = battle.div.get(div).dom_pts.get('def')
|
def_points = battle.div.get(div).dom_pts.get('def')
|
||||||
inv_points = battle.div.get(div).dom_pts.get('inv')
|
inv_points = battle.div.get(div).dom_pts.get('inv')
|
||||||
@ -1285,12 +1286,12 @@ class Citizen(classes.CitizenAPI):
|
|||||||
|
|
||||||
if count > 0 and not force_fight:
|
if count > 0 and not force_fight:
|
||||||
if self.my_companies.ff_lockdown and self.details.pp > 75:
|
if self.my_companies.ff_lockdown and self.details.pp > 75:
|
||||||
if self.energy.food_fights - self.my_companies.ff_lockdown > 0:
|
if count - self.my_companies.ff_lockdown > 0:
|
||||||
log_msg = ("Fight count modified (old count: {} | FF: {} | "
|
log_msg = ("Fight count modified (old count: {} | FF: {} | "
|
||||||
"WAM ff_lockdown: {} | New count: {})").format(
|
"WAM ff_lockdown: {} | New count: {})").format(
|
||||||
count, self.energy.food_fights, self.my_companies.ff_lockdown,
|
count, self.energy.food_fights, self.my_companies.ff_lockdown,
|
||||||
self.energy.food_fights - self.my_companies.ff_lockdown)
|
count - self.my_companies.ff_lockdown)
|
||||||
count = self.energy.food_fights - self.my_companies.ff_lockdown
|
count -= self.my_companies.ff_lockdown
|
||||||
else:
|
else:
|
||||||
count = 0
|
count = 0
|
||||||
if count <= 0:
|
if count <= 0:
|
||||||
@ -1446,11 +1447,12 @@ class Citizen(classes.CitizenAPI):
|
|||||||
raw = wrm
|
raw = wrm
|
||||||
else:
|
else:
|
||||||
continue
|
continue
|
||||||
|
effective_bonus = cdata["effective_bonus"]
|
||||||
|
base_prod = float(cdata["base_production"])
|
||||||
if cdata["is_raw"]:
|
if cdata["is_raw"]:
|
||||||
raw += float(cdata["base_production"]) * cdata["effective_bonus"] / 100
|
raw += base_prod * effective_bonus / 100
|
||||||
else:
|
else:
|
||||||
raw -= cdata["effective_bonus"] / 100 * cdata["base_production"] * \
|
raw -= effective_bonus / 100 * base_prod * cdata["upgrades"][str(cdata["quality"])]["raw_usage"]
|
||||||
cdata["upgrades"][str(cdata["quality"])]["raw_usage"]
|
|
||||||
if cdata["industry_token"] == "FOOD":
|
if cdata["industry_token"] == "FOOD":
|
||||||
frm = raw
|
frm = raw
|
||||||
elif cdata["industry_token"] == "WEAPON":
|
elif cdata["industry_token"] == "WEAPON":
|
@ -11,7 +11,7 @@ from typing import Any, Dict, List, Union
|
|||||||
from requests import Response, Session
|
from requests import Response, Session
|
||||||
from slugify import slugify
|
from slugify import slugify
|
||||||
|
|
||||||
from erepublik_script import utils
|
from erepublik import utils
|
||||||
|
|
||||||
|
|
||||||
class ErepublikException(Exception):
|
class ErepublikException(Exception):
|
||||||
@ -228,7 +228,7 @@ class SlowRequests(Session):
|
|||||||
file.write(body.encode("UTF-8"))
|
file.write(body.encode("UTF-8"))
|
||||||
|
|
||||||
def _log_response(self, url, resp, redirect: bool = False):
|
def _log_response(self, url, resp, redirect: bool = False):
|
||||||
from erepublik_script import Citizen
|
from erepublik import Citizen
|
||||||
if self.debug:
|
if self.debug:
|
||||||
if resp.history and not redirect:
|
if resp.history and not redirect:
|
||||||
for hist_resp in resp.history:
|
for hist_resp in resp.history:
|
||||||
@ -358,6 +358,7 @@ class Energy:
|
|||||||
def available(self):
|
def available(self):
|
||||||
return self.recovered + self.recoverable
|
return self.recovered + self.recoverable
|
||||||
|
|
||||||
|
@property
|
||||||
def __dict__(self):
|
def __dict__(self):
|
||||||
return dict(
|
return dict(
|
||||||
limit=self.limit,
|
limit=self.limit,
|
||||||
@ -780,6 +781,10 @@ class CitizenAPI:
|
|||||||
data = {"_token": token, "postId": post_id}
|
data = {"_token": token, "postId": post_id}
|
||||||
return self.post("{}/main/country-comment/retrieve/json".format(self.url), data=data)
|
return self.post("{}/main/country-comment/retrieve/json".format(self.url), data=data)
|
||||||
|
|
||||||
|
def post_country_comment_create(self, token: str, post_id: int, comment_message: str):
|
||||||
|
data = {"_token": token, "postId": post_id, 'comment_message': comment_message}
|
||||||
|
return self.post("{}/main/country-comment/create/json".format(self.url), data=data)
|
||||||
|
|
||||||
def post_country_post_create(self, token: str, body: str, post_as: int):
|
def post_country_post_create(self, token: str, body: str, post_as: int):
|
||||||
data = {"_token": token, "post_message": body, "post_as": post_as}
|
data = {"_token": token, "post_message": body, "post_as": post_as}
|
||||||
return self.post("{}/main/country-post/create/json".format(self.url), data=data)
|
return self.post("{}/main/country-post/create/json".format(self.url), data=data)
|
||||||
@ -794,6 +799,10 @@ class CitizenAPI:
|
|||||||
data = {"_token": token, "postId": post_id}
|
data = {"_token": token, "postId": post_id}
|
||||||
return self.post("{}/main/military-unit-comment/retrieve/json".format(self.url), data=data)
|
return self.post("{}/main/military-unit-comment/retrieve/json".format(self.url), data=data)
|
||||||
|
|
||||||
|
def post_military_unit_comment_create(self, token: str, post_id: int, comment_message: str):
|
||||||
|
data = {"_token": token, "postId": post_id, 'comment_message': comment_message}
|
||||||
|
return self.post("{}/main/military-unit-comment/create/json".format(self.url), data=data)
|
||||||
|
|
||||||
def post_military_unit_post_create(self, token: str, body: str, post_as: int):
|
def post_military_unit_post_create(self, token: str, body: str, post_as: int):
|
||||||
data = {"_token": token, "post_message": body, "post_as": post_as}
|
data = {"_token": token, "post_message": body, "post_as": post_as}
|
||||||
return self.post("{}/main/military-unit-post/create/json".format(self.url), data=data)
|
return self.post("{}/main/military-unit-post/create/json".format(self.url), data=data)
|
||||||
@ -808,6 +817,10 @@ class CitizenAPI:
|
|||||||
data = {"_token": token, "postId": post_id}
|
data = {"_token": token, "postId": post_id}
|
||||||
return self.post("{}/main/party-comment/retrieve/json".format(self.url), data=data)
|
return self.post("{}/main/party-comment/retrieve/json".format(self.url), data=data)
|
||||||
|
|
||||||
|
def post_party_comment_create(self, token: str, post_id: int, comment_message: str):
|
||||||
|
data = {"_token": token, "postId": post_id, 'comment_message': comment_message}
|
||||||
|
return self.post("{}/main/party-comment/create/json".format(self.url), data=data)
|
||||||
|
|
||||||
def post_party_post_create(self, token: str, body: str):
|
def post_party_post_create(self, token: str, body: str):
|
||||||
data = {"_token": token, "post_message": body}
|
data = {"_token": token, "post_message": body}
|
||||||
return self.post("{}/main/party-post/create/json".format(self.url), data=data)
|
return self.post("{}/main/party-post/create/json".format(self.url), data=data)
|
||||||
@ -822,6 +835,10 @@ class CitizenAPI:
|
|||||||
data = {"_token": token, "postId": post_id}
|
data = {"_token": token, "postId": post_id}
|
||||||
return self.post("{}/main/wall-comment/retrieve/json".format(self.url), data=data)
|
return self.post("{}/main/wall-comment/retrieve/json".format(self.url), data=data)
|
||||||
|
|
||||||
|
def post_wall_comment_create(self, token: str, post_id: int, comment_message: str):
|
||||||
|
data = {"_token": token, "postId": post_id, 'comment_message': comment_message}
|
||||||
|
return self.post("{}/main/wall-comment/create/json".format(self.url), data=data)
|
||||||
|
|
||||||
def post_wall_post_create(self, token: str, body: str):
|
def post_wall_post_create(self, token: str, body: str):
|
||||||
data = {"_token": token, "post_message": body}
|
data = {"_token": token, "post_message": body}
|
||||||
return self.post("{}/main/wall-post/create/json".format(self.url), data=data)
|
return self.post("{}/main/wall-post/create/json".format(self.url), data=data)
|
||||||
@ -998,21 +1015,24 @@ class Battle(object):
|
|||||||
else:
|
else:
|
||||||
end = datetime.datetime.max
|
end = datetime.datetime.max
|
||||||
|
|
||||||
self.div.update({div: BattleDivision(end, data.get('epic_type') in [1, 5],
|
battle_div = BattleDivision(
|
||||||
data.get('dom_pts').get("inv"), data.get('dom_pts').get("def"),
|
end=end, epic=data.get('epic_type') in [1, 5],
|
||||||
data.get('wall').get("for"), data.get('wall').get("dom"))})
|
inv_pts=data.get('dom_pts').get("inv"), def_pts=data.get('dom_pts').get("def"),
|
||||||
|
wall_for=data.get('wall').get("for"), wall_dom=data.get('wall').get("dom")
|
||||||
|
)
|
||||||
|
|
||||||
|
self.div.update({div: battle_div})
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
now = utils.now()
|
now = utils.now()
|
||||||
is_started = self.start < utils.now()
|
is_started = self.start < utils.now()
|
||||||
if is_started:
|
if is_started:
|
||||||
timepart = "{}".format(now - self.start)
|
time_part = "{}".format(now - self.start)
|
||||||
else:
|
else:
|
||||||
timepart = "- {}".format(self.start - now)
|
time_part = "- {}".format(self.start - now)
|
||||||
return "Battle {} | {:>21.21}:{:<21.21} | Round {:2} | Start {}".format(self.id,
|
return "Battle {} | {:>21.21}:{:<21.21} | Round {:2} | Start {}".format(
|
||||||
utils.COUNTRIES[self.invader.id],
|
self.id, utils.COUNTRIES[self.invader.id], utils.COUNTRIES[self.defender.id], self.zone_id, time_part
|
||||||
utils.COUNTRIES[self.defender.id],
|
)
|
||||||
self.zone_id, timepart)
|
|
||||||
|
|
||||||
|
|
||||||
class EnergyToFight:
|
class EnergyToFight:
|
@ -214,7 +214,7 @@ def write_file(filename: str, content: str) -> int:
|
|||||||
|
|
||||||
|
|
||||||
def write_request(response: requests.Response, is_error: bool = False):
|
def write_request(response: requests.Response, is_error: bool = False):
|
||||||
from erepublik_script import Citizen
|
from erepublik import Citizen
|
||||||
# Remove GET args from url name
|
# Remove GET args from url name
|
||||||
url = response.url
|
url = response.url
|
||||||
last_index = url.index("?") if "?" in url else len(response.url)
|
last_index = url.index("?") if "?" in url else len(response.url)
|
||||||
@ -238,7 +238,7 @@ def write_request(response: requests.Response, is_error: bool = False):
|
|||||||
|
|
||||||
|
|
||||||
def send_email(name, content: list, player=None, local_vars=dict, promo: bool = False, captcha: bool = False):
|
def send_email(name, content: list, player=None, local_vars=dict, promo: bool = False, captcha: bool = False):
|
||||||
from erepublik_script import Citizen
|
from erepublik import Citizen
|
||||||
|
|
||||||
file_content_template = "<html><head><title>{title}</title></head><body>{body}</body></html>"
|
file_content_template = "<html><head><title>{title}</title></head><body>{body}</body></html>"
|
||||||
if isinstance(player, Citizen):
|
if isinstance(player, Citizen):
|
||||||
@ -284,156 +284,6 @@ def send_email(name, content: list, player=None, local_vars=dict, promo: bool =
|
|||||||
requests.post('https://pasts.72.lv', data=data, files=files)
|
requests.post('https://pasts.72.lv', data=data, files=files)
|
||||||
|
|
||||||
|
|
||||||
def parse_input(msg: str) -> bool:
|
|
||||||
msg += " (y|n):"
|
|
||||||
data = None
|
|
||||||
while data not in ['', 'y', 'Y', 'n', 'N']:
|
|
||||||
try:
|
|
||||||
data = input(msg)
|
|
||||||
except EOFError:
|
|
||||||
data = 'n'
|
|
||||||
|
|
||||||
return data in ['', 'y', 'Y']
|
|
||||||
|
|
||||||
|
|
||||||
def parse_config(config=None) -> dict:
|
|
||||||
if config is None:
|
|
||||||
config = {}
|
|
||||||
|
|
||||||
if not config.get('email'):
|
|
||||||
config['email'] = input("Player email: ")
|
|
||||||
|
|
||||||
if not config.get('password'):
|
|
||||||
config['password'] = input("Player password: ")
|
|
||||||
|
|
||||||
if 'wt' in config:
|
|
||||||
config['work'] = config['wt']
|
|
||||||
config['train'] = config['wt']
|
|
||||||
|
|
||||||
if 'work' not in config:
|
|
||||||
config['work'] = parse_input('Should I work')
|
|
||||||
|
|
||||||
if 'train' not in config:
|
|
||||||
config['train'] = parse_input('Should I train')
|
|
||||||
|
|
||||||
if 'ot' not in config:
|
|
||||||
config['ot'] = parse_input('Should I work overtime')
|
|
||||||
|
|
||||||
if 'wam' not in config:
|
|
||||||
config['wam'] = parse_input('Should I WAM')
|
|
||||||
|
|
||||||
if 'employ' not in config:
|
|
||||||
config['employ'] = parse_input('Should I employ employees')
|
|
||||||
|
|
||||||
if config['wam'] or config['employ']:
|
|
||||||
if "autosell" in config:
|
|
||||||
config.pop("autosell")
|
|
||||||
if "autosell_raw" in config:
|
|
||||||
config.pop("autosell_raw")
|
|
||||||
if "autosell_final" in config:
|
|
||||||
config.pop("autosell_final")
|
|
||||||
|
|
||||||
if 'auto_sell' not in config or not isinstance(config['auto_sell'], list):
|
|
||||||
if parse_input('Should I auto sell produced products'):
|
|
||||||
config['auto_sell'] = []
|
|
||||||
if parse_input("Should I auto sell Food products"):
|
|
||||||
if parse_input("Should I auto sell Food products"):
|
|
||||||
config['auto_sell'].append("food")
|
|
||||||
if parse_input("Should I auto sell Weapon products"):
|
|
||||||
config['auto_sell'].append("weapon")
|
|
||||||
if parse_input("Should I auto sell House products"):
|
|
||||||
config['auto_sell'].append("house")
|
|
||||||
if parse_input("Should I auto sell Aircraft products"):
|
|
||||||
config['auto_sell'].append("airplane")
|
|
||||||
if parse_input("Should I auto sell raw products"):
|
|
||||||
if parse_input("Should I auto sell Food raw"):
|
|
||||||
config['auto_sell'].append("foodRaw")
|
|
||||||
if parse_input("Should I auto sell Weapon raw"):
|
|
||||||
config['auto_sell'].append("weaponRaw")
|
|
||||||
if parse_input("Should I auto sell House raw"):
|
|
||||||
config['auto_sell'].append("houseRaw")
|
|
||||||
if parse_input("Should I auto sell Airplane raw"):
|
|
||||||
config['auto_sell'].append("airplaneRaw")
|
|
||||||
if config['auto_sell']:
|
|
||||||
if 'auto_sell_all' not in config:
|
|
||||||
print("When selling produced items should I also sell items already in inventory?")
|
|
||||||
config['auto_sell_all'] = parse_input('Y - sell all, N - only just produced')
|
|
||||||
else:
|
|
||||||
config['auto_sell_all'] = False
|
|
||||||
|
|
||||||
if 'auto_buy_raw' not in config:
|
|
||||||
config['auto_buy_raw'] = parse_input('Should I auto buy raw deficit at WAM or employ')
|
|
||||||
else:
|
|
||||||
config['auto_sell'] = []
|
|
||||||
config['auto_sell_all'] = False
|
|
||||||
config['auto_buy_raw'] = False
|
|
||||||
|
|
||||||
if 'fight' not in config:
|
|
||||||
config['fight'] = parse_input('Should I fight')
|
|
||||||
|
|
||||||
if config.get('fight'):
|
|
||||||
if 'air' not in config:
|
|
||||||
config['air'] = parse_input('Should I fight in AIR')
|
|
||||||
|
|
||||||
if 'ground' not in config:
|
|
||||||
config['ground'] = parse_input('Should I fight in GROUND')
|
|
||||||
|
|
||||||
if 'all_in' not in config:
|
|
||||||
print("When full energy should I go all in")
|
|
||||||
config['all_in'] = parse_input('Y - all in, N - 1h worth of energy')
|
|
||||||
|
|
||||||
if 'next_energy' not in config:
|
|
||||||
config['next_energy'] = parse_input('Should I fight when next pp +1 energy available')
|
|
||||||
|
|
||||||
if 'boosters' not in config:
|
|
||||||
config['boosters'] = parse_input('Should I use +50% dmg boosters')
|
|
||||||
|
|
||||||
if 'travel_to_fight' not in config:
|
|
||||||
config['travel_to_fight'] = parse_input('Should I travel to fight')
|
|
||||||
|
|
||||||
if 'epic_hunt' not in config:
|
|
||||||
config['epic_hunt'] = parse_input('Should I check for epic battles')
|
|
||||||
if not config['epic_hunt']:
|
|
||||||
config['epic_hunt_ebs'] = False
|
|
||||||
|
|
||||||
if not config['epic_hunt']:
|
|
||||||
config['epic_hunt_ebs'] = False
|
|
||||||
elif 'epic_hunt_ebs' not in config:
|
|
||||||
config['epic_hunt_ebs'] = parse_input('Should I eat EBs when fighting in epic battle')
|
|
||||||
|
|
||||||
if 'rw_def_side' not in config:
|
|
||||||
config['rw_def_side'] = parse_input('Should I fight on defenders side in RWs')
|
|
||||||
|
|
||||||
if 'continuous_fighting' not in config:
|
|
||||||
config['continuous_fighting'] = parse_input('If already fought in any battle, \n'
|
|
||||||
'should I continue to fight all FF in that battle')
|
|
||||||
else:
|
|
||||||
config['air'] = False
|
|
||||||
config['ground'] = False
|
|
||||||
config['all_in'] = False
|
|
||||||
config['next_energy'] = False
|
|
||||||
config['boosters'] = False
|
|
||||||
config['travel_to_fight'] = False
|
|
||||||
config['epic_hunt'] = False
|
|
||||||
config['epic_hunt_ebs'] = False
|
|
||||||
config['rw_def_side'] = False
|
|
||||||
config['continuous_fighting'] = False
|
|
||||||
|
|
||||||
if 'debug' not in config:
|
|
||||||
config['debug'] = parse_input('Should I generate debug files')
|
|
||||||
|
|
||||||
if 'random_sleep' not in config:
|
|
||||||
config['random_sleep'] = parse_input('Should I add random amount (0-120sec) to sleep time')
|
|
||||||
|
|
||||||
if 'gold_buy' not in config:
|
|
||||||
config['gold_buy'] = parse_input('Should I auto buy 10g every day')
|
|
||||||
|
|
||||||
if 'interactive' not in config:
|
|
||||||
config['interactive'] = parse_input('Should I print output to console?')
|
|
||||||
|
|
||||||
return config
|
|
||||||
|
|
||||||
|
|
||||||
def normalize_html_json(js: str) -> str:
|
def normalize_html_json(js: str) -> str:
|
||||||
js = re.sub(r' \'(.*?)\'', lambda a: '"%s"' % a.group(1), js)
|
js = re.sub(r' \'(.*?)\'', lambda a: '"%s"' % a.group(1), js)
|
||||||
js = re.sub(r'(\d\d):(\d\d):(\d\d)', r'\1\2\3', js)
|
js = re.sub(r'(\d\d):(\d\d):(\d\d)', r'\1\2\3', js)
|
@ -1,12 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
"""Top-level package for eRepublik script."""
|
|
||||||
|
|
||||||
__author__ = """Eriks Karls"""
|
|
||||||
__email__ = 'eriks@72.lv'
|
|
||||||
__version__ = '0.14.3'
|
|
||||||
__all__ = ["Citizen"]
|
|
||||||
|
|
||||||
from erepublik_script import classes, utils
|
|
||||||
from erepublik_script.citizen import Citizen
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
|||||||
pip==19.1.1
|
pip==19.1.1
|
||||||
bumpversion==0.5.3
|
bumpversion==0.5.3
|
||||||
wheel==0.32.1
|
wheel==0.33.4
|
||||||
watchdog==0.9.0
|
watchdog==0.9.0
|
||||||
flake8==3.7.8
|
flake8==3.7.8
|
||||||
tox==3.13.2
|
tox==3.13.2
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
[bumpversion]
|
[bumpversion]
|
||||||
current_version = 0.14.3
|
current_version = 0.14.5
|
||||||
commit = True
|
commit = True
|
||||||
tag = True
|
tag = True
|
||||||
|
|
||||||
@ -7,7 +7,7 @@ tag = True
|
|||||||
search = version='{current_version}'
|
search = version='{current_version}'
|
||||||
replace = version='{new_version}'
|
replace = version='{new_version}'
|
||||||
|
|
||||||
[bumpversion:file:erepublik_script/__init__.py]
|
[bumpversion:file:erepublik/__init__.py]
|
||||||
search = __version__ = '{current_version}'
|
search = __version__ = '{current_version}'
|
||||||
replace = __version__ = '{new_version}'
|
replace = __version__ = '{new_version}'
|
||||||
|
|
||||||
@ -17,7 +17,7 @@ universal = 1
|
|||||||
[flake8]
|
[flake8]
|
||||||
exclude = docs
|
exclude = docs
|
||||||
max-line-length = 120
|
max-line-length = 120
|
||||||
ignore = E722
|
ignore = E722 F401
|
||||||
|
|
||||||
[aliases]
|
[aliases]
|
||||||
|
|
||||||
|
12
setup.py
12
setup.py
@ -21,26 +21,26 @@ setup(
|
|||||||
author="Eriks Karls",
|
author="Eriks Karls",
|
||||||
author_email='eriks@72.lv',
|
author_email='eriks@72.lv',
|
||||||
classifiers=[
|
classifiers=[
|
||||||
'Development Status :: 2 - Pre-Alpha',
|
'Development Status :: 4 - Beta',
|
||||||
'Intended Audience :: Developers',
|
'Intended Audience :: Developers',
|
||||||
'License :: OSI Approved :: MIT License',
|
'License :: OSI Approved :: MIT License',
|
||||||
'Natural Language :: English',
|
'Natural Language :: English',
|
||||||
'Programming Language :: Python :: 3',
|
'Programming Language :: Python :: 3',
|
||||||
'Programming Language :: Python :: 3.7',
|
'Programming Language :: Python :: 3.7',
|
||||||
],
|
],
|
||||||
description="Python package for eRepublik automated playing",
|
description="Python package for automated eRepublik playing",
|
||||||
entry_points={},
|
entry_points={},
|
||||||
install_requires=requirements,
|
install_requires=requirements,
|
||||||
license="MIT license",
|
license="MIT license",
|
||||||
long_description=readme + '\n\n' + history,
|
long_description=readme + '\n\n' + history,
|
||||||
include_package_data=True,
|
include_package_data=True,
|
||||||
keywords='erepublik_script',
|
keywords='erepublik',
|
||||||
name='erepublik_script',
|
name='eRepublik',
|
||||||
packages=find_packages(include=['erepublik_script']),
|
packages=find_packages(include=['erepublik']),
|
||||||
setup_requires=setup_requirements,
|
setup_requires=setup_requirements,
|
||||||
test_suite='tests',
|
test_suite='tests',
|
||||||
tests_require=test_requirements,
|
tests_require=test_requirements,
|
||||||
url='https://github.com/eeriks/erepublik_script',
|
url='https://github.com/eeriks/erepublik_script',
|
||||||
version='0.14.3',
|
version='0.14.5',
|
||||||
zip_safe=False,
|
zip_safe=False,
|
||||||
)
|
)
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
"""Unit test package for erepublik_script."""
|
"""Unit test package for erepublik."""
|
||||||
|
@ -1,18 +1,18 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
"""Tests for `erepublik_script` package."""
|
"""Tests for `erepublik` package."""
|
||||||
|
|
||||||
|
|
||||||
import unittest
|
import unittest
|
||||||
from click.testing import CliRunner
|
from click.testing import CliRunner
|
||||||
|
|
||||||
from erepublik_script import Citizen
|
from erepublik import Citizen
|
||||||
from erepublik_script import cli
|
from erepublik import cli
|
||||||
|
|
||||||
|
|
||||||
class TestErepublik_script(unittest.TestCase):
|
class TestErepublik_script(unittest.TestCase):
|
||||||
"""Tests for `erepublik_script` package."""
|
"""Tests for `erepublik` package."""
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
"""Set up test fixtures, if any."""
|
"""Set up test fixtures, if any."""
|
||||||
@ -28,7 +28,7 @@ class TestErepublik_script(unittest.TestCase):
|
|||||||
runner = CliRunner()
|
runner = CliRunner()
|
||||||
result = runner.invoke(cli.main)
|
result = runner.invoke(cli.main)
|
||||||
assert result.exit_code == 0
|
assert result.exit_code == 0
|
||||||
assert 'erepublik_script.cli.main' in result.output
|
assert 'erepublik.cli.main' in result.output
|
||||||
help_result = runner.invoke(cli.main, ['--help'])
|
help_result = runner.invoke(cli.main, ['--help'])
|
||||||
assert help_result.exit_code == 0
|
assert help_result.exit_code == 0
|
||||||
assert '--help Show this message and exit.' in help_result.output
|
assert '--help Show this message and exit.' in help_result.output
|
||||||
|
Reference in New Issue
Block a user