def get_wwtoken(self): WW_ID = self.WW_ID if 'WW_ID' in os.environ: WW_ID = os.environ['WW_ID'] WW_APP_SECRET = self.WW_APP_SECRET if 'WW_APP_SECRET' in os.environ: WW_APP_SECRET = os.environ['WW_APP_SECRET'] if WW_ID and WW_APP_SECRET: url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken' data = {'corpid': WW_ID, 'corpsecret': WW_APP_SECRET} try: response = req.to_python( req.request('get', url, params=data).text) rspcode = response['errcode'] except Exception as e: log.error(e) else: if rspcode == 0: log.info('access_token 获取成功') return response['access_token'] else: log.error(f'access_token 获取失败:\n{response}') else: log.info('企业微信应用 🚫')
def custPush(self, text, status, desp): PUSH_CONFIG = self.PUSH_CONFIG if 'PUSH_CONFIG' in os.environ: PUSH_CONFIG = os.environ['PUSH_CONFIG'] if not PUSH_CONFIG: log.info(f'Custom Notifications SKIPPED') return False cust = req.to_python(PUSH_CONFIG) title = f'{text} {status}' if cust['show_title_and_desp']: title = f'{text} {status}\n\n{desp}' if cust['set_data_title'] and cust['set_data_sub_title']: cust['data'][cust['set_data_title']] = { cust['set_data_sub_title']: title } elif cust['set_data_title'] and cust['set_data_desp']: cust['data'][cust['set_data_title']] = title cust['data'][cust['set_data_desp']] = desp elif cust['set_data_title']: cust['data'][cust['set_data_title']] = title conf = [cust['url'], cust['data'], 'Custom Notifications', cust['text'], cust['code']] url, data, name, text, code = conf if cust['method'].upper() == 'GET': return self.pushTemplate('get', url, params=data, name=name, token='token', text=text, code=code) elif cust['method'].upper() == 'POST' and cust['data_type'].lower() == 'json': return self.pushTemplate('post', url, json=data, name=name, token='token', text=text, code=code) else: return self.pushTemplate('post', url, data=data, name=name, token='token', text=text, code=code)
def pushTemplate(self, method, url, params=None, data=None, json=None, headers=None, **kwargs): name = kwargs.get('name') # needs = kwargs.get('needs') token = kwargs.get('token') text = kwargs.get('text') code = kwargs.get('code') if not token: log.info(f'{name} 🚫') # log.info(f'{name} 推送所需的 {needs} 未设置, 正在跳过...') return try: response = req.to_python(req.request( method, url, 2, params, data, json, headers).text) rspcode = response[text] except Exception as e: # 🚫: disabled; 🥳:success; 😳:fail log.error(f'{name} 😳\n{e}') else: if rspcode == code: log.info(f'{name} 🥳') # Telegram Bot elif name == 'Telegram Bot' and rspcode: log.info(f'{name} 🥳') elif name == 'Telegram Bot' and response[code] == 400: log.error(f'{name} 😳\n请主动给 bot 发送一条消息并检查 TG_USER_ID 是否正确') elif name == 'Telegram Bot' and response[code] == 401: log.error(f'{name} 😳\nTG_BOT_TOKEN 错误') else: log.error(f'{name} 😳\n{response}')
def run(self): info_list = self.get_info() message_list = [] for i in range(len(info_list)): today = info_list[i]['data']['today'] total_sign_day = info_list[i]['data']['total_sign_day'] awards = Roles(self._cookie).get_awards()['data']['awards'] uid = str(self._uid_list[i]).replace( str(self._uid_list[i])[1:8], '******', 1) log.info(f'准备为旅行者 {i + 1} 号签到...') time.sleep(10) message = { 'today': today, 'region_name': self._region_name_list[i], 'uid': uid, 'total_sign_day': total_sign_day, 'end': '', } if info_list[i]['data']['is_sign'] is True: message['award_name'] = awards[total_sign_day - 1]['name'] message['award_cnt'] = awards[total_sign_day - 1]['cnt'] message['status'] = f'👀 旅行者 {i + 1} 号, 你已经签到过了哦' message_list.append(self.message.format(**message)) continue else: message['award_name'] = awards[total_sign_day]['name'] message['award_cnt'] = awards[total_sign_day]['cnt'] if info_list[i]['data']['first_bind'] is True: message['status'] = f'💪 旅行者 {i + 1} 号, 请先前往米游社App手动签到一次' message_list.append(self.message.format(**message)) continue data = { 'act_id': CONFIG.ACT_ID, 'region': self._region_list[i], 'uid': self._uid_list[i] } try: response = req.to_python( req.request('post', CONFIG.SIGN_URL, headers=self.get_header(), data=json.dumps(data, ensure_ascii=False)).text) except Exception as e: raise Exception(e) code = response.get('retcode', 99999) # 0: success # -5003: already signed in if code != 0: message_list.append(response) continue message['total_sign_day'] = total_sign_day + 1 message['status'] = response['message'] message_list.append(self.message.format(**message)) log.info('签到完毕') return ''.join(message_list)
def get_info(self): user_game_roles = Roles(self._cookie).get_roles() role_list = user_game_roles.get('data', {}).get('list', []) # role list empty if not role_list: raise Exception(user_game_roles.get('message', 'Role list empty')) log.info(f'当前账号绑定了 {len(role_list)} 个角色') info_list = [] # cn_gf01: 天空岛 # cn_qd01: 世界树 self._region_list = [(i.get('region', 'NA')) for i in role_list] self._region_name_list = [(i.get('region_name', 'NA')) for i in role_list] self._uid_list = [(i.get('game_uid', 'NA')) for i in role_list] log.info('准备获取签到信息...') for i in range(len(self._uid_list)): info_url = CONFIG.INFO_URL.format(self._region_list[i], CONFIG.ACT_ID, self._uid_list[i]) try: content = req.request('get', info_url, headers=self.get_header()).text info_list.append(req.to_python(content)) except Exception as e: raise Exception(e) if not info_list: raise Exception('User sign info list is empty') log.info('签到信息获取完毕') return info_list
def pushTemplate(self, method, url, params=None, data=None, json=None, headers=None, **kwargs): name = kwargs.get('name') # needs = kwargs.get('needs') token = kwargs.get('token') text = kwargs.get('text') code = kwargs.get('code') if not token: log.info(f'{name} SKIPPED') return False try: response = req.to_python( req.request(method, url, 2, params, data, json, headers).text) rspcode = response[text] except Exception as e: log.error(f'{name} FAILED\n{e}') else: if rspcode == code: log.info(f'{name} SUCCESS') else: log.error(f'{name} FAILED\n{response}') return True
def run(self): info_list = self.get_info() message_list = [] if info_list: today = info_list.get('data', {}).get('today') total_sign_day = info_list.get('data', {}).get('total_sign_day') awards = Roles(self._cookie).get_awards().get('data', {}).get('awards') #uid = str(self.uid).replace(str(self.uid)[1:7], '******', 1) uid = str(self.uid) log.info(f'Voyageur {uid} en cours...') time.sleep(10) message = { 'today': today, 'region_name': 'EU', 'uid': uid, 'total_sign_day': total_sign_day, 'end': '', } if info_list.get('data', {}).get('is_sign') is True: message['award_name'] = awards[total_sign_day - 1]['name'] message['award_cnt'] = awards[total_sign_day - 1]['cnt'] message[ 'status'] = f"👀 Voyageur, tu as déjà récupéré les récompenses du jour." message_list.append(self.message.format(**message)) return ''.join(message_list) else: message['award_name'] = awards[total_sign_day]['name'] message['award_cnt'] = awards[total_sign_day]['cnt'] if info_list.get('data', {}).get('first_bind') is True: message[ 'status'] = f'💪 Merci de récupérer manuellement les récompenses une première fois.' message_list.append(self.message.format(**message)) return ''.join(message_list) data = {'act_id': CONFIG.OS_ACT_ID} try: response = req.to_python( req.request('post', CONFIG.OS_SIGN_URL, headers=self.get_header(), data=json.dumps(data, ensure_ascii=False)).text) except Exception as e: raise Exception(e) code = response.get('retcode', 99999) # 0: success # -5003: already checked in if code != 0: message_list.append(response) return ''.join(message_list) message['total_sign_day'] = total_sign_day + 1 message['status'] = response['message'] message_list.append(self.message.format(**message)) log.info('Identification') return ''.join(message_list)
def run(self): info_list = self.get_info() region_name = self.get_region_name() message_list = [] if info_list: today = info_list.get('data', {}).get('today') total_sign_day = info_list.get('data', {}).get('total_sign_day') awards = Roles(self._cookie).get_awards().get('data', {}).get('awards') uid = str(self.uid).replace(str(self.uid)[1:7], '******', 1) log.info(f'Checking in account id {uid}...') time.sleep(10) message = { 'today': today, 'region_name': region_name, 'uid': uid, 'total_sign_day': total_sign_day, 'end': '', } if info_list.get('data', {}).get('is_sign') is True: message['award_name'] = awards[total_sign_day - 1]['name'] message['award_cnt'] = awards[total_sign_day - 1]['cnt'] message[ 'status'] = f"Traveler, you've already checked in today" message_list.append(self.message.format(**message)) return ''.join(message_list) else: message['award_name'] = awards[total_sign_day]['name'] message['award_cnt'] = awards[total_sign_day]['cnt'] if info_list.get('data', {}).get('first_bind') is True: message['status'] = f'Please check in manually once' message_list.append(self.message.format(**message)) return ''.join(message_list) data = {'act_id': CONFIG.OS_ACT_ID} try: response = req.to_python( req.request('post', CONFIG.OS_SIGN_URL, headers=self.get_header(), data=json.dumps(data, ensure_ascii=False)).text) except Exception as e: raise code = response.get('retcode', 99999) # 0: success # -5003: already checked in if code != 0: message_list.append(response) return ''.join(message_list) message['total_sign_day'] = total_sign_day + 1 message['status'] = response['message'] message_list.append(self.message.format(**message)) log.info('Check-in complete') return ''.join(message_list)
def get_awards(self): response = {} try: response = req.to_python(req.request( 'get', CONFIG.AWARD_URL, headers=self.get_header()).text) except json.JSONDecodeError as e: raise Exception(e) return response
def get_info(self): info_url = CONFIG.OS_INFO_URL try: response = req.request('get', info_url, headers=self.get_header()).text return req.to_python(response) except Exception as e: log.error('failure in get_info') raise
def get_code(self, id): item = f'🎁 {id}' log.info(f'Ready to receive {item} redemption code...') data = {'gid': 10725, 'itemId': id, 'channel': 'wblink'} self.header['Referer'] = f'https://ka.sina.com.cn/html5/gift/{id}' self.header['Cookie'] = self.ka_cookie retry = 3 sec = 5 for i in range(retry): sleep(sec) log.info(f'♻️ First {i + 1} to receive {id} redemption code...') try: response = req.to_python( req.request('get', CONFIG.KA_URL, params=data, headers=self.header).text) except Exception as e: log.error(e) else: if response.get('k'): log.info(f'{item} Redemption code to receive success') return response['data']['kahao'] elif response.get( 'code') == '2002' and 'Avatar' in response.get( 'msg', ''): log.error( f'🥳 {id}: I can only receive once or the redemption code has already been received.' ) break elif response.get( 'code' ) == '2002' and 'Sign in' or 'Not yet' in response.get( 'msg', ''): log.error(f'😳 {id}: {response["msg"]}') break elif response.get('code') == '2002': log.error(f'😳 {id}: {response["msg"]}') elif 'login' in response.get('msg', ''): log.error('Login failure, please login again') return else: log.error(f'😳 {id}: {response}') if i + 1 != retry: log.info( f'will be {sec} Retry after the timer runs out...') else: log.error( f'🚫 {id}: Failure! Number reached the upper limit, Aborting redeem code' ) log.info('The redemption code is acquired') return
def get_info(self): log.info('Ready to get check-in information...') info_url = CONFIG.OS_INFO_URL try: response = req.request('get', info_url, headers=self.get_header()).text except Exception as e: raise Exception(e) log.info('The sign-in information has been successfully acquired') return req.to_python(response)
def get_info(self): log.info('Prêt à recevoir les informations de connexion...') info_url = CONFIG.OS_INFO_URL try: response = req.request('get', info_url, headers=self.get_header()).text except Exception as e: raise Exception(e) log.info('Les informations de connexion ont été obtenues.') return req.to_python(response)
def get_info(self): log.info('准备获取签到信息...') info_url = CONFIG.OS_INFO_URL try: response = req.request('get', info_url, headers=self.get_header()).text except Exception as e: raise Exception(e) log.info('签到信息获取完毕') return req.to_python(response)
def get_roles(self): log.info('准备获取账号信息...') response = {} try: response = req.to_python(req.request( 'get', CONFIG.ROLE_URL, headers=self.get_header()).text) message = response['message'] except Exception as e: raise Exception(e) if response.get( 'retcode', 1) != 0 or response.get('data', None) is None: raise Exception(message) log.info('账号信息获取完毕') return response
def get_code(self, id): item = f'🎁 {id}' log.info(f'准备领取 {item} 的兑换码...') data = {'gid': 10725, 'itemId': id, 'channel': 'wblink'} self.header['Referer'] = f'https://ka.sina.com.cn/html5/gift/{id}' self.header['Cookie'] = self.ka_cookie retry = 3 sec = 5 for i in range(retry): sleep(sec) log.info(f'♻️ 第 {i + 1} 次领取 {id} 的兑换码...') try: response = req.to_python( req.request('get', CONFIG.KA_URL, params=data, headers=self.header).text) except Exception as e: log.error(e) else: if response.get('k'): log.info(f'{item} 的兑换码领取成功') return response['data']['kahao'] elif response.get('code') == '2002' and '头像' in response.get( 'msg', ''): log.error(f'🥳 {id}: 每天只能领取一张或该兑换码已经领取过了哦') break elif response.get( 'code') == '2002' and '签到' or '尚未' in response.get( 'msg', ''): log.error(f'😳 {id}: {response["msg"]}') break elif response.get('code') == '2002': log.error(f'😳 {id}: {response["msg"]}') elif 'login' in response.get('msg', ''): log.error('登录失效, 请重新登录') return else: log.error(f'😳 {id}: {response}') if i + 1 != retry: log.info(f'将在 {sec} 秒后重试...') else: log.error(f'🚫 {id}: 失败次数达到上限, 放弃领取该兑换码') log.info('兑换码获取完毕') return
def get_super_list(self): log.info('准备获取超话列表...') try: response = req.request('get', CONFIG.SUPER_URL, headers=self.get_header(), allow_redirects=False) except Exception as e: log.error(e) else: if response.status_code == 200: log.info('🥳 weibo: 超话列表获取成功') return req.to_python(response.text) elif response.status_code == 302: log.error('😳 weibo: 登录可能失效, 尝试重新登录') else: log.error('😳 weibo: 超话列表获取失败') log.info('超话列表获取完毕') return
def get_super_list(self): log.info('Prepare to get a list of devices...') try: response = req.request('get', CONFIG.SUPER_URL, headers=self.get_header(), allow_redirects=False) except Exception as e: log.error(e) else: if response.status_code == 200: log.info('🥳 weibo: Superphracted list acquisition success') return req.to_python(response.text) elif response.status_code == 302: log.error('😳 weibo: Login may fail, try to log in again') else: log.error('😳 weibo: Super words list acquisition failed') log.info('Super words list') return
def get_id(self): log.info('准备获取活动信息...') id_list = [] try: response = req.to_python(req.request( 'get', CONFIG.YS_URL, headers=self.header).text) group = response['data']['cards'][3]['card_group'][0]['group'] except Exception as e: log.error(f'活动信息获取失败:\n{e}') else: for ids in group: if '礼包' in ids.get('title_sub', ''): id = re.findall('(?<=gift\/)(.*)\?channel', ids['scheme'])[0] log.info(f'└─🎁 {ids["title_sub"]}') id_list.append(id) if not id_list: log.info('原神超话暂无活动') log.info('活动信息获取完毕') return id_list
def get_id(self): log.info('Preparing to obtain activity information...') id_list = [] try: response = req.to_python( req.request('get', CONFIG.YS_URL, headers=self.header).text) group = response['data']['cards'][3]['card_group'][0]['group'] except Exception as e: log.error(f'Activity information failure:\n{e}') else: for ids in group: if 'Package' in ids.get('title_sub', ''): id = re.findall('(?<=gift\/)(.*)\?channel', ids['scheme'])[0] log.info(f'└─🎁 {ids["title_sub"]}') id_list.append(id) if not id_list: log.info('Original God overtime') log.info('The activity information is acquired') return id_list
def get_region_name(self): region_name_url = CONFIG.OS_ROLE_URL try: response = req.request('get', region_name_url, headers=self.get_header()).text # get region_name base on highest character level in the server character_list = req.to_python(response).get('data', {}).get('list') if len(character_list) == 1: return character_list[0]['region_name'] main_character_level = 0 region_name = '' for data in character_list: if data['level'] > main_character_level: main_character_level = data['level'] region_name = data['region_name'] return region_name except Exception as e: log.error('failure in get_region_name') raise
def pushTemplate(self, method, url, params=None, data=None, json=None, headers=None, **kwargs): name = kwargs.get('name') # needs = kwargs.get('needs') token = kwargs.get('token') text = kwargs.get('text') code = kwargs.get('code') if not token: log.info(f'{name} 🚫') # log.info (f '{name} The {NEDS} needed to push the {NEEDS} is not set, you are skipping ...') return try: response = req.to_python( req.request(method, url, 2, params, data, json, headers).text) rspcode = response[text] except Exception as e: # 🚫:disabled; 🥳:success; 😳:fail; log.error(f'{name} 😳\n{e}') else: if rspcode == code: log.info(f'{name} 🥳') # Telegram Bot elif name == 'Telegram Bot' and rspcode: log.info(f'{name} 🥳') elif name == 'Telegram Bot' and response[code] == 400: log.error( f'{name} 😳\n Please take the initiative bot, send a message and check if the TG_USER_ID is right or not' ) elif name == 'Telegram Bot' and response[code] == 401: log.error(f'{name} 😳\nTG_BOT_TOKEN error') else: log.error(f'{name} 😳\n{response}')