11import requests
2+ from task_database import __set_current_task , __set_task_complete , get_user
23import tasklists
34from datetime import datetime , timezone
4- from task_types import CollectionLogVerificationData , TaskData
5+ from task_types import AchievementDiaryVerificationData , CollectionLogVerificationData , SkillVerificationData , TaskData
56
67
78def temple_player_data (username : str ):
@@ -172,5 +173,82 @@ def format_completed_tasks(completed_tasks: set):
172173 # print(sorted_completed_tasks)
173174 return format_completed_tasks (sorted_completed_tasks )
174175
176+
177+ def sync_user_tasks (username : str , collection_log : set [int ], diaries : dict , skills : dict ) -> tuple [set [int ], set [int ]]:
178+ tiers = ['easy' , 'medium' , 'hard' , 'elite' , 'master' ]
179+ tasks = [ task for tier in tiers for task in tasklists .list_for_tier (tier ) ]
180+
181+ completed_tasks : set [int ] = set ()
182+ uncompleted_tasks : set [int ] = set ()
183+
184+ for task in tasks :
185+ verification_data = task .verification
186+ task_completed = False
187+
188+ if isinstance (verification_data , CollectionLogVerificationData ):
189+ task_completed = verify_collection_log (collection_log , verification_data )
190+ elif isinstance (verification_data , AchievementDiaryVerificationData ):
191+ task_completed = verify_achievement_diary (diaries , verification_data )
192+ elif isinstance (verification_data , SkillVerificationData ):
193+ task_completed = verify_skill (skills , verification_data )
194+
195+ if task_completed :
196+ completed_tasks .add (task .id )
197+ else :
198+ uncompleted_tasks .add (task .id )
199+
200+ user = get_user (username )
201+ old_completed_tasks = set ([task .id for task in [
202+ * user .easy .completed_tasks ,
203+ * user .medium .completed_tasks ,
204+ * user .hard .completed_tasks ,
205+ * user .elite .completed_tasks ,
206+ * user .master .completed_tasks ,
207+ ]])
208+
209+ new_completed_tasks : set [int ] = set ()
210+ new_uncompleted_tasks : set [int ] = set ()
211+
212+ for task_id in completed_tasks :
213+ if task_id not in old_completed_tasks :
214+ __set_task_complete (username , None , task_id , True )
215+ new_completed_tasks .add (task_id )
216+
217+ for task_id in uncompleted_tasks :
218+ if task_id in old_completed_tasks :
219+ __set_task_complete (username , None , task_id , False )
220+ new_uncompleted_tasks .add (task_id )
221+
222+ current_task_id = user .current_task_id ()
223+ if current_task_id in new_completed_tasks :
224+ __set_current_task (username , None , None , False )
225+
226+ return new_completed_tasks , new_uncompleted_tasks
227+
228+
229+ def verify_collection_log (collection_log : set [int ], verification_data : CollectionLogVerificationData ) -> bool :
230+ log_count = 0
231+ for item_id in verification_data .item_ids :
232+ if item_id in collection_log :
233+ log_count += 1
234+
235+ return log_count >= verification_data .count
236+
237+
238+ def verify_achievement_diary (diaries : dict , verification_data : AchievementDiaryVerificationData ) -> bool :
239+ region = verification_data .region
240+ difficulty = verification_data .difficulty
241+
242+ return diaries [region ][difficulty ]
243+
244+
245+ def verify_skill (skills : dict , verification_data : SkillVerificationData ) -> bool :
246+ skill_count = 0
247+ for skill , exp in verification_data .experience .items ():
248+ if skills [skill ] >= exp :
249+ skill_count += 1
250+
251+ return skill_count >= verification_data .count
252+
175253if __name__ == "__main__" :
176254 print (check_logs ('Gerni Task' , tasklists .list_for_tier ('elite' ), 'check' ))
0 commit comments