diff --git a/cloud_genshin.py b/cloud_genshin.py new file mode 100644 index 0000000..2643122 --- /dev/null +++ b/cloud_genshin.py @@ -0,0 +1,50 @@ +import tools +import config +import setting +from request import http +from loghelper import log + + +class CloudGenshin: + def __init__(self) -> None: + self.headers = { + 'x-rpc-combo_token': config.config['cloud_games']['genshin']['token'], + 'x-rpc-client_type': setting.mihoyobbs_Client_type, + 'x-rpc-app_version': setting.cloudgenshin_Version, + 'x-rpc-sys_version': '12', + 'x-rpc-channel': 'mihoyo', + 'x-rpc-device_id': tools.get_device_id(), + 'x-rpc-device_name': 'Xiaomi M2012K11AC', + 'x-rpc-device_model': 'M2012K11AC', + 'x-rpc-app_id': '1953439974', + 'Referer': 'https://app.mihoyo.com', + 'Host': 'api-cloudgame.mihoyo.com', + 'Connection': 'Keep-Alive', + 'Accept-Encoding': 'gzip', + 'User-Agent': 'okhttp/4.9.0' + } + + def sign_account(self): + ret_msg = "云原神:\r\n" + req = http.get(url=setting.cloud_genshin_Inquire, headers=self.headers) + data = req.json() + if data['retcode'] == 0: + if req["data"]["free_time"]['free_time'] == '0': + log.info('签到失败,未获得免费时长,可能是已经签到过了或者超出免费时长上线') + else: + log.info(f'签到成功,已获得{data["data"]["free_time"]["free_time"]}分钟免费时长') + ret_msg = f'你当前拥有免费时长 {data["data"]["free_time"]["free_time"]} 分钟,' \ + f'畅玩卡状态为 {data["data"]["play_card"]["short_msg"]},拥有米云币 {data["data"]["coin"]["coin_num"]} 枚' + log.info(ret_msg) + elif data['retcode'] == -100: + ret_msg = "云原神token失效/防沉迷" + log.warning(ret_msg) + config.clear_cookie_cloudgame() + else: + ret_msg = f'脚本签到失败,json文本:{req.text}' + log.warning(ret_msg) + return ret_msg + + +if __name__ == '__main__': + pass diff --git a/config.py b/config.py index 12fc525..aa23d14 100644 --- a/config.py +++ b/config.py @@ -9,7 +9,7 @@ serverless = False update_config_need = False config = { - 'enable': True, 'version': 6, + 'enable': True, 'version': 7, 'account': { 'cookie': '', 'login_ticket': '', @@ -34,6 +34,12 @@ config = { 'enable': False, 'cookie': '', 'genshin': {'auto_checkin': False, 'black_list': []} } + }, + 'cloud_games': { + "genshin": { + 'enable': False, + 'token': '' + } } } @@ -78,6 +84,9 @@ def update_config(): continue config['games']['cn'][i] = config_json['games']['cn'][i] config['games']['os'] = config_json['games']['os'] + config['cloud_genshin']['token'] = config_json['cloud_genshin']['token'] + config['cloud_genshin']['enable'] = config_json['cloud_genshin']['enable'] + print(config) save_config() log.info('config更新完毕') if not serverless: @@ -86,10 +95,24 @@ def update_config(): log.error("请本地更新一下config") +def config_v7_update(data: dict): + global update_config_need + update_config_need = True + data['version'] = 7 + data['cloud_games'] = {"genshin": {'enable': False, 'token': ''}} + log.info("config已升级到: 7") + return data + + def load_config(): global config with open(config_Path, "r", encoding='utf-8') as f: - config = yaml.load(f, Loader=yaml.FullLoader) + data = yaml.load(f, Loader=yaml.FullLoader) + if data['version'] == 7: + config = data + else: + config = config_v7_update(data) + save_config() log.info("Config加载完毕") @@ -136,6 +159,18 @@ def clear_cookies(): log.info("Cookie删除完毕") +def clear_cookie_cloudgame(): + global config + global serverless + if serverless: + log.info("云函数执行,无法保存") + return None + config['cloud_games']['genshin']["enable"] = False + config['cloud_games']['genshin']['token'] = "" + log.info("云原神Cookie删除完毕") + save_config() + + if __name__ == "__main__": # 初始化配置文件 # try: @@ -146,4 +181,5 @@ if __name__ == "__main__": # pass # save_config() # update_config() + load_config() pass diff --git a/config/config.yaml.example b/config/config.yaml.example index 2ce131c..a29e814 100644 --- a/config/config.yaml.example +++ b/config/config.yaml.example @@ -1,5 +1,5 @@ enable: true #这里控制整个config文件是否启用 -version: 6 #config的版本 +version: 7 #config的版本 account: cookie: "" #登入账号只需要修改这里就行了,下面会自动获取 login_ticket: "" @@ -39,3 +39,7 @@ games: genshin: auto_checkin: false black_list: [] +cloud_games: #云游戏专区 + genshin: #云原神 + enable: true #开启签到 + token: "" #这里填入抓包获得的token diff --git a/main.py b/main.py index f5a8c6d..eba661b 100644 --- a/main.py +++ b/main.py @@ -10,6 +10,7 @@ import setting import mihoyobbs import honkai3rd import tearsofthemis +import cloud_genshin from error import * from loghelper import log @@ -95,6 +96,14 @@ def main(): ret_code = 3 return_data += "\n\n" + genshin_message time.sleep(random.randint(2, 8)) + if config.config['cloud_games']['genshin']["enable"]: + log.info("正在进行云原神签到") + if config.config['cloud_games']['genshin']['token'] == "": + log.info("token为空,跳过任务") + else: + cloud_ys = cloud_genshin.CloudGenshin() + data = cloud_ys.sign_account() + return_data += "\n\n" + data return ret_code, return_data elif config.config["account"]["cookie"] == "CookieError": raise CookieError('Cookie expires') diff --git a/setting.py b/setting.py index e9026bd..cdbebcc 100644 --- a/setting.py +++ b/setting.py @@ -7,6 +7,9 @@ mihoyobbs_Version = "2.35.2" # Slat和Version相互对应 # 米游社的客户端类型 mihoyobbs_Client_type = "2" # 1为ios 2为安卓 mihoyobbs_Client_type_web = "5" # 4为pc web 5为mobile web +# 云原神版本 +cloudgenshin_Version = "3.0.0" + # 米游社的分区列表 mihoyobbs_List = [{ "id": "1", @@ -110,3 +113,7 @@ genshin_Act_id = "e202009291139501" genshin_checkin_rewards = f'{web_Api}/event/bbs_sign_reward/home?act_id={genshin_Act_id}' genshin_Is_signurl = web_Api + "/event/bbs_sign_reward/info?act_id={}®ion={}&uid={}" genshin_Signurl = web_Api + "/event/bbs_sign_reward/sign" + +# 云原神相关api +cloud_genshin_Api = "https://api-cloudgame.mihoyo.com" +cloud_genshin_Inquire = cloud_genshin_Api + "/hk4e_cg_cn/wallet/wallet/get" diff --git a/tools.py b/tools.py index 25dfb9e..3527e60 100644 --- a/tools.py +++ b/tools.py @@ -50,7 +50,6 @@ def get_ds2(q: str, b: str) -> str: def get_device_id() -> str: return str(uuid.uuid3(uuid.NAMESPACE_URL, config.config["account"]["cookie"])) - # 获取签到的奖励名称 def get_item(raw_data: dict) -> str: temp_name = raw_data["name"]