2021-08-26 10:34:29 +03:00

67 lines
2.8 KiB
Python

import datetime
from operator import itemgetter
from typing import Union, Dict, Any, Generator, Tuple, List
from dbot.constants import UTF_FLAG
def timestamp_to_datetime(timestamp: int) -> datetime.datetime:
return datetime.datetime.fromtimestamp(timestamp)
def timestamp() -> int:
return int(datetime.datetime.now().timestamp())
def s_to_human(seconds: Union[int, float]) -> str:
seconds = int(seconds)
h = seconds // 3600
m = (seconds - (h * 3600)) // 60
s = seconds % 60
return f"{h:01d}:{m:02d}:{s:02d}"
def check_battles(battle_json: Dict[str, Dict[str, Any]]) -> Generator[Tuple[str, int, Dict[str, Union[str, List[str], int, Dict[str, Union[str, int]]]]], None, None]:
for battle in sorted(battle_json.values(), key=itemgetter("start")):
if battle["start"] > timestamp():
continue
region_name = battle["region"]["name"]
invader_flag = UTF_FLAG[battle["inv"]["id"]]
defender_flag = UTF_FLAG[battle["def"]["id"]]
for div in battle["div"].values():
if div['end']:
continue
division = div['div']
dom = div["wall"]["dom"]
epic = div["epic"]
division_meta_data = dict(
region=region_name,
round_time=s_to_human(timestamp() - battle["start"]),
round_time_s=int(timestamp() - battle["start"]),
sides=[],
url=f"https://www.erepublik.com/en/military/battlefield/{battle['id']}",
zone_id=battle["zone_id"],
div_id=div['id'],
extra={}
)
if dom == 50:
division_meta_data.update(sides=[invader_flag, defender_flag])
yield 'empty', division, division_meta_data
division_meta_data['sides'].clear()
if dom == 100:
division_meta_data.update(sides=[invader_flag if battle["def"]["id"] == div["wall"]["for"] else defender_flag])
yield 'empty', division, division_meta_data
division_meta_data['sides'].clear()
if epic > 1:
division_meta_data.update(sides=[invader_flag, defender_flag])
division_meta_data['extra'].update(intensity_scale=div['intensity_scale'],
epic_type=epic)
yield 'epic', division, division_meta_data
division_meta_data['sides'].clear()
division_meta_data['extra'].clear()
if dom >= 66.8:
division_meta_data.update(sides=[invader_flag if battle["def"]["id"] == div["wall"]["for"] else defender_flag])
yield 'steal', division, division_meta_data
division_meta_data['sides'].clear()
return