变量名小写,Log单独文件

This commit is contained in:
Womsxd 2022-01-06 13:49:25 +08:00
parent 08a5e53233
commit 3903607f7e
No known key found for this signature in database
GPG Key ID: 0FE76418EE689B68
11 changed files with 176 additions and 169 deletions

View File

@ -1,6 +1,6 @@
import os import os
import json import json
import tools from loghelper import log
# 是否启用config # 是否启用config
enable_Config = True enable_Config = True
@ -41,7 +41,7 @@ path = os.path.dirname(os.path.realpath(__file__)) + "/config"
config_Path = f"{path}/config.json" config_Path = f"{path}/config.json"
def Load_config(): def load_config():
with open(config_Path, "r") as f: with open(config_Path, "r") as f:
data = json.load(f) data = json.load(f)
global enable_Config global enable_Config
@ -68,10 +68,10 @@ def Load_config():
genshin_Auto_sign = data["genshin_Auto_sign"] genshin_Auto_sign = data["genshin_Auto_sign"]
honkai3rd_Auto_sign = data["honkai3rd_Auto_sign"] honkai3rd_Auto_sign = data["honkai3rd_Auto_sign"]
f.close() f.close()
tools.log.info("Config加载完毕") log.info("Config加载完毕")
def Save_config(): def save_config():
with open(config_Path, "r+") as f: with open(config_Path, "r+") as f:
data = json.load(f) data = json.load(f)
data["mihoyobbs_Login_ticket"] = mihoyobbs_Login_ticket data["mihoyobbs_Login_ticket"] = mihoyobbs_Login_ticket
@ -83,10 +83,10 @@ def Save_config():
f.write(temp_Text) f.write(temp_Text)
f.flush() f.flush()
f.close() f.close()
tools.log.info("Config保存完毕") log.info("Config保存完毕")
def Clear_cookies(): def clear_cookies():
with open(config_Path, "r+") as f: with open(config_Path, "r+") as f:
data = json.load(f) data = json.load(f)
data["enable_Config"] = False data["enable_Config"] = False
@ -100,4 +100,4 @@ def Clear_cookies():
f.write(temp_Text) f.write(temp_Text)
f.flush() f.flush()
f.close() f.close()
tools.log.info("Cookie删除完毕") log.info("Cookie删除完毕")

View File

@ -1,5 +1,6 @@
class cookieError(Exception): class CookieError(Exception):
def __init__(self, info): def __init__(self, info):
self.info = info self.info = info
def __str__(self): def __str__(self):
return repr(self.info) return repr(self.info)

View File

