|
|
|
@ -1,4 +1,3 @@
|
|
|
|
|
# pylint: disable=fixme, line-too-long, missing-docstring, invalid-name
|
|
|
|
|
import datetime
|
|
|
|
|
import decimal
|
|
|
|
|
import hashlib
|
|
|
|
@ -6,12 +5,11 @@ import random
|
|
|
|
|
import time
|
|
|
|
|
from collections import deque
|
|
|
|
|
from json import JSONDecodeError, loads, JSONEncoder
|
|
|
|
|
from typing import Any, Dict, List, Union
|
|
|
|
|
from typing import Any, Dict, List, Union, Mapping, Iterable
|
|
|
|
|
|
|
|
|
|
from requests import Response, Session
|
|
|
|
|
from slugify import slugify
|
|
|
|
|
|
|
|
|
|
from erepublik_script import utils
|
|
|
|
|
from erepublik import utils
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ErepublikException(Exception):
|
|
|
|
@ -28,11 +26,13 @@ class ErepublikNetworkException(Exception):
|
|
|
|
|
class MyCompanies:
|
|
|
|
|
work_units: int = 0
|
|
|
|
|
next_ot_time: datetime.datetime
|
|
|
|
|
holdings: Dict[int, Dict] = dict()
|
|
|
|
|
companies: Dict[int, Dict] = dict()
|
|
|
|
|
holdings: Dict[int, Dict] = None
|
|
|
|
|
companies: Dict[int, Dict] = None
|
|
|
|
|
ff_lockdown: int = 0
|
|
|
|
|
|
|
|
|
|
def __init__(self):
|
|
|
|
|
self.holdings = dict()
|
|
|
|
|
self.companies = dict()
|
|
|
|
|
self.next_ot_time = utils.now()
|
|
|
|
|
|
|
|
|
|
def prepare_holdings(self, holdings: dict):
|
|
|
|
@ -43,7 +43,7 @@ class MyCompanies:
|
|
|
|
|
template = dict(id=0, num_factories=0, region_id=0, companies=[])
|
|
|
|
|
|
|
|
|
|
for holding_id, holding in holdings.items():
|
|
|
|
|
tmp: Dict[str, Union[List[Any], Any]] = {}
|
|
|
|
|
tmp: Dict[str, Union[Iterable[Any], Any]] = {}
|
|
|
|
|
for key in template:
|
|
|
|
|
if key == 'companies':
|
|
|
|
|
tmp.update({key: []})
|
|
|
|
@ -223,12 +223,12 @@ class SlowRequests(Session):
|
|
|
|
|
|
|
|
|
|
body = "[{dt}]\tURL: '{url}'\tMETHOD: {met}\tARGS: {args}\n".format(dt=utils.now().strftime("%F %T"),
|
|
|
|
|
url=url, met=method, args=args)
|
|
|
|
|
|
|
|
|
|
utils.get_file(self.request_log_name)
|
|
|
|
|
with open(self.request_log_name, 'ab') as file:
|
|
|
|
|
file.write(body.encode("UTF-8"))
|
|
|
|
|
|
|
|
|
|
def _log_response(self, url, resp, redirect: bool = False):
|
|
|
|
|
from erepublik_script import Citizen
|
|
|
|
|
from erepublik import Citizen
|
|
|
|
|
if self.debug:
|
|
|
|
|
if resp.history and not redirect:
|
|
|
|
|
for hist_resp in resp.history:
|
|
|
|
@ -239,7 +239,7 @@ class SlowRequests(Session):
|
|
|
|
|
file_data = {
|
|
|
|
|
"path": 'debug/requests',
|
|
|
|
|
"time": self.last_time.strftime('%Y-%m-%d_%H-%M-%S'),
|
|
|
|
|
"name": slugify(url[len(Citizen.url):]),
|
|
|
|
|
"name": utils.slugify(url[len(Citizen.url):]),
|
|
|
|
|
"extra": "_REDIRECT" if redirect else ""
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -438,10 +438,14 @@ class House(object):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class CitizenAPI:
|
|
|
|
|
url = "https://www.erepublik.com/en"
|
|
|
|
|
_req = SlowRequests
|
|
|
|
|
url: str = "https://www.erepublik.com/en"
|
|
|
|
|
_req: SlowRequests = None
|
|
|
|
|
token: str = ""
|
|
|
|
|
|
|
|
|
|
def __init__(self):
|
|
|
|
|
"""
|
|
|
|
|
Class for unifying eRepublik known endpoints and their required/optional parameters
|
|
|
|
|
"""
|
|
|
|
|
self._req = SlowRequests()
|
|
|
|
|
|
|
|
|
|
def post(self, url: str, *args, **kwargs) -> Response:
|
|
|
|
@ -450,112 +454,126 @@ class CitizenAPI:
|
|
|
|
|
def get(self, url: str, **kwargs) -> Response:
|
|
|
|
|
return self._req.get(url, **kwargs)
|
|
|
|
|
|
|
|
|
|
def get_article_json(self, article_id: int) -> Response:
|
|
|
|
|
def _get_article_json(self, article_id: int) -> Response:
|
|
|
|
|
return self.get("{}/main/articleJson/{}".format(self.url, article_id))
|
|
|
|
|
|
|
|
|
|
def get_battlefield_choose_side(self, battle: int, side: int) -> Response:
|
|
|
|
|
def _get_battlefield_choose_side(self, battle: int, side: int) -> Response:
|
|
|
|
|
return self.get("{}/military/battlefield-choose-side/{}/{}".format(self.url, battle, side))
|
|
|
|
|
|
|
|
|
|
def get_candidate_party(self, party_slug: str) -> Response:
|
|
|
|
|
def _get_candidate_party(self, party_slug: str) -> Response:
|
|
|
|
|
return self.post("{}/candidate/{}".format(self.url, party_slug))
|
|
|
|
|
|
|
|
|
|
def get_citizen_hovercard(self, citizen: int) -> Response:
|
|
|
|
|
def _get_citizen_hovercard(self, citizen: int) -> Response:
|
|
|
|
|
return self.get("{}/main/citizen-hovercard/{}".format(self.url, citizen))
|
|
|
|
|
|
|
|
|
|
def get_citizen_profile(self, player_id: int):
|
|
|
|
|
def _get_citizen_profile(self, player_id: int) -> Response:
|
|
|
|
|
return self.get("{}/main/citizen-profile-json/{}".format(self.url, player_id))
|
|
|
|
|
|
|
|
|
|
def get_citizen_daily_assistant(self):
|
|
|
|
|
def _get_citizen_daily_assistant(self) -> Response:
|
|
|
|
|
return self.get("{}/main/citizenDailyAssistant".format(self.url))
|
|
|
|
|
|
|
|
|
|
def get_city_data_residents(self, city: int, page: int = 1, params: Dict[str, Any] = {}):
|
|
|
|
|
def _get_city_data_residents(self, city: int, page: int = 1, params: Mapping[str, Any] = None) -> Response:
|
|
|
|
|
if params is None:
|
|
|
|
|
params = {}
|
|
|
|
|
return self.get("{}/main/city-data/{}/residents".format(self.url, city), params={"currentPage": page, **params})
|
|
|
|
|
|
|
|
|
|
def get_country_military(self, country: str) -> Response:
|
|
|
|
|
def _get_country_military(self, country: str) -> Response:
|
|
|
|
|
return self.get("{}/country/military/{}".format(self.url, country))
|
|
|
|
|
|
|
|
|
|
def get_economy_inventory_items(self) -> Response:
|
|
|
|
|
def _get_economy_inventory_items(self) -> Response:
|
|
|
|
|
return self.get("{}/economy/inventory-items/".format(self.url))
|
|
|
|
|
|
|
|
|
|
def get_economy_job_market_json(self, country: int) -> Response:
|
|
|
|
|
def _get_economy_job_market_json(self, country: int) -> Response:
|
|
|
|
|
return self.get("{}/economy/job-market-json/{}/1/desc".format(self.url, country))
|
|
|
|
|
|
|
|
|
|
def get_economy_my_companies(self) -> Response:
|
|
|
|
|
def _get_economy_my_companies(self) -> Response:
|
|
|
|
|
return self.get("{}/economy/myCompanies".format(self.url))
|
|
|
|
|
|
|
|
|
|
def get_economy_my_market_offers(self) -> Response:
|
|
|
|
|
def _get_economy_my_market_offers(self) -> Response:
|
|
|
|
|
return self.get("{}/economy/myMarketOffers".format(self.url))
|
|
|
|
|
|
|
|
|
|
def get_job_data(self) -> Response:
|
|
|
|
|
def _get_job_data(self) -> Response:
|
|
|
|
|
return self.get("{}/main/job-data".format(self.url))
|
|
|
|
|
|
|
|
|
|
def get_leaderboards_damage_aircraft_rankings(self, country: int, weeks: int = 0, mu: int = 0) -> Response:
|
|
|
|
|
def _get_leaderboards_damage_aircraft_rankings(self, country: int, weeks: int = 0, mu: int = 0) -> Response:
|
|
|
|
|
data = (country, weeks, mu)
|
|
|
|
|
return self.get("{}/main/leaderboards-damage-aircraft-rankings/{}/{}/{}/0".format(self.url, *data))
|
|
|
|
|
|
|
|
|
|
def get_leaderboards_damage_rankings(self, country: int, weeks: int = 0, mu: int = 0, div: int = 0) -> Response:
|
|
|
|
|
def _get_leaderboards_damage_rankings(self, country: int, weeks: int = 0, mu: int = 0, div: int = 0) -> Response:
|
|
|
|
|
data = (country, weeks, mu, div)
|
|
|
|
|
return self.get("{}/main/leaderboards-damage-rankings/{}/{}/{}/{}".format(self.url, *data))
|
|
|
|
|
|
|
|
|
|
def get_leaderboards_kills_aircraft_rankings(self, country: int, weeks: int = 0, mu: int = 0) -> Response:
|
|
|
|
|
def _get_leaderboards_kills_aircraft_rankings(self, country: int, weeks: int = 0, mu: int = 0) -> Response:
|
|
|
|
|
data = (country, weeks, mu)
|
|
|
|
|
return self.get("{}/main/leaderboards-kills-aircraft-rankings/{}/{}/{}/0".format(self.url, *data))
|
|
|
|
|
|
|
|
|
|
def get_leaderboards_kills_rankings(self, country: int, weeks: int = 0, mu: int = 0, div: int = 0) -> Response:
|
|
|
|
|
def _get_leaderboards_kills_rankings(self, country: int, weeks: int = 0, mu: int = 0, div: int = 0) -> Response:
|
|
|
|
|
data = (country, weeks, mu, div)
|
|
|
|
|
return self.get("{}/main/leaderboards-kills-rankings/{}/{}/{}/{}".format(self.url, *data))
|
|
|
|
|
|
|
|
|
|
def get_main(self):
|
|
|
|
|
def _get_main(self) -> Response:
|
|
|
|
|
return self.get(self.url)
|
|
|
|
|
|
|
|
|
|
def get_message_alerts(self, page: int = 1) -> Response:
|
|
|
|
|
return self.get_message_alerts(page)
|
|
|
|
|
def _get_messages(self, page: int = 1) -> Response:
|
|
|
|
|
return self.get("{}/main/messages-paginated/{}".format(self.url, page))
|
|
|
|
|
|
|
|
|
|
def get_military_campaigns(self) -> Response:
|
|
|
|
|
def _get_military_campaigns(self) -> Response:
|
|
|
|
|
return self.get("{}/military/campaigns-new/".format(self.url))
|
|
|
|
|
|
|
|
|
|
def get_military_unit_data(self, unit_id: int, page: int = 1) -> Response:
|
|
|
|
|
params = {"groupId": unit_id, "panel": "members", "currentPage": page}
|
|
|
|
|
def _get_military_unit_data(self, unit_id: int, **kwargs) -> Response:
|
|
|
|
|
params = {"groupId": unit_id, "panel": "members", **kwargs}
|
|
|
|
|
return self.get("{}/military/military-unit-data/".format(self.url), params=params)
|
|
|
|
|
|
|
|
|
|
def get_money_donation_accept(self, token: str, donation_id: int) -> Response:
|
|
|
|
|
return self.get("{}/main/money-donation/accept/{}".format(self.url, donation_id), params={"_token": token})
|
|
|
|
|
def _get_money_donation_accept(self, donation_id: int) -> Response:
|
|
|
|
|
return self.get("{}/main/money-donation/accept/{}".format(self.url, donation_id), params={"_token": self.token})
|
|
|
|
|
|
|
|
|
|
def get_money_donation_reject(self, token: str, donation_id: int) -> Response:
|
|
|
|
|
return self.get("{}/main/money-donation/reject/{}".format(self.url, donation_id), params={"_token": token})
|
|
|
|
|
def _get_money_donation_reject(self, donation_id: int) -> Response:
|
|
|
|
|
return self.get("{}/main/money-donation/reject/{}".format(self.url, donation_id), params={"_token": self.token})
|
|
|
|
|
|
|
|
|
|
def get_party_members(self, party: int) -> Response:
|
|
|
|
|
def _get_notifications_ajax_community(self, page: int = 1) -> Response:
|
|
|
|
|
return self.get("{}/main/notificationsAjax/community/{}".format(self.url, page))
|
|
|
|
|
|
|
|
|
|
def _get_notifications_ajax_system(self, page: int = 1) -> Response:
|
|
|
|
|
return self.get("{}/main/notificationsAjax/system/{}".format(self.url, page))
|
|
|
|
|
|
|
|
|
|
def _get_notifications_ajax_report(self, page: int = 1) -> Response:
|
|
|
|
|
return self.get("{}/main/notificationsAjax/report/{}".format(self.url, page))
|
|
|
|
|
|
|
|
|
|
def _get_party_members(self, party: int) -> Response:
|
|
|
|
|
return self.get("{}/main/party-members/{}".format(self.url, party))
|
|
|
|
|
|
|
|
|
|
def get_rankings_parties(self, country: int) -> Response:
|
|
|
|
|
def _get_rankings_parties(self, country: int) -> Response:
|
|
|
|
|
return self.get("{}/main/rankings-parties/1/{}".format(self.url, country))
|
|
|
|
|
|
|
|
|
|
def get_training_grounds_json(self) -> Response:
|
|
|
|
|
def _get_training_grounds_json(self) -> Response:
|
|
|
|
|
return self.get("{}/main/training-grounds-json".format(self.url))
|
|
|
|
|
|
|
|
|
|
def get_weekly_challenge_data(self) -> Response:
|
|
|
|
|
def _get_weekly_challenge_data(self) -> Response:
|
|
|
|
|
return self.get("{}/main/weekly-challenge-data".format(self.url))
|
|
|
|
|
|
|
|
|
|
def post_activate_battle_effect(self, token: str, battle: int, kind: str, citizen_id: int) -> Response:
|
|
|
|
|
data = dict(battleId=battle, citizenId=citizen_id, type=kind, _token=token)
|
|
|
|
|
def _get_wars_show(self, war_id: int) -> Response:
|
|
|
|
|
return self.get("{}/wars/show/{}".format(self.url, war_id))
|
|
|
|
|
|
|
|
|
|
def _post_activate_battle_effect(self, battle: int, kind: str, citizen_id: int) -> Response:
|
|
|
|
|
data = dict(battleId=battle, citizenId=citizen_id, type=kind, _token=self.token)
|
|
|
|
|
return self.post("{}/main/fight-activateBattleEffect".format(self.url), data=data)
|
|
|
|
|
|
|
|
|
|
def post_article_comments(self, token: str, article: int, page: int = 0) -> Response:
|
|
|
|
|
data = dict(_token=token, articleId=article, page=page)
|
|
|
|
|
def _post_article_comments(self, article: int, page: int = 1) -> Response:
|
|
|
|
|
data = dict(_token=self.token, articleId=article, page=page)
|
|
|
|
|
if page:
|
|
|
|
|
data.update({'page': page})
|
|
|
|
|
return self.post("{}/main/articleComments".format(self.url), data=data)
|
|
|
|
|
|
|
|
|
|
def post_article_comments_create(self, token: str, message: str, article: int, parent: int = 0) -> Response:
|
|
|
|
|
data = dict(_token=token, message=message, articleId=article)
|
|
|
|
|
def _post_article_comments_create(self, message: str, article: int, parent: int = 0) -> Response:
|
|
|
|
|
data = dict(_token=self.token, message=message, articleId=article)
|
|
|
|
|
if parent:
|
|
|
|
|
data.update({"parentId": parent})
|
|
|
|
|
return self.post("{}/main/articleComments/create".format(self.url), data=data)
|
|
|
|
|
|
|
|
|
|
def post_battle_console(self, token: str, battle: int, zone: int, round_id: int, division: int, page: int,
|
|
|
|
|
damage: bool) -> Response:
|
|
|
|
|
def _post_battle_console(self, battle: int, zone: int, round_id: int, division: int, page: int,
|
|
|
|
|
damage: bool) -> Response:
|
|
|
|
|
data = dict(battleId=battle, zoneId=zone, action="battleStatistics", round=round_id, division=division,
|
|
|
|
|
leftPage=page, rightPage=page, _token=token)
|
|
|
|
|
leftPage=page, rightPage=page, _token=self.token)
|
|
|
|
|
if damage:
|
|
|
|
|
data.update({"type": "damage"})
|
|
|
|
|
else:
|
|
|
|
@ -563,124 +581,125 @@ class CitizenAPI:
|
|
|
|
|
|
|
|
|
|
return self.post("{}/military/battle-console".format(self.url), data=data)
|
|
|
|
|
|
|
|
|
|
def post_buy_gold_items(self, token: str, currency: str, item: str, amount: int) -> Response:
|
|
|
|
|
data = dict(itemId=item, currency=currency, amount=amount, _token=token)
|
|
|
|
|
def _post_buy_gold_items(self, currency: str, item: str, amount: int) -> Response:
|
|
|
|
|
data = dict(itemId=item, currency=currency, amount=amount, _token=self.token)
|
|
|
|
|
return self.post("{}/main/buyGoldItems".format(self.url), data=data)
|
|
|
|
|
|
|
|
|
|
def post_candidate_for_congress(self, token: str, presentation: str = "") -> Response:
|
|
|
|
|
data = dict(_token=token, presentation=presentation)
|
|
|
|
|
def _post_candidate_for_congress(self, presentation: str = "") -> Response:
|
|
|
|
|
data = dict(_token=self.token, presentation=presentation)
|
|
|
|
|
return self.post("{}/candidate-for-congress".format(self.url), data=data)
|
|
|
|
|
|
|
|
|
|
def post_citizen_add_remove_friend(self, token: str, citizen: int, add: bool) -> Response:
|
|
|
|
|
data = dict(_token=token, citizenId=citizen, url="//www.erepublik.com/en/main/citizen-addRemoveFriend")
|
|
|
|
|
def _post_citizen_add_remove_friend(self, citizen: int, add: bool) -> Response:
|
|
|
|
|
data = dict(_token=self.token, citizenId=citizen, url="//www.erepublik.com/en/main/citizen-addRemoveFriend")
|
|
|
|
|
if add:
|
|
|
|
|
data.update({"action": "addFriend"})
|
|
|
|
|
else:
|
|
|
|
|
data.update({"action": "removeFriend"})
|
|
|
|
|
return self.post("{}/main/citizen-addRemoveFriend".format(self.url), data=data)
|
|
|
|
|
|
|
|
|
|
def post_collect_anniversary_reward(self, token: str) -> Response:
|
|
|
|
|
return self.post("{}/main/collect-anniversary-reward".format(self.url), data={"_token": token})
|
|
|
|
|
def _post_collect_anniversary_reward(self) -> Response:
|
|
|
|
|
return self.post("{}/main/collect-anniversary-reward".format(self.url), data={"_token": self.token})
|
|
|
|
|
|
|
|
|
|
def post_country_donate(self, token: str, country: int, action: str, value: Union[int, float], quality: int = None):
|
|
|
|
|
json = dict(countryId=country, action=action, _token=token, value=value, quality=quality)
|
|
|
|
|
def _post_country_donate(self, country: int, action: str, value: Union[int, float],
|
|
|
|
|
quality: int = None) -> Response:
|
|
|
|
|
json = dict(countryId=country, action=action, _token=self.token, value=value, quality=quality)
|
|
|
|
|
return self.post("{}/main/country-donate".format(self.url), data=json,
|
|
|
|
|
headers={"Referer": "{}/country/economy/Latvia".format(self.url)})
|
|
|
|
|
|
|
|
|
|
def post_daily_task_reward(self, token: str) -> Response:
|
|
|
|
|
return self.post("{}/main/daily-tasks-reward".format(self.url), data=dict(_token=token))
|
|
|
|
|
def _post_daily_task_reward(self) -> Response:
|
|
|
|
|
return self.post("{}/main/daily-tasks-reward".format(self.url), data=dict(_token=self.token))
|
|
|
|
|
|
|
|
|
|
def post_delete_message(self, token: str, msg_id: list) -> Response:
|
|
|
|
|
data = {"_token": token, "delete_message[]": msg_id}
|
|
|
|
|
def _post_delete_message(self, msg_id: list) -> Response:
|
|
|
|
|
data = {"_token": self.token, "delete_message[]": msg_id}
|
|
|
|
|
return self.post("{}/main/messages-delete".format(self.url), data)
|
|
|
|
|
|
|
|
|
|
def post_eat(self, token: str, color: str) -> Response:
|
|
|
|
|
data = dict(_token=token, buttonColor=color)
|
|
|
|
|
def _post_eat(self, color: str) -> Response:
|
|
|
|
|
data = dict(_token=self.token, buttonColor=color)
|
|
|
|
|
return self.post("{}/main/eat".format(self.url), params=data)
|
|
|
|
|
|
|
|
|
|
def post_economy_activate_house(self, token: str, quality: int) -> Response:
|
|
|
|
|
data = {"action": "activate", "quality": quality, "type": "house", "_token": token}
|
|
|
|
|
def _post_economy_activate_house(self, quality: int) -> Response:
|
|
|
|
|
data = {"action": "activate", "quality": quality, "type": "house", "_token": self.token}
|
|
|
|
|
return self.post("{}/economy/activateHouse".format(self.url), data=data)
|
|
|
|
|
|
|
|
|
|
def post_economy_assign_to_holding(self, token: str, factory: int, holding: int) -> Response:
|
|
|
|
|
data = dict(_token=token, factoryId=factory, action="assign", holdingCompanyId=holding)
|
|
|
|
|
def _post_economy_assign_to_holding(self, factory: int, holding: int) -> Response:
|
|
|
|
|
data = dict(_token=self.token, factoryId=factory, action="assign", holdingCompanyId=holding)
|
|
|
|
|
return self.post("{}/economy/assign-to-holding".format(self.url), data=data)
|
|
|
|
|
|
|
|
|
|
def post_economy_create_company(self, token: str, industry: int, building_type: int = 1) -> Response:
|
|
|
|
|
data = {"_token": token, "company[industry_id]": industry, "company[building_type]": building_type}
|
|
|
|
|
def _post_economy_create_company(self, industry: int, building_type: int = 1) -> Response:
|
|
|
|
|
data = {"_token": self.token, "company[industry_id]": industry, "company[building_type]": building_type}
|
|
|
|
|
return self.post("{}/economy/create-company".format(self.url), data=data,
|
|
|
|
|
headers={"Referer": "{}/economy/create-company".format(self.url)})
|
|
|
|
|
|
|
|
|
|
def post_economy_donate_items_action(self, token: str, citizen: int, amount: int, industry: int,
|
|
|
|
|
quality: int) -> Response:
|
|
|
|
|
data = dict(citizen_id=citizen, amount=amount, industry_id=industry, quality=quality, _token=token)
|
|
|
|
|
def _post_economy_donate_items_action(self, citizen: int, amount: int, industry: int,
|
|
|
|
|
quality: int) -> Response:
|
|
|
|
|
data = dict(citizen_id=citizen, amount=amount, industry_id=industry, quality=quality, _token=self.token)
|
|
|
|
|
return self.post("{}/economy/donate-items-action".format(self.url), data=data,
|
|
|
|
|
headers={"Referer": "{}/economy/donate-items/{}".format(self.url, citizen)})
|
|
|
|
|
|
|
|
|
|
def post_economy_donate_money_action(self, token: str, citizen: int, amount: float = 0.0,
|
|
|
|
|
currency: int = 62) -> Response:
|
|
|
|
|
data = dict(citizen_id=citizen, _token=token, currency_id=currency, amount=amount)
|
|
|
|
|
def _post_economy_donate_money_action(self, citizen: int, amount: float = 0.0,
|
|
|
|
|
currency: int = 62) -> Response:
|
|
|
|
|
data = dict(citizen_id=citizen, _token=self.token, currency_id=currency, amount=amount)
|
|
|
|
|
return self.post("{}/economy/donate-money-action".format(self.url), data=data,
|
|
|
|
|
headers={"Referer": "{}/economy/donate-money/{}".format(self.url, citizen)})
|
|
|
|
|
|
|
|
|
|
def post_economy_exchange_purchase(self, token: str, amount: float, currency: int, offer: int) -> Response:
|
|
|
|
|
data = dict(_token=token, amount=amount, currencyId=currency, offerId=offer)
|
|
|
|
|
def _post_economy_exchange_purchase(self, amount: float, currency: int, offer: int) -> Response:
|
|
|
|
|
data = dict(_token=self.token, amount=amount, currencyId=currency, offerId=offer)
|
|
|
|
|
return self.post("{}/economy/exchange/purchase/".format(self.url), data=data)
|
|
|
|
|
|
|
|
|
|
def post_economy_exchange_retrieve(self, token: str, personal: bool, page: int, currency: int) -> Response:
|
|
|
|
|
data = dict(_token=token, personalOffers=int(personal), page=page, currencyId=currency)
|
|
|
|
|
def _post_economy_exchange_retrieve(self, personal: bool, page: int, currency: int) -> Response:
|
|
|
|
|
data = dict(_token=self.token, personalOffers=int(personal), page=page, currencyId=currency)
|
|
|
|
|
return self.post("{}/economy/exchange/retrieve/".format(self.url), data=data)
|
|
|
|
|
|
|
|
|
|
def post_economy_job_market_apply(self, token: str, citizen: int, salary: int) -> Response:
|
|
|
|
|
data = dict(_token=token, citizenId=citizen, salary=salary)
|
|
|
|
|
def _post_economy_job_market_apply(self, citizen: int, salary: int) -> Response:
|
|
|
|
|
data = dict(_token=self.token, citizenId=citizen, salary=salary)
|
|
|
|
|
return self.post("{}/economy/job-market-apply".format(self.url), data=data)
|
|
|
|
|
|
|
|
|
|
def post_economy_marketplace(self, token: str, country: int, industry: int, quality: int,
|
|
|
|
|
order_asc: bool = True) -> Response:
|
|
|
|
|
def _post_economy_marketplace(self, country: int, industry: int, quality: int,
|
|
|
|
|
order_asc: bool = True) -> Response:
|
|
|
|
|
data = dict(countryId=country, industryId=industry, quality=quality, ajaxMarket=1,
|
|
|
|
|
orderBy="price_asc" if order_asc else "price_desc", _token=token)
|
|
|
|
|
orderBy="price_asc" if order_asc else "price_desc", _token=self.token)
|
|
|
|
|
return self.post("{}/economy/marketplaceAjax".format(self.url), data=data)
|
|
|
|
|
|
|
|
|
|
def post_economy_marketplace_actions(self, token: str, amount: int, buy: bool = False, **kwargs) -> Response:
|
|
|
|
|
def _post_economy_marketplace_actions(self, amount: int, buy: bool = False, **kwargs) -> Response:
|
|
|
|
|
if buy:
|
|
|
|
|
data = dict(_token=token, offerId=kwargs['offer'], amount=amount, orderBy="price_asc", currentPage=1,
|
|
|
|
|
data = dict(_token=self.token, offerId=kwargs['offer'], amount=amount, orderBy="price_asc", currentPage=1,
|
|
|
|
|
buyAction=1)
|
|
|
|
|
else:
|
|
|
|
|
data = dict(_token=token, countryId=kwargs["country"], price=kwargs["price"], industryId=kwargs["industry"],
|
|
|
|
|
quality=kwargs["quality"], amount=amount, sellAction='postOffer')
|
|
|
|
|
data = dict(_token=self.token, countryId=kwargs["country"], price=kwargs["price"],
|
|
|
|
|
industryId=kwargs["industry"], quality=kwargs["quality"], amount=amount, sellAction='postOffer')
|
|
|
|
|
return self.post("{}/economy/marketplaceActions".format(self.url), data=data)
|
|
|
|
|
|
|
|
|
|
def post_economy_resign(self, token: str) -> Response:
|
|
|
|
|
def _post_economy_resign(self) -> Response:
|
|
|
|
|
return self.post("{}/economy/resign".format(self.url),
|
|
|
|
|
headers={"Content-Type": "application/x-www-form-urlencoded"},
|
|
|
|
|
data={"_token": token, "action_type": "resign"})
|
|
|
|
|
data={"_token": self.token, "action_type": "resign"})
|
|
|
|
|
|
|
|
|
|
def post_economy_sell_company(self, token: str, factory: int, pin: int = None, sell: bool = True) -> Response:
|
|
|
|
|
def _post_economy_sell_company(self, factory: int, pin: int = None, sell: bool = True) -> Response:
|
|
|
|
|
url = "{}/economy/sell-company/{}".format(self.url, factory)
|
|
|
|
|
data = dict(_token=token, pin="" if pin is None else pin)
|
|
|
|
|
data = dict(_token=self.token, pin="" if pin is None else pin)
|
|
|
|
|
if sell:
|
|
|
|
|
data.update({"sell": "sell"})
|
|
|
|
|
else:
|
|
|
|
|
data.update({"dissolve": factory})
|
|
|
|
|
return self.post(url, data=data, headers={"Referer": url})
|
|
|
|
|
|
|
|
|
|
def post_economy_train(self, token: str, tg_ids: List[int]) -> Response:
|
|
|
|
|
def _post_economy_train(self, tg_ids: List[int]) -> Response:
|
|
|
|
|
data: Dict[str, Union[int, str]] = {}
|
|
|
|
|
if not tg_ids:
|
|
|
|
|
return self.get_training_grounds_json()
|
|
|
|
|
return self._get_training_grounds_json()
|
|
|
|
|
else:
|
|
|
|
|
for idx, tg_id in enumerate(tg_ids):
|
|
|
|
|
data["grounds[%i][id]" % idx] = tg_id
|
|
|
|
|
data["grounds[%i][train]" % idx] = 1
|
|
|
|
|
if data:
|
|
|
|
|
data['_token'] = token
|
|
|
|
|
data['_token'] = self.token
|
|
|
|
|
return self.post("{}/economy/train".format(self.url), data=data)
|
|
|
|
|
|
|
|
|
|
def post_economy_upgrade_company(self, token: str, factory: int, level: int, pin: str = None) -> Response:
|
|
|
|
|
data = dict(_token=token, type="upgrade", companyId=factory, level=level, pin="" if pin is None else pin)
|
|
|
|
|
def _post_economy_upgrade_company(self, factory: int, level: int, pin: str = None) -> Response:
|
|
|
|
|
data = dict(_token=self.token, type="upgrade", companyId=factory, level=level, pin="" if pin is None else pin)
|
|
|
|
|
return self.post("{}/economy/upgrade-company".format(self.url), data=data)
|
|
|
|
|
|
|
|
|
|
def post_economy_work(self, token: str, action_type: str, wam: List[int] = None, employ: Dict[int, int] = None):
|
|
|
|
|
def _post_economy_work(self, action_type: str, wam: List[int] = None, employ: Dict[int, int] = None) -> Response:
|
|
|
|
|
"""
|
|
|
|
|
:return: requests.Response or None
|
|
|
|
|
"""
|
|
|
|
@ -688,163 +707,167 @@ class CitizenAPI:
|
|
|
|
|
employ = dict()
|
|
|
|
|
if wam is None:
|
|
|
|
|
wam = []
|
|
|
|
|
data: Dict[str, Union[int, str]] = dict(action_type=action_type, _token=token)
|
|
|
|
|
if action_type == "work":
|
|
|
|
|
return self.post("{}/economy/work".format(self.url), data=data)
|
|
|
|
|
elif action_type == "production":
|
|
|
|
|
data: Dict[str, Union[int, str]] = dict(action_type=action_type, _token=self.token)
|
|
|
|
|
if action_type == "production":
|
|
|
|
|
max_idx = 0
|
|
|
|
|
for idx, company_id in enumerate(sorted(wam or [])):
|
|
|
|
|
for company_id in sorted(wam or []):
|
|
|
|
|
data.update({
|
|
|
|
|
"companies[%i][id]" % idx: company_id,
|
|
|
|
|
"companies[%i][employee_works]" % idx: employ.pop(company_id, 0),
|
|
|
|
|
"companies[%i][own_work]" % idx: 1
|
|
|
|
|
"companies[%i][id]" % max_idx: company_id,
|
|
|
|
|
"companies[%i][employee_works]" % max_idx: employ.pop(company_id, 0),
|
|
|
|
|
"companies[%i][own_work]" % max_idx: 1
|
|
|
|
|
})
|
|
|
|
|
max_idx = idx + 1
|
|
|
|
|
for idx, company_id in enumerate(sorted(employ or [])):
|
|
|
|
|
idx_ = idx + max_idx
|
|
|
|
|
max_idx += 1
|
|
|
|
|
for company_id in sorted(employ or []):
|
|
|
|
|
data.update({
|
|
|
|
|
"companies[%i][id]" % idx_: company_id,
|
|
|
|
|
"companies[%i][employee_works]" % idx_: employ.pop(company_id),
|
|
|
|
|
"companies[%i][own_work]" % idx_: 0
|
|
|
|
|
"companies[%i][id]" % max_idx: company_id,
|
|
|
|
|
"companies[%i][employee_works]" % max_idx: employ.pop(company_id),
|
|
|
|
|
"companies[%i][own_work]" % max_idx: 0
|
|
|
|
|
})
|
|
|
|
|
return self.post("{}/economy/work".format(self.url), data=data)
|
|
|
|
|
else:
|
|
|
|
|
return
|
|
|
|
|
max_idx += 1
|
|
|
|
|
return self.post("{}/economy/work".format(self.url), data=data)
|
|
|
|
|
|
|
|
|
|
def post_economy_work_overtime(self, token: str) -> Response:
|
|
|
|
|
data = dict(action_type="workOvertime", _token=token)
|
|
|
|
|
def _post_economy_work_overtime(self) -> Response:
|
|
|
|
|
data = dict(action_type="workOvertime", _token=self.token)
|
|
|
|
|
return self.post("{}/economy/workOvertime".format(self.url), data=data)
|
|
|
|
|
|
|
|
|
|
def post_forgot_password(self, token: str, email: str) -> Response:
|
|
|
|
|
data = dict(_token=token, email=email, commit="Reset password")
|
|
|
|
|
def _post_forgot_password(self, email: str) -> Response:
|
|
|
|
|
data = dict(_token=self.token, email=email, commit="Reset password")
|
|
|
|
|
return self.post("{}/forgot-password".format(self.url), data=data)
|
|
|
|
|
|
|
|
|
|
def post_fight_activate_booster(self, token: str, battle: int, quality: int, duration: int, kind: str) -> Response:
|
|
|
|
|
data = dict(type=kind, quality=quality, duration=duration, battleId=battle, _token=token)
|
|
|
|
|
def _post_fight_activate_booster(self, battle: int, quality: int, duration: int, kind: str) -> Response:
|
|
|
|
|
data = dict(type=kind, quality=quality, duration=duration, battleId=battle, _token=self.token)
|
|
|
|
|
return self.post("{}/military/fight-activateBooster".format(self.url), data=data)
|
|
|
|
|
|
|
|
|
|
def post_login(self, token: str, email: str, password: str) -> Response:
|
|
|
|
|
data = dict(csrf_token=token, citizen_email=email, citizen_password=password, remember='on')
|
|
|
|
|
def _post_login(self, email: str, password: str) -> Response:
|
|
|
|
|
data = dict(csrf_token=self.token, citizen_email=email, citizen_password=password, remember='on')
|
|
|
|
|
return self.post("{}/login".format(self.url), data=data)
|
|
|
|
|
|
|
|
|
|
def post_messages_alert(self, token: str, notification_ids: list) -> Response:
|
|
|
|
|
data = {"_token": token, "delete_alerts[]": notification_ids, "deleteAllAlerts": "1", "delete": "Delete"}
|
|
|
|
|
def _post_messages_alert(self, notification_ids: List[int]) -> Response:
|
|
|
|
|
data = {"_token": self.token, "delete_alerts[]": notification_ids, "deleteAllAlerts": "1", "delete": "Delete"}
|
|
|
|
|
return self.post("{}/main/messages-alerts/1".format(self.url), data=data)
|
|
|
|
|
|
|
|
|
|
def post_messages_compose(self, token: str, subject: str, body: str, citizens: List[int]) -> Response:
|
|
|
|
|
def _post_messages_compose(self, subject: str, body: str, citizens: List[int]) -> Response:
|
|
|
|
|
url_pk = 0 if len(citizens) > 1 else str(citizens[0])
|
|
|
|
|
data = dict(citizen_name=",".join([str(x) for x in citizens]),
|
|
|
|
|
citizen_subject=subject, _token=token, citizen_message=body)
|
|
|
|
|
citizen_subject=subject, _token=self.token, citizen_message=body)
|
|
|
|
|
return self.post("{}/main/messages-compose/{}}".format(self.url, url_pk), data=data)
|
|
|
|
|
|
|
|
|
|
def post_military_battle_console(self, token: str, battle_id: int, round_id: int, division: int) -> Response:
|
|
|
|
|
data = dict(battleId=battle_id, zoneId=round_id, action="battleStatistics", round=round_id, division=division,
|
|
|
|
|
type="damage", leftPage=1, rightPage=1, _token=token)
|
|
|
|
|
return self.post("{}/military/battle-console".format(self.url, battle_id), data=data)
|
|
|
|
|
def _post_military_battle_console(self, battle_id: int, action: str, page: int = 1, **kwargs) -> Response:
|
|
|
|
|
data = dict(battleId=battle_id, action=action, _token=self.token)
|
|
|
|
|
if action == "battleStatistics":
|
|
|
|
|
data.update(round=kwargs["round_id"], zoneId=kwargs["round_id"], leftPage=page, rightPage=page,
|
|
|
|
|
division=kwargs["division"], type=kwargs.get("type", 'damage'),)
|
|
|
|
|
elif action == "warList":
|
|
|
|
|
data.update(page=page)
|
|
|
|
|
return self.post("{}/military/battle-console".format(self.url), data=data)
|
|
|
|
|
|
|
|
|
|
def post_military_fight_air(self, token: str, battle_id: int, side_id: int) -> Response:
|
|
|
|
|
data = dict(sideId=side_id, battleId=battle_id, _token=token)
|
|
|
|
|
def _post_military_deploy_bomb(self, battle_id: int, bomb_id: int) -> Response:
|
|
|
|
|
data = dict(battleId=battle_id, bombId=bomb_id, _token=self.token)
|
|
|
|
|
return self.post("{}/military/deploy-bomb".format(self.url), data=data)
|
|
|
|
|
|
|
|
|
|
def _post_military_fight_air(self, battle_id: int, side_id: int) -> Response:
|
|
|
|
|
data = dict(sideId=side_id, battleId=battle_id, _token=self.token)
|
|
|
|
|
return self.post("{}/military/fight-shoooot/{}".format(self.url, battle_id), data=data)
|
|
|
|
|
|
|
|
|
|
def post_military_fight_ground(self, token: str, battle_id: int, side_id: int) -> Response:
|
|
|
|
|
data = dict(sideId=side_id, battleId=battle_id, _token=token)
|
|
|
|
|
def _post_military_fight_ground(self, battle_id: int, side_id: int) -> Response:
|
|
|
|
|
data = dict(sideId=side_id, battleId=battle_id, _token=self.token)
|
|
|
|
|
return self.post("{}/military/fight-shooot/{}".format(self.url, battle_id), data=data)
|
|
|
|
|
|
|
|
|
|
def post_military_group_missions(self, token: str) -> Response:
|
|
|
|
|
data = dict(action="check", _token=token)
|
|
|
|
|
def _post_military_group_missions(self) -> Response:
|
|
|
|
|
data = dict(action="check", _token=self.token)
|
|
|
|
|
return self.post("{}/military/group-missions".format(self.url), data=data)
|
|
|
|
|
|
|
|
|
|
def post_travel(self, token: str, check: str, **kwargs) -> Response:
|
|
|
|
|
data = dict(_token=token, check=check, **kwargs)
|
|
|
|
|
def _post_travel(self, check: str, **kwargs) -> Response:
|
|
|
|
|
data = dict(_token=self.token, check=check, **kwargs)
|
|
|
|
|
return self.post("{}/main/travel".format(self.url), data=data)
|
|
|
|
|
|
|
|
|
|
def post_travel_data(self, token: str, **kwargs) -> Response:
|
|
|
|
|
return self.post("{}/main/travelData".format(self.url), data=dict(_token=token, **kwargs))
|
|
|
|
|
def _post_travel_data(self, **kwargs) -> Response:
|
|
|
|
|
return self.post("{}/main/travelData".format(self.url), data=dict(_token=self.token, **kwargs))
|
|
|
|
|
|
|
|
|
|
def post_wars_attack_region(self, token: str, war: int, region: int) -> Response:
|
|
|
|
|
data = dict(_token=token)
|
|
|
|
|
return self.post("{}/wars/attack-region/{}/{}".format(self.url, war, region), data=data)
|
|
|
|
|
def _post_wars_attack_region(self, war_id: int, region_id: int, region_name: str) -> Response:
|
|
|
|
|
data = {'_token': self.token, 'warId': war_id, 'regionName': region_name, 'regionNameConfirm': region_name}
|
|
|
|
|
return self.post('{}/wars/attack-region/{}/{}'.format(self.url, war_id, region_id), data=data)
|
|
|
|
|
|
|
|
|
|
def post_weekly_challenge_reward(self, token: str, reward_id: int) -> Response:
|
|
|
|
|
data = dict(_token=token, rewardId=reward_id)
|
|
|
|
|
def _post_weekly_challenge_reward(self, reward_id: int) -> Response:
|
|
|
|
|
data = dict(_token=self.token, rewardId=reward_id)
|
|
|
|
|
return self.post("{}/main/weekly-challenge-collect-reward".format(self.url), data=data)
|
|
|
|
|
|
|
|
|
|
def post_write_article(self, token: str, title: str, content: str, location: int, kind: int) -> Response:
|
|
|
|
|
data = dict(_token=token, article_name=title, article_body=content, article_location=location,
|
|
|
|
|
def _post_write_article(self, title: str, content: str, location: int, kind: int) -> Response:
|
|
|
|
|
data = dict(_token=self.token, article_name=title, article_body=content, article_location=location,
|
|
|
|
|
article_category=kind)
|
|
|
|
|
return self.post("{}/main/write-article".format(self.url), data=data)
|
|
|
|
|
|
|
|
|
|
# Wall Posts
|
|
|
|
|
# ## Country
|
|
|
|
|
|
|
|
|
|
def post_country_comment_retrieve(self, token: str, post_id: int):
|
|
|
|
|
data = {"_token": token, "postId": post_id}
|
|
|
|
|
def _post_country_comment_retrieve(self, post_id: int) -> Response:
|
|
|
|
|
data = {"_token": self.token, "postId": post_id}
|
|
|
|
|
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}
|
|
|
|
|
def _post_country_comment_create(self, post_id: int, comment_message: str) -> Response:
|
|
|
|
|
data = {"_token": self.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):
|
|
|
|
|
data = {"_token": token, "post_message": body, "post_as": post_as}
|
|
|
|
|
def _post_country_post_create(self, body: str, post_as: int) -> Response:
|
|
|
|
|
data = {"_token": self.token, "post_message": body, "post_as": post_as}
|
|
|
|
|
return self.post("{}/main/country-post/create/json".format(self.url), data=data)
|
|
|
|
|
|
|
|
|
|
def post_country_post_retrieve(self, token: str):
|
|
|
|
|
data = {"_token": token, "page": 1, "switchedFrom": False}
|
|
|
|
|
def _post_country_post_retrieve(self) -> Response:
|
|
|
|
|
data = {"_token": self.token, "page": 1, "switchedFrom": False}
|
|
|
|
|
return self.post("{}/main/country-post/retrieve/json".format(self.url), data=data)
|
|
|
|
|
|
|
|
|
|
# ## Military Unit
|
|
|
|
|
|
|
|
|
|
def post_military_unit_comment_retrieve(self, token: str, post_id: int):
|
|
|
|
|
data = {"_token": token, "postId": post_id}
|
|
|
|
|
def _post_military_unit_comment_retrieve(self, post_id: int) -> Response:
|
|
|
|
|
data = {"_token": self.token, "postId": post_id}
|
|
|
|
|
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}
|
|
|
|
|
def _post_military_unit_comment_create(self, post_id: int, comment_message: str) -> Response:
|
|
|
|
|
data = {"_token": self.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):
|
|
|
|
|
data = {"_token": token, "post_message": body, "post_as": post_as}
|
|
|
|
|
def _post_military_unit_post_create(self, body: str, post_as: int) -> Response:
|
|
|
|
|
data = {"_token": self.token, "post_message": body, "post_as": post_as}
|
|
|
|
|
return self.post("{}/main/military-unit-post/create/json".format(self.url), data=data)
|
|
|
|
|
|
|
|
|
|
def post_military_unit_post_retrieve(self, token: str):
|
|
|
|
|
data = {"_token": token, "page": 1, "switchedFrom": False}
|
|
|
|
|
def _post_military_unit_post_retrieve(self) -> Response:
|
|
|
|
|
data = {"_token": self.token, "page": 1, "switchedFrom": False}
|
|
|
|
|
return self.post("{}/main/military-unit-post/retrieve/json".format(self.url), data=data)
|
|
|
|
|
|
|
|
|
|
# ## Party
|
|
|
|
|
|
|
|
|
|
def post_party_comment_retrieve(self, token: str, post_id: int):
|
|
|
|
|
data = {"_token": token, "postId": post_id}
|
|
|
|
|
def _post_party_comment_retrieve(self, post_id: int) -> Response:
|
|
|
|
|
data = {"_token": self.token, "postId": post_id}
|
|
|
|
|
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}
|
|
|
|
|
def _post_party_comment_create(self, post_id: int, comment_message: str) -> Response:
|
|
|
|
|
data = {"_token": self.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):
|
|
|
|
|
data = {"_token": token, "post_message": body}
|
|
|
|
|
def _post_party_post_create(self, body: str) -> Response:
|
|
|
|
|
data = {"_token": self.token, "post_message": body}
|
|
|
|
|
return self.post("{}/main/party-post/create/json".format(self.url), data=data)
|
|
|
|
|
|
|
|
|
|
def post_party_post_retrieve(self, token: str):
|
|
|
|
|
data = {"_token": token, "page": 1, "switchedFrom": False}
|
|
|
|
|
def _post_party_post_retrieve(self) -> Response:
|
|
|
|
|
data = {"_token": self.token, "page": 1, "switchedFrom": False}
|
|
|
|
|
return self.post("{}/main/party-post/retrieve/json".format(self.url), data=data)
|
|
|
|
|
|
|
|
|
|
# ## Friend's Wall
|
|
|
|
|
|
|
|
|
|
def post_wall_comment_retrieve(self, token: str, post_id: int):
|
|
|
|
|
data = {"_token": token, "postId": post_id}
|
|
|
|
|
def _post_wall_comment_retrieve(self, post_id: int) -> Response:
|
|
|
|
|
data = {"_token": self.token, "postId": post_id}
|
|
|
|
|
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}
|
|
|
|
|
def _post_wall_comment_create(self, post_id: int, comment_message: str) -> Response:
|
|
|
|
|
data = {"_token": self.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):
|
|
|
|
|
data = {"_token": token, "post_message": body}
|
|
|
|
|
def _post_wall_post_create(self, body: str) -> Response:
|
|
|
|
|
data = {"_token": self.token, "post_message": body}
|
|
|
|
|
return self.post("{}/main/wall-post/create/json".format(self.url), data=data)
|
|
|
|
|
|
|
|
|
|
def post_wall_post_retrieve(self, token: str):
|
|
|
|
|
data = {"_token": token, "page": 1, "switchedFrom": False}
|
|
|
|
|
def _post_wall_post_retrieve(self) -> Response:
|
|
|
|
|
data = {"_token": self.token, "page": 1, "switchedFrom": False}
|
|
|
|
|
return self.post("{}/main/wall-post/retrieve/json".format(self.url), data=data)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -938,7 +961,7 @@ class MyJSONEncoder(JSONEncoder):
|
|
|
|
|
return dict(__type__='timedelta', days=o.days, seconds=o.seconds,
|
|
|
|
|
microseconds=o.microseconds, total_seconds=o.total_seconds())
|
|
|
|
|
elif isinstance(o, Response):
|
|
|
|
|
return dict(_content=o._content.decode("UTF-8"), headers=o.headers.__dict__, url=o.url, text=o.text)
|
|
|
|
|
return dict(headers=o.headers.__dict__, url=o.url, text=o.text)
|
|
|
|
|
elif hasattr(o, '__dict__'):
|
|
|
|
|
return o.__dict__
|
|
|
|
|
elif isinstance(o, deque):
|
|
|
|
@ -949,8 +972,8 @@ class MyJSONEncoder(JSONEncoder):
|
|
|
|
|
class BattleSide:
|
|
|
|
|
id: int
|
|
|
|
|
points: int
|
|
|
|
|
deployed: List[int] = list()
|
|
|
|
|
allies: List[int] = list()
|
|
|
|
|
deployed: List[int] = None
|
|
|
|
|
allies: List[int] = None
|
|
|
|
|
|
|
|
|
|
def __init__(self, country_id: int, points: int, allies: List[int], deployed: List[int]):
|
|
|
|
|
self.id = country_id
|
|
|
|
@ -962,8 +985,8 @@ class BattleSide:
|
|
|
|
|
class BattleDivision:
|
|
|
|
|
end: datetime.datetime
|
|
|
|
|
epic: bool
|
|
|
|
|
dom_pts: Dict[str, int] = dict()
|
|
|
|
|
wall: Dict[str, Union[int, float]] = dict()
|
|
|
|
|
dom_pts: Dict[str, int] = None
|
|
|
|
|
wall: Dict[str, Union[int, float]] = None
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
def div_end(self) -> bool:
|
|
|
|
@ -972,8 +995,8 @@ class BattleDivision:
|
|
|
|
|
def __init__(self, end: datetime.datetime, epic: bool, inv_pts: int, def_pts: int, wall_for: int, wall_dom: float):
|
|
|
|
|
self.end = end
|
|
|
|
|
self.epic = epic
|
|
|
|
|
self.dom_pts.update({"inv": inv_pts, "def": def_pts})
|
|
|
|
|
self.wall.update({"for": wall_for, "dom": wall_dom})
|
|
|
|
|
self.dom_pts = dict({"inv": inv_pts, "def": def_pts})
|
|
|
|
|
self.wall = dict({"for": wall_for, "dom": wall_dom})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Battle(object):
|
|
|
|
@ -985,13 +1008,13 @@ class Battle(object):
|
|
|
|
|
start: datetime.datetime = None
|
|
|
|
|
invader: BattleSide = None
|
|
|
|
|
defender: BattleSide = None
|
|
|
|
|
div: Dict[int, BattleDivision] = dict()
|
|
|
|
|
div: Dict[int, BattleDivision] = None
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
def is_air(self) -> bool:
|
|
|
|
|
return not bool(self.zone_id % 4)
|
|
|
|
|
|
|
|
|
|
def __init__(self, battle: dict):
|
|
|
|
|
def __init__(self, battle: Dict[str, Any]):
|
|
|
|
|
self.id = int(battle.get('id', 0))
|
|
|
|
|
self.war_id = int(battle.get('war_id', 0))
|
|
|
|
|
self.zone_id = int(battle.get('zone_id', 0))
|
|
|
|
@ -1008,6 +1031,7 @@ class Battle(object):
|
|
|
|
|
[row.get('id') for row in battle.get('def', {}).get('ally_list')],
|
|
|
|
|
[row.get('id') for row in battle.get('def', {}).get('ally_list') if row['deployed']])
|
|
|
|
|
|
|
|
|
|
self.div = {}
|
|
|
|
|
for div, data in battle.get('div', {}).items():
|
|
|
|
|
div = int(div)
|
|
|
|
|
if data.get('end'):
|