forked from pur1fying/blue_archive_auto_script
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfriend.py
165 lines (146 loc) · 5.54 KB
/
friend.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
import time
from core import picture, color
def implement(self):
if self.server == 'Global' or self.server == 'JP':
self.logger.info("Friend Management Not Support In Global And JP Server")
return True
self.quick_method_to_main_page()
to_friend_management(self, True)
self.logger.info("Clear Friend White List : + " + str(self.config.get("clear_friend_white_list")))
self.last_friend_id = None
last_friend_id = None
exit_cnt = 0
checked_position = 0
while exit_cnt <= 3 and self.flag_run:
positions = get_possible_friend_positions(self)
if len(positions) == 0:
self.logger.info("No Friend Found")
exit_cnt += 1
to_friend_management(self)
continue
exit_cnt = 0
self.logger.info("Friend Found At : " + str(positions))
need_swipe = True
for i in range(0, len(positions)):
position = positions[i]
if position[1] < checked_position + 10:
self.logger.info("Position : " + str(position[1]) + "already checked, Skip")
continue
res = to_player_info(self, position)
if res == "friend_delete-friend-notice":
self.logger.info("UI AT delete friend notice, Skip")
continue
in_white_list = check_name_in_white_list(self)
to_friend_management(self)
if in_white_list:
if i == len(positions) - 1:
if last_friend_id == self.last_friend_id:
self.logger.info("Last Friend ID : " + str(last_friend_id) + " remain same, Exit")
return True
else:
last_friend_id = self.last_friend_id
checked_position = position[1]
continue
else:
delete_position = (1128, position[1] + 85)
delete_friend(self, delete_position)
need_swipe = False # delete a friend, other id move, no need to swipe
break
if need_swipe:
self.swipe(802, 635, 802, 156, 0.5, post_sleep_time=1)
checked_position = 0
to_friend_management(self)
return True
def to_friend_management(self, skip_first_screenshot=False):
img_ends = "friend_friend-management-menu"
img_possibles = {
"friend_friend-menu": (579, 374),
"main_page_menu": (537, 467),
"friend_player-info": (903, 101),
"friend_delete-friend-notice": (887, 165),
"group_enter-button": (627, 383),
}
main_page_click_position = {
'CN': (1226, 39),
'Global': (562, 659),
'JP': (562, 659)
}
rgb_possibles = {"main_page": main_page_click_position[self.server]}
img_possibles.update(picture.GAME_ONE_TIME_POP_UPS[self.server])
picture.co_detect(self, None, rgb_possibles, img_ends, img_possibles, skip_first_screenshot=skip_first_screenshot)
def get_possible_friend_positions(self):
funcs = {
'CN': search_cn,
'Global': search_global,
'JP': search_jp
}
return funcs[self.server](self)
def search_cn(self):
found_list = []
i = 157
x = 1183
while i < 595:
if color.judge_rgb_range(self, x, i, 34, 54, 60, 80, 88, 108):
found_list.append((1183, i))
i += 50
else:
i += 1
return found_list
def search_global(self):
found_list = []
i = 157
x = 487
while i < 595:
if color.judge_rgb_range(self, x, i, 250, 255, 250, 255, 250, 255) and color.judge_rgb_range(self, x, i + 18, 250, 255, 250, 255, 250, 255):
found_list.append((493, i + 9))
i += 50
else:
i += 1
return found_list
def search_jp(self):
found_list = []
i = 157
x = 487
while i < 595:
if color.judge_rgb_range(self, x, i, 250, 255, 250, 255, 250, 255) and color.judge_rgb_range(self, x, i + 18, 250, 255, 250, 255, 250, 255):
found_list.append((493, i + 9))
i += 50
else:
i += 1
return found_list
def to_player_info(self, position):
img_ends = [
"friend_player-info",
"friend_delete-friend-notice"
]
img_possibles = {
"friend_friend-management-menu": position
}
return picture.co_detect(self, None, None, img_ends, img_possibles, skip_first_screenshot=True)
def check_name_in_white_list(self):
ocr_region = {
'CN': (680, 385, 747, 409),
'Global': (711, 394, 823, 419),
'JP': (680, 385, 747, 409),
}
white_list = self.config.get("clear_friend_white_list")
friend_id = self.ocr.get_region_res(self.latest_img_array, ocr_region[self.server], 'Global', self.ratio)
self.last_friend_id = friend_id
self.logger.info("Ocr Friend ID : [ " + friend_id + " ]")
if friend_id in white_list:
self.logger.info("Friend ID [ " + friend_id + " ] In White List")
return True
self.logger.info("Friend ID [ " + friend_id + " ] Not In White List")
return False
def delete_friend(self, position):
self.logger.info("Delete Friend At : " + str(position))
img_ends = "friend_delete-friend-notice"
img_possibles = {
"friend_friend-management-menu": position
}
picture.co_detect(self, None, None, img_ends, img_possibles, skip_first_screenshot=True)
img_ends = "friend_friend-management-menu"
img_possibles = {
"friend_delete-friend-notice": (761, 499)
}
picture.co_detect(self, None, None, img_ends, img_possibles, skip_first_screenshot=True)