mirror of
https://github.com/TDSCDMAA/AutoMihoyoBBS.git
synced 2026-06-02 18:43:42 +08:00
代码格式化
This commit is contained in:
parent
892aabbdd6
commit
63afd6df2d
43
config.py
43
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"] = ""
|
||||
|
||||
52
genshin.py
52
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("账号没有绑定任何原神账号!")
|
||||
|
||||
55
honkai3rd.py
55
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账号!")
|
||||
tools.log.warn("账号没有绑定任何崩坏3账号!")
|
||||
|
||||
7
index.py
7
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
|
||||
|
||||
7
login.py
7
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)
|
||||
exit(1)
|
||||
|
||||
34
main.py
34
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
|
||||
pass
|
||||
|
||||
@ -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
|
||||
pass
|
||||
|
||||
46
mihoyobbs.py
46
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))
|
||||
time.sleep(random.randint(2, 8))
|
||||
|
||||
@ -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
|
||||
}
|
||||
)
|
||||
|
||||
20
request.py
20
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 ""
|
||||
return ""
|
||||
|
||||
88
setting.py
88
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"
|
||||
honkai3rd_SignUrl = "https://api-takumi.mihoyo.com/common/euthenia/sign"
|
||||
|
||||
45
tools.py
45
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])}")
|
||||
|
||||
Loading…
Reference in New Issue
Block a user