@ -4,13 +4,14 @@ import config
import random import random
import setting import setting
from request import http from request import http
from loghelper import log
class genshin: class Genshin:
def __init__(self) -> None: def __init__(self) -> None:
self.headers = { self.headers = {
'Accept': 'application/json, text/plain, */*', 'Accept': 'application/json, text/plain, */*',
'DS': tools.Get_ds(web=True, web_old=True), 'DS': tools.get_ds(web=True, web_old=True),
'Origin': 'https://webstatic.mihoyo.com', 'Origin': 'https://webstatic.mihoyo.com',
'x-rpc-app_version': setting.mihoyobbs_Version_old, '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', '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',
@ -20,75 +21,75 @@ class genshin:
'Accept-Language': 'zh-CN,en-US;q=0.8', 'Accept-Language': 'zh-CN,en-US;q=0.8',
'X-Requested-With': 'com.mihoyo.hyperion', 'X-Requested-With': 'com.mihoyo.hyperion',
"Cookie": config.mihoyobbs_Cookies, "Cookie": config.mihoyobbs_Cookies,
'x-rpc-device_id': tools.Get_deviceid() 'x-rpc-device_id': tools.get_device_id()
} }
self.acc_List = self.Getacc_list() self.acc_List = self.get_account_list()
if len(self.acc_List) != 0: if len(self.acc_List) != 0:
self.sign_Give = self.Get_signgive() self.sign_Give = self.get_signgive()
# 获取绑定的账号列表 # 获取绑定的账号列表
def Getacc_list(self) -> list: def get_account_list(self) -> list:
tools.log.info("正在获取米哈游账号绑定原神账号列表...") log.info("正在获取米哈游账号绑定原神账号列表...")
temp_List = [] temp_list = []
req = http.get(setting.genshin_Account_info_url, headers=self.headers) req = http.get(setting.genshin_Account_info_url, headers=self.headers)
data = req.json() data = req.json()
if data["retcode"] != 0: if data["retcode"] != 0:
tools.log.warning("获取账号列表失败!") log.warning("获取账号列表失败!")
exit(1) exit(1)
for i in data["data"]["list"]: for i in data["data"]["list"]:
temp_List.append([i["nickname"], i["game_uid"], i["region"]]) temp_list.append([i["nickname"], i["game_uid"], i["region"]])
tools.log.info(f"已获取到{len(temp_List)}个原神账号信息") log.info(f"已获取到{len(temp_list)}个原神账号信息")
return temp_List return temp_list
# 获取已经签到奖励列表 # 获取已经签到奖励列表
def Get_signgive(self) -> list: def get_signgive(self) -> list:
tools.log.info("正在获取签到奖励列表...") 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() data = req.json()
if data["retcode"] != 0: if data["retcode"] != 0:
tools.log.warning("获取签到奖励列表失败") log.warning("获取签到奖励列表失败")
print(req.text) print(req.text)
exit(1) exit(1)
return data["data"]["awards"] 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) req = http.get(setting.genshin_Is_signurl.format(setting.genshin_Act_id, region, uid), headers=self.headers)
data = req.json() data = req.json()
if data["retcode"] != 0: if data["retcode"] != 0:
tools.log.warning("获取账号签到信息失败!") log.warning("获取账号签到信息失败!")
print(req.text) print(req.text)
exit(1) exit(1)
return data["data"] return data["data"]
# 签到 # 签到
def Sign_acc(self): def sign_account(self):
if len(self.acc_List) != 0: if len(self.acc_List) != 0:
for i in self.acc_List: for i in self.acc_List:
tools.log.info(f"正在为旅行者{i[0]}进行签到...") log.info(f"正在为旅行者{i[0]}进行签到...")
time.sleep(random.randint(2, 8)) 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"]: if is_data["first_bind"]:
tools.log.warning(f"旅行者{i[0]}是第一次绑定米游社,请先手动签到一次") log.warning(f"旅行者{i[0]}是第一次绑定米游社,请先手动签到一次")
else: else:
sign_Days = is_data["total_sign_day"] - 1 sign_days = is_data["total_sign_day"] - 1
if is_data["is_sign"]: if is_data["is_sign"]:
tools.log.info(f"旅行者{i[0]}今天已经签到过了~\r\n今天获得的奖励是{tools.Get_item(self.sign_Give[sign_Days])}") log.info(f"旅行者{i[0]}今天已经签到过了~\r\n今天获得的奖励是{tools.get_item(self.sign_Give[sign_days])}")
else: else:
time.sleep(random.randint(2, 8)) time.sleep(random.randint(2, 8))
req = http.post(url=setting.genshin_Signurl, headers=self.headers, 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() data = req.json()
if data["retcode"] == 0: if data["retcode"] == 0:
if sign_Days == 0: if sign_days == 0:
tools.log.info(f"旅行者{i[0]}签到成功~\r\n今天获得的奖励是{tools.Get_item(self.sign_Give[sign_Days])}") log.info(f"旅行者{i[0]}签到成功~\r\n今天获得的奖励是{tools.get_item(self.sign_Give[sign_days])}")
else: else:
tools.log.info( log.info(
f"旅行者{i[0]}签到成功~\r\n今天获得的奖励是{tools.Get_item(self.sign_Give[sign_Days + 1])}") f"旅行者{i[0]}签到成功~\r\n今天获得的奖励是{tools.get_item(self.sign_Give[sign_days + 1])}")
elif data["retcode"] == -5003: elif data["retcode"] == -5003:
tools.log.info(f"旅行者{i[0]}今天已经签到过了~\r\n今天获得的奖励是{tools.Get_item(self.sign_Give[sign_Days])}") log.info(f"旅行者{i[0]}今天已经签到过了~\r\n今天获得的奖励是{tools.get_item(self.sign_Give[sign_days])}")
else: else:
tools.log.warning("账号签到失败!") log.warning("账号签到失败!")
print(req.text) print(req.text)
else: else:
tools.log.warning("账号没有绑定任何原神账号!") log.warning("账号没有绑定任何原神账号!")

View File

@ -4,13 +4,14 @@ import config
import random import random
import setting import setting
from request import http from request import http
from loghelper import log
class honkai3rd: class honkai3rd:
def __init__(self) -> None: def __init__(self) -> None:
self.headers = { self.headers = {
'Accept': 'application/json, text/plain, */*', 'Accept': 'application/json, text/plain, */*',
'DS': tools.Get_ds(web=True, web_old=True), 'DS': tools.get_ds(web=True, web_old=True),
'Origin': 'https://webstatic.mihoyo.com', 'Origin': 'https://webstatic.mihoyo.com',
'x-rpc-app_version': setting.mihoyobbs_Version_old, 'x-rpc-app_version': setting.mihoyobbs_Version_old,
'User-Agent': 'Mozilla/5.0 (Linux; Android 9; Unspecified Device) AppleWebKit/537.36 (KHTML, like Gecko) ' 'User-Agent': 'Mozilla/5.0 (Linux; Android 9; Unspecified Device) AppleWebKit/537.36 (KHTML, like Gecko) '
@ -23,22 +24,22 @@ class honkai3rd:
'Accept-Language': 'zh-CN,en-US;q=0.8', 'Accept-Language': 'zh-CN,en-US;q=0.8',
'X-Requested-With': 'com.mihoyo.hyperion', 'X-Requested-With': 'com.mihoyo.hyperion',
"Cookie": config.mihoyobbs_Cookies, "Cookie": config.mihoyobbs_Cookies,
'x-rpc-device_id': tools.Get_deviceid() 'x-rpc-device_id': tools.get_device_id()
} }
self.acc_List = self.Getacc_list() self.acc_List = self.Getacc_list()
# 获取绑定的账号列表 # 获取绑定的账号列表
def Getacc_list(self) -> list: def Getacc_list(self) -> list:
tools.log.info("正在获取米哈游账号绑定的崩坏3账号列表...") log.info("正在获取米哈游账号绑定的崩坏3账号列表...")
temp_List = [] temp_List = []
req = http.get(setting.honkai3rd_Account_info_url, headers=self.headers) req = http.get(setting.honkai3rd_Account_info_url, headers=self.headers)
data = req.json() data = req.json()
if data["retcode"] != 0: if data["retcode"] != 0:
tools.log.warning("获取账号列表失败!") log.warning("获取账号列表失败!")
exit(1) exit(1)
for i in data["data"]["list"]: for i in data["data"]["list"]:
temp_List.append([i["nickname"], i["game_uid"], i["region"]]) temp_List.append([i["nickname"], i["game_uid"], i["region"]])
tools.log.info(f"已获取到{len(temp_List)}个崩坏3账号信息") log.info(f"已获取到{len(temp_List)}个崩坏3账号信息")
return temp_List return temp_List
# 获取今天已经签到了的dict # 获取今天已经签到了的dict
@ -57,21 +58,21 @@ class honkai3rd:
req = http.get(setting.honkai3rd_Is_signurl.format(setting.honkai3rd_Act_id, region, uid), headers=self.headers) req = http.get(setting.honkai3rd_Is_signurl.format(setting.honkai3rd_Act_id, region, uid), headers=self.headers)
data = req.json() data = req.json()
if data["retcode"] != 0: if data["retcode"] != 0:
tools.log.warning("获取账号签到信息失败!") log.warning("获取账号签到信息失败!")
print(req.text) print(req.text)
exit(1) exit(1)
today_Item = self.Get_today_item(data["data"]["sign"]["list"]) today_Item = self.Get_today_item(data["data"]["sign"]["list"])
if today_Item["status"] == 1: if today_Item["status"] == 1:
return True return True
else: else:
tools.log.info(f"舰长{nickname}今天已经签到过了~\r\n今天获得的奖励是{tools.Get_item(today_Item)}") log.info(f"舰长{nickname}今天已经签到过了~\r\n今天获得的奖励是{tools.get_item(today_Item)}")
return False return False
# 签到 # 签到
def Sign_acc(self): def Sign_acc(self):
if len(self.acc_List) != 0: if len(self.acc_List) != 0:
for i in self.acc_List: for i in self.acc_List:
tools.log.info(f"正在为舰长{i[0]}进行签到...") log.info(f"正在为舰长{i[0]}进行签到...")
time.sleep(random.randint(2, 8)) 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: if is_data:
@ -81,12 +82,12 @@ class honkai3rd:
data = req.json() data = req.json()
if data["retcode"] == 0: if data["retcode"] == 0:
today_Item = self.Get_today_item(data["data"]["list"]) today_Item = self.Get_today_item(data["data"]["list"])
tools.log.info(f"舰长{i[0]}签到成功~\r\n今天获得的奖励是{tools.Get_item(today_Item)}") log.info(f"舰长{i[0]}签到成功~\r\n今天获得的奖励是{tools.get_item(today_Item)}")
elif data["retcode"] == -5003: elif data["retcode"] == -5003:
# 崩坏3应为奖励列表和签到信息在一起了加上上面已经可以进行了一次判断所以这里旧不重复再次执行判断来获取内容了 # 崩坏3应为奖励列表和签到信息在一起了加上上面已经可以进行了一次判断所以这里旧不重复再次执行判断来获取内容了
tools.log.info(f"舰长{i[0]}今天已经签到过了~") log.info(f"舰长{i[0]}今天已经签到过了~")
else: else:
tools.log.warning("账号签到失败!") log.warning("账号签到失败!")
print(req.text) print(req.text)
else: else:
tools.log.warning("账号没有绑定任何崩坏3账号") log.warning("账号没有绑定任何崩坏3账号")

16
loghelper.py Normal file
View File

@ -0,0 +1,16 @@
import os
import logging
# Log输出这里提供了自定义logging输出的机会只需要创建一个logging.ini并且写入配置文件即可自定义输出
file_path = os.path.dirname(os.path.realpath(__file__)) + "/config/logging.ini"
if os.path.exists(file_path):
import logging.config
logging.config.fileConfig(file_path)
log = logging.getLogger("AutoMihoyoBBS")
else:
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s %(levelname)s %(message)s',
datefmt='%Y-%m-%dT%H:%M:%S')
log = logger = logging

