This repository has been archived by the owner on May 30, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathmain.py
131 lines (120 loc) · 6.07 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
import requests as r
import json
import os
import re
import sentry_sdk
import random
import time
import yaml
def ReadConf(variable_name, default_value=None):
# Try to get the variable from the environment
env_value = os.environ.get(variable_name)
if env_value is not None:
config_data = yaml.load(env_value, Loader=yaml.FullLoader)
return config_data
# If not found in environment, try to read from config.yml
try:
with open("config.yml", "r", encoding='utf-8') as config_file:
config_data = yaml.load(config_file, Loader=yaml.FullLoader)
return config_data
except FileNotFoundError:
return default_value
sentry_sdk.init(
dsn="https://[email protected]/4506698716348416",
)
conf = ReadConf('SRC_CONFIG')['accounts']
if not conf:
print('请正确配置环境变量或者config.yml后再运行本脚本!')
os._exit(0)
print(f'检测到 {len(conf)} 个账号,正在进行任务……')
class RunError(Exception):
pass
try:
ver_info = r.get('https://api-launcher-static.mihoyo.com/hkrpg_cn/mdk/launcher/api/resource?channel_id=1&key=6KcVuOkbcqjJomjZ&launcher_id=33&sub_channel_id=2', timeout=60).text
version = json.loads(ver_info)['data']['game']['latest']['version']
print(f'从官方API获取到云·星穹铁道最新版本号:{version}')
except:
version = '2.0.0'
NotificationURL = 'https://cg-hkrpg-api.mihoyo.com/hkrpg_cn/cg/gamer/api/listNotifications?status=NotificationStatusUnread&type=NotificationTypePopup&is_sort=true'
WalletURL = 'https://cg-hkrpg-api.mihoyo.com/hkrpg_cn/cg/wallet/wallet/get?cost_method=0'
AnnouncementURL = 'https://cg-hkrpg-api.mihoyo.com/hkrpg_cn/cg/gamer/api/getAnnouncementInfo'
if __name__ == '__main__':
for config in conf:
if config == '':
# Verify config
raise RunError(
f"请在Settings->Secrets->Actions页面中新建名为SRC_CONFIG的变量,并将你的配置填入后再运行!")
else:
token = config['token']
client_type = config['type']
sysver = config['sysver']
deviceid = config['deviceid']
devicename = config['devicename']
devicemodel = config['devicemodel']
appid = config['appid']
headers = {
'x-rpc-combo_token': token,
'x-rpc-client_type': str(client_type),
'x-rpc-app_version': str(version),
'x-rpc-sys_version': str(sysver), # 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-vendor_id': '2',
'x-rpc-cg_game_biz': 'hkrpg_cn',
'x-rpc-op_biz': 'clgm_hkrpg-cn',
'x-rpc-language': 'zh-cn',
'x-rpc-cg_game_id': '9000096',
'Host': 'cg-hkrpg-api.mihoyo.com',
'Connection': 'Keep-Alive',
'Accept-Encoding': 'gzip',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 Edg/121.0.0.0'
}
bbsid = re.findall(r'oi=[0-9]+', token)[0].replace('oi=', '')
wait_time = random.randint(1, 3600) # 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
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:
print(
f'获取签到情况成功!当前签到情况为{json.loads(res.text)["data"]["list"][0]["msg"]}')
print(f'完整返回体为:{res.text}')
else:
raise RunError(
f"签到失败!请带着本次运行的所有log内容到 https://github.com/GamerNoTitle/SRCloud-AutoCheckin 发起issue解决(或者自行解决)。签到出错,返回信息如下:{res.text}")