1
0
mirror of https://gitee.com/sui-feng-cb/AzurLaneAutoScript1 synced 2026-03-09 18:39:04 +08:00
AzurLaneAutoScript/module/handler/login.py

147 lines
5.1 KiB
Python
Raw Normal View History

from datetime import datetime
2020-08-01 14:59:16 +08:00
2020-08-27 20:52:42 +08:00
import module.config.server as server
2020-08-01 14:59:16 +08:00
from module.base.timer import Timer
from module.combat.combat import Combat
from module.exception import GameTooManyClickError, GameStuckError, RequestHumanTakeover
2020-08-01 14:59:16 +08:00
from module.handler.assets import *
from module.logger import logger
from module.map.assets import *
from module.ui.assets import *
from module.ui.scroll import Scroll
from module.ui.ui import MAIN_CHECK
2020-08-01 14:59:16 +08:00
USER_AGREEMENT_SCROLL = Scroll(USER_AGREEMENT_SCROLL, color=(182, 189, 202), name='USER_AGREEMENT_SCROLL')
2020-08-01 14:59:16 +08:00
class LoginHandler(Combat):
2020-08-05 16:21:18 +08:00
def _handle_app_login(self):
"""
Pages:
in: Any page
out: page_main
"""
2020-08-01 14:59:16 +08:00
logger.hr('App login')
confirm_timer = Timer(1.5, count=4).start()
login_success = False
while 1:
self.device.screenshot()
if self.handle_get_items():
2020-08-01 14:59:16 +08:00
continue
if self.handle_get_ship():
continue
if self.handle_user_agreement():
continue
2020-08-01 14:59:16 +08:00
if self.appear_then_click(LOGIN_ANNOUNCE, offset=(30, 30), interval=5):
continue
if self.appear(EVENT_LIST_CHECK, offset=(30, 30), interval=5):
self.device.click(BACK_ARROW)
continue
if self.appear_then_click(MAINTENANCE_ANNOUNCE, offset=(30, 30), interval=5):
continue
2020-08-01 14:59:16 +08:00
if self.appear_then_click(LOGIN_GAME_UPDATE, offset=(30, 30), interval=5):
continue
if self.appear_then_click(LOGIN_RETURN_SIGN, offset=(30, 30), interval=5):
continue
if self.appear_then_click(LOGIN_RETURN_INFO, offset=(30, 30), interval=5):
continue
2020-08-27 20:52:42 +08:00
if server.server == 'cn':
if self.appear_then_click(LOGIN_CONFIRM, interval=5):
2020-08-27 20:52:42 +08:00
continue
2020-08-01 14:59:16 +08:00
if self.handle_popup_confirm('LOGIN'):
continue
2021-02-04 00:02:45 +08:00
if self.handle_guild_popup_cancel():
continue
if self.handle_urgent_commission():
2020-08-01 14:59:16 +08:00
continue
if self.appear_then_click(GOTO_MAIN, offset=(30, 30), interval=5):
continue
2020-08-27 20:52:42 +08:00
if self.appear_then_click(LOGIN_CHECK, interval=5):
2020-08-01 14:59:16 +08:00
if not login_success:
logger.info('Login success')
login_success = True
if self.appear(MAIN_CHECK):
if confirm_timer.reached():
logger.info('Login to main confirm')
break
else:
confirm_timer.reset()
self.config.start_time = datetime.now()
2020-08-01 14:59:16 +08:00
return True
2020-08-05 16:21:18 +08:00
def handle_app_login(self):
"""
Returns:
bool: If login success
Raises:
RequestHumanTakeover: If login failed more than 3
2020-08-05 16:21:18 +08:00
"""
for _ in range(3):
2020-08-29 17:40:51 +08:00
self.device.stuck_record_clear()
self.device.click_record_clear()
2020-08-05 16:21:18 +08:00
try:
self._handle_app_login()
return True
except (GameTooManyClickError, GameStuckError) as e:
2020-08-05 16:21:18 +08:00
logger.warning(e)
self.device.app_stop()
self.device.app_start()
continue
logger.critical('Login failed more than 3')
logger.critical('Azur Lane server may be under maintenance, or you may lost network connection')
raise RequestHumanTakeover
2020-08-05 16:21:18 +08:00
2020-08-01 14:59:16 +08:00
def app_restart(self):
logger.hr('App restart')
self.device.app_stop()
self.device.app_start()
self.handle_app_login()
# self.ensure_no_unfinished_campaign()
2021-09-25 00:51:51 +08:00
self.config.task_delay(server_update=True)
def ensure_no_unfinished_campaign(self, confirm_wait=3):
"""
Pages:
in: page_main
out: page_main
"""
2021-10-19 21:19:13 +08:00
def ensure_campaign_retreat():
if self.appear_then_click(WITHDRAW, offset=(30, 30), interval=5):
return True
if self.handle_popup_confirm('WITHDRAW'):
return True
def in_campaign():
return self.appear(CAMPAIGN_CHECK, offset=(30, 30)) \
or self.appear(CAMPAIGN_MENU_CHECK, offset=(30, 30)) \
or self.appear(EVENT_CHECK, offset=(30, 30)) \
or self.appear(SP_CHECK, offset=(30, 30))
self.ui_click(MAIN_GOTO_CAMPAIGN, check_button=in_campaign, additional=ensure_campaign_retreat,
confirm_wait=confirm_wait, skip_first_screenshot=True)
self.ui_goto_main()
def handle_user_agreement(self):
"""
For CN only.
CN client is bugged. User Agreement and Privacy Policy may popup again even you have agreed with it.
This method scrolls to the bottom and click AGREE.
Returns:
bool: If handled.
"""
if server.server == 'cn':
if self.appear(USER_AGREEMENT_CONFIRM, interval=2):
USER_AGREEMENT_SCROLL.set_bottom(main=self)
self.device.click(USER_AGREEMENT_CONFIRM)
return True
return False