View File

@ -1,15 +1,15 @@
import config import config
import request import request
import setting import setting
from tools import log from loghelper import log
from error import cookieError from error import CookieError
def login(): def login():
if config.mihoyobbs_Cookies == '': if config.mihoyobbs_Cookies == '':
log.error("请填入Cookies!") log.error("请填入Cookies!")
config.Clear_cookies() config.clear_cookies()
raise cookieError('No cookie') raise CookieError('No cookie')
# 判断Cookie里面是否有login_ticket 没有的话直接退了 # 判断Cookie里面是否有login_ticket 没有的话直接退了
if "login_ticket" in config.mihoyobbs_Cookies: if "login_ticket" in config.mihoyobbs_Cookies:
temp_Cookies = config.mihoyobbs_Cookies.split(";") temp_Cookies = config.mihoyobbs_Cookies.split(";")
@ -25,12 +25,12 @@ def login():
config.mihoyobbs_Stoken = data["data"]["list"][0]["token"] config.mihoyobbs_Stoken = data["data"]["list"][0]["token"]
log.info("登录成功!") log.info("登录成功!")
log.info("正在保存Config") log.info("正在保存Config")
config.Save_config() config.save_config()
else: else:
log.error("cookie已失效,请重新登录米游社抓取cookie") log.error("cookie已失效,请重新登录米游社抓取cookie")
config.Clear_cookies() config.clear_cookies()
raise cookieError('Cookie expires') raise CookieError('Cookie expires')
else: else:
log.error("cookie中没有'login_ticket'字段,请重新登录米游社重新抓取cookie!") log.error("cookie中没有'login_ticket'字段,请重新登录米游社重新抓取cookie!")
config.Clear_cookies() config.clear_cookies()
raise cookieError('Cookie lost login_ticket') raise CookieError('Cookie lost login_ticket')

