From 63afd6df2da41d4b7c25779e7fb82dbcca5fa3b0 Mon Sep 17 00:00:00 2001 From: Womsxd <45663319+Womsxd@users.noreply.github.com> Date: Mon, 25 Oct 2021 22:53:34 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=A0=BC=E5=BC=8F=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config.py | 43 +++++++++++----------- genshin.py | 52 ++++++++++++++------------- honkai3rd.py | 55 ++++++++++++++-------------- index.py | 7 ++-- login.py | 7 ++-- main.py | 34 ++++++++++-------- main_multi.py | 15 ++++---- mihoyobbs.py | 46 ++++++++++++------------ push_main-server.py | 18 +++++----- request.py | 20 +++++++---- setting.py | 88 ++++++++++++++++++++++----------------------- tools.py | 45 +++++++++++++---------- 12 files changed, 231 insertions(+), 199 deletions(-) diff --git a/config.py b/config.py index 10018cd..8cc359f 100644 --- a/config.py +++ b/config.py @@ -2,44 +2,45 @@ import os import json import tools -#是否启用config +# 是否启用config enable_Config = True -#这里的内容会自动获取 +# 这里的内容会自动获取 mihoyobbs_Login_ticket = "" mihoyobbs_Stuid = "" mihoyobbs_Stoken = "" -#这里是米游社的cookie +# 这里是米游社的cookie mihoyobbs_Cookies = "" -#这个dist里面的内容和米游社有关 +# 这个dist里面的内容和米游社有关 mihoyobbs = { - #全局开关,关闭之后下面的都不执行 + # 全局开关,关闭之后下面的都不执行 "bbs_Global": True, - #讨论区签到 + # 讨论区签到 "bbs_Signin": True, - #多个讨论区签到 + # 多个讨论区签到 "bbs_Signin_multi": True, - #指定签到讨论区 - #1是崩坏3 2是原神 3是崩坏2 4是未定事件簿 5是大别墅 - #可以通过设置讨论区的id位置来设置主讨论区,[5,1]就是大别墅为主社区 - #看帖子 点赞 分享帖子都是使用主社区获取到的列表 - "bbs_Signin_multi_list": [2,5], - #浏览3个帖子 + # 指定签到讨论区 + # 1是崩坏3 2是原神 3是崩坏2 4是未定事件簿 5是大别墅 + # 可以通过设置讨论区的id位置来设置主讨论区,[5,1]就是大别墅为主社区 + # 看帖子 点赞 分享帖子都是使用主社区获取到的列表 + "bbs_Signin_multi_list": [2, 5], + # 浏览3个帖子 "bbs_Read_posts": True, - #完成5次点赞 + # 完成5次点赞 "bbs_Like_posts": True, - #完成后取消点赞 + # 完成后取消点赞 "bbs_Unlike": True, - #分享帖子 + # 分享帖子 "bbs_Share": True, } -#原神自动签到 +# 原神自动签到 genshin_Auto_sign = True -#崩坏3自动签到 +# 崩坏3自动签到 honkai3rd_Auto_sign = True path = os.path.dirname(os.path.realpath(__file__)) + "/config" config_Path = f"{path}/config.json" + def Load_config(): with open(config_Path, "r") as f: data = json.load(f) @@ -69,8 +70,9 @@ def Load_config(): f.close() tools.log.info("Config加载完毕") + def Save_config(): - with open(config_Path,"r+") as f: + with open(config_Path, "r+") as f: data = json.load(f) data["mihoyobbs_Login_ticket"] = mihoyobbs_Login_ticket data["mihoyobbs_Stuid"] = mihoyobbs_Stuid @@ -83,8 +85,9 @@ def Save_config(): f.close() tools.log.info("Config保存完毕") + def Clear_cookies(): - with open(config_Path,"r+") as f: + with open(config_Path, "r+") as f: data = json.load(f) data["enable_Config"] = False data["mihoyobbs_Login_ticket"] = "" diff --git a/genshin.py b/genshin.py index 86adc34..a414946 100644 --- a/genshin.py +++ b/genshin.py @@ -5,27 +5,28 @@ import random import setting from request import http + class genshin: def __init__(self) -> None: self.headers = { - 'Accept': 'application/json, text/plain, */*', - 'DS': tools.Get_ds(web=True, web_old=True), - 'Origin': 'https://webstatic.mihoyo.com', - 'x-rpc-app_version': setting.mihoyobbs_Version_old, - 'User-Agent': 'Mozilla/5.0 (Linux; Android 9; Unspecified Device) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/39.0.0.0 Mobile Safari/537.36 miHoYoBBS/2.3.0', - 'x-rpc-client_type': setting.mihoyobbs_Client_type_web, - 'Referer': 'https://webstatic.mihoyo.com/bbs/event/signin-ys/index.html?bbs_auth_required=true&act_id=e202009291139501&utm_source=bbs&utm_medium=mys&utm_campaign=icon', - 'Accept-Encoding': 'gzip, deflate', - 'Accept-Language': 'zh-CN,en-US;q=0.8', - 'X-Requested-With': 'com.mihoyo.hyperion', - "Cookie": config.mihoyobbs_Cookies, - 'x-rpc-device_id': tools.Get_deviceid() - } + 'Accept': 'application/json, text/plain, */*', + 'DS': tools.Get_ds(web=True, web_old=True), + 'Origin': 'https://webstatic.mihoyo.com', + 'x-rpc-app_version': setting.mihoyobbs_Version_old, + 'User-Agent': 'Mozilla/5.0 (Linux; Android 9; Unspecified Device) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/39.0.0.0 Mobile Safari/537.36 miHoYoBBS/2.3.0', + 'x-rpc-client_type': setting.mihoyobbs_Client_type_web, + 'Referer': 'https://webstatic.mihoyo.com/bbs/event/signin-ys/index.html?bbs_auth_required=true&act_id=e202009291139501&utm_source=bbs&utm_medium=mys&utm_campaign=icon', + 'Accept-Encoding': 'gzip, deflate', + 'Accept-Language': 'zh-CN,en-US;q=0.8', + 'X-Requested-With': 'com.mihoyo.hyperion', + "Cookie": config.mihoyobbs_Cookies, + 'x-rpc-device_id': tools.Get_deviceid() + } self.acc_List = self.Getacc_list() if len(self.acc_List) != 0: self.sign_Give = self.Get_signgive() - #获取绑定的账号列表 + # 获取绑定的账号列表 def Getacc_list(self) -> list: tools.log.info("正在获取米哈游账号绑定原神账号列表...") temp_List = [] @@ -39,34 +40,34 @@ class genshin: tools.log.info(f"已获取到{len(temp_List)}个原神账号信息") return temp_List - #获取已经签到奖励列表 + # 获取已经签到奖励列表 def Get_signgive(self) -> list: tools.log.info("正在获取签到奖励列表...") - req = http.get(setting.genshin_Signlisturl.format(setting.genshin_Act_id),headers=self.headers) + req = http.get(setting.genshin_Signlisturl.format(setting.genshin_Act_id), headers=self.headers) data = req.json() if data["retcode"] != 0: tools.log.warn("获取签到奖励列表失败") - print (req.text) + print(req.text) exit(1) return data["data"]["awards"] - #判断签到 - def Is_sign(self, region:str, uid:str): + # 判断签到 + def Is_sign(self, region: str, uid: str): req = http.get(setting.genshin_Is_signurl.format(setting.genshin_Act_id, region, uid), headers=self.headers) data = req.json() if data["retcode"] != 0: tools.log.warn("获取账号签到信息失败!") - print (req.text) + print(req.text) exit(1) return data["data"] - #签到 + # 签到 def Sign_acc(self): if len(self.acc_List) != 0: for i in self.acc_List: tools.log.info(f"正在为旅行者{i[0]}进行签到...") time.sleep(random.randint(2, 8)) - is_data = self.Is_sign(region = i[2], uid = i[1]) + is_data = self.Is_sign(region=i[2], uid=i[1]) if is_data["first_bind"]: tools.log.warn(f"旅行者{i[0]}是第一次绑定米游社,请先手动签到一次") else: @@ -76,17 +77,18 @@ class genshin: else: time.sleep(random.randint(2, 8)) req = http.post(url=setting.genshin_Signurl, headers=self.headers, - json={'act_id': setting.genshin_Act_id, 'region': i[2], 'uid': i[1]}) + json={'act_id': setting.genshin_Act_id, 'region': i[2], 'uid': i[1]}) data = req.json() if data["retcode"] == 0: if sign_Days == 0: tools.log.info(f"旅行者{i[0]}签到成功~\r\n今天获得的奖励是{tools.Get_item(self.sign_Give[sign_Days])}") else: - tools.log.info(f"旅行者{i[0]}签到成功~\r\n今天获得的奖励是{tools.Get_item(self.sign_Give[sign_Days + 1])}") + tools.log.info( + f"旅行者{i[0]}签到成功~\r\n今天获得的奖励是{tools.Get_item(self.sign_Give[sign_Days + 1])}") elif data["retcode"] == -5003: tools.log.info(f"旅行者{i[0]}今天已经签到过了~\r\n今天获得的奖励是{tools.Get_item(self.sign_Give[sign_Days])}") else: tools.log.warn("账号签到失败!") - print (req.text) + print(req.text) else: tools.log.warn("账号没有绑定任何原神账号!") diff --git a/honkai3rd.py b/honkai3rd.py index f75dfdc..5a97819 100644 --- a/honkai3rd.py +++ b/honkai3rd.py @@ -5,25 +5,26 @@ import random import setting from request import http + class honkai3rd: def __init__(self) -> None: self.headers = { - 'Accept': 'application/json, text/plain, */*', - 'DS': tools.Get_ds(web=True, web_old=True), - 'Origin': 'https://webstatic.mihoyo.com', - 'x-rpc-app_version': setting.mihoyobbs_Version_old, - 'User-Agent': 'Mozilla/5.0 (Linux; Android 9; Unspecified Device) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/39.0.0.0 Mobile Safari/537.36 miHoYoBBS/2.3.0', - 'x-rpc-client_type': setting.mihoyobbs_Client_type_web, - 'Referer': 'https://webstatic.mihoyo.com/bh3/event/euthenia/index.html?bbs_presentation_style=fullscreen&bbs_game_role_required=bh3_cn&bbs_auth_required=true&act_id=e202104072769&utm_source=bbs&utm_medium=mys&utm_campaign=icon', - 'Accept-Encoding': 'gzip, deflate', - 'Accept-Language': 'zh-CN,en-US;q=0.8', - 'X-Requested-With': 'com.mihoyo.hyperion', - "Cookie": config.mihoyobbs_Cookies, - 'x-rpc-device_id': tools.Get_deviceid() - } + 'Accept': 'application/json, text/plain, */*', + 'DS': tools.Get_ds(web=True, web_old=True), + 'Origin': 'https://webstatic.mihoyo.com', + 'x-rpc-app_version': setting.mihoyobbs_Version_old, + 'User-Agent': 'Mozilla/5.0 (Linux; Android 9; Unspecified Device) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/39.0.0.0 Mobile Safari/537.36 miHoYoBBS/2.3.0', + 'x-rpc-client_type': setting.mihoyobbs_Client_type_web, + 'Referer': 'https://webstatic.mihoyo.com/bh3/event/euthenia/index.html?bbs_presentation_style=fullscreen&bbs_game_role_required=bh3_cn&bbs_auth_required=true&act_id=e202104072769&utm_source=bbs&utm_medium=mys&utm_campaign=icon', + 'Accept-Encoding': 'gzip, deflate', + 'Accept-Language': 'zh-CN,en-US;q=0.8', + 'X-Requested-With': 'com.mihoyo.hyperion', + "Cookie": config.mihoyobbs_Cookies, + 'x-rpc-device_id': tools.Get_deviceid() + } self.acc_List = self.Getacc_list() - #获取绑定的账号列表 + # 获取绑定的账号列表 def Getacc_list(self) -> list: tools.log.info("正在获取米哈游账号绑定的崩坏3账号列表...") temp_List = [] @@ -37,24 +38,24 @@ class honkai3rd: tools.log.info(f"已获取到{len(temp_List)}个崩坏3账号信息") return temp_List - #获取今天已经签到了的dict - def Get_today_item(self,raw_data:list) -> dict: - #用range进行循环,当staus等于0的时候上一个就是今天签到的dict + # 获取今天已经签到了的dict + def Get_today_item(self, raw_data: list) -> dict: + # 用range进行循环,当staus等于0的时候上一个就是今天签到的dict for i in range(len(raw_data)): if raw_data[i]["status"] == 0: - return raw_data[i-1] + return raw_data[i - 1] if raw_data[i]["status"] == 1: return raw_data[i] if i == int(len(raw_data) - 1) and raw_data[i]["status"] != 0: return raw_data[i] - #判断签到 - def Is_sign(self, region:str, uid:str, nickname:str): + # 判断签到 + def Is_sign(self, region: str, uid: str, nickname: str): req = http.get(setting.honkai3rd_Is_signurl.format(setting.honkai3rd_Act_id, region, uid), headers=self.headers) data = req.json() if data["retcode"] != 0: tools.log.warn("获取账号签到信息失败!") - print (req.text) + print(req.text) exit(1) today_Item = self.Get_today_item(data["data"]["sign"]["list"]) if today_Item["status"] == 1: @@ -63,26 +64,26 @@ class honkai3rd: tools.log.info(f"舰长{nickname}今天已经签到过了~\r\n今天获得的奖励是{tools.Get_item(today_Item)}") return False - #签到 + # 签到 def Sign_acc(self): if len(self.acc_List) != 0: for i in self.acc_List: tools.log.info(f"正在为舰长{i[0]}进行签到...") time.sleep(random.randint(2, 8)) - is_data = self.Is_sign(region = i[2], uid = i[1], nickname = i[0]) + is_data = self.Is_sign(region=i[2], uid=i[1], nickname=i[0]) if is_data: time.sleep(random.randint(2, 8)) req = http.post(url=setting.honkai3rd_SignUrl, headers=self.headers, - json={'act_id': setting.honkai3rd_Act_id, 'region': i[2], 'uid': i[1]}) + json={'act_id': setting.honkai3rd_Act_id, 'region': i[2], 'uid': i[1]}) data = req.json() if data["retcode"] == 0: today_Item = self.Get_today_item(data["data"]["list"]) tools.log.info(f"舰长{i[0]}签到成功~\r\n今天获得的奖励是{tools.Get_item(today_Item)}") elif data["retcode"] == -5003: - #崩坏3应为奖励列表和签到信息在一起了,加上上面已经可以进行了一次判断,所以这里旧不重复再次执行判断来获取内容了 + # 崩坏3应为奖励列表和签到信息在一起了,加上上面已经可以进行了一次判断,所以这里旧不重复再次执行判断来获取内容了 tools.log.info(f"舰长{i[0]}今天已经签到过了~") else: tools.log.warn("账号签到失败!") - print (req.text) + print(req.text) else: - tools.log.warn("账号没有绑定任何崩坏3账号!") \ No newline at end of file + tools.log.warn("账号没有绑定任何崩坏3账号!") diff --git a/index.py b/index.py index c30d812..3b226b3 100644 --- a/index.py +++ b/index.py @@ -2,13 +2,14 @@ import main import main_multi -def main_handler(event:dict, context:dict): +def main_handler(event: dict, context: dict): main.main() print("云函数测试支持!") return 0 -def main_handler_mulit(event:dict, context:dict): - #多用户需要传递True表示自动执行,不需要手动进行确认 + +def main_handler_mulit(event: dict, context: dict): + # 多用户需要传递True表示自动执行,不需要手动进行确认 main_multi.main_multi(True) print("云函数多用户测试支持!") return 0 diff --git a/login.py b/login.py index 9c2f70f..e5daaca 100644 --- a/login.py +++ b/login.py @@ -3,20 +3,21 @@ import config import request import setting + def login(): if (config.mihoyobbs_Cookies == ''): log.error("请填入Cookies!") config.Clear_cookies() exit(1) temp_Cookies = {} - #判断Cookie里面是否有login_ticket 没有的话直接退了 + # 判断Cookie里面是否有login_ticket 没有的话直接退了 if "login_ticket" in config.mihoyobbs_Cookies: temp_Cookies = config.mihoyobbs_Cookies.split(";") for i in temp_Cookies: if i.split("=")[0] == " login_ticket": config.mihoyobbs_Login_ticket = i.split("=")[1] break - #这里获取Stuid,但是实际是可以直接拿cookie里面的Uid + # 这里获取Stuid,但是实际是可以直接拿cookie里面的Uid data = request.get(url=setting.bbs_Cookieurl.format(config.mihoyobbs_Login_ticket)) if "成功" in data["data"]["msg"]: config.mihoyobbs_Stuid = str(data["data"]["cookie_info"]["account_id"]) @@ -32,4 +33,4 @@ def login(): else: log.error("cookie中没有'login_ticket'字段,请重新登录米游社,重新抓取cookie!") config.Clear_cookies() - exit(1) \ No newline at end of file + exit(1) diff --git a/main.py b/main.py index ebe6179..168cc04 100644 --- a/main.py +++ b/main.py @@ -8,39 +8,41 @@ import setting import mihoyobbs import honkai3rd + def main(): - #初始化,加载配置 + # 初始化,加载配置 config.Load_config() if config.enable_Config: - #检测参数是否齐全,如果缺少就进行登入操作 + # 检测参数是否齐全,如果缺少就进行登入操作 if config.mihoyobbs_Login_ticket == "" or config.mihoyobbs_Stuid == "" or config.mihoyobbs_Stoken == "": - #登入 + # 登入 login.login() time.sleep(random.randint(2, 8)) - #获取要使用的BBS列表,#判断是否开启bbs_Signin_multi + # 获取要使用的BBS列表,#判断是否开启bbs_Signin_multi if config.mihoyobbs["bbs_Signin_multi"]: - #速度快,但是无法设置主社区,主社区默认为第一个 + # 速度快,但是无法设置主社区,主社区默认为第一个 ''' for i in setting.mihoyobbs_List: if int(i["id"]) in config.mihoyobbs["bbs_Signin_multi_list"]: setting.mihoyobbs_List_Use.append(i) ''' - #用这里的方案可以实现当让id在第一个的时候为主社区 + # 用这里的方案可以实现当让id在第一个的时候为主社区 for i in config.mihoyobbs["bbs_Signin_multi_list"]: for i2 in setting.mihoyobbs_List: if i == int(i2["id"]): setting.mihoyobbs_List_Use.append(i2) else: - #关闭bbs_Signin_multi后只签到大别墅 + # 关闭bbs_Signin_multi后只签到大别墅 for i in setting.mihoyobbs_List: if int(i["id"]) == 5: setting.mihoyobbs_List_Use.append(i) - #米游社签到 + # 米游社签到 if config.mihoyobbs["bbs_Global"]: bbs = mihoyobbs.mihoyobbs() - if bbs.Task_do["bbs_Sign"] and bbs.Task_do["bbs_Read_posts"] and bbs.Task_do["bbs_Like_posts"] and bbs.Task_do["bbs_Share"]: + if bbs.Task_do["bbs_Sign"] and bbs.Task_do["bbs_Read_posts"] and bbs.Task_do["bbs_Like_posts"] and \ + bbs.Task_do["bbs_Share"]: tools.log.info(f"今天已经全部完成了!一共获得{mihoyobbs.Today_have_getcoins}个米游币,目前有{mihoyobbs.Have_coins}个米游币") - else: + else: if config.mihoyobbs["bbs_Signin"]: bbs.Signin() if config.mihoyobbs["bbs_Read_posts"]: @@ -50,11 +52,12 @@ def main(): if config.mihoyobbs["bbs_Share"]: bbs.Share() bbs.Get_taskslist() - tools.log.info(f"今天已经获得{mihoyobbs.Today_have_getcoins}个米游币,还能获得{mihoyobbs.Today_getcoins}个米游币,目前有{mihoyobbs.Have_coins}个米游币") + tools.log.info( + f"今天已经获得{mihoyobbs.Today_have_getcoins}个米游币,还能获得{mihoyobbs.Today_getcoins}个米游币,目前有{mihoyobbs.Have_coins}个米游币") time.sleep(random.randint(2, 8)) else: tools.log.info("米游社功能未启用!") - #原神签到 + # 原神签到 if config.genshin_Auto_sign: tools.log.info("正在进行原神签到") genshin_Help = genshin.genshin() @@ -62,7 +65,7 @@ def main(): time.sleep(random.randint(2, 8)) else: tools.log.info("原神签到功能未启用!") - #崩坏3签到 + # 崩坏3签到 if config.honkai3rd_Auto_sign: tools.log.info("正在进行崩坏3签到") honkai3rd_Help = honkai3rd.honkai3rd() @@ -70,8 +73,9 @@ def main(): else: tools.log.info("崩坏3签到功能未启用!") else: - tools.log.warn ("Config未启用!") + tools.log.warn("Config未启用!") + if __name__ == "__main__": main() -pass \ No newline at end of file +pass diff --git a/main_multi.py b/main_multi.py index d8fe41d..3f8e9f4 100644 --- a/main_multi.py +++ b/main_multi.py @@ -7,15 +7,17 @@ import config import random import setting -#搜索配置文件 -def Fund_config() ->list: - file_Name=[] + +# 搜索配置文件 +def Fund_config() -> list: + file_Name = [] for files in os.listdir(config.path): if os.path.splitext(files)[1] == '.json': file_Name.append(files) return (file_Name) -def main_multi(autorun:bool): + +def main_multi(autorun: bool): tools.log.info("AutoMihoyoBBS Multi User mode") tools.log.info("正在搜索配置文件!") config_List = Fund_config() @@ -33,11 +35,12 @@ def main_multi(autorun:bool): for i in iter(config_List): tools.log.info(f"正在执行{i}") setting.mihoyobbs_List_Use = [] - config.config_Path= f"{config.path}/{i}" + config.config_Path = f"{config.path}/{i}" main.main() tools.log.info(f"{i}执行完毕") time.sleep(random.randint(3, 10)) + if __name__ == "__main__": if len(sys.argv) >= 2 and sys.argv[1] == "autorun": autorun = True @@ -45,4 +48,4 @@ if __name__ == "__main__": autorun = False main_multi(autorun) exit(0) -pass \ No newline at end of file +pass diff --git a/mihoyobbs.py b/mihoyobbs.py index 7dfd4f4..56d6bc8 100644 --- a/mihoyobbs.py +++ b/mihoyobbs.py @@ -6,9 +6,10 @@ import setting from request import http Today_getcoins = 0 -Today_have_getcoins = 0 #这个变量以后可能会用上,先留着了 +Today_have_getcoins = 0 # 这个变量以后可能会用上,先留着了 Have_coins = 0 + class mihoyobbs: def __init__(self): self.headers = { @@ -34,13 +35,13 @@ class mihoyobbs: "bbs_Share": False } self.Get_taskslist() - #如果这三个任务都做了就没必要获取帖子了 + # 如果这三个任务都做了就没必要获取帖子了 if self.Task_do["bbs_Read_posts"] and self.Task_do["bbs_Like_posts"] and self.Task_do["bbs_Share"]: pass else: self.postsList = self.Getlist() - #获取任务列表,用来判断做了哪些任务 + # 获取任务列表,用来判断做了哪些任务 def Get_taskslist(self): global Today_getcoins global Today_have_getcoins @@ -56,44 +57,44 @@ class mihoyobbs: Today_getcoins = data["data"]["can_get_points"] Today_have_getcoins = data["data"]["already_received_points"] Have_coins = data["data"]["total_points"] - #如果当日可获取米游币数量为0直接判断全部任务都完成了 + # 如果当日可获取米游币数量为0直接判断全部任务都完成了 if Today_getcoins == 0: self.Task_do["bbs_Sign"] = True self.Task_do["bbs_Read_posts"] = True self.Task_do["bbs_Like_posts"] = True self.Task_do["bbs_Share"] = True else: - #如果第0个大于或等于62则直接判定任务没做 + # 如果第0个大于或等于62则直接判定任务没做 if data["data"]["states"][0]["mission_id"] >= 62: tools.log.info(f"新的一天,今天可以获得{Today_getcoins}个米游币") pass else: tools.log.info(f"似乎还有任务没完成,今天还能获得{Today_getcoins}") for i in data["data"]["states"]: - #58是讨论区签到 + # 58是讨论区签到 if i["mission_id"] == 58: if i["is_get_award"]: self.Task_do["bbs_Sign"] = True - #59是看帖子 + # 59是看帖子 elif i["mission_id"] == 59: if i["is_get_award"]: self.Task_do["bbs_Read_posts"] = True else: self.Task_do["bbs_Read_posts_num"] -= i["happened_times"] - #60是给帖子点赞 + # 60是给帖子点赞 elif i["mission_id"] == 60: if i["is_get_award"]: self.Task_do["bbs_Like_posts"] = True else: self.Task_do["bbs_Like_posts_num"] -= i["happened_times"] - #61是分享帖子 + # 61是分享帖子 elif i["mission_id"] == 61: if i["is_get_award"]: self.Task_do["bbs_Share"] = True - #分享帖子,是最后一个任务,到这里了下面都是一次性任务,直接跳出循环 + # 分享帖子,是最后一个任务,到这里了下面都是一次性任务,直接跳出循环 break - #获取要帖子列表 + # 获取要帖子列表 def Getlist(self) -> list: temp_List = [] tools.log.info("正在获取帖子列表......") @@ -104,24 +105,24 @@ class mihoyobbs: tools.log.info("已获取{}个帖子".format(len(temp_List))) return temp_List - #进行签到操作 + # 进行签到操作 def Signin(self): if self.Task_do["bbs_Sign"]: tools.log.info("讨论区任务已经完成过了~") else: tools.log.info("正在签到......") for i in setting.mihoyobbs_List_Use: - req = http.post(url=setting.bbs_Signurl.format(i["id"]), data="" ,headers=self.headers) + req = http.post(url=setting.bbs_Signurl.format(i["id"]), data="", headers=self.headers) data = req.json() if "err" not in data["message"]: - tools.log.info(str(i["name"]+ data["message"])) + tools.log.info(str(i["name"] + data["message"])) time.sleep(random.randint(2, 8)) else: tools.log.info("签到失败,你的cookie可能已过期,请重新设置cookie。") config.Clear_cookies() exit(1) - #看帖子 + # 看帖子 def Readposts(self): if self.Task_do["bbs_Read_posts"]: tools.log.info("看帖任务已经完成过了~") @@ -134,7 +135,7 @@ class mihoyobbs: tools.log.info("看帖:{} 成功".format(self.postsList[i][1])) time.sleep(random.randint(2, 8)) - #点赞 + # 点赞 def Likeposts(self): if self.Task_do["bbs_Like_posts"]: tools.log.info("点赞任务已经完成过了~") @@ -142,21 +143,22 @@ class mihoyobbs: tools.log.info("正在点赞......") for i in range(self.Task_do["bbs_Like_posts_num"]): req = http.post(url=setting.bbs_Likeurl, headers=self.headers, - json={"post_id": self.postsList[i][0], "is_cancel": False}) + json={"post_id": self.postsList[i][0], "is_cancel": False}) data = req.json() if data["message"] == "OK": tools.log.info("点赞:{} 成功".format(self.postsList[i][1])) - #判断取消点赞是否打开 + # 判断取消点赞是否打开 if config.mihoyobbs["bbs_Unlike"]: time.sleep(random.randint(2, 8)) req = http.post(url=setting.bbs_Likeurl, headers=self.headers, - json={"post_id": self.postsList[i][0], "is_cancel": True}) + json={"post_id": self.postsList[i][0], "is_cancel": True}) data = req.json() if data["message"] == "OK": tools.log.info("取消点赞:{} 成功".format(self.postsList[i][1])) - time.sleep(random.randint(2, 8)) + time.sleep(random.randint(2, 8)) + + # 分享操作 - #分享操作 def Share(self): if self.Task_do["bbs_Share"]: tools.log.info("分享任务已经完成过了~") @@ -166,4 +168,4 @@ class mihoyobbs: data = req.json() if data["message"] == "OK": tools.log.info("分享:{} 成功".format(self.postsList[0][1])) - time.sleep(random.randint(2, 8)) \ No newline at end of file + time.sleep(random.randint(2, 8)) diff --git a/push_main-server.py b/push_main-server.py index f05b5ad..6a53754 100644 --- a/push_main-server.py +++ b/push_main-server.py @@ -12,25 +12,25 @@ python_Path = sys.executable run_ShellCommand = python_Path + " main_multi.py autorun" for i in range(2): - opt_id,opt_info = subprocess.getstatusoutput(run_ShellCommand) + opt_id, opt_info = subprocess.getstatusoutput(run_ShellCommand) if opt_id == 0: break - time.sleep(random.randint(30,70)) + time.sleep(random.randint(30, 70)) if opt_id != 0: print("Error!") http.post( - url = send_Url, - data = { - "title":"米游社脚本执行出错!", - "desp": "这里是运行相关日志:\r\n" +opt_info + url=send_Url, + data={ + "title": "米游社脚本执行出错!", + "desp": "这里是运行相关日志:\r\n" + opt_info } ) else: http.post( - url = send_Url, - data = { - "title":"米游社脚本执行成功", + url=send_Url, + data={ + "title": "米游社脚本执行成功", "desp": "这里是运行相关日志:\r\n" + opt_info } ) diff --git a/request.py b/request.py index 575fddc..88ca8f3 100644 --- a/request.py +++ b/request.py @@ -1,17 +1,21 @@ try: - #优先使用httpx,在httpx无法使用的环境下使用requests + # 优先使用httpx,在httpx无法使用的环境下使用requests import httpx + http = httpx - #当openssl版本小于1.0.2的时候直接进行一个空请求让httpx报错 + # 当openssl版本小于1.0.2的时候直接进行一个空请求让httpx报错 import tools + if tools.Get_openssl_Version() <= 102: httpx.get() except: import requests + http = requests -#这里实际上应该加个"-> dict"但是考虑到请求可能失败的关系,所以直接不声明返回变量 -def get(url:str, **headers:dict): + +# 这里实际上应该加个"-> dict"但是考虑到请求可能失败的关系,所以直接不声明返回变量 +def get(url: str, **headers: dict): try: req = http.get(url, headers=headers) return req.json() @@ -19,7 +23,8 @@ def get(url:str, **headers:dict): print("请求失败,网络错误!") return "" -def post(url:str, data:dict, **headers:dict): + +def post(url: str, data: dict, **headers: dict): try: req = http.post(url, data=data, headers=headers) return req.json() @@ -27,10 +32,11 @@ def post(url:str, data:dict, **headers:dict): print("请求失败,网络错误!") return "" -def post_json(url:str, json, **headers:dict): + +def post_json(url: str, json, **headers: dict): try: req = http.post(url, json=json, headers=headers) return req.json() except: print("请求失败,网络错误!") - return "" \ No newline at end of file + return "" diff --git a/setting.py b/setting.py index b4a0807..dcc3b5f 100644 --- a/setting.py +++ b/setting.py @@ -1,68 +1,68 @@ -#米游社的Salt +# 米游社的Salt mihoyobbs_Salt = "fd3ykrh7o1j54g581upo1tvpam0dsgtf" mihoyobbs_Salt_web = "14bmu1mz0yuljprsfgpvjh3ju2ni468r" mihoyobbs_Salt_web_old = "h8w582wxwgqvahcdkpvdhbh2w9casgfl" -#米游社的版本 -mihoyobbs_Version = "2.7.0" #Slat和Version相互对应 +# 米游社的版本 +mihoyobbs_Version = "2.7.0" # Slat和Version相互对应 mihoyobbs_Version_old = "2.3.0" -#米游社的客户端类型 -mihoyobbs_Client_type = "2" #1为ios 2为安卓 -mihoyobbs_Client_type_web = "5" #4为pc web 5为mobile web -#米游社的分区列表 +# 米游社的客户端类型 +mihoyobbs_Client_type = "2" # 1为ios 2为安卓 +mihoyobbs_Client_type_web = "5" # 4为pc web 5为mobile web +# 米游社的分区列表 mihoyobbs_List = [{ - "id": "1", - "forumId": "1", - "name": "崩坏3", - "url": "https://bbs.mihoyo.com/bh3/" - },{ - "id": "2", - "forumId": "26", - "name": "原神", - "url": "https://bbs.mihoyo.com/ys/" - },{ - "id": "3", - "forumId": "30", - "name": "崩坏2", - "url": "https://bbs.mihoyo.com/bh2/" - },{ - "id": "4", - "forumId": "37", - "name": "未定事件簿", - "url": "https://bbs.mihoyo.com/wd/" - },{ - "id": "5", - "forumId": "34", - "name": "大别野", - "url": "https://bbs.mihoyo.com/dby/" - },{ - "id": "6", - "forumId": "52", - "name": "崩坏:星穹铁道", - "url": "https://bbs.mihoyo.com/sr/" - }] + "id": "1", + "forumId": "1", + "name": "崩坏3", + "url": "https://bbs.mihoyo.com/bh3/" +}, { + "id": "2", + "forumId": "26", + "name": "原神", + "url": "https://bbs.mihoyo.com/ys/" +}, { + "id": "3", + "forumId": "30", + "name": "崩坏2", + "url": "https://bbs.mihoyo.com/bh2/" +}, { + "id": "4", + "forumId": "37", + "name": "未定事件簿", + "url": "https://bbs.mihoyo.com/wd/" +}, { + "id": "5", + "forumId": "34", + "name": "大别野", + "url": "https://bbs.mihoyo.com/dby/" +}, { + "id": "6", + "forumId": "52", + "name": "崩坏:星穹铁道", + "url": "https://bbs.mihoyo.com/sr/" +}] -#Config Load之后run里面进行列表的选择 -mihoyobbs_List_Use= [] +# Config Load之后run里面进行列表的选择 +mihoyobbs_List_Use = [] -#米游社的API列表 +# 米游社的API列表 bbs_Cookieurl = "https://webapi.account.mihoyo.com/Api/cookie_accountinfo_by_loginticket?login_ticket={}" bbs_Cookieurl2 = "https://api-takumi.mihoyo.com/auth/api/getMultiTokenByLoginTicket?login_ticket={}&token_types=3&uid={}" -bbs_Taskslist = "https://bbs-api.mihoyo.com/apihub/sapi/getUserMissionsState" #获取任务列表 +bbs_Taskslist = "https://bbs-api.mihoyo.com/apihub/sapi/getUserMissionsState" # 获取任务列表 bbs_Signurl = "https://bbs-api.mihoyo.com/apihub/sapi/signIn?gids={}" # post bbs_Listurl = "https://bbs-api.mihoyo.com/post/api/getForumPostList?forum_id={}&is_good=false&is_hot=false&page_size=20&sort_type=1" bbs_Detailurl = "https://bbs-api.mihoyo.com/post/api/getPostFull?post_id={}" bbs_Shareurl = "https://bbs-api.mihoyo.com/apihub/api/getShareConf?entity_id={}&entity_type=1" bbs_Likeurl = "https://bbs-api.mihoyo.com/apihub/sapi/upvotePost" # post json -#原神自动签到相关的设置 +# 原神自动签到相关的设置 genshin_Act_id = "e202009291139501" genshin_Account_info_url = "https://api-takumi.mihoyo.com/binding/api/getUserGameRolesByCookie?game_biz=hk4e_cn" genshin_Signlisturl = "https://api-takumi.mihoyo.com/event/bbs_sign_reward/home?act_id={}" genshin_Is_signurl = "https://api-takumi.mihoyo.com/event/bbs_sign_reward/info?act_id={}®ion={}&uid={}" genshin_Signurl = "https://api-takumi.mihoyo.com/event/bbs_sign_reward/sign" -#崩坏3自动签到相关的设置 +# 崩坏3自动签到相关的设置 honkai3rd_Act_id = "e202104072769" honkai3rd_Account_info_url = "https://api-takumi.mihoyo.com/binding/api/getUserGameRolesByCookie?game_biz=bh3_cn" honkai3rd_Is_signurl = "https://api-takumi.mihoyo.com/common/euthenia/index?act_id={}®ion={}&uid={}" -honkai3rd_SignUrl = "https://api-takumi.mihoyo.com/common/euthenia/sign" \ No newline at end of file +honkai3rd_SignUrl = "https://api-takumi.mihoyo.com/common/euthenia/sign" diff --git a/tools.py b/tools.py index 15cbb8f..a45e56c 100644 --- a/tools.py +++ b/tools.py @@ -8,9 +8,10 @@ import logging import hashlib import setting -#Log输出,这里提供了自定义logging输出的机会,只需要创建一个logging.ini并且写入配置文件即可自定义输出 +# Log输出,这里提供了自定义logging输出的机会,只需要创建一个logging.ini并且写入配置文件即可自定义输出 if os.path.exists(f"{config.path}/logging.ini"): import logging.config + logging.config.fileConfig(f"{config.path}/logging.ini") log = logging.getLogger("AutoMihoyoBBS") else: @@ -20,22 +21,26 @@ else: datefmt='%Y-%m-%dT%H:%M:%S') log = logger = logging -#md5计算 -def MD5(text:str) -> str: + +# md5计算 +def MD5(text: str) -> str: md5 = hashlib.md5() md5.update(text.encode()) return md5.hexdigest() -#随机文本 -def Random_text(num:int) -> str: - return''.join(random.sample(string.ascii_lowercase + string.digits, num)) -#时间戳 +# 随机文本 +def Random_text(num: int) -> str: + return ''.join(random.sample(string.ascii_lowercase + string.digits, num)) + + +# 时间戳 def Timestamp() -> int: return int(time.time()) -#获取请求Header里的DS 当web为true则生成网页端的DS -def Get_ds(web:bool, web_old:bool) -> str: + +# 获取请求Header里的DS 当web为true则生成网页端的DS +def Get_ds(web: bool, web_old: bool) -> str: if web: if web_old: n = setting.mihoyobbs_Salt_web_old @@ -48,31 +53,35 @@ def Get_ds(web:bool, web_old:bool) -> str: c = MD5("salt=" + n + "&t=" + i + "&r=" + r) return f"{i},{r},{c}" -#生成一个device id + +# 生成一个device id def Get_deviceid() -> str: return str(uuid.uuid3(uuid.NAMESPACE_URL, config.mihoyobbs_Cookies)).replace( - '-', '').upper() + '-', '').upper() -#获取签到的奖励名称 -def Get_item(raw_data:dict) ->str: + +# 获取签到的奖励名称 +def Get_item(raw_data: dict) -> str: temp_Name = raw_data["name"] temp_Cnt = raw_data["cnt"] return f"{temp_Name}x{temp_Cnt}" -#获取明天早晨0点的时间戳 + +# 获取明天早晨0点的时间戳 def Nextday() -> int: now_time = int(time.time()) nextday_time = now_time - now_time % 86400 + time.timezone + 86400 return nextday_time -#获取Openssl版本 -def Get_openssl_Version() ->int: + +# 获取Openssl版本 +def Get_openssl_Version() -> int: try: import ssl except ImportError: log.error("Openssl Lib Error !!") - #return -99 - #建议直接更新Python的版本,有特殊情况请提交issues + # return -99 + # 建议直接更新Python的版本,有特殊情况请提交issues exit(-1) temp_List = ssl.OPENSSL_VERSION_INFO return int(f"{str(temp_List[0])}{str(temp_List[1])}{str(temp_List[2])}")