Example updates

This commit is contained in:
Eriks K 2020-05-14 14:54:25 +03:00
parent 5712007e3f
commit ff2a0e02dc
3 changed files with 73 additions and 67 deletions

View File

@ -5,7 +5,7 @@
__author__ = """Eriks Karls""" __author__ = """Eriks Karls"""
__email__ = 'eriks@72.lv' __email__ = 'eriks@72.lv'
__version__ = '0.20.0' __version__ = '0.20.0'
__commit_id__ = "f64a9dc" __commit_id__ = "5712007"
from erepublik import classes, utils from erepublik import classes, utils
from erepublik.citizen import Citizen from erepublik.citizen import Citizen

View File

@ -9,7 +9,8 @@ CONFIG = {
'interactive': True, 'interactive': True,
'fight': True, 'fight': True,
'debug': True, 'debug': True,
'start_battles': { 'battle_launcher': {
# War id: {auto_attack: bool (attack asap when region is available), regions: [region_ids allowed to attack]}
121672: {"auto_attack": False, "regions": [661]}, 121672: {"auto_attack": False, "regions": [661]},
125530: {"auto_attack": False, "regions": [259]}, 125530: {"auto_attack": False, "regions": [259]},
125226: {"auto_attack": True, "regions": [549]}, 125226: {"auto_attack": True, "regions": [549]},
@ -24,7 +25,7 @@ def _battle_launcher(player: Citizen):
time. If player is allowed to fight, do 100 hits on the first round in players division. time. If player is allowed to fight, do 100 hits on the first round in players division.
:param player: Logged in Citizen instance :param player: Logged in Citizen instance
":type player: Citizen :type player: Citizen
""" """
global CONFIG global CONFIG
finished_war_ids = {*[]} finished_war_ids = {*[]}
@ -38,13 +39,13 @@ def _battle_launcher(player: Citizen):
player.update_war_info() player.update_war_info()
running_wars = {b.war_id for b in player.all_battles.values()} running_wars = {b.war_id for b in player.all_battles.values()}
for war_id in war_ids - finished_war_ids - running_wars: for war_id in war_ids - finished_war_ids - running_wars:
war = war_data[str(war_id)] war = war_data[war_id]
war_regions = set(war.get('regions')) war_regions = set(war.get('regions'))
auto_attack = war.get('auto_attack') auto_attack = war.get('auto_attack')
status = player.get_war_status(war_id) status = player.get_war_status(war_id)
if status.get('ended', False): if status.get('ended', False):
CONFIG['start_battles'].pop(str(war_id), None) CONFIG['start_battles'].pop(war_id, None)
finished_war_ids.add(war_id) finished_war_ids.add(war_id)
continue continue
elif not status.get('can_attack'): elif not status.get('can_attack'):
@ -76,18 +77,19 @@ def _battle_launcher(player: Citizen):
else: else:
next_attack_time = utils.good_timedelta(next_attack_time, timedelta(minutes=5)) next_attack_time = utils.good_timedelta(next_attack_time, timedelta(minutes=5))
player.stop_threads.wait(utils.get_sleep_seconds(next_attack_time)) player.stop_threads.wait(utils.get_sleep_seconds(next_attack_time))
except: except Exception as e:
player.report_error("Task error: start_battles") player.report_error(f"Task battle launcher ran into error {e}")
# noinspection DuplicatedCode
def main(): def main():
player = Citizen(email=CONFIG['email'], password=CONFIG['password'], auto_login=False) player = Citizen(email=CONFIG['email'], password=CONFIG['password'], auto_login=False)
player.config.interactive = CONFIG['interactive'] player.config.interactive = CONFIG['interactive']
player.config.fight = CONFIG['fight'] player.config.fight = CONFIG['fight']
player.set_debug(CONFIG.get('debug', False)) player.set_debug(CONFIG.get('debug', False))
player.login() player.login()
if CONFIG.get('start_battles'): if CONFIG.get('battle_launcher'):
name = "{}-start_battles-{}".format(player.name, threading.active_count() - 1) name = "{}-battle_launcher-{}".format(player.name, threading.active_count() - 1)
state_thread = threading.Thread(target=_battle_launcher, args=(player,), name=name) state_thread = threading.Thread(target=_battle_launcher, args=(player,), name=name)
state_thread.start() state_thread.start()

View File

@ -10,6 +10,7 @@ CONFIG = {
} }
# noinspection DuplicatedCode
def main(): def main():
player = Citizen(email=CONFIG['email'], password=CONFIG['password'], auto_login=False) player = Citizen(email=CONFIG['email'], password=CONFIG['password'], auto_login=False)
player.config.interactive = CONFIG['interactive'] player.config.interactive = CONFIG['interactive']
@ -30,6 +31,7 @@ def main():
if player.config.wam: if player.config.wam:
tasks.update({'wam': now.replace(hour=14, minute=0)}) tasks.update({'wam': now.replace(hour=14, minute=0)})
while True: while True:
try:
player.update_all() player.update_all()
if tasks.get('work', dt_max) <= now: if tasks.get('work', dt_max) <= now:
player.write_log("Doing task: work") player.write_log("Doing task: work")
@ -51,7 +53,7 @@ def main():
if tasks.get('wam', dt_max) <= now: if tasks.get('wam', dt_max) <= now:
player.write_log("Doing task: Work as manager") player.write_log("Doing task: Work as manager")
success = player.work_wam() success = player.work_as_manager()
player.eat() player.eat()
if success: if success:
next_time = utils.good_timedelta(now.replace(hour=14, minute=0, second=0, microsecond=0), next_time = utils.good_timedelta(now.replace(hour=14, minute=0, second=0, microsecond=0),
@ -96,6 +98,8 @@ def main():
closest_next_time.strftime("%F %T"), sleep_seconds)) closest_next_time.strftime("%F %T"), sleep_seconds))
seconds_to_sleep = sleep_seconds if sleep_seconds > 0 else 0 seconds_to_sleep = sleep_seconds if sleep_seconds > 0 else 0
player.sleep(seconds_to_sleep) player.sleep(seconds_to_sleep)
except Exception as e:
player.report_error(f"Task main loop ran into error: {e}")
if __name__ == "__main__": if __name__ == "__main__":