39
main.py
View File

@ -7,12 +7,13 @@ import genshin
import setting import setting
import mihoyobbs import mihoyobbs
import honkai3rd import honkai3rd
from error import cookieError from loghelper import log
from error import CookieError
def main(): def main():
# 初始化,加载配置 # 初始化,加载配置
config.Load_config() config.load_config()
if config.enable_Config: if config.enable_Config:
# 检测参数是否齐全,如果缺少就进行登入操作 # 检测参数是否齐全,如果缺少就进行登入操作
if config.mihoyobbs_Login_ticket == "" or config.mihoyobbs_Stuid == "" or config.mihoyobbs_Stoken == "": if config.mihoyobbs_Login_ticket == "" or config.mihoyobbs_Stuid == "" or config.mihoyobbs_Stoken == "":
@ -43,44 +44,44 @@ def main():
bbs = mihoyobbs.mihoyobbs() bbs = mihoyobbs.mihoyobbs()
if bbs.Task_do["bbs_Sign"] and bbs.Task_do["bbs_Read_posts"] and bbs.Task_do["bbs_Like_posts"] and \ 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"]: bbs.Task_do["bbs_Share"]:
tools.log.info(f"今天已经全部完成了!一共获得{mihoyobbs.Today_have_getcoins}个米游币,目前有{mihoyobbs.Have_coins}个米游币") log.info(f"今天已经全部完成了!一共获得{mihoyobbs.Today_have_getcoins}个米游币,目前有{mihoyobbs.Have_coins}个米游币")
else: else:
if config.mihoyobbs["bbs_Signin"]: if config.mihoyobbs["bbs_Signin"]:
bbs.Signin() bbs.signing()
if config.mihoyobbs["bbs_Read_posts"]: if config.mihoyobbs["bbs_Read_posts"]:
bbs.Readposts() bbs.read_posts()
if config.mihoyobbs["bbs_Like_posts"]: if config.mihoyobbs["bbs_Like_posts"]:
bbs.Likeposts() bbs.Likeposts()
if config.mihoyobbs["bbs_Share"]: if config.mihoyobbs["bbs_Share"]:
bbs.Share() bbs.share_post()
bbs.Get_taskslist() bbs.Get_taskslist()
tools.log.info( log.info(
f"今天已经获得{mihoyobbs.Today_have_getcoins}个米游币,还能获得{mihoyobbs.Today_getcoins}个米游币,目前有{mihoyobbs.Have_coins}个米游币") f"今天已经获得{mihoyobbs.Today_have_getcoins}个米游币,还能获得{mihoyobbs.Today_getcoins}个米游币,目前有{mihoyobbs.Have_coins}个米游币")
time.sleep(random.randint(2, 8)) time.sleep(random.randint(2, 8))
else: else:
tools.log.info("米游社功能未启用!") log.info("米游社功能未启用!")
# 原神签到 # 原神签到
if config.genshin_Auto_sign: if config.genshin_Auto_sign:
tools.log.info("正在进行原神签到") log.info("正在进行原神签到")
genshin_Help = genshin.genshin() genshin_help = genshin.Genshin()
genshin_Help.Sign_acc() genshin_help.sign_account()
time.sleep(random.randint(2, 8)) time.sleep(random.randint(2, 8))
else: else:
tools.log.info("原神签到功能未启用!") log.info("原神签到功能未启用!")
# 崩坏3签到 # 崩坏3签到
if config.honkai3rd_Auto_sign: if config.honkai3rd_Auto_sign:
tools.log.info("正在进行崩坏3签到") log.info("正在进行崩坏3签到")
honkai3rd_Help = honkai3rd.honkai3rd() honkai3rd_help = honkai3rd.honkai3rd()
honkai3rd_Help.Sign_acc() honkai3rd_help.Sign_acc()
else: else:
tools.log.info("崩坏3签到功能未启用") log.info("崩坏3签到功能未启用")
else: else:
tools.log.warning("Config未启用") log.warning("Config未启用")
if __name__ == "__main__": if __name__ == "__main__":
try: try:
main() main()
except cookieError: except CookieError:
tools.log.error("账号Cookie有问题") log.error("账号Cookie有问题")
pass pass

