From b44bb70b26298ff3d16ad42f388c3608988f2ddc Mon Sep 17 00:00:00 2001 From: zhl Date: Sun, 4 Oct 2026 23:16:31 +0800 Subject: [PATCH] feat: add mail claim automation --- assets/mail_claim.png | Bin 0 -> 8589 bytes assets/mail_title.png | Bin 0 -> 14357 bytes automation/mail.py | 32 ++++++++++++++++++++++++++++++++ claim_mail.py | 14 ++++++++++++++ workflows/mail_claim.json | 1 + 5 files changed, 47 insertions(+) create mode 100644 assets/mail_claim.png create mode 100644 assets/mail_title.png create mode 100644 automation/mail.py create mode 100644 claim_mail.py create mode 100644 workflows/mail_claim.json diff --git a/assets/mail_claim.png b/assets/mail_claim.png new file mode 100644 index 0000000000000000000000000000000000000000..4179193577f2663f0f291d3b9731c5a539bb49b3 GIT binary patch literal 8589 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≥z|;mTSaCcDD>>h1mY9bvGLOr@Trg+sLW~udzT;2>GjRjJ1QEB6SqiO*5U3P_7bnW2?KXyG+eA zA$Vx0Kb1;trIfW@*1o|XFljWKSFc`cG~i1>@^dw0DGAstdtrpuhLP z{{36r>~d4;Bxp36qod=sdOe}xUA_sjgU1$0uL$Yu?b)+uw_zj+r3a=C1df7mW_E6F ze$h)Z3>`dKAcW-expKLuuUv+H`z_<%)Bz|JhEc8FSeRdQ90wAgclG!?*!iH8+P0a? z=E~(#CX>-FVE00000NkvXXu0mjf52XBL literal 0 HcmV?d00001 diff --git a/assets/mail_title.png b/assets/mail_title.png new file mode 100644 index 0000000000000000000000000000000000000000..5811d767ca2c61e2704d97e5bafda918f79e4c38 GIT binary patch literal 14357 zcmV+wIO@lVP)002A)0ssI2F*IvV001}KNkl3;vQDO)ohA~bI{Gk+X6G9kcT!btL;CXn& z;C0Fv(OMh$so{ztjB%w(cw4)-?L$x(+=a@ZA*dcJfwn2*LTLq$!vmBNPAD}7tH6H@ z{}^K*r<5|v1s5WpPx9HJNQTkIHsc%~z;4L-%;Xti97e%7rHo*0oD0tQ=H~jN?|4L& z>VMk~g-l-N%kBr!$^&KQMxA|wnr=NxB&2!X>SG>$?-$SW_t9E8z@ix-M)MvP&M z27*&Y!yqtP?OeZ+7xL7JEnTGJQFQg{-u0WiqfxAt(b7<=p*>t3kX0*`?W*#~%^0E}POcKF}CRzzbXn+ddz zm4RubgeZ6bW>&+5Yr?2f5*C39cE7L=b4s@afCP_f*>l2xt0px1FrBOjG-x9 zFiKe%hFnBNo+(u#jPW2$xL^e|PoT%J9tk#9!17TBfGY&0OlxVum=H|~r<_B_EqLR; z;yf_8*Wg81bdEcY;xxb%+Zi$%-_S&<0`5VD)M!{X8Uzf$g%GV(S-`MitZvB(7k07i z;FQ+$*{sOR;dsa>o$Sw~gsIoCX3$N+07l?Z9>BaY${9?(F(weUDrlS`Mxc!0zJT4s zI5WmD7^H2CD%=Z*H(<53F;XJ%8DgX&IBcm(LTH@CT9)%P1N=gX)&Px$n4&BxrC|_J zN{d1=&IBW27%^boKGMS!3%s|HYu#asw%fSb4gbYW2n^ak2BgaULa$pBXffF9To zi0L#SEDK(UXAq3EQA!%6I0wixh}X)poaZGhAAnnl+u7K~lCsoF!hp5r0w$=;=LnG! zaTw*CWwQxB0HDAF5yWv>WLjD536meiv6N+*Wp)-hXN(6*m0Bv?C?*IZ&P86#0VQeZ zumIGA8vv&RtHNyrEn$IMu*o$SLBJEr10F&xJV?aIP$n$+A|9dun5KqsxB^uylFL2q+~)OJk&^gG3w3SusoJ(<$RjDcfUebO|^gH=S*5 zvVTxy1!V!CYGpe>4ZtM99^%p%*k6Pr+*84T=1>xpgP|Rc!9^xqaLyB4a&06$jFgjA zBhj#?2%3yhSr(S~t1?G0EJQY!StP(03{X4-5t3TFN2_ z!Z40;L5X0Y0QfdY@$esKJmQow1kVb}95ORP#DaxD5CwvY(p114Abzz-)&KxmM$J~x zY}fi~^`wPw65{%~U1qn6UCJ(xEnaQt8?OINuiG?sMRXK=kLBw^8g^#~w-yl995 zSk#nI1*>N}RRD||SO9MFEHAERvr6vk+uyR8+LWnZUwNllFv|I+jcQK#Wgh6J=icl)EOc|L@ zXTa$oyHMtZLTJ`fO56v)+!s;-OQU5`7G3c=I;_F&opdb?OZOjG+CFl82Mu4Jlgv z@UWf#qsD;sb!-SO1B;JRYmETPqF^EC$g{QAgeIdAvI?Am+y%RbT1H>%vMdUzG*EgJ z#86Cx-31E(droOn7NyZjX4A4P%e>gXe)Hzlt4f(uwk-ZS~^!*P50R^D3LYo<#ycn--X{m=B>-Sx}aO&Loa2O}!0fkNq#$%W~t&4P4 z6a^tBmq6KZ!BKb@bPxkF#TBhsNlOk9TQsv-LyEU59@4Bxv*Ti`HFc^Sr_ZTwd+X}p z#F8&+Nd{7nE(-U-)=7Ox2z%hWT5eFiVD&JSa1k{{onb7t)U0@?2X5cFomXvigh+r2 zTP?_Q6_?V6@ea^e`^^$;>NVE-(b=;JmGb(9oP_Hfp?7wbl@Uf#QTQv|%6 zPG&bR8zm_hT7eW{C!qo)L(e_<7-bBpGtA0x`_y>*JTdI}`7@UudvxRY@pw2aWiHDc zRYImLq*g{5na@)s2h`}mj+g=~CW0u8Kr(R<4dRl;bqyqR0K1C<`$`*#y#@6@+`nc& zR04sMH9R2l8Z|xeUFkTywZ#$XBFzA)7!wZ%TnHzOBA_c~&6Sva5tjNun7c@puF}jRdqH6f~y;##mA0ll{F{o_qea7r&*- zvY778Z(Wf^&KT%Z2xVI3Zutlmj4>g&QcN2ekJpp+ZOZ8B2QHp__@QuZl*@UxpCV6y zz0_ttFUrDcageKbylxnQ~92e0o;cJ@KALnUPxhwCS|hns6c z1P-Jdnz8V$={)U>4(HEJjt6)Pue$d^!gt#78pQ2%+L>urw6aty*X}5%26V3haK3q= zN)TJCIXAS_N*~U6K(&qo0V<86$UzGPy6@=Bo8B5G!2eELdbE z&>w6@lw~d@ijR!P8^;J^$@<#neW#=>_iyb7L68gtXu+^sX@bfL5rzQb#*q2E zEM{{qg7L9qTc=K6fB9R%a9pH^Dxb@eg1*ONa0S?v5O2ltAc#iBkmKjhG9j{AD&m2Z zI?q&+fYD+)EoA9288{BcXc&q(Mw3C!PkMTSRj|ES`jC4Y%2$DSGimOk1!pUjYKk^U zpQG_xY>05X`(UaK!^4}q>A^%wxqW;yh(pf!?#_Oe&Tn46I^0+*^Zdr;Yx!)}$aL*b zV@y7q4>reJr%t^7(&aMEf!PRy-Mzyk3Y1c10ahEZAuy_>qLd8BgUzi?uu^D!xOX_8 zrTf=z4%gR$IP`e_4&eB*_Hw}W<;mL>+~`(?RSOF>0{0&Cmw8q7zCxjS8Lb6048fR} zrC|E4H9#P;D>I)<3c6}mNKlgyYGheZMvtApFxkD89_)q5C@*qg)S+p=axf*K zX;rcyCWeP`G+1BfQA7ntjzSeVPz|k#EJ3f{bP7z$B1#01yL?q<#e9;6QK+>>lWq%q+bYln z=Hwnq1>!h`9*FyR{I(={75nMd7e0c3(gDv4q6*YQxCcR-GEbF>qCAtZj+|523oM9- zL9|9_Dx#4T2NG1<&_5AIl(8bu1X%1jpbl%4;GjPS12iR-+X*p6QG(T_HKQ~Ld6Ixy z$QzdHug|bm_v&5mjo$lOZ;C!1-R<#}AnsGY&VvnzJJi);QQ9q6MQfc+=eJ(HnjTJd zslXr*fHZk*W9^~yrwJkBVS+v(qDbe~sp8V5b07ZTJHmhiNo=h)xqN-+iU0RGtC*Yf-+b=zH=ldg+b;d;Z~Vc|jlD-6doT*c)$6;rc6alv91fEEPaPwK%L&!DlO&^!6-OT^0dwCMBnNTGp%- z_?bwRYU}7yy#(eE%Y1Nyb_5F6Mr4t-wmM|7dH+KW`|^M=CW{i>WRz7l+lQSt#|gnm z^y8RB2{;NZZe9!9cF4{Qy)f`aFut9v;$XQer&Rw{y7IPygm$-q6^5;{r^APLI%p6U z!7L}i2B5&a$|lqKG|gstF$jZcnoXyv;HUonhqLU-&p-S7fAlHT*FYunIjFYK zysCDuUO&8b5JY10^oe+wF!VcUl;-WvH=_8gGwG`RmLl-p8k#-le`#yf+*)!F>41I6 zXA+&cDyo4hzD7*5zHM;Ph-5SfFSzT~{fH0|4r14U4xuJZco0TOl&3{A3V>4Z6+y2; zk_Y)P11^@6hw{-~H(Mv!_AuM!%R(|J9eI1WPh;j!Esx zD~xV!@nI-_?0s(s1+Y|4e(`IwNt$e~zvq#Q+v}t4^^xH;65tPMx1jYL48YToYfz;f zW|U;pbmP?VjZ@nK-4C0ocbNPhVcazMr)NdnEL!2S&8k$GY++^1k}rKY-0j&Y;AB9u zdFcdwxGSqs!l=VgP_1}CDMubefZwH8DSU{N=P%+ck|LA)H+Qn>)EFH_p^+vpTy^Mb z1m+vykisyEK?&%vIjFTeAnu$QD<7ge;lYnW)GAEf2q_*vQX>V|yP6}ni+Zh{gWU2AY<&-!K7AiGsYfy>w~8@$1wYxedeiWq9{Cha{JWg znla{ZI{)<3&)zzi?Mp#Mh+FB>=(#vR%D>XO2(t{#s(_EYMU~` z_lffl!mM#VJ={Iq+mqkpW3wbe*NXwTt@-fn;(4NJM7eb@%dL?dHJ<45|J0>l?21-}-hb&*$E4ev>i*9YK8ueD02(?E!g?Ni6komb!()5hNx zEo(!pvo{yuH&d39Gm;Dg0$8k3n}7vRnb{;Ck0Nl4tw6kmHF}2D{@xwvUEugW5N|Q) zZKk{SjI3qNTFR{Wm5Ot>jt1ayfFAj9F)ySs_ zORxR2pZ>vfCyq($_D~hUc@hLvnVKFtiw#1<&{C?E(A(*H(>3T8nSEFvjgdU-@0As zeDU%BKD(0NeGP_Y4&tw0w;LcxPu8u0w0hBG2+GS1TZe4fo`=^Wx9@S>7B zo99IV{$KF`{pUf6()2<}JxdGl#`F69py_S*yYhC{(6StOQF7-K;Yph^@9 zc)Eo_6UxvUFD;7l```XBxD6BX+}B@mo-f4w{7-x+i2~m;XSDgydmdA`3ZMC#Z~oyQ zeI|~=Qt9t~`@4C>% zwAmByZo|hc)YMGsYf!?9Cs1+k>33qLhF6H_t=BXi+MN#q#io*~JorAkAJOmRlT$SQo7 z0;a>>E(p5fQe2-}UzY2}SC(#sPD}P|gwNVjr83>4uGOh|>e=kfk&Qh1;rBj%@$~Vx zJa8sPMan<^`#{N_3e5`(-WeDs%#vjEGRHAmPawLB6%*0TsF5Isa`~}6@1&LAPSNR$^y#3 zqa5J_g5h94l_pEcU=&6XCnPNL(z<95%GAQw+>J$QPnzWC0!Jn+u9)Oycu*}b*@(ck^!U;Cw> z8zs?4zVF??@v%SFM(^$&Dy7rBeD=jxKkyi+P$(rgZr=K>kNwHoXgD6mSFYXw7b|TP zA(QFcR;7&DpGAKY-AygA`txuIT6~jsC~Cy9!Lzr1sH;A z3Ed(%V)CNo1&h#65PTn`jaIOEC#Y87)~GPbwHJ#AA;*{|>qh_}1q7ym02s?WQBI?X z)q#R{iNbxJ+D#DccU7r>buKSq4(nbN#>S3ADGfv-#g(&a=LKWTQ(yesPd@hMpZLJr z-}UIl|M7nyI%{|TkaPB%pZxTR?F~XM0i$Bb!*9O$i~sP4X7h{~8da=0_|vX~0f-Q? zF&zBcU;GC%lrIgTQ6O&aAO69UpL^}{wd`;@+n;P~Z=%E9U8pMFFtDyY)gqMj^cL1dzGgX`k!3gxC^dyt+1xrOV}XEMqb;t7aA3%nu-Ge$zw2Rv zful%g5K_)XgG?!%&q@ee=QK{lY+BejAomU;8A$6=M_RR!T3P4>f?XgKUK^6m3P_7% zlLgpqPK{Q=nMLmfg*Q-L{b)6f0Xhd=P+?|VE7 z#7BSoiKqVh>;Lgz|H4D(PA$A?W8BRXpMLry?|=L0W1CrC0Eb=3-+AJ*PyWRh{^`$s zxPEkPefZwDU0NZb2Lb<{OO1A%5ORHg^2BGq4B(=)%5zw0bw?9)#9v1#wc3s3g~~E% ztmh5FFGz}+91hVX5^}$&`3(Ht@d=v=qs50*i{PovDM{jpa?q=0DM*|R)45<&>@7a) zX5B|i%nno~LZ~|cp5`DI1pzST?a8PmOq(Ut!WER1_|l0X&;C znB@&92sC`f%Zfkw!dK^Ds)Q^q zobhQopJHexWjq=TY@((m^Wc>w8lyWYOWtFUmllyR#OeWJ>eO_<>*I(cHy-)mklbZ(h@tTnDef%vJzO%ge z^QWG9?ebNWFP+nvl9~%XSRY2C1e_N8JlgLTtbP2t62Y_-m?R9D0=}~~<&eq-%wTXa z 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 P00000NkvXXu0mjf+f`wA literal 0 HcmV?d00001 diff --git a/automation/mail.py b/automation/mail.py new file mode 100644 index 0000000..01d8973 --- /dev/null +++ b/automation/mail.py @@ -0,0 +1,32 @@ +"""首页邮件红点触发的一键领取流程。""" +import time +from .engine import WorkflowError + + +class MailRunner: + def __init__(self, desktop, matcher, flow, region_provider, log=print, timeout=12): + self.desktop, self.matcher, self.flow = desktop, matcher, flow + self.region_provider, self.log, self.timeout = region_provider, log, timeout + + def wait(self, *names): + end=time.monotonic()+self.timeout; previous=None; stable=0 + while time.monotonic()=2:return found,shot,region,frame + time.sleep(.25) + raise WorkflowError('未识别到预期页面 '+ '/'.join(names)+',已停止。') + + def action(self,name,obs): + _,shot,region,_=obs + if self.region_provider(shot)!=region: raise WorkflowError('识别后游戏窗口移动,已停止,请重新运行。') + self.desktop.click(self.flow['clicks'][name],region,shot.size,hold=.8); self.log('已执行:'+name) + + def run(self,dry_run=False): + home=self.wait('home') + if dry_run:self.log('首页识别通过。计划:邮件红点 → 一键领取 → 返回首页。未点击。');return 'preview' + if not self.matcher.matches(home[3],self.flow['mail_dot']): self.log('邮件按钮没有红点,本次不进入。');return 'no_dot' + self.action('open_mail',home); page=self.wait('mail') + self.action('claim',page); reward=self.wait('reward'); self.action('dismiss_reward',reward) + self.action('close',self.wait('mail')); self.wait('home'); self.log('已确认返回首页。');return 'claimed' diff --git a/claim_mail.py b/claim_mail.py new file mode 100644 index 0000000..38683e4 --- /dev/null +++ b/claim_mail.py @@ -0,0 +1,14 @@ +import argparse, sys, time +from pathlib import Path +from automation.engine import Matcher,load_flow +from automation.mail import MailRunner +from automation.offers import MacGameDesktop +ROOT=Path(__file__).resolve().parent +def main(): + p=argparse.ArgumentParser(description='首页邮件:有红点时一键领取并返回首页');p.add_argument('--dry-run',action='store_true');a=p.parse_args() + if sys.platform!='darwin':return 2 + try: + d=MacGameDesktop();d.activate();print('3 秒后开始;请保持游戏在前台。',flush=True);time.sleep(3) + MailRunner(d,Matcher(ROOT/'assets'),load_flow(ROOT/'workflows/mail_claim.json'),d.region_for).run(a.dry_run);return 0 + except Exception as e:print('流程停止:'+str(e),file=sys.stderr);return 1 +if __name__=='__main__':raise SystemExit(main()) diff --git a/workflows/mail_claim.json b/workflows/mail_claim.json new file mode 100644 index 0000000..c0033ef --- /dev/null +++ b/workflows/mail_claim.json @@ -0,0 +1 @@ +{"name":"收取邮件","states":{"home":[{"template":"home.png","search":[150,730,410,865]}],"mail":[{"template":"mail_title.png","search":[130,80,440,200]},{"template":"mail_claim.png","search":[270,730,520,870]}],"reward":[{"template":"sword_gift_reward.png","search":[120,180,440,390],"threshold":0.8},{"template":"sword_gift_dismiss.png","search":[145,600,420,730]}]},"mail_dot":[{"template":"tasks_home_dot.png","search":[505,310,562,390]}],"clicks":{"open_mail":[0.93,0.35],"claim":[0.70,0.80],"dismiss_reward":[0.50,0.67],"close":[0.93,0.14]}}