From a2923675904917936ed8e3a0c26851ecc0804d05 Mon Sep 17 00:00:00 2001 From: Pesy Wu Date: Sun, 15 Oct 2023 13:00:28 +0800 Subject: [PATCH] Update index.py --- SCF/index.py | 189 ++++++++++++++++++++++----------------------------- 1 file changed, 80 insertions(+), 109 deletions(-) diff --git a/SCF/index.py b/SCF/index.py index 1a6411f..f47fe60 100644 --- a/SCF/index.py +++ b/SCF/index.py @@ -13,7 +13,7 @@ import sentry_sdk import random import time -with open('./config.json', 'rt') as f: +with open('./config.json', 'rt') as f: # Local debugging config = json.loads(f.read()) f.close() @@ -26,130 +26,101 @@ sentry_sdk.init( traces_sample_rate=1.0 ) -if type(conf) == type(list()): - pass -elif type(conf) == type(dict()): - ls = [] - ls.append(conf) - conf = ls -print(f'检测到 {len(conf)} 个账号,正在进行任务……') - - -# Options -sct_status = os.environ.get('sct') # https://sct.ftqq.com/ -sct_key = os.environ.get('sct_key') -sct_url = f'https://sctapi.ftqq.com/{sct_key}.send?title=MHYY-AutoCheckin 自动推送' - -sct_msg = '' +# Running in Github Action, use this to get the config +# config = json.loads(os.environ.get('config')) class RunError(Exception): pass +token = config['token'] +client_type = config['type'] try: ver_info = r.get('https://sdk-static.mihoyo.com/hk4e_cn/mdk/launcher/api/resource?key=eYd89JmJ&launcher_id=18', timeout=60).text version = json.loads(ver_info)['data']['game']['latest']['version'] print(f'从官方API获取到云·原神最新版本号:{version}') except: - version = '3.0.0' + version = config['version'] +android = config['android'] +deviceid = config['deviceid'] +devicename = config['devicename'] +devicemodel = config['devicemodel'] +appid = config['appid'] + +bbsid = re.findall(r'oi=[0-9]+', token)[0].replace('oi=', '') NotificationURL = 'https://api-cloudgame.mihoyo.com/hk4e_cg_cn/gamer/api/listNotifications?status=NotificationStatusUnread&type=NotificationTypePopup&is_sort=true' WalletURL = 'https://api-cloudgame.mihoyo.com/hk4e_cg_cn/wallet/wallet/get' AnnouncementURL = 'https://api-cloudgame.mihoyo.com/hk4e_cg_cn/gamer/api/getAnnouncementInfo' +headers = { + 'x-rpc-combo_token': token, + 'x-rpc-client_type': str(client_type), + 'x-rpc-app_version': str(version), + 'x-rpc-sys_version': str(android), # Previous version need to convert the type of this var + 'x-rpc-channel': 'mihoyo', + 'x-rpc-device_id': deviceid, + 'x-rpc-device_name': devicename, + 'x-rpc-device_model': devicemodel, + 'x-rpc-app_id': str(appid), + 'Referer': 'https://app.mihoyo.com', + 'Host': 'api-cloudgame.mihoyo.com', + 'Connection': 'Keep-Alive', + 'Accept-Encoding': 'gzip', + 'User-Agent': 'okhttp/4.9.0' +} def handler(*args): - for config in conf: - if config == '': - # Verify config - raise RunError( - f"请在Settings->Secrets->Actions页面中新建名为config的变量,并将你的配置填入后再运行!") - else: - token = config['token'] - client_type = config['type'] - android = config['android'] - deviceid = config['deviceid'] - devicename = config['devicename'] - devicemodel = config['devicemodel'] - appid = config['appid'] - if token == '' or android == 0 or deviceid == '' or devicemodel == '' or appid == 0: - raise RunError(f'请确认您的配置文件配置正确再运行本程序!') - headers = { - 'x-rpc-combo_token': token, - 'x-rpc-client_type': str(client_type), - 'x-rpc-app_version': str(version), - 'x-rpc-sys_version': str(android), # Previous version need to convert the type of this var - 'x-rpc-channel': 'cyydmihoyo', - 'x-rpc-device_id': deviceid, - 'x-rpc-device_name': devicename, - 'x-rpc-device_model': devicemodel, - 'x-rpc-app_id': '1953439974', - 'x-rpc-vendor_id': '1', # 2023/8/31更新,不知道作用 - 'x-rpc-cg_game_biz': 'hk4e_cn', # 游戏频道,国服就是这个 - 'x-rpc-op_biz': 'clgm_cn', # 2023/8/31更新,不知道作用 - 'x-rpc-language': 'zh-cn', - # 'Referer': 'https://app.mihoyo.com', - 'Host': 'api-cloudgame.mihoyo.com', - 'Connection': 'Keep-Alive', - 'Accept-Encoding': 'gzip', - 'User-Agent': 'okhttp/4.9.0' - } - bbsid = re.findall(r'oi=[0-9]+', token)[0].replace('oi=', '') - wait_time = random.randint(1, 120) # Random Sleep to Avoid Ban - print(f'为了避免同一时间签到人数太多导致被官方怀疑,开始休眠 {wait_time} 秒') - time.sleep(wait_time) - wallet = r.get(WalletURL, headers=headers, timeout=60) - if json.loads(wallet.text) == {"data": None,"message":"登录已失效,请重新登录","retcode":-100}: - print(f'当前登录已过期,请重新登陆!返回为:{wallet.text}') - sct_msg += f'当前登录已过期,请重新登陆!返回为:{wallet.text}' - else: - print( - f"你当前拥有免费时长 {json.loads(wallet.text)['data']['free_time']['free_time']} 分钟,畅玩卡状态为 {json.loads(wallet.text)['data']['play_card']['short_msg']},拥有米云币 {json.loads(wallet.text)['data']['coin']['coin_num']} 枚") - sct_msg += f"你当前拥有免费时长 {json.loads(wallet.text)['data']['free_time']['free_time']} 分钟,畅玩卡状态为 {json.loads(wallet.text)['data']['play_card']['short_msg']},拥有米云币 {json.loads(wallet.text)['data']['coin']['coin_num']} 枚" - announcement = r.get(AnnouncementURL, headers=headers, timeout=60) - print(f'获取到公告列表:{json.loads(announcement.text)["data"]}') - res = r.get(NotificationURL, headers=headers, timeout=60) - success,Signed = False,False - try: - if list(json.loads(res.text)['data']['list']) == []: - success = True - Signed = True - Over = False - elif json.loads(json.loads(res.text)['data']['list'][0]['msg']) == {"num": 15, "over_num": 0, "type": 2, "msg": "每日登录奖励", "func_type": 1}: - success = True - Signed = False - Over = False - elif json.loads(json.loads(res.text)['data']['list'][0]['msg'])['over_num'] > 0: - success = True - Signed = False - Over = True - else: - success = False - except IndexError: + if config == '': + # Verify config + raise RunError( + f"请在Settings->Secrets->Actions页面中新建名为config的变量,并将你的配置填入后再运行!") + else: + if token == '' or android == 0 or deviceid == '' or devicemodel == '' or appid == 0: + raise RunError(f'请确认您的配置文件配置正确再运行本程序!') + wait_time = random.randint(1, 120) # Random Sleep to Avoid Ban + print(f'为了避免同一时间签到人数太多导致被官方怀疑,开始休眠 {wait_time} 秒') + time.sleep(wait_time) + wallet = r.get(WalletURL, headers=headers, timeout=60) + if json.loads(wallet.text) == {"data": None,"message":"登录已失效,请重新登录","retcode":-100}: + print(f'当前登录已过期,请重新登陆!返回为:{wallet.text}') + else: + print( + f"你当前拥有免费时长 {json.loads(wallet.text)['data']['free_time']['free_time']} 分钟,畅玩卡状态为 {json.loads(wallet.text)['data']['play_card']['short_msg']},拥有米云币 {json.loads(wallet.text)['data']['coin']['coin_num']} 枚") + announcement = r.get(AnnouncementURL, headers=headers, timeout=60) + print(f'获取到公告列表:{json.loads(announcement.text)["data"]}') + res = r.get(NotificationURL, headers=headers, timeout=60) + success,Signed = False,False + try: + if list(json.loads(res.text)['data']['list']) == []: + success = True + Signed = True + Over = False + elif json.loads(json.loads(res.text)['data']['list'][0]['msg']) == {"num": 15, "over_num": 0, "type": 2, "msg": "每日登录奖励", "func_type": 1}: + success = True + Signed = False + Over = False + elif json.loads(json.loads(res.text)['data']['list'][0]['msg'])['over_num'] > 0: + success = True + Signed = False + Over = True + else: success = False - if success: - if Signed: - print( - f'获取签到情况成功!今天是否已经签到过了呢?') - sct_msg += f'获取签到情况成功!今天是否已经签到过了呢?' - print(f'完整返回体为:{res.text}') - elif not Signed and Over: - print( - f'获取签到情况成功!当前免费时长已经达到上限!签到情况为{json.loads(res.text)["data"]["list"][0]["msg"]}') - sct_msg += f'获取签到情况成功!当前免费时长已经达到上限!签到情况为{json.loads(res.text)["data"]["list"][0]["msg"]}' - print(f'完整返回体为:{res.text}') - else: - print( - f'获取签到情况成功!当前签到情况为{json.loads(res.text)["data"]["list"][0]["msg"]}') - sct_msg += f'获取签到情况成功!当前签到情况为{json.loads(res.text)["data"]["list"][0]["msg"]}' - print(f'完整返回体为:{res.text}') + except IndexError: + success = False + if success: + if Signed: + print( + f'获取签到情况成功!今天是否已经签到过了呢?') + print(f'完整返回体为:{res.text}') + elif not Signed and Over: + print( + f'获取签到情况成功!当前免费时长已经达到上限!签到情况为{json.loads(res.text)["data"]["list"][0]["msg"]}') + print(f'完整返回体为:{res.text}') else: - raise RunError( - f"签到失败!请带着本次运行的所有log内容到 https://github.com/ElainaMoe/MHYY-AutoCheckin/issues 发起issue解决(或者自行解决)。签到出错,返回信息如下:{res.text}") - if sct_status: - res = r.post(sct_url, json={'title': '', 'short': 'MHYY-AutoCheckin 签到情况报告', 'desp': sct_msg}, timeout=30) - if res.status_code == 200: - print('sct推送完成!') - else: - print('sct无法推送') - print(res.text) \ No newline at end of file + print( + f'获取签到情况成功!当前签到情况为{json.loads(res.text)["data"]["list"][0]["msg"]}') + print(f'完整返回体为:{res.text}') + else: + raise RunError( + f"签到失败!请带着本次运行的所有log内容到 https://github.com/ElainaMoe/MHYY-AutoCheckin/issues 发起issue解决(或者自行解决)。签到出错,返回信息如下:{res.text}")