diff --git a/erepublik/__init__.py b/erepublik/__init__.py
index 9d0b47b..a2e30fa 100644
--- a/erepublik/__init__.py
+++ b/erepublik/__init__.py
@@ -5,7 +5,7 @@
__author__ = """Eriks Karls"""
__email__ = 'eriks@72.lv'
__version__ = '0.20.0'
-__commit_id__ = "1e7c9a3"
+__commit_id__ = "eed244d"
from erepublik import classes, utils
from erepublik.citizen import Citizen
diff --git a/erepublik/citizen.py b/erepublik/citizen.py
index 66250c0..50333f5 100644
--- a/erepublik/citizen.py
+++ b/erepublik/citizen.py
@@ -44,6 +44,7 @@ class BaseCitizen(CitizenAPI):
name: str = "Not logged in!"
logged_in: bool = False
commit_id: str = ""
+ restricted_ip: bool = False
def __init__(self, email: str = "", password: str = ""):
super().__init__()
@@ -631,6 +632,10 @@ class BaseCitizen(CitizenAPI):
self.write_log(f"Logged in as: {self.name}")
self.get_csrf_token()
+ if re.search('
', self.r.text):
+ self.restricted_ip = True
+ self.report_error("eRepublik has blacklisted IP. Limited functionality!", True)
+
self.logged_in = True
def _errors_in_response(self, response: Response):
@@ -806,6 +811,8 @@ class CitizenCompanies(BaseCitizen):
return self._work_as_manager(holding_id)
def _work_as_manager(self, wam_holding_id: int = 0) -> Optional[Dict[str, Any]]:
+ if self.restricted_ip:
+ return None
self.update_companies()
self.update_inventory()
data = {"action_type": "production"}
@@ -1117,12 +1124,23 @@ class CitizenEconomy(CitizenTravel):
return sorted(ret, key=lambda o: (o["price"], -o["amount"]))
- def buy_monetary_market_offer(self, offer: int, amount: float, currency: int) -> bool:
+ def buy_monetary_market_offer(self, offer: int, amount: float, currency: int) -> int:
+ """ Buy from monetary market
+
+ :param offer: offer id which should be bought
+ :type offer: int
+ :param amount: amount to buy
+ :amount amount: float
+ :param currency: currency kind - gold = 62, cc = 1
+ :type currency: int
+ :return:
+ """
response = self._post_economy_exchange_purchase(amount, currency, offer)
self.details.cc = float(response.json().get("ecash").get("value"))
self.details.gold = float(response.json().get("gold").get("value"))
if response.json().get('error'):
self._report_action("BUY_GOLD", "Unable to buy gold!", **response.json())
+ self.stop_threads.wait()
return False
else:
self._report_action("BUY_GOLD", f"New amount {self.details.cc}cc, {self.details.gold}g", **response.json())
@@ -1571,6 +1589,9 @@ class CitizenMilitary(CitizenTravel):
:return: None if no errors while fighting, otherwise error count.
:rtype: int
"""
+ if self.restricted_ip:
+ self._report_action("IP_BLACKLISTED", "Fighting is not allowed from restricted IP!")
+ return 1
if not isinstance(battle_id, int):
self.report_error(f"WARNING! Parameter battle_id should be 'int', but it is '{type(battle_id).__name__}'")
battle_id = int(battle_id)
@@ -2466,6 +2487,9 @@ class Citizen(CitizenAnniversary, CitizenCompanies, CitizenEconomy, CitizenLeade
:return: if has more wam work to do
:rtype: bool
"""
+ if self.restricted_ip:
+ self._report_action("IP_BLACKLISTED", "Fighting is not allowed from restricted IP!")
+ return False
self.update_citizen_info()
self.update_companies()
# Prevent messing up levelup with wam