View File

@ -2,51 +2,51 @@ import os
import sys import sys
import main import main
import time import time
import tools
import config import config
import random import random
import setting import setting
from error import cookieError from loghelper import log
from error import CookieError
# 搜索配置文件 # 搜索配置文件
def Fund_config() -> list: def fund_config() -> list:
file_Name = [] file_name = []
for files in os.listdir(config.path): for files in os.listdir(config.path):
if os.path.splitext(files)[1] == '.json': if os.path.splitext(files)[1] == '.json':
file_Name.append(files) file_name.append(files)
return file_Name return file_name
def main_multi(autorun: bool): def main_multi(autorun: bool):
tools.log.info("AutoMihoyoBBS Multi User mode") log.info("AutoMihoyoBBS Multi User mode")
tools.log.info("正在搜索配置文件!") log.info("正在搜索配置文件!")
config_List = Fund_config() config_list = fund_config()
if len(config_List) == 0: if len(config_list) == 0:
tools.log.warning("未检测到配置文件请确认config文件夹存在.json后缀名的配置文件") log.warning("未检测到配置文件请确认config文件夹存在.json后缀名的配置文件")
exit(1) exit(1)
if autorun: if autorun:
tools.log.info(f"已搜索到{len(config_List)}个配置文件,正在开始执行!") log.info(f"已搜索到{len(config_list)}个配置文件,正在开始执行!")
else: else:
tools.log.info(f"已搜索到{len(config_List)}个配置文件,请确认是否无多余文件!\r\n{config_List}") log.info(f"已搜索到{len(config_list)}个配置文件,请确认是否无多余文件!\r\n{config_list}")
try: try:
input("请输入回车继续需要重新搜索配置文件请Ctrl+C退出脚本") input("请输入回车继续需要重新搜索配置文件请Ctrl+C退出脚本")
except: except:
exit(0) exit(0)
results = {"ok": [], "error": []} results = {"ok": [], "error": []}
for i in iter(config_List): for i in iter(config_list):
tools.log.info(f"正在执行{i}") log.info(f"正在执行{i}")
setting.mihoyobbs_List_Use = [] setting.mihoyobbs_List_Use = []
config.config_Path = f"{config.path}/{i}" config.config_Path = f"{config.path}/{i}"
try: try:
main.main() main.main()
except cookieError: except CookieError:
results["error"].append(i) results["error"].append(i)
else: else:
results["ok"].append(i) results["ok"].append(i)
tools.log.info(f"{i}执行完毕") log.info(f"{i}执行完毕")
time.sleep(random.randint(3, 10)) time.sleep(random.randint(3, 10))
tools.log.info(f'脚本执行完毕,共执行{len(config_List)}个配置文件,成功{len(results["ok"])}个,失败{len(results["error"])}') log.info(f'脚本执行完毕,共执行{len(config_list)}个配置文件,成功{len(results["ok"])}个,失败{len(results["error"])}')
if __name__ == "__main__": if __name__ == "__main__":

