Update index.py

This commit is contained in:
Pesy Wu 2023-10-15 13:00:28 +08:00 committed by GitHub
parent 737d17daec
commit a292367590
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -13,7 +13,7 @@ import sentry_sdk
import random import random
import time import time
with open('./config.json', 'rt') as f: with open('./config.json', 'rt') as f: # Local debugging
config = json.loads(f.read()) config = json.loads(f.read())
f.close() f.close()
@ -26,130 +26,101 @@ sentry_sdk.init(
traces_sample_rate=1.0 traces_sample_rate=1.0
) )
if type(conf) == type(list()): # Running in Github Action, use this to get the config
pass # config = json.loads(os.environ.get('config'))
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 = ''
class RunError(Exception): class RunError(Exception):
pass pass
token = config['token']
client_type = config['type']
try: try:
ver_info = r.get('https://sdk-static.mihoyo.com/hk4e_cn/mdk/launcher/api/resource?key=eYd89JmJ&launcher_id=18', timeout=60).text 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'] version = json.loads(ver_info)['data']['game']['latest']['version']
print(f'从官方API获取到云·原神最新版本号{version}') print(f'从官方API获取到云·原神最新版本号{version}')
except: 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' 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' WalletURL = 'https://api-cloudgame.mihoyo.com/hk4e_cg_cn/wallet/wallet/get'
AnnouncementURL = 'https://api-cloudgame.mihoyo.com/hk4e_cg_cn/gamer/api/getAnnouncementInfo' 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): def handler(*args):
for config in conf: if config == '':
if config == '': # Verify config
# Verify config raise RunError(
raise RunError( f"请在Settings->Secrets->Actions页面中新建名为config的变量并将你的配置填入后再运行")
f"请在Settings->Secrets->Actions页面中新建名为config的变量并将你的配置填入后再运行") else:
else: if token == '' or android == 0 or deviceid == '' or devicemodel == '' or appid == 0:
token = config['token'] raise RunError(f'请确认您的配置文件配置正确再运行本程序!')
client_type = config['type'] wait_time = random.randint(1, 120) # Random Sleep to Avoid Ban
android = config['android'] print(f'为了避免同一时间签到人数太多导致被官方怀疑,开始休眠 {wait_time}')
deviceid = config['deviceid'] time.sleep(wait_time)
devicename = config['devicename'] wallet = r.get(WalletURL, headers=headers, timeout=60)
devicemodel = config['devicemodel'] if json.loads(wallet.text) == {"data": None,"message":"登录已失效,请重新登录","retcode":-100}:
appid = config['appid'] print(f'当前登录已过期,请重新登陆!返回为:{wallet.text}')
if token == '' or android == 0 or deviceid == '' or devicemodel == '' or appid == 0: else:
raise RunError(f'请确认您的配置文件配置正确再运行本程序!') print(
headers = { 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']}")
'x-rpc-combo_token': token, announcement = r.get(AnnouncementURL, headers=headers, timeout=60)
'x-rpc-client_type': str(client_type), print(f'获取到公告列表:{json.loads(announcement.text)["data"]}')
'x-rpc-app_version': str(version), res = r.get(NotificationURL, headers=headers, timeout=60)
'x-rpc-sys_version': str(android), # Previous version need to convert the type of this var success,Signed = False,False
'x-rpc-channel': 'cyydmihoyo', try:
'x-rpc-device_id': deviceid, if list(json.loads(res.text)['data']['list']) == []:
'x-rpc-device_name': devicename, success = True
'x-rpc-device_model': devicemodel, Signed = True
'x-rpc-app_id': '1953439974', Over = False
'x-rpc-vendor_id': '1', # 2023/8/31更新不知道作用 elif json.loads(json.loads(res.text)['data']['list'][0]['msg']) == {"num": 15, "over_num": 0, "type": 2, "msg": "每日登录奖励", "func_type": 1}:
'x-rpc-cg_game_biz': 'hk4e_cn', # 游戏频道,国服就是这个 success = True
'x-rpc-op_biz': 'clgm_cn', # 2023/8/31更新不知道作用 Signed = False
'x-rpc-language': 'zh-cn', Over = False
# 'Referer': 'https://app.mihoyo.com', elif json.loads(json.loads(res.text)['data']['list'][0]['msg'])['over_num'] > 0:
'Host': 'api-cloudgame.mihoyo.com', success = True
'Connection': 'Keep-Alive', Signed = False
'Accept-Encoding': 'gzip', Over = True
'User-Agent': 'okhttp/4.9.0' else:
}
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:
success = False success = False
if success: except IndexError:
if Signed: success = False
print( if success:
f'获取签到情况成功!今天是否已经签到过了呢?') if Signed:
sct_msg += f'获取签到情况成功!今天是否已经签到过了呢?' print(
print(f'完整返回体为:{res.text}') f'获取签到情况成功!今天是否已经签到过了呢?')
elif not Signed and Over: print(f'完整返回体为:{res.text}')
print( elif not Signed and Over:
f'获取签到情况成功!当前免费时长已经达到上限!签到情况为{json.loads(res.text)["data"]["list"][0]["msg"]}') print(
sct_msg += f'获取签到情况成功!当前免费时长已经达到上限!签到情况为{json.loads(res.text)["data"]["list"][0]["msg"]}' f'获取签到情况成功!当前免费时长已经达到上限!签到情况为{json.loads(res.text)["data"]["list"][0]["msg"]}')
print(f'完整返回体为:{res.text}') 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}')
else: else:
raise RunError( print(
f"签到失败请带着本次运行的所有log内容到 https://github.com/ElainaMoe/MHYY-AutoCheckin/issues 发起issue解决或者自行解决。签到出错返回信息如下{res.text}") f'获取签到情况成功!当前签到情况为{json.loads(res.text)["data"]["list"][0]["msg"]}')
if sct_status: print(f'完整返回体为:{res.text}')
res = r.post(sct_url, json={'title': '', 'short': 'MHYY-AutoCheckin 签到情况报告', 'desp': sct_msg}, timeout=30) else:
if res.status_code == 200: raise RunError(
print('sct推送完成') f"签到失败请带着本次运行的所有log内容到 https://github.com/ElainaMoe/MHYY-AutoCheckin/issues 发起issue解决或者自行解决。签到出错返回信息如下{res.text}")
else:
print('sct无法推送')
print(res.text)