From 87f392cabc5399ffe260f5c3a6758ad45260af4a Mon Sep 17 00:00:00 2001 From: 0O0o0oOoO00 <11174151+0O0o0oOoO00@users.noreply.github.com> Date: Tue, 16 Sep 2025 23:13:11 +0800 Subject: [PATCH] add: migrate detect others' login --- alas.py | 37 +++++++++++++++++++ assets/cn/device/my_OTHERS_LOGIN_CONFIRM.png | Bin 0 -> 9699 bytes assets/cn/device/my_OTHERS_LOGIN_NOTIFY.png | Bin 0 -> 7359 bytes config/template.json | 5 +++ module/config/argument/args.json | 14 +++++++ module/config/argument/argument.yaml | 9 ++++- module/config/argument/task.yaml | 1 + module/config/config.py | 18 +++++++++ module/config/config_generated.py | 5 +++ module/config/full_config_generated.py | 3 ++ module/config/i18n/en-US.json | 18 +++++++++ module/config/i18n/ja-JP.json | 18 +++++++++ module/config/i18n/zh-CN.json | 18 +++++++++ module/config/i18n/zh-TW.json | 18 +++++++++ module/device/device.py | 24 ++++++++++++ module/device/my_assets.py | 8 ++++ module/exception.py | 4 ++ 17 files changed, 199 insertions(+), 1 deletion(-) create mode 100644 assets/cn/device/my_OTHERS_LOGIN_CONFIRM.png create mode 100644 assets/cn/device/my_OTHERS_LOGIN_NOTIFY.png create mode 100644 module/device/my_assets.py diff --git a/alas.py b/alas.py index 7802c6a2e..b943eda7e 100644 --- a/alas.py +++ b/alas.py @@ -591,6 +591,7 @@ from module.scheduler_watcher import * from datetime import datetime, timedelta from module.counter import MaxCounter from typing import Dict +from module.device.my_assets import my_OTHERS_LOGIN_CONFIRM class FailedTaskCounter: @@ -745,6 +746,40 @@ class AzurLaneAutoScript(AzurLaneAutoScript): ) exit(1) + def delay_all_tasks(self): + target = datetime.now() + timedelta(minutes=self.config.others_login.interval) + + self.config.task_delay(target=target, task=self.config.task.command) + + for i in self.config.pending_task: + self.config.task_delay(target=target, task=i.command) + + for i in self.config.waiting_task: + if i.next_run < target: + self.config.task_delay(target=target, task=i.command) + + def handle_OthersLogin(self, e) -> bool: + logger.warning("Detected others' login") + self.delay_all_tasks() + + method = self.config.Optimization_WhenTaskQueueEmpty + if method == "goto_main": + self.config.Optimization_WhenTaskQueueEmpty = "stay_there" + logger.warning("You should never goto main when you need to delay tasks as others login, change to stay there instead.") + self.device.click(my_OTHERS_LOGIN_CONFIRM) + + if method == "stay_there": + self.device.click(my_OTHERS_LOGIN_CONFIRM) + if self.config.others_login.need_notify: + handle_notify( + self.config.Error_OnePushConfig, + title=f"Alas <{self.config_name}>: account's owner logs in", + content=f"Delay some tasks to {datetime.now() + timedelta(minutes=self.config.others_login.interval, seconds=-1)}", + ) + self.config.save() + self.config.update() + return True + def run(self, command, skip_first_screenshot=False): try: if not skip_first_screenshot: @@ -767,6 +802,8 @@ class AzurLaneAutoScript(AzurLaneAutoScript): return self.handle_ScriptError(e) except RequestHumanTakeover as e: return self.handle_RequestHumanTakeover(e) + except OthersLogin as e: + return self.handle_OthersLogin(e) except Exception as e: return self.handle_Exception(e) diff --git a/assets/cn/device/my_OTHERS_LOGIN_CONFIRM.png b/assets/cn/device/my_OTHERS_LOGIN_CONFIRM.png new file mode 100644 index 0000000000000000000000000000000000000000..2c3c3eff6632b0a60931e9756145a9975b372ce1 GIT binary patch literal 9699 zcmeHN`%_a_yWU&`tb$g*PgDf7wxx=KN+~xX-U?MPw4&TeuqetkTobMVr4?-jv=XpaxEB=bxIiRlpz%10zjX!ts zssVJR8Qi$9Y2P|~`78i5~Q!ofno zK+}A!dqxusz67+PaOQ;8PEGUf)=W*<=>h0MAv0L}pr)z2dvoY!nl>S^xpOvIVv`X! z501@4a#Ij&>ZVPNxGAMKZNvW`i!>j=TjKIR1KL0OrU`GUDx79lGQ>UvFrJ~;9g!c> znJpGahle&l&8~7MB>t7|`7%pwh~~`8>d@&>Cv)tOGWG)uTSW$d6I#8H8R%e-pdZD4 zU(CoLD9h~}FNgaFAT1ZH8DEKzL^P5eXS;XaM>Q;-BEFBWfdRlP&8ey2egE>MFkI#8 z2X6d2NXLpy2En;$b2~A7nVpESc}1oPjss^7Kr(Y;XH@Se^Hu_1WK^h5GXpV8cf9mP zeJS&L3F|v57x!2&Z~e81T9sb!EFS1oX#pqBLb@bVf5v;-n=)WZKo0M_6Hzfl83
%UlKH4*)9qGU_>KT@${-VHzY(6Z?VCi8mvG8J9Z4&dr0s-9 zh3mGu86D8k0;HNAANQLib$$EVDJQlo3iGHzzwh5<-i|?2GL=alBlq}&*AKacxK8jB z#G+&)^++2mX*plk-M%ROGh^&evjuTUo4<&uw9g zpEeOW%yo{NaBzaxB;NQ|aJX%9eAd%Ru5wZh`gUd*1DWp*L;h2+U773RcA<)I5o51w zwqTIto6->5GR3x4t{ygDW#}K;2^5|d%;gH?d$fQryZ?@m$Z@aw;Ft58&@}Mnv@hXW zrN382V(YyZI=C9z71nbl=o||Z6xlbgZMgW8z>%C?*iHfETEs;edHwIBAfA8 zn`g?@gwo{<^sC-Jk9>EIH`9VC6820-m^9RGz0+NFiD1iXb@3qC)JnUm*K!O-#HE9` zkWI{=EhB`k>9M*|rEIf)iBYj8lb^4lF&p2aJ_Ul~HYTf(R*V3%{rkzZ@`t8m+T@E= z`GX>987RAwykTx?&Dan`2;~cWKah(nv#QO$l$;PsJ$Ah0EAa2KemicOIwSh2i5;py zpu%%2WDD@w@s=R7b^UBi*j!&RnMp*Udtk|p#^xf2eiedntPjHiC1Vvsqv~2t(9rr_<%W#U3<1K|f#NlVc;j5Uk?uh#YB~PRvB^wQ?mPcDlFdHt2 zbZp%*=jLQ1_Rj>7FpJr?ymwkSJ=OD8s2^XwD0Ul{imgm&x_g1b&oy{_?5Z;{@C`T< zdN86XH{T8!FwdCtqYqn6!_+n4%PPHgn6vDv-`-y$nsBvsD3_f#K0F>+^u{Y=D6L96 z%RXtt;8Cx{J=Yb5i4>~ssmZ987(=49@aMOqp?&&3;eT=|KdFAe(2UE9W*KvMMUlb> z{V??wyw7$zNPsP;@y2xSXXjh#wVAnaKNZ!r zV|c29RZC@j*mp-K%R1s~wX^!q1c&tS$_L5D#NqTr<7gS5TbcUEQ75Jn7E&KApr2Id zoq*Y0+haC*+IzPatt>q%eM6poUHOHPhoF5{oDoPbr#OODS@DB}riij5k99RmXEGy#M>h}GTk&cJcC~m5a#RJugv<&)LMITE(Ao@vqi}{$WUDL@rVyw2Kx^_0E}Oos1+W zo}XND^B0bGSN0^N^T=b)>LQHyv()Wo`Kx5w^C$X1;fYWUm4(g9^48t;AGj%OrslCO zeZ6hZ-4Vq~P!+eL&OoVy!{&8dpj_Ofvd3Bkh-(%`b_rA0T?h(YWCtis zMQU*|ED6m$DOz@gGlrbWL5w;v{N62<;U3W;8dKKFud&&t6p5L4Ma4BF}AFE%(&-dF4>`(FA)zC!wn+xi*}PL zTwa7MJ)lg*jW3&{7(XeL;OrCWRCako%o+hrQuCNxGNZ9|SeIN$H|$zmOF(i~eQY=t z!UYESTAG3y3Sz5Pun%V#F6l3^b^N%*@}b$%K(7elePu0zxv<# ziPxL>Sm<;z2rFOz5xjPU$r%&&dcuy_bXPGc;`J2s_WjcEf0a06BX4l$oFH87DJ?vX zqQCkJ>D7}jc9~OYd8*Zc(AHYv-xVm|<-b~&@k6-3W}NUrAW9-$a`bVWo^8L9Zict; z7km^x-70xkZ^!k-&Nh#~xh;Z;VP^$La?@OqxleOMe5yfnf~WRGP-AU_cxM^h#n}hW zXxuj&-m1KDvo_hjYeLGS{z~Q}qpbwa^MJj#qOmfUYJS@VN)UOWZXCV3Fiq;~%DRRgLt9&XQwsf`=dnw}$bw+o?Yzz(4*La-zup+1 z(K!>oTwIJddk~R0>t=oY>D%sRfzDz*JHC3icnnF*mx*8OFrt)C;nvHe>71@+QFEu0 z>2?5+UxENnKYLGmkQX>cC8+7es=VB)<_m3(O3Ao2eMJ7Rak5KbSg1UzX=Noa8O_Xc zoa=o}#bTL5KT9a^s^lMIlp=I|wKT}1R0o)N1SzKWpT^8ansd(H=k7g^%85?Sa8;DO zE_95I!)t>uYmLa+unhxz@{z_`gPXwJtB=nF*aF;7weFoU{*@)NEI92e%^710x-WIfc0z5jW*$IC4ba;n+{ZP1NbD|s>)!>Di zt1IK5Do3sP(@NF|LaDqUo$Z&LsG{Mzk=_A{xJNa%iLFfwW|`Jjy#>Ra`lA7!hIbbB zYjg33d0JY)AfzDAG=G@Dd^aFL6h`Ir*DHUljejxCSQ(j_XKX90!%>R79l)_P8^Y4> z&%}yi_-r5w2d62+IXhbd=m%QKi2zWa4=v?l=CR`*8rU$$3zdq#-rPD`+(L|bNyFC( z7h}_t-cgV>1@1oFzM6J2vd9{hhN1Ve;0m&Rp&aFSQZ`XwX-Zso} z>_lN_R#E9KWAo|_Av*_7ULCpWu=Y`2l(`%~baUxJ^{WwHcZX5=C>WeT#upcb)3X+E zdK}}de>>t=`tps-MjwVwTN80mW*})-Bru3> zT5enW5S|Qe)2YP7DLi`$ahKh3*z2(5cm_L+PuQX3mvm!g87m>;FhE+oOc*v>1K!ha(aMU>g6Xs_%FM{W?> zUUW76t~|LOzTxl3VAs$RYJ;p00hX3BL=ul@T!VYzOMW#YQK@~TPy`H-$dFAPOYB*>8dO5iXlp!(XH ztZ#plE89I8i8zh0LPX)n>d-`PG932)s6}XAK10c{V_IX`RxofSg_5pB7r~Zdk`rd= z=`au}5-t;?<;aCT##-lY;TuU)&nQUsuM1QrW-KJxIgy!Q>#!9LYz~T6s{|O%pQF`Zb>Q@cwbw$zQ; z0YUjQ{05T+y+^_ui&(s~E$8&!KlgG3Z}g9eOQ(lkQ&1H>=ClsK8 zK1qQ}s=wKGx`q6gG8X3Y>>s&tQe*hyd>x{Pe&`ETVpavbHg9lGVxyC)N^ghvfeR`} zJslvpqeu%<3x61Q_XAfW#QmYioo?IFI7aKg=e=IDGn5>}VI^`)9==%9YuEpLCZj+$ y3%WKxs&5t$Y}Q$9)|70P-uxew8U2_q1+~Nn?eftE_iHumdhuKMg}QUWcmD&Iq{93F literal 0 HcmV?d00001 diff --git a/assets/cn/device/my_OTHERS_LOGIN_NOTIFY.png b/assets/cn/device/my_OTHERS_LOGIN_NOTIFY.png new file mode 100644 index 0000000000000000000000000000000000000000..2917e859f7972d6522b10073894a0c7a55ffced3 GIT binary patch literal 7359 zcmeHMeNa=`6@O8dpdfLjEiMRbYX^38Eh+>Q zp5OW1bI-XJ6>)IGdWZD@0BkrE8XOG(UqHh(Z>%gKA*4xSApy&XK6n6V5^R}-6pM@l zhmKl757p|-A5416{=@qLpt-<$CDHWjy7QqYGXP*yrs;)AlU>LFuqF6V@cyG@v{HgQ zSEi-)jAM4!^roHN^!&AhrZ>?p7*_J~*2cQuM*Z2M@y(4rw~jb^?PfnYKl#m9IUDS{ z&+C39fB(zyp{rJ}dS9Zl}f z{>J+PU_`23ct>ndHBBg=%9n?I$tyCF;#yIzFTk)#{;!$ESj?{7yQAgs5YprB5p1UH z#4>j)LK^SpqK~8Sn3rU;c?I)Q51-92U`&3|3d-t&T4+|iqsObUsxS|wUbD~ef=Wnt zW>sm01JAC9waiOCg5jCqiy*{2+No}dZQVjlH<2pWFc&madl%ptNW!ZgYX)D_h-udFWDw!AV-FTgpckXjJz0nShnk=-2m@hohubn(hJv{!|LH0-i*n{MO!I zhwE`EZ|J+@t4!+{_N^9wTfi`6!%LRv6KG)d!AkJ~hQK^rps;WZz z?%8v%bcUqpOG(vh_zO!KPnrHme*R5OHuj9D?VF!xNKFCmax&^~js}eUZXBhPzCw}~ z^^uln@`cCAHF#XoSZYRS4?8RfWf&RquWaKX##?G^tQkO{19X-%D#f;ps^t(c=Q$gx zxza}*R!_QBG^iXU4#OfY6(zyUyF^m;p&ginx#5X&Ow)k1NYFnb?NQ6gW87gP{;5ag zj(%O2A?<~-_g^-Fg#iJm43e;ax};h>(ZFJgJdT%v@tXZ`{4~z!m4jDtrP|TA#&SMC z-$$>!vOuY}jToHGQ;261Pf{;D{uQs|H_!qvtZq?#DQsx^RV(QX-cP#{%|xAI#T1kc z?MhN-g=MiiYj`W9=5EA|!MDp3sb>kyVmO@WnZ$qn4Ds&UIb4Y|t8?Gx$6SrbYsA<9 zrEmAXgl;mM>sakePMFAox1dS z?4-;OQ(nhphG|-%Z4wuVD59>Xa>0}=b*h9{TRP&8xpN0U2qN5VxrrorjVqYL8a>7) zIoIpL2fCyaETXUk&+?-z^rz4@)$KD?+w*9dt_z|H!>n4AqhGG4Jf`p`1QqcPqcGr1 z+v+{fIMG;+Y3QlA&C*n)KYT@t^v`-2qRqEOb584S)cN*hbZsF<77xdl)^fa+OzQxU-UPYpbx3FCH8(9T4zG1RFjUQ3UsGXW6HD!}f{TsnV3z6g@{&>gMcXTKUFRpGwvwut$j>*jtg5o=P#u)u_JX`tqfIsHCJM zO__ZO$**6o_ngHiXVq7yPr7Sx$x9HWi7lTL(UBOB*29BuS%Q|loP8O@=2-VmF&FO! z1xRQT0t!=q!r@HpWohMPACbj142_6RpTt6jmK{xB=06!?+x>TLDcF@SMu0lG{j)DlP5&Y-+ib-6`l?JE_M z_QfI*JeQ_*;x_n{th9DP*ZiRwt z=h4GJTEu&tt!_wrCrNbb@Qn__`#{`E&tK~u-7#}wwSc#JnEhA>&8 z4;4{`)AlvsRUIo13RJ`R^l8-Mco%4kmOb(SydGr}>xy~2Qxt!8jjOBAz|tsLf}~Lh z#^sAljxLL72!z)Cz+?jivjrfn_@lr{<*som?o#g%y|><;o1#C-IPN}+3y+xB!WzMR zEgD~9Va((RsFX_MRg$J;i+30!MRm8nt}jAQQ2X(tKP4_ zy3S)FSrKcmM4P){nfBvY-@$^GU#pqvt?ls=uPy1F+_?KBJFhjx&2{R5~jn)9t0oLX5YtBcT`b-Jtq2EUYHyud0{C5?{IOzZY literal 0 HcmV?d00001 diff --git a/config/template.json b/config/template.json index c8151a292..144389f7b 100644 --- a/config/template.json +++ b/config/template.json @@ -155,6 +155,11 @@ "MaxRetryTimes": 5, "Notify": false }, + "OthersLogin": { + "Enable": false, + "Interval": 180, + "Notify": true + }, "Storage": { "Storage": {} } diff --git a/module/config/argument/args.json b/module/config/argument/args.json index 86083894e..99e9bfb51 100644 --- a/module/config/argument/args.json +++ b/module/config/argument/args.json @@ -665,6 +665,20 @@ "value": false } }, + "OthersLogin": { + "Enable": { + "type": "checkbox", + "value": false + }, + "Interval": { + "type": "input", + "value": 180 + }, + "Notify": { + "type": "checkbox", + "value": true + } + }, "Storage": { "Storage": { "type": "storage", diff --git a/module/config/argument/argument.yaml b/module/config/argument/argument.yaml index 853147323..c200fe6d5 100644 --- a/module/config/argument/argument.yaml +++ b/module/config/argument/argument.yaml @@ -974,4 +974,11 @@ GuildCoin: Color: value: ^AAAAAA display: hide - Record: 2020-01-01 00:00:00 \ No newline at end of file + Record: 2020-01-01 00:00:00 + +# ==================== OthersLogin ==================== + +OthersLogin: + Enable: false + Interval: 180 + Notify: true \ No newline at end of file diff --git a/module/config/argument/task.yaml b/module/config/argument/task.yaml index d6aefb02d..643f49889 100644 --- a/module/config/argument/task.yaml +++ b/module/config/argument/task.yaml @@ -24,6 +24,7 @@ Alas: - SchedulerWatcher - GameRestart - InstanceRestart + - OthersLogin # ==================== Cheat ==================== diff --git a/module/config/config.py b/module/config/config.py index 320d2ce45..a398c33de 100644 --- a/module/config/config.py +++ b/module/config/config.py @@ -795,6 +795,15 @@ class MultiSetWrapper: from module.config.full_config import AzurLaneFullConfig from module.scheduler_watcher import AzurLaneSchedulerWatcher from module.log_res.log_res import LogRes +from cached_property import cached_property +from dataclasses import dataclass + + +@dataclass +class OthersLoginSetting: + enabled: bool + interval: int + need_notify: bool class AzurLaneConfig(AzurLaneConfig): @@ -812,3 +821,12 @@ class AzurLaneConfig(AzurLaneConfig): @property def log_res(self): return LogRes(self) + + @cached_property + def others_login(self): + full_config = self.full_config + return OthersLoginSetting( + enabled=full_config.Restart_OthersLogin_Enable, + interval=full_config.Restart_OthersLogin_Interval, + need_notify=full_config.Restart_OthersLogin_Notify, + ) diff --git a/module/config/config_generated.py b/module/config/config_generated.py index ed5a959df..a830a24c5 100644 --- a/module/config/config_generated.py +++ b/module/config/config_generated.py @@ -618,5 +618,10 @@ class GeneratedConfig: GuildCoin_Color = '^AAAAAA' GuildCoin_Record = datetime.datetime(2020, 1, 1, 0, 0) + # Group `OthersLogin` + OthersLogin_Enable = False + OthersLogin_Interval = 180 + OthersLogin_Notify = True + # Group `Storage` Storage_Storage = {} diff --git a/module/config/full_config_generated.py b/module/config/full_config_generated.py index 155ea7fce..de6951d5e 100644 --- a/module/config/full_config_generated.py +++ b/module/config/full_config_generated.py @@ -107,6 +107,9 @@ class FullGeneratedConfig: Restart_InstanceRestart_Enable = None Restart_InstanceRestart_MaxRetryTimes = None Restart_InstanceRestart_Notify = None + Restart_OthersLogin_Enable = None + Restart_OthersLogin_Interval = None + Restart_OthersLogin_Notify = None Restart_Storage_Storage = None # Task `PowerLimit` diff --git a/module/config/i18n/en-US.json b/module/config/i18n/en-US.json index 86c9c2065..ab55b91fb 100644 --- a/module/config/i18n/en-US.json +++ b/module/config/i18n/en-US.json @@ -3382,6 +3382,24 @@ "help": "GuildCoin.Record.help" } }, + "OthersLogin": { + "_info": { + "name": "OthersLogin._info.name", + "help": "OthersLogin._info.help" + }, + "Enable": { + "name": "OthersLogin.Enable.name", + "help": "OthersLogin.Enable.help" + }, + "Interval": { + "name": "OthersLogin.Interval.name", + "help": "OthersLogin.Interval.help" + }, + "Notify": { + "name": "OthersLogin.Notify.name", + "help": "OthersLogin.Notify.help" + } + }, "Storage": { "_info": { "name": "Task status", diff --git a/module/config/i18n/ja-JP.json b/module/config/i18n/ja-JP.json index eb00a9553..016423fb5 100644 --- a/module/config/i18n/ja-JP.json +++ b/module/config/i18n/ja-JP.json @@ -3382,6 +3382,24 @@ "help": "GuildCoin.Record.help" } }, + "OthersLogin": { + "_info": { + "name": "OthersLogin._info.name", + "help": "OthersLogin._info.help" + }, + "Enable": { + "name": "OthersLogin.Enable.name", + "help": "OthersLogin.Enable.help" + }, + "Interval": { + "name": "OthersLogin.Interval.name", + "help": "OthersLogin.Interval.help" + }, + "Notify": { + "name": "OthersLogin.Notify.name", + "help": "OthersLogin.Notify.help" + } + }, "Storage": { "_info": { "name": "Storage._info.name", diff --git a/module/config/i18n/zh-CN.json b/module/config/i18n/zh-CN.json index 488242b62..49a9856d3 100644 --- a/module/config/i18n/zh-CN.json +++ b/module/config/i18n/zh-CN.json @@ -3382,6 +3382,24 @@ "help": "GuildCoin.Record.help" } }, + "OthersLogin": { + "_info": { + "name": "顶号检测", + "help": "修改以下的配置后要重新启动Alas实例" + }, + "Enable": { + "name": "启用", + "help": "" + }, + "Interval": { + "name": "顶号后将任务推迟 X 分钟", + "help": "" + }, + "Notify": { + "name": "通知", + "help": "" + } + }, "Storage": { "_info": { "name": "任务状态", diff --git a/module/config/i18n/zh-TW.json b/module/config/i18n/zh-TW.json index 65403e11d..d95d9f940 100644 --- a/module/config/i18n/zh-TW.json +++ b/module/config/i18n/zh-TW.json @@ -3382,6 +3382,24 @@ "help": "GuildCoin.Record.help" } }, + "OthersLogin": { + "_info": { + "name": "OthersLogin._info.name", + "help": "OthersLogin._info.help" + }, + "Enable": { + "name": "OthersLogin.Enable.name", + "help": "OthersLogin.Enable.help" + }, + "Interval": { + "name": "OthersLogin.Interval.name", + "help": "OthersLogin.Interval.help" + }, + "Notify": { + "name": "OthersLogin.Notify.name", + "help": "OthersLogin.Notify.help" + } + }, "Storage": { "_info": { "name": "任務狀態", diff --git a/module/device/device.py b/module/device/device.py index 9e9402d58..0a119a450 100644 --- a/module/device/device.py +++ b/module/device/device.py @@ -333,3 +333,27 @@ class Device(Screenshot, Control, AppControl): super().app_stop() self.stuck_record_clear() self.click_record_clear() + + +from module.device.my_assets import * +from module.ocr.ocr import Ocr +from module.exception import OthersLogin + +OthersLoginNotifyOcr = Ocr(buttons=my_OTHERS_LOGIN_NOTIFY, lang="cnocr") +OTHERS_LOGIN_NOTIFY_SERVER = { + "cn": "登录", + "jp": "蜴所" +} + + +class Device(Device): + def screenshot(self): + img = super().screenshot() + + if self.config.others_login.enabled: + if my_OTHERS_LOGIN_CONFIRM.appear_on(img): + if self.config.SERVER in OTHERS_LOGIN_NOTIFY_SERVER.keys(): + if OthersLoginNotifyOcr.ocr(img) == OTHERS_LOGIN_NOTIFY_SERVER[self.config.SERVER]: + raise OthersLogin + + return img diff --git a/module/device/my_assets.py b/module/device/my_assets.py new file mode 100644 index 000000000..b147cd419 --- /dev/null +++ b/module/device/my_assets.py @@ -0,0 +1,8 @@ +from module.base.button import Button +from module.base.template import Template + +# This file was automatically generated by dev_tools/button_extract.py. +# Don't modify it manually. + +my_OTHERS_LOGIN_CONFIRM = Button(area={'cn': (561, 488, 721, 534), 'en': (561, 488, 721, 534), 'jp': (561, 488, 721, 534), 'tw': (561, 488, 721, 534)}, color={'cn': (100, 147, 205), 'en': (100, 147, 205), 'jp': (100, 147, 205), 'tw': (100, 147, 205)}, button={'cn': (561, 488, 721, 534), 'en': (561, 488, 721, 534), 'jp': (561, 488, 721, 534), 'tw': (561, 488, 721, 534)}, file={'cn': './assets/cn/device/my_OTHERS_LOGIN_CONFIRM.png', 'en': './assets/cn/device/my_OTHERS_LOGIN_CONFIRM.png', 'jp': './assets/cn/device/my_OTHERS_LOGIN_CONFIRM.png', 'tw': './assets/cn/device/my_OTHERS_LOGIN_CONFIRM.png'}) +my_OTHERS_LOGIN_NOTIFY = Button(area={'cn': (664, 330, 712, 360), 'en': (664, 330, 712, 360), 'jp': (664, 330, 712, 360), 'tw': (664, 330, 712, 360)}, color={'cn': (144, 149, 160), 'en': (144, 149, 160), 'jp': (144, 149, 160), 'tw': (144, 149, 160)}, button={'cn': (664, 330, 712, 360), 'en': (664, 330, 712, 360), 'jp': (664, 330, 712, 360), 'tw': (664, 330, 712, 360)}, file={'cn': './assets/cn/device/my_OTHERS_LOGIN_NOTIFY.png', 'en': './assets/cn/device/my_OTHERS_LOGIN_NOTIFY.png', 'jp': './assets/cn/device/my_OTHERS_LOGIN_NOTIFY.png', 'tw': './assets/cn/device/my_OTHERS_LOGIN_NOTIFY.png'}) diff --git a/module/exception.py b/module/exception.py index e0d3ecf39..c29c4981d 100644 --- a/module/exception.py +++ b/module/exception.py @@ -61,3 +61,7 @@ class RequestHumanTakeover(Exception): # Request human takeover # Alas is unable to handle such error, probably because of wrong settings. pass + + +class OthersLogin(Exception): + pass