View File

@ -4,7 +4,8 @@ import config
import random import random
import setting import setting
from request import http from request import http
from error import cookieError from loghelper import log
from error import CookieError
Today_getcoins = 0 Today_getcoins = 0
@ -15,14 +16,14 @@ Have_coins = 0
class mihoyobbs: class mihoyobbs:
def __init__(self): def __init__(self):
self.headers = { self.headers = {
"DS": tools.Get_ds(web=False, web_old=False), "DS": tools.get_ds(web=False, web_old=False),
"cookie": f"stuid={config.mihoyobbs_Stuid};stoken={config.mihoyobbs_Stoken}", "cookie": f"stuid={config.mihoyobbs_Stuid};stoken={config.mihoyobbs_Stoken}",
"x-rpc-client_type": setting.mihoyobbs_Client_type, "x-rpc-client_type": setting.mihoyobbs_Client_type,
"x-rpc-app_version": setting.mihoyobbs_Version, "x-rpc-app_version": setting.mihoyobbs_Version,
"x-rpc-sys_version": "6.0.1", "x-rpc-sys_version": "6.0.1",
"x-rpc-channel": "mihoyo", "x-rpc-channel": "mihoyo",
"x-rpc-device_id": tools.Get_deviceid(), "x-rpc-device_id": tools.get_device_id(),
"x-rpc-device_name": tools.Random_text(random.randint(1, 10)), "x-rpc-device_name": tools.random_text(random.randint(1, 10)),
"x-rpc-device_model": "Mi 10", "x-rpc-device_model": "Mi 10",
"Referer": "https://app.mihoyo.com", "Referer": "https://app.mihoyo.com",
"Host": "bbs-api.mihoyo.com", "Host": "bbs-api.mihoyo.com",
@ -41,20 +42,20 @@ class mihoyobbs:
if self.Task_do["bbs_Read_posts"] and self.Task_do["bbs_Like_posts"] and self.Task_do["bbs_Share"]: if self.Task_do["bbs_Read_posts"] and self.Task_do["bbs_Like_posts"] and self.Task_do["bbs_Share"]:
pass pass
else: else:
self.postsList = self.Getlist() self.postsList = self.get_list()
# 获取任务列表,用来判断做了哪些任务 # 获取任务列表,用来判断做了哪些任务
def Get_taskslist(self): def Get_taskslist(self):
global Today_getcoins global Today_getcoins
global Today_have_getcoins global Today_have_getcoins
global Have_coins global Have_coins
tools.log.info("正在获取任务列表") log.info("正在获取任务列表")
req = http.get(url=setting.bbs_Taskslist, headers=self.headers) req = http.get(url=setting.bbs_Taskslist, headers=self.headers)
data = req.json() data = req.json()
if "err" in data["message"] or data["retcode"] == -100: if "err" in data["message"] or data["retcode"] == -100:
tools.log.error("获取任务列表失败你的cookie可能已过期请重新设置cookie。") log.error("获取任务列表失败你的cookie可能已过期请重新设置cookie。")
config.Clear_cookies() config.clear_cookies()
raise cookieError('Cookie expires') raise CookieError('Cookie expires')
else: else:
Today_getcoins = data["data"]["can_get_points"] Today_getcoins = data["data"]["can_get_points"]
Today_have_getcoins = data["data"]["already_received_points"] Today_have_getcoins = data["data"]["already_received_points"]
@ -68,10 +69,10 @@ class mihoyobbs:
else: else:
# 如果第0个大于或等于62则直接判定任务没做 # 如果第0个大于或等于62则直接判定任务没做
if data["data"]["states"][0]["mission_id"] >= 62: if data["data"]["states"][0]["mission_id"] >= 62:
tools.log.info(f"新的一天,今天可以获得{Today_getcoins}个米游币") log.info(f"新的一天,今天可以获得{Today_getcoins}个米游币")
pass pass
else: else:
tools.log.info(f"似乎还有任务没完成,今天还能获得{Today_getcoins}") log.info(f"似乎还有任务没完成,今天还能获得{Today_getcoins}")
for i in data["data"]["states"]: for i in data["data"]["states"]:
# 58是讨论区签到 # 58是讨论区签到
if i["mission_id"] == 58: if i["mission_id"] == 58:
@ -97,58 +98,58 @@ class mihoyobbs:
break break
# 获取要帖子列表 # 获取要帖子列表
def Getlist(self) -> list: def get_list(self) -> list:
temp_List = [] temp_list = []
tools.log.info("正在获取帖子列表......") log.info("正在获取帖子列表......")
req = http.get(url=setting.bbs_Listurl.format(setting.mihoyobbs_List_Use[0]["forumId"]), headers=self.headers) req = http.get(url=setting.bbs_Listurl.format(setting.mihoyobbs_List_Use[0]["forumId"]), headers=self.headers)
data = req.json() data = req.json()
for n in range(5): for n in range(5):
temp_List.append([data["data"]["list"][n]["post"]["post_id"], data["data"]["list"][n]["post"]["subject"]]) temp_list.append([data["data"]["list"][n]["post"]["post_id"], data["data"]["list"][n]["post"]["subject"]])
tools.log.info("已获取{}个帖子".format(len(temp_List))) log.info("已获取{}个帖子".format(len(temp_list)))
return temp_List return temp_list
# 进行签到操作 # 进行签到操作
def Signin(self): def signing(self):
if self.Task_do["bbs_Sign"]: if self.Task_do["bbs_Sign"]:
tools.log.info("讨论区任务已经完成过了~") log.info("讨论区任务已经完成过了~")
else: else:
tools.log.info("正在签到......") log.info("正在签到......")
for i in setting.mihoyobbs_List_Use: 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() data = req.json()
if "err" not in data["message"]: if "err" not in data["message"]:
tools.log.info(str(i["name"] + data["message"])) log.info(str(i["name"] + data["message"]))
time.sleep(random.randint(2, 8)) time.sleep(random.randint(2, 8))
else: else:
tools.log.error("签到失败你的cookie可能已过期请重新设置cookie。") log.error("签到失败你的cookie可能已过期请重新设置cookie。")
config.Clear_cookies() config.clear_cookies()
raise cookieError('Cookie expires') raise CookieError('Cookie expires')
# 看帖子 # 看帖子
def Readposts(self): def read_posts(self):
if self.Task_do["bbs_Read_posts"]: if self.Task_do["bbs_Read_posts"]:
tools.log.info("看帖任务已经完成过了~") log.info("看帖任务已经完成过了~")
else: else:
tools.log.info("正在看帖......") log.info("正在看帖......")
for i in range(self.Task_do["bbs_Read_posts_num"]): for i in range(self.Task_do["bbs_Read_posts_num"]):
req = http.get(url=setting.bbs_Detailurl.format(self.postsList[i][0]), headers=self.headers) req = http.get(url=setting.bbs_Detailurl.format(self.postsList[i][0]), headers=self.headers)
data = req.json() data = req.json()
if data["message"] == "OK": if data["message"] == "OK":
tools.log.info("看帖:{} 成功".format(self.postsList[i][1])) log.info("看帖:{} 成功".format(self.postsList[i][1]))
time.sleep(random.randint(2, 8)) time.sleep(random.randint(2, 8))
# 点赞 # 点赞
def Likeposts(self): def Likeposts(self):
if self.Task_do["bbs_Like_posts"]: if self.Task_do["bbs_Like_posts"]:
tools.log.info("点赞任务已经完成过了~") log.info("点赞任务已经完成过了~")
else: else:
tools.log.info("正在点赞......") log.info("正在点赞......")
for i in range(self.Task_do["bbs_Like_posts_num"]): for i in range(self.Task_do["bbs_Like_posts_num"]):
req = http.post(url=setting.bbs_Likeurl, headers=self.headers, 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() data = req.json()
if data["message"] == "OK": if data["message"] == "OK":
tools.log.info("点赞:{} 成功".format(self.postsList[i][1])) log.info("点赞:{} 成功".format(self.postsList[i][1]))
# 判断取消点赞是否打开 # 判断取消点赞是否打开
if config.mihoyobbs["bbs_Unlike"]: if config.mihoyobbs["bbs_Unlike"]:
time.sleep(random.randint(2, 8)) time.sleep(random.randint(2, 8))
@ -156,18 +157,18 @@ class mihoyobbs:
json={"post_id": self.postsList[i][0], "is_cancel": True}) json={"post_id": self.postsList[i][0], "is_cancel": True})
data = req.json() data = req.json()
if data["message"] == "OK": if data["message"] == "OK":
tools.log.info("取消点赞:{} 成功".format(self.postsList[i][1])) log.info("取消点赞:{} 成功".format(self.postsList[i][1]))
time.sleep(random.randint(2, 8)) time.sleep(random.randint(2, 8))
# 分享操作 # 分享操作
def Share(self): def share_post(self):
if self.Task_do["bbs_Share"]: if self.Task_do["bbs_Share"]:
tools.log.info("分享任务已经完成过了~") log.info("分享任务已经完成过了~")
else: else:
tools.log.info("正在分享......") log.info("正在分享......")
req = http.get(url=setting.bbs_Shareurl.format(self.postsList[0][0]), headers=self.headers) req = http.get(url=setting.bbs_Shareurl.format(self.postsList[0][0]), headers=self.headers)
data = req.json() data = req.json()
if data["message"] == "OK": if data["message"] == "OK":
tools.log.info("分享:{} 成功".format(self.postsList[0][1])) log.info("分享:{} 成功".format(self.postsList[0][1]))
time.sleep(random.randint(2, 8)) time.sleep(random.randint(2, 8))

View File

@ -5,7 +5,7 @@ try:
http = httpx.Client(timeout=10, transport=httpx.HTTPTransport(retries=5)) http = httpx.Client(timeout=10, transport=httpx.HTTPTransport(retries=5))
# 当openssl版本小于1.0.2的时候直接进行一个空请求让httpx报错 # 当openssl版本小于1.0.2的时候直接进行一个空请求让httpx报错
import tools import tools
if tools.Get_openssl_Version() <= 102: if tools.get_openssl_version() <= 102:
httpx.get() httpx.get()
except: except:
import requests import requests

View File

@ -1,46 +1,31 @@
import os
import uuid import uuid
import time import time
import config import config
import random import random
import string import string
import logging
import hashlib import hashlib
import setting import setting
# 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:
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s %(levelname)s %(message)s',
datefmt='%Y-%m-%dT%H:%M:%S')
log = logger = logging
# md5计算 # md5计算
def MD5(text: str) -> str: def md5(text: str) -> str:
md5 = hashlib.md5() md5 = hashlib.md5()
md5.update(text.encode()) md5.update(text.encode())
return md5.hexdigest() return md5.hexdigest()
# 随机文本 # 随机文本
def Random_text(num: int) -> str: def random_text(num: int) -> str:
return ''.join(random.sample(string.ascii_lowercase + string.digits, num)) return ''.join(random.sample(string.ascii_lowercase + string.digits, num))
# 时间戳 # 时间戳
def Timestamp() -> int: def timestamp() -> int:
return int(time.time()) return int(time.time())
# 获取请求Header里的DS 当web为true则生成网页端的DS # 获取请求Header里的DS 当web为true则生成网页端的DS
def Get_ds(web: bool, web_old: bool) -> str: def get_ds(web: bool, web_old: bool) -> str:
if web: if web:
if web_old: if web_old:
n = setting.mihoyobbs_Salt_web_old n = setting.mihoyobbs_Salt_web_old
@ -48,40 +33,41 @@ def Get_ds(web: bool, web_old: bool) -> str:
n = setting.mihoyobbs_Salt_web n = setting.mihoyobbs_Salt_web
else: else:
n = setting.mihoyobbs_Salt n = setting.mihoyobbs_Salt
i = str(Timestamp()) i = str(timestamp())
r = Random_text(6) r = random_text(6)
c = MD5("salt=" + n + "&t=" + i + "&r=" + r) c = md5("salt=" + n + "&t=" + i + "&r=" + r)
return f"{i},{r},{c}" return f"{i},{r},{c}"
# 生成一个device id # 生成一个device id
def Get_deviceid() -> str: def get_device_id() -> str:
return str(uuid.uuid3(uuid.NAMESPACE_URL, config.mihoyobbs_Cookies)).replace( 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_name = raw_data["name"]
temp_Cnt = raw_data["cnt"] temp_cnt = raw_data["cnt"]
return f"{temp_Name}x{temp_Cnt}" return f"{temp_name}x{temp_cnt}"
# 获取明天早晨0点的时间戳 # 获取明天早晨0点的时间戳
def Nextday() -> int: def nextday() -> int:
now_time = int(time.time()) now_time = int(time.time())
nextday_time = now_time - now_time % 86400 + time.timezone + 86400 nextday_time = now_time - now_time % 86400 + time.timezone + 86400
return nextday_time return nextday_time
# 获取Openssl版本 # 获取Openssl版本
def Get_openssl_Version() -> int: def get_openssl_version() -> int:
try: try:
import ssl import ssl
except ImportError: except ImportError:
from loghelper import log
log.error("Openssl Lib Error !!") log.error("Openssl Lib Error !!")
# return -99 # return -99
# 建议直接更新Python的版本有特殊情况请提交issues # 建议直接更新Python的版本有特殊情况请提交issues
exit(-1) exit(-1)
temp_List = ssl.OPENSSL_VERSION_INFO temp_list = ssl.OPENSSL_VERSION_INFO
return int(f"{str(temp_List[0])}{str(temp_List[1])}{str(temp_List[2])}") return int(f"{str(temp_list[0])}{str(temp_list[1])}{str(temp_list[2])}")