def infos(self, list_objects, with_userid=True, **kwargs): if with_userid: printer.infos(list_objects, **kwargs, extra_info=f'用户id:{self.id} 名字:{self.alias}') else: printer.infos(list_objects, **kwargs)
async def check_result(self): while True: results = dyn_raffle_sql.select_rafflestatus( 1, None, utils.curr_time() - 900) # 延迟15min处理抽奖 results += dyn_raffle_sql.select_rafflestatus( -1, None, utils.curr_time() - 900) printer.infos(['正在查找已经结束的动态抽奖:', results]) for dyn_raffle_status in results: dyn_raffle_results: Optional[ DynRaffleResults] = await notifier.exec_func( -1, DynRaffleHandlerTask.fetch_dyn_raffle_results, dyn_raffle_status) print(dyn_raffle_status, dyn_raffle_results) await notifier.exec_task_awaitable(-2, DynRaffleHandlerTask, 2, dyn_raffle_status, dyn_raffle_results, delay_range=(0, 30)) if dyn_raffle_results is not None: dyn_raffle_sql.insert_dynraffle_results_table( dyn_raffle_results) dyn_raffle_sql.del_from_dynraffle_status_table( dyn_raffle_status.dyn_id) await asyncio.sleep(120)
async def check_result(self): while True: results = substance_raffle_sql.select_rafflestatus( 1, None, utils.curr_time() - 900) # 延迟15min处理抽奖 results += substance_raffle_sql.select_rafflestatus( -1, None, utils.curr_time() - 900) printer.infos(['正在查找已经结束的实物抽奖:', results]) for substance_raffle_status in results: substance_raffle_results: Optional[ SubstanceRaffleResults] = await notifier.exec_func( -1, SubstanceRaffleHandlerTask. fetch_substance_raffle_results, substance_raffle_status) print(substance_raffle_status, substance_raffle_results) await notifier.exec_task_awaitable(-2, SubstanceRaffleHandlerTask, 2, substance_raffle_status, substance_raffle_results, delay_range=(0, 30)) if substance_raffle_results is not None: substance_raffle_sql.insert_substanceraffle_results_table( substance_raffle_results) substance_raffle_sql.del_from_substanceraffle_status_table( substance_raffle_status.aid, substance_raffle_status.number) await asyncio.sleep(30)
async def is_normal_room(roomid): if not roomid: return True json_response = await UtilsReq.init_room(roomid) if not json_response['code']: data = json_response['data'] param1 = data['is_hidden'] param2 = data['is_locked'] param3 = data['encrypted'] if any((param1, param2, param3)): printer.infos([f'抽奖脚本检测到房间{roomid:^9}为异常房间']) return False else: printer.infos([f'抽奖脚本检测到房间{roomid:^9}为正常房间']) return True
async def run(self): results = dyn_raffle_sql.select_rafflestatus(0) for dyn_raffle_status in results: print(dyn_raffle_status) printer.infos([f'正在暴力处理上次中断的{dyn_raffle_status.doc_id}的动态抽奖后续']) dyn_raffle_sql.set_rafflestatus_handle_status( 1, dyn_raffle_status.dyn_id) printer.infos([f'欢迎使用动态抽奖']) tasks = [] task_check_raffle = asyncio.ensure_future(self.check_raffle()) tasks.append(task_check_raffle) task_check_result = asyncio.ensure_future(self.check_result()) tasks.append(task_check_result) if not self.should_join_immediately: task_check_join = asyncio.ensure_future(self.check_handle()) tasks.append(task_check_join) await asyncio.wait(tasks)
async def run(self): results = substance_raffle_sql.select_rafflestatus(0) for substance_raffle_status in results: print(substance_raffle_status) aid = substance_raffle_status.aid number = substance_raffle_status.number printer.infos([f'正在暴力处理上次中断的{aid}({number})的实物抽奖后续']) substance_raffle_sql.set_rafflestatus_handle_status(1, aid, number) printer.infos([f'欢迎使用实物抽奖']) tasks = [] task_check_raffle = asyncio.ensure_future(self.check_raffle()) tasks.append(task_check_raffle) task_check_result = asyncio.ensure_future(self.check_result()) tasks.append(task_check_result) if not self.should_join_immediately: task_check_join = asyncio.ensure_future(self.check_handle()) tasks.append(task_check_join) await asyncio.wait(tasks)
async def check_handle(self): while True: curr_time = utils.curr_time() results = substance_raffle_sql.select_rafflestatus( -1, (curr_time - 45, curr_time + 90))[:5] printer.infos(['正在查找需要参与的实物抽奖:', results]) for substance_raffle_status in results: print(substance_raffle_status) aid = substance_raffle_status.aid number = substance_raffle_status.number is_exist = await notifier.exec_func( -1, SubstanceRaffleHandlerTask.check, aid) if not is_exist: substance_raffle_sql.del_from_substanceraffle_status_table( aid, number) printer.warn(f'{substance_raffle_status}消失了。。。。。') continue printer.infos([f'{aid}({number})的实物抽奖正在参与']) await notifier.exec_task_awaitable(-2, SubstanceRaffleHandlerTask, 1, substance_raffle_status) substance_raffle_sql.set_rafflestatus_handle_status( 1, aid, number) printer.infos([f'{aid}({number})的实物抽奖参与完毕']) if not results: await asyncio.sleep(60)
async def dig_and_filter(self, substance_raffle_status: SubstanceRaffleStatus): aid = substance_raffle_status.aid number = substance_raffle_status.number if substance_raffle_status.join_end_time <= utils.curr_time() + 90: printer.infos([f'{aid}({number})的实物抽奖已经开奖或马上开奖,不再参与/记录']) return for key_word in self.substance_raffle_description_filter: if key_word in substance_raffle_status.describe: printer.infos([f'{aid}({number})的实物抽奖正文触发关键词过滤({key_word})']) return if substance_raffle_sql.is_raffleid_duplicate(aid, number): printer.infos([f'{aid}({number})的实物抽奖触发重复性过滤']) return substance_raffle_sql.insert_substanceraffle_status_table( substance_raffle_status) printer.infos([f'{aid}({number})的实物抽奖通过过滤与验证,正式处理']) assert not self.should_join_immediately if not self.should_join_immediately: printer.infos([f'{aid}({number})的实物抽奖暂不参与,仅记录数据库中等候轮询']) return
async def check_handle(self): while True: curr_time = utils.curr_time() results = dyn_raffle_sql.select_rafflestatus( -1, curr_time + 300, curr_time + 1200)[:5] # 20分钟到5分钟 printer.infos(['正在查找需要参与的动态抽奖:', results]) for dyn_raffle_status in results: print(dyn_raffle_status) is_exist = await notifier.exec_func(-1, DynRaffleHandlerTask.check, dyn_raffle_status.doc_id) if not is_exist: dyn_raffle_sql.del_from_dynraffle_status_table( dyn_raffle_status.dyn_id) continue printer.infos([f'{dyn_raffle_status.doc_id}的动态抽奖正在参与']) await notifier.exec_task_awaitable(-2, DynRaffleHandlerTask, 1, dyn_raffle_status) dyn_raffle_sql.set_rafflestatus_handle_status( 1, dyn_raffle_status.dyn_id) printer.infos([f'{dyn_raffle_status.doc_id}的动态抽奖参与完毕']) if not results: await asyncio.sleep(60)
async def dig_and_filter(self, dyn_raffle_status: DynRaffleStatus): doc_id = dyn_raffle_status.doc_id if dyn_raffle_status.lottery_time <= utils.curr_time() + 180: printer.infos([f'{doc_id}的动态抽奖已经开奖或马上开奖,不再参与']) return for key_word in self.dyn_raffle_description_filter: if key_word in dyn_raffle_status.describe: printer.infos([f'{doc_id}的动态抽奖正文触发关键词过滤({key_word})']) return for key_word in self.dyn_prize_cmt_filter: if key_word in dyn_raffle_status.prize_cmt_1st or \ key_word in dyn_raffle_status.prize_cmt_2nd or \ key_word in dyn_raffle_status.prize_cmt_3rd: printer.infos([f'{doc_id}的动态抽奖正文触发关键词过滤({key_word})']) return # 如果是刚刚出来的抽奖,就延迟150秒, if dyn_raffle_status.post_time >= utils.curr_time() - 150: printer.infos([f'{doc_id}的动态抽奖触发时间约束,休眠150秒后再正式参与']) await asyncio.sleep(150) if dyn_raffle_sql.is_raffleid_duplicate(dyn_raffle_status.dyn_id): printer.infos([f'{dyn_raffle_status.doc_id}的动态抽奖触发重复性过滤']) return dyn_raffle_sql.insert_dynraffle_status_table(dyn_raffle_status) printer.infos([f'{doc_id}的动态抽奖通过过滤与验证,正式处理']) if not self.should_join_immediately: printer.infos([f'{dyn_raffle_status.doc_id}的动态抽奖暂不参与,仅记录数据库中等候轮询']) return printer.infos([f'{doc_id}的动态抽奖正在参与']) await notifier.exec_task_awaitable(-2, DynRaffleHandlerTask, 1, dyn_raffle_status, delay_range=(0, 30)) dyn_raffle_sql.set_rafflestatus_handle_status(1, dyn_raffle_status.dyn_id) printer.infos([f'{doc_id}的动态抽奖参与完毕'])