From d7722c044e806ec71ebcca951f49d65267a12d7d Mon Sep 17 00:00:00 2001 From: RedDeadDepresso <94017243+RedDeadDepresso@users.noreply.github.com> Date: Wed, 3 Jan 2024 22:10:17 +0000 Subject: [PATCH] fix: momotalk --- assets/en/momotalk/CHATTING.png | Bin 0 -> 4924 bytes tasks/momotalk/assets/assets_momotalk.py | 11 ++++ tasks/momotalk/ui.py | 75 +++++++++++++---------- 3 files changed, 53 insertions(+), 33 deletions(-) create mode 100644 assets/en/momotalk/CHATTING.png diff --git a/assets/en/momotalk/CHATTING.png b/assets/en/momotalk/CHATTING.png new file mode 100644 index 0000000000000000000000000000000000000000..3908b0a4f84ccefcc887df67f8361c9ab750692c GIT binary patch literal 4924 zcmeHLdu$X%7@xLM5upYtlt7WqHc}wn+sEB)y9-CDz0y{C&}UkTK)1Vd?b5s3V|UA4 zn-m&A3=(TZ2@jD+P>}>sqiBF&TcZL-w4^o$p~Yemlvkn=g*4#oy?CT8gnzwFZg+OR z-+bTi`^`5q*;`jQFL%_42_paiqw@3Y#Q+RL&Df6NvFI^-@{2L(@su}jfd;_SV~k%6 z*t%^z0P&y7r4@RGqktC`w@HwcYH0Giy$B7!%uK&m5bL0hRl^$DW5cf>X~i*Fvf<@c z2j%c)!&*77QH3Rq^Ge0WI+2s`%vsn>KaU)^p)O#4x67mPej6U}%cHi@P2yMpqSx8* zEF&OR;V8ti6%}Hfi6%sfqOo+;van1B$E9Hm#h6KoB^fKhP&`HRRx1{|a1>6JoP4o; zPAC|9v*ES6?&V3+=ku9-W|N}UkTl0}B*l;nLm&j9HF$KvPk6MHum?NTL{;|cvf{xE zk3zLluiJ1$HJF3j8*%H=LOLPENWb7EX%l7S6aY$M1m~?+U4h_|NJ1BMLyxW@EFHmm zYZYD5YL!7;N6hyHK-xMSkr)GVal0cSG(BfIN+Tr5fM~6>!3)V^s44ZT2y>PrnknII zblG`V&ih6imiu@?zdQ)kutcC@3OJoQZmZ)aaS%Q@^ASE$Y zr$umvKxc(f8?O3bXF5Zni=>Tv$iCnq_PgdX zkBmfRaLg!)ppGSIhe1NJR;$?>>MxZ2&{biVksex*2$O+g1;zwy3+}NYKE@IbtO`C) z)=*_Ngf@i|xGdCi$yi_^@PZi3LNsa+N_ePS9$@w!P5q!-UoAv>4P2W+gr+!kpP<65 z8l>+-%bpyJwk^dQ$NI%rO}=Bx)`q$%H?RqEe%_3Y8QlA`4JU#6_6dLyCirT&yB zlCs*f>`8OSPB^?~sy%gA;*7+k=LFK2T>6&O^3W@7pn z9({BB<8Gen7=629^E-cB?H==CKl3fS<5TZ!xz^p;+B3WvI}74~<u-Sc;p zuYL8`J1fT@D`MX!9N!mY`pKk!1;s{a5Ga|xdS literal 0 HcmV?d00001 diff --git a/tasks/momotalk/assets/assets_momotalk.py b/tasks/momotalk/assets/assets_momotalk.py index 3f0de62..14cdedb 100644 --- a/tasks/momotalk/assets/assets_momotalk.py +++ b/tasks/momotalk/assets/assets_momotalk.py @@ -14,6 +14,17 @@ BEGIN_STORY = ButtonWrapper( button=(796, 540, 1059, 591), ), ) +CHATTING = ButtonWrapper( + name='CHATTING', + jp=None, + en=Button( + file='./assets/en/momotalk/CHATTING.png', + area=(774, 563, 821, 585), + search=(754, 543, 841, 605), + color=(89, 102, 121), + button=(774, 563, 821, 585), + ), +) CHAT_AREA = ButtonWrapper( name='CHAT_AREA', jp=None, diff --git a/tasks/momotalk/ui.py b/tasks/momotalk/ui.py index a41d080..b89579c 100644 --- a/tasks/momotalk/ui.py +++ b/tasks/momotalk/ui.py @@ -26,7 +26,7 @@ SWITCH_SORT.add_state("descending", SORT_DESCENDING) button can be found in different locations""" REPLY_TEMPLATE = REPLY.matched_button.image STORY_TEMPLATE = STORY.matched_button.image - +CHATTING_TEMPLATE = CHATTING.matched_button.image class MomoTalkUI(UI): def __init__(self, config, device): @@ -68,18 +68,17 @@ class MomoTalkUI(UI): if timer.reached(): return False - def select_then_disappear(self, dest_enter: ButtonWrapper, dest_check: ButtonWrapper, force_select=False): + def select_then_disappear(self, dest_enter: ButtonWrapper, dest_check: ButtonWrapper): timer = Timer(5, 10).start() while 1: self.device.screenshot() - if force_select or self.appear(dest_enter): - self.click_with_interval(dest_enter, interval=1) + self.click_with_interval(dest_enter, interval=1) if not self.appear(dest_check): return True if timer.reached(): return False - def set_switch(self, switch): + def set_switch(self, switch, state='on'): """ Set switch to on. However, unsure why is inaccurate in momotalk. Returns: @@ -88,7 +87,7 @@ class MomoTalkUI(UI): if not switch.appear(main=self): logger.info(f'{switch.name} not found') return False - switch.set('on', main=self) + switch.set(state, main=self) return True @@ -108,9 +107,10 @@ class MomoTalkUI(UI): center_pt = (int(pt[0] + template.shape[1] / 2 + x_add), int(pt[1] + template.shape[0] / 2 + y_add)) seen.add(center_pt) if seen: - seen = filter(lambda x: point_in_area(x, CHAT_AREA.area), seen) - [click_coords(coords[0], coords[1]) for coords in seen] - self.swipe_page("down", self) + if y_add != 0: + seen = filter(lambda x: point_in_area(x, CHAT_AREA.area), seen) + [click_coords(coords[0], coords[1]) for coords in seen] + self.swipe_page("down", self) return True return False @@ -132,18 +132,22 @@ class MomoTalkUI(UI): """ Switch from newest to unread and sort the messages in descending order """ - logger.info("Sorting messages...") - steps = [UNREAD, CONFIRM_SORT, UNREAD_OFF, UNREAD_ON] - for i in range(len(steps)-2): - self.select_then_check(steps[i], steps[i+1], similarity=0.95) - return not self.appear(CONFIRM_SORT) and self.appear(UNREAD) and self.appear(SORT_ON) + while 1: + self.device.screenshot() + if self.set_switch(SWITCH_UNREAD): + self.click_with_interval(CONFIRM_SORT, interval=2) + continue + if self.appear(UNREAD, similarity=0.95): + break + self.click_with_interval(UNREAD, interval=2) + return self.set_switch(SWITCH_SORT, "descending") def check_first_student(self): """ If the first student has a red notification return True and start chat. Otherwise it means no students are available for interaction. """ - if self.match_color(FIRST_UNREAD, threshold=80) and self.select_then_disappear(FIRST_UNREAD, SELECT_STUDENT, force_select=True): + if self.match_color(FIRST_UNREAD, threshold=80) and self.select_then_disappear(FIRST_UNREAD, SELECT_STUDENT): return True logger.warning("No students available for interaction") return False @@ -154,24 +158,23 @@ class MomoTalkUI(UI): check if a reply or story button is found and click them. If the begin story button is found skip story. """ + timer = Timer(8, 5).start() logger.info("Chatting with student...") - stability_counter = 0 while 1: - self.wait_until_stable(CHAT_AREA, timer=Timer(10, 10)) + self.device.screenshot() if self.appear(BEGIN_STORY): logger.info("Begin Story detected") return True - if self.click_all(REPLY_TEMPLATE, y_add=62): + elif self.click_all(CHATTING_TEMPLATE): + timer.reset() + elif self.click_all(REPLY_TEMPLATE, y_add=62): logger.info("Clicked on reply") - stability_counter = 0 - continue - if self.click_all(STORY_TEMPLATE, y_add=62): + timer.reset() + elif self.click_all(STORY_TEMPLATE, y_add=62): logger.info("Clicked on story") - stability_counter = 0 - continue - logger.info("No new message detected") - stability_counter += 1 - if stability_counter > 3: + timer.reset() + elif timer.reached(): + logger.info("No new message detected") return False def skip_story(self): @@ -180,11 +183,17 @@ class MomoTalkUI(UI): button is clicked and disappears """ logger.info("Attempting to skip story...") - steps = [BEGIN_STORY, MENU, SKIP] - for step in steps: - self.appear_then_click(step) - if self.appear_then_click(CONFIRM_SKIP) and not self.appear(CONFIRM_SKIP, interval=5): - logger.info("Skipped story successfully") - return True - return False + steps = [CONFIRM_SKIP, SKIP, MENU, BEGIN_STORY] + timer = Timer(1).start() + while 1: + self.device.screenshot() + if self.handle_reward(): + logger.info("Skipped story successfully") + return True + for step in steps: + if self.appear_then_click(step): + while not timer.reached_and_reset(): + pass + break +