diff --git a/AUTO_MAA.exe b/AUTO_MAA.exe
deleted file mode 100644
index ed9ef15..0000000
Binary files a/AUTO_MAA.exe and /dev/null differ
diff --git a/AUTO_MAA.py b/AUTO_MAA.py
index c0baadb..18ba9ef 100644
--- a/AUTO_MAA.py
+++ b/AUTO_MAA.py
@@ -60,15 +60,18 @@ uiLoader = QUiLoader()
class MaaRunner(QtCore.QThread):
+ question = QtCore.Signal()
UpGui = QtCore.Signal(str, str, str, str, str)
- UpUserInfo = QtCore.Signal(list, list, list, list)
+ UpUserInfo = QtCore.Signal(list, list, list, list, list)
Accomplish = QtCore.Signal()
AppPath = os.path.dirname(os.path.realpath(sys.argv[0])).replace(
"\\", "/"
) # 获取软件自身的路径
ifRun = False
- def __init__(self, SetPath, LogPath, MaaPath, Routine, Annihilation, Num, data):
+ def __init__(
+ self, SetPath, LogPath, MaaPath, Routine, Annihilation, Num, data, mode
+ ):
super(MaaRunner, self).__init__()
self.SetPath = SetPath
self.LogPath = LogPath
@@ -77,6 +80,7 @@ class MaaRunner(QtCore.QThread):
self.Annihilation = Annihilation
self.Num = Num
self.data = data
+ self.mode = mode
def run(self):
self.ifRun = True
@@ -89,44 +93,179 @@ class MaaRunner(QtCore.QThread):
for i in range(len(self.data))
if (self.data[i][2] > 0 and self.data[i][3] == "y")
]
- # MAA预配置
- self.SetMaa(0, 0)
- # 执行情况预处理
- for i in AllUid:
- if self.data[i][4] != curdate:
- self.data[i][4] = curdate
- self.data[i][12] = 0
- self.data[i][0] += "_第" + str(self.data[i][12] + 1) + "次代理"
- # 开始代理
- for uid in AllUid:
- if not self.ifRun:
- break
- runbook = [False for k in range(2)]
- for i in range(self.Num):
+ # 日常代理模式
+ if self.mode == "日常代理":
+ # 执行情况预处理
+ for i in AllUid:
+ if self.data[i][4] != curdate:
+ self.data[i][4] = curdate
+ self.data[i][12] = 0
+ self.data[i][0] += "_第" + str(self.data[i][12] + 1) + "次代理"
+ # 开始代理
+ for uid in AllUid:
if not self.ifRun:
break
- for j in range(2):
+ # 初始化代理情况记录和模式替换记录
+ runbook = [False for k in range(2)]
+ modebook = ["日常代理_剿灭", "日常代理_日常"]
+ # 尝试次数循环
+ for i in range(self.Num):
if not self.ifRun:
break
- if j == 0 and self.data[uid][8] == "n":
- runbook[0] = True
- continue
- if runbook[j]:
- continue
+ # 剿灭-日常模式循环
+ for j in range(2):
+ if not self.ifRun:
+ break
+ if j == 0 and self.data[uid][8] == "n":
+ runbook[0] = True
+ continue
+ if runbook[j]:
+ continue
+ # 配置MAA
+ self.SetMaa(modebook[j], uid)
+ # 创建MAA任务
+ maa = subprocess.Popen([self.MaaPath])
+ # 记录当前时间
+ StartTime = datetime.datetime.now()
+ # 记录是否超时的标记
+ self.TimeOut = False
+ # 更新运行信息
+ WaitUid = [
+ idx
+ for idx in AllUid
+ if (not idx in OverUid + ErrorUid + [uid])
+ ]
+ # 监测MAA运行状态
+ while self.ifRun:
+ # 获取MAA日志
+ logs = []
+ IfLogStart = False
+ with open(self.LogPath, "r", encoding="utf-8") as f:
+ for entry in f:
+ if not IfLogStart:
+ try:
+ entry_time = datetime.datetime.strptime(
+ entry[1:20], "%Y-%m-%d %H:%M:%S"
+ )
+ if entry_time > StartTime:
+ IfLogStart = True
+ logs.append(entry)
+ except ValueError:
+ pass
+ else:
+ logs.append(entry)
+ # 判断是否超时
+ if len(logs) > 0:
+ LastTime = datetime.datetime.now()
+ for index in range(-1, 0 - len(logs) - 1, -1):
+ try:
+ LastTime = datetime.datetime.strptime(
+ logs[index][1:20], "%Y-%m-%d %H:%M:%S"
+ )
+ break
+ except ValueError:
+ pass
+ NowTime = datetime.datetime.now()
+ if (
+ j == 0
+ and NowTime - LastTime
+ > datetime.timedelta(minutes=self.Annihilation)
+ ) or (
+ j == 1
+ and NowTime - LastTime
+ > datetime.timedelta(minutes=self.Routine)
+ ):
+ self.TimeOut = True
+ # 合并日志
+ log = "".join(logs)
+ # 更新MAA日志
+ self.UpGui.emit(
+ self.data[uid][0]
+ + "_第"
+ + str(i + 1)
+ + "次_"
+ + modebook[j][5:7],
+ "\n".join([self.data[k][0] for k in WaitUid]),
+ "\n".join([self.data[k][0] for k in OverUid]),
+ "\n".join([self.data[k][0] for k in ErrorUid]),
+ log,
+ )
+ # 判断MAA程序运行状态
+ result = self.IfMaaSuccess(log, modebook[j])
+ if result == "Success!":
+ runbook[j] = True
+ self.UpGui.emit(
+ self.data[uid][0]
+ + "_第"
+ + str(i + 1)
+ + "次_"
+ + modebook[j][5:7],
+ "\n".join([self.data[k][0] for k in WaitUid]),
+ "\n".join([self.data[k][0] for k in OverUid]),
+ "\n".join([self.data[k][0] for k in ErrorUid]),
+ "检测到MAA进程完成代理任务\n正在等待相关程序结束\n请等待10s",
+ )
+ time.sleep(10)
+ break
+ elif result == "Wait":
+ # 检测时间间隔
+ time.sleep(1)
+ else:
+ # 打印中止信息
+ # 此时,log变量内存储的就是出现异常的日志信息,可以保存或发送用于问题排查
+ self.UpGui.emit(
+ self.data[uid][0]
+ + "_第"
+ + str(i + 1)
+ + "次_"
+ + modebook[j][5:7],
+ "\n".join([self.data[k][0] for k in WaitUid]),
+ "\n".join([self.data[k][0] for k in OverUid]),
+ "\n".join([self.data[k][0] for k in ErrorUid]),
+ result,
+ )
+ os.system("taskkill /F /T /PID " + str(maa.pid))
+ if self.ifRun:
+ time.sleep(10)
+ break
+ if runbook[0] and runbook[1]:
+ if self.data[uid][12] == 0:
+ self.data[uid][2] -= 1
+ self.data[uid][12] += 1
+ OverUid.append(uid)
+ break
+ if not (runbook[0] and runbook[1]):
+ ErrorUid.append(uid)
+ # 人工排查模式
+ elif self.mode == "人工排查":
+ # 标记是否需要启动模拟器
+ if_strat_app = True
+ # 标识排查模式
+ for i in AllUid:
+ self.data[i][0] += "_排查模式"
+ # 开始排查
+ for uid in AllUid:
+ if not self.ifRun:
+ break
+ runbook = [False for k in range(2)]
+ # 启动重试循环
+ while self.ifRun:
# 配置MAA
- self.SetMaa(j + 1, uid)
+ if if_strat_app:
+ self.SetMaa("人工排查_启动模拟器", uid)
+ if_strat_app = False
+ else:
+ self.SetMaa("人工排查_仅切换账号", uid)
# 创建MAA任务
maa = subprocess.Popen([self.MaaPath])
# 记录当前时间
StartTime = datetime.datetime.now()
- # 记录是否超时的标记
- self.TimeOut = False
# 更新运行信息
WaitUid = [
idx for idx in AllUid if (not idx in OverUid + ErrorUid + [uid])
]
# 监测MAA运行状态
- while True:
+ while self.ifRun:
# 获取MAA日志
logs = []
IfLogStart = False
@@ -144,137 +283,222 @@ class MaaRunner(QtCore.QThread):
pass
else:
logs.append(entry)
- # 判断是否超时
- if len(logs) > 0:
- LastTime = datetime.datetime.now()
- for index in range(-1, 0 - len(logs) - 1, -1):
- try:
- LastTime = datetime.datetime.strptime(
- logs[index][1:20], "%Y-%m-%d %H:%M:%S"
- )
- break
- except ValueError:
- pass
- NowTime = datetime.datetime.now()
- if (
- j == 0
- and NowTime - LastTime
- > datetime.timedelta(minutes=self.Annihilation)
- ) or (
- j == 1
- and NowTime - LastTime
- > datetime.timedelta(minutes=self.Routine)
- ):
- self.TimeOut = True
# 合并日志
log = "".join(logs)
# 更新MAA日志
- if j == 0:
- self.UpGui.emit(
- self.data[uid][0] + "_第" + str(i + 1) + "次_剿灭",
- "\n".join([self.data[k][0] for k in WaitUid]),
- "\n".join([self.data[k][0] for k in OverUid]),
- "\n".join([self.data[k][0] for k in ErrorUid]),
- log,
- )
- elif j == 1:
- self.UpGui.emit(
- self.data[uid][0] + "_第" + str(i + 1) + "次_日常",
- "\n".join([self.data[k][0] for k in WaitUid]),
- "\n".join([self.data[k][0] for k in OverUid]),
- "\n".join([self.data[k][0] for k in ErrorUid]),
- log,
- )
+ self.UpGui.emit(
+ self.data[uid][0],
+ "\n".join([self.data[k][0] for k in WaitUid]),
+ "\n".join([self.data[k][0] for k in OverUid]),
+ "\n".join([self.data[k][0] for k in ErrorUid]),
+ log,
+ )
# 判断MAA程序运行状态
- result = self.IfMaaSuccess(log, j)
+ result = self.IfMaaSuccess(log, "人工排查")
if result == "Success!":
- runbook[j] = True
+ runbook[0] = True
self.UpGui.emit(
- self.data[uid][0] + "_第" + str(i + 1) + "次_日常",
+ self.data[uid][0],
"\n".join([self.data[k][0] for k in WaitUid]),
"\n".join([self.data[k][0] for k in OverUid]),
"\n".join([self.data[k][0] for k in ErrorUid]),
- "检测到MAA进程完成代理任务\n正在等待相关程序结束\n请等待10s",
+ "检测到MAA进程成功登录PRTS",
)
- time.sleep(10)
break
elif result == "Wait":
# 检测时间间隔
time.sleep(1)
else:
- # 打印中止信息
- # 此时,log变量内存储的就是出现异常的日志信息,可以保存或发送用于问题排查
self.UpGui.emit(
- self.data[uid][0] + "_第" + str(i + 1) + "次_日常",
+ self.data[uid][0],
"\n".join([self.data[k][0] for k in WaitUid]),
"\n".join([self.data[k][0] for k in OverUid]),
"\n".join([self.data[k][0] for k in ErrorUid]),
result,
)
os.system("taskkill /F /T /PID " + str(maa.pid))
+ if_strat_app = True
if self.ifRun:
time.sleep(10)
break
+ if runbook[0]:
+ break
+ elif self.ifRun:
+ self.question_title = "操作提示"
+ self.question_info = "MAA未能正确登录到PRTS,是否重试?"
+ self.question_choice = "wait"
+ self.question.emit()
+ while self.question_choice == "wait":
+ time.sleep(1)
+ if self.question_choice == "No":
+ break
+ if runbook[0] and self.ifRun:
+ self.question_title = "操作提示"
+ self.question_info = "请检查用户代理情况,如无异常请按下确认键。"
+ self.question_choice = "wait"
+ self.question.emit()
+ while self.question_choice == "wait":
+ time.sleep(1)
+ if self.question_choice == "Yes":
+ runbook[1] = True
if runbook[0] and runbook[1]:
- if self.data[uid][12] == 0:
- self.data[uid][2] -= 1
- self.data[uid][12] += 1
+ if "未通过人工排查" in self.data[uid][11]:
+ self.data[uid][11] = self.data[uid][11].replace(
+ "未通过人工排查|", ""
+ )
OverUid.append(uid)
- break
- if not (runbook[0] and runbook[1]):
- ErrorUid.append(uid)
+ elif not (runbook[0] and runbook[1]):
+ if not "未通过人工排查" in self.data[uid][11]:
+ self.data[uid][11] = "未通过人工排查|" + self.data[uid][11]
+ ErrorUid.append(uid)
+ if not self.ifRun:
+ os.system("taskkill /F /T /PID " + str(maa.pid))
# 更新用户数据
days = [self.data[k][2] for k in AllUid]
lasts = [self.data[k][4] for k in AllUid]
+ notes = [self.data[k][11] for k in AllUid]
numbs = [self.data[k][12] for k in AllUid]
- self.UpUserInfo.emit(AllUid, days, lasts, numbs)
+ self.UpUserInfo.emit(AllUid, days, lasts, notes, numbs)
# 保存运行日志
endtime = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
- with open(self.AppPath + "log.txt", "w", encoding="utf-8") as f:
+ with open(self.AppPath + "/log.txt", "w", encoding="utf-8") as f:
print("任务开始时间:" + begintime + ",结束时间:" + endtime, file=f)
print(
- "已完成数:" + str(len(OverUid)) + ",未完成数:" + str(len(ErrorUid)),
+ "已完成数:"
+ + str(len(OverUid))
+ + ",未完成数:"
+ + str(len(ErrorUid) + len(WaitUid))
+ + "\n",
file=f,
)
- ErrorUid = [idx for idx in AllUid if (not idx in OverUid)]
if len(ErrorUid) != 0:
- print("代理未完成的用户:", file=f)
+ print(self.mode[2:4] + "未成功的用户:", file=f)
print("\n".join([self.data[k][0] for k in ErrorUid]), file=f)
- WaitUid = [idx for idx in AllUid if (not idx in OverUid + ErrorUid + [uid])]
+ WaitUid = [idx for idx in AllUid if (not idx in OverUid + ErrorUid)]
if len(WaitUid) != 0:
- print("未代理的用户:", file=f)
+ print("\n未开始" + self.mode[2:4] + "的用户:", file=f)
print("\n".join([self.data[k][0] for k in WaitUid]), file=f)
- with open(self.AppPath + "log.txt", "r", encoding="utf-8") as f:
- EndLog = f.read()
# 恢复GUI运行面板
+ with open(self.AppPath + "/log.txt", "r", encoding="utf-8") as f:
+ EndLog = f.read()
self.UpGui.emit("", "", "", "", EndLog)
self.Accomplish.emit()
self.ifRun = False
# 判断MAA程序运行状态
def IfMaaSuccess(self, log, mode):
- if mode == 1 and "任务出错: Fight" in log:
- return "检测到MAA未能实际执行任务\n正在中止相关程序\n请等待10s"
- elif "任务已全部完成!" in log:
- return "Success!"
- elif (
- ("请检查连接设置或尝试重启模拟器与 ADB 或重启电脑" in log)
- or ("已停止" in log)
- or ("MaaAssistantArknights GUI exited" in log)
- ):
- return "检测到MAA进程异常\n正在中止相关程序\n请等待10s"
- elif self.TimeOut:
- return "检测到MAA进程超时\n正在中止相关程序\n请等待10s"
- elif not self.ifRun:
- return "您中止了本次任务\n正在中止相关程序\n请等待"
- else:
- return "Wait"
+ if "日常代理" in mode:
+ if mode == "日常代理_剿灭" and "任务出错: Fight" in log:
+ return "检测到MAA未能实际执行任务\n正在中止相关程序\n请等待10s"
+ elif "任务已全部完成!" in log:
+ return "Success!"
+ elif (
+ ("请检查连接设置或尝试重启模拟器与 ADB 或重启电脑" in log)
+ or ("已停止" in log)
+ or ("MaaAssistantArknights GUI exited" in log)
+ ):
+ return "检测到MAA进程异常\n正在中止相关程序\n请等待10s"
+ elif self.TimeOut:
+ return "检测到MAA进程超时\n正在中止相关程序\n请等待10s"
+ elif not self.ifRun:
+ return "您中止了本次任务\n正在中止相关程序\n请等待"
+ else:
+ return "Wait"
+ elif mode == "人工排查":
+ if "完成任务: StartUp" in log:
+ return "Success!"
+ elif (
+ ("请检查连接设置或尝试重启模拟器与 ADB 或重启电脑" in log)
+ or ("已停止" in log)
+ or ("MaaAssistantArknights GUI exited" in log)
+ ):
+ return "检测到MAA进程异常\n正在中止相关程序\n请等待10s"
+ elif not self.ifRun:
+ return "您中止了本次任务\n正在中止相关程序\n请等待"
+ else:
+ return "Wait"
# 配置MAA运行参数
- def SetMaa(self, s, uid):
+ def SetMaa(self, mode, uid):
with open(self.SetPath, "r", encoding="utf-8") as f:
data = json.load(f)
- if s == 0:
+ # 人工排查配置
+ if mode == "人工排查_启动模拟器":
+ data["Configurations"]["Default"][
+ "MainFunction.PostActions"
+ ] = "8" # 完成后退出MAA
+ data["Configurations"]["Default"][
+ "Start.RunDirectly"
+ ] = "True" # 启动MAA后直接运行
+ data["Configurations"]["Default"][
+ "Start.StartEmulator"
+ ] = "True" # 启动MAA后自动开启模拟器
+ data["Configurations"]["Default"]["Start.AccountName"] = (
+ self.data[uid][1][:3] + "****" + self.data[uid][1][7:]
+ ) # 账号切换
+ data["Configurations"]["Default"][
+ "TaskQueue.WakeUp.IsChecked"
+ ] = "True" # 开始唤醒
+ data["Configurations"]["Default"][
+ "TaskQueue.Recruiting.IsChecked"
+ ] = "False" # 自动公招
+ data["Configurations"]["Default"][
+ "TaskQueue.Base.IsChecked"
+ ] = "False" # 基建换班
+ data["Configurations"]["Default"][
+ "TaskQueue.Combat.IsChecked"
+ ] = "False" # 刷理智
+ data["Configurations"]["Default"][
+ "TaskQueue.Mission.IsChecked"
+ ] = "False" # 领取奖励
+ data["Configurations"]["Default"][
+ "TaskQueue.Mall.IsChecked"
+ ] = "False" # 获取信用及购物
+ data["Configurations"]["Default"][
+ "TaskQueue.AutoRoguelike.IsChecked"
+ ] = "False" # 自动肉鸽
+ data["Configurations"]["Default"][
+ "TaskQueue.Reclamation.IsChecked"
+ ] = "False" # 生息演算 # 人工排查配置
+ if mode == "人工排查_仅切换账号":
+ data["Configurations"]["Default"][
+ "MainFunction.PostActions"
+ ] = "8" # 完成后无退出MAA
+ data["Configurations"]["Default"][
+ "Start.RunDirectly"
+ ] = "True" # 启动MAA后直接运行
+ data["Configurations"]["Default"][
+ "Start.StartEmulator"
+ ] = "False" # 启动MAA后自动开启模拟器
+ data["Configurations"]["Default"]["Start.AccountName"] = (
+ self.data[uid][1][:3] + "****" + self.data[uid][1][7:]
+ ) # 账号切换
+ data["Configurations"]["Default"][
+ "TaskQueue.WakeUp.IsChecked"
+ ] = "True" # 开始唤醒
+ data["Configurations"]["Default"][
+ "TaskQueue.Recruiting.IsChecked"
+ ] = "False" # 自动公招
+ data["Configurations"]["Default"][
+ "TaskQueue.Base.IsChecked"
+ ] = "False" # 基建换班
+ data["Configurations"]["Default"][
+ "TaskQueue.Combat.IsChecked"
+ ] = "False" # 刷理智
+ data["Configurations"]["Default"][
+ "TaskQueue.Mission.IsChecked"
+ ] = "False" # 领取奖励
+ data["Configurations"]["Default"][
+ "TaskQueue.Mall.IsChecked"
+ ] = "False" # 获取信用及购物
+ data["Configurations"]["Default"][
+ "TaskQueue.AutoRoguelike.IsChecked"
+ ] = "False" # 自动肉鸽
+ data["Configurations"]["Default"][
+ "TaskQueue.Reclamation.IsChecked"
+ ] = "False" # 生息演算
+ # 剿灭代理配置
+ elif mode == "日常代理_剿灭":
data["Configurations"]["Default"][
"MainFunction.PostActions"
] = "12" # 完成后退出MAA和模拟器
@@ -284,7 +508,6 @@ class MaaRunner(QtCore.QThread):
data["Configurations"]["Default"][
"Start.StartEmulator"
] = "True" # 启动MAA后自动开启模拟器
- elif s == 1:
data["Configurations"]["Default"]["Start.AccountName"] = (
self.data[uid][1][:3] + "****" + self.data[uid][1][7:]
) # 账号切换
@@ -306,6 +529,12 @@ class MaaRunner(QtCore.QThread):
data["Configurations"]["Default"][
"TaskQueue.Mall.IsChecked"
] = "False" # 获取信用及购物
+ data["Configurations"]["Default"][
+ "TaskQueue.AutoRoguelike.IsChecked"
+ ] = "False" # 自动肉鸽
+ data["Configurations"]["Default"][
+ "TaskQueue.Reclamation.IsChecked"
+ ] = "False" # 生息演算
data["Configurations"]["Default"][
"MainFunction.Stage1"
] = "Annihilation" # 主关卡
@@ -332,7 +561,17 @@ class MaaRunner(QtCore.QThread):
data["Configurations"]["Default"][
"Fight.UseExpiringMedicine"
] = "True" # 无限吃48小时内过期的理智药
- elif s == 2:
+ # 日常代理配置
+ elif mode == "日常代理_日常":
+ data["Configurations"]["Default"][
+ "MainFunction.PostActions"
+ ] = "12" # 完成后退出MAA和模拟器
+ data["Configurations"]["Default"][
+ "Start.RunDirectly"
+ ] = "True" # 启动MAA后直接运行
+ data["Configurations"]["Default"][
+ "Start.StartEmulator"
+ ] = "True" # 启动MAA后自动开启模拟器
data["Configurations"]["Default"]["Start.AccountName"] = (
self.data[uid][1][:3] + "****" + self.data[uid][1][7:]
) # 账号切换
@@ -354,6 +593,12 @@ class MaaRunner(QtCore.QThread):
data["Configurations"]["Default"][
"TaskQueue.Mall.IsChecked"
] = "True" # 获取信用及购物
+ data["Configurations"]["Default"][
+ "TaskQueue.AutoRoguelike.IsChecked"
+ ] = "False" # 自动肉鸽
+ data["Configurations"]["Default"][
+ "TaskQueue.Reclamation.IsChecked"
+ ] = "False" # 生息演算
# 主关卡
if self.data[uid][5] == "-":
data["Configurations"]["Default"]["MainFunction.Stage1"] = ""
@@ -420,6 +665,7 @@ class MaaRunner(QtCore.QThread):
] = self.data[uid][
9
] # 自定义基建配置文件地址
+ # 覆写配置文件
with open(self.SetPath, "w", encoding="utf-8") as f:
json.dump(data, f, indent=4)
return True
@@ -589,6 +835,9 @@ class Main(QWidget):
self.runnow = self.ui.findChild(QPushButton, "pushButton_runnow")
self.runnow.clicked.connect(self.RunStarter)
+ self.checkstart = self.ui.findChild(QPushButton, "pushButton_checkstart")
+ self.checkstart.clicked.connect(self.CheckStarter)
+
self.MaaPath = self.ui.findChild(QLineEdit, "lineEdit_MAApath")
self.MaaPath.textChanged.connect(self.ChangeConfig)
@@ -645,10 +894,12 @@ class Main(QWidget):
self.Annihilation_,
self.Num_,
self.data_,
+ "未知",
)
+ self.MaaRunner.question.connect(lambda: self.read("question_runner"))
self.MaaRunner.UpGui.connect(self.UpdateBoard)
self.MaaRunner.UpUserInfo.connect(self.ChangeUserInfo)
- self.MaaRunner.Accomplish.connect(self.end)
+ self.MaaRunner.Accomplish.connect(self.RunEnd)
self.MainTimer = MainTimer(self.config)
self.MainTimer.GetConfig.connect(self.GiveConfig)
@@ -1064,7 +1315,7 @@ class Main(QWidget):
self.UpdateTable("normal")
# 修改用户信息
- def ChangeUserInfo(self, AllUid, days, lasts, numbs):
+ def ChangeUserInfo(self, AllUid, days, lasts, notes, numbs):
for i in range(len(AllUid)):
self.cur.execute(
"UPDATE adminx SET day=? WHERE uid=?", (days[i], AllUid[i])
@@ -1072,6 +1323,9 @@ class Main(QWidget):
self.cur.execute(
"UPDATE adminx SET last=? WHERE uid=?", (lasts[i], AllUid[i])
)
+ self.cur.execute(
+ "UPDATE adminx SET notes=? WHERE uid=?", (notes[i], AllUid[i])
+ )
self.cur.execute(
"UPDATE adminx SET numb=? WHERE uid=?", (numbs[i], AllUid[i])
)
@@ -1134,6 +1388,17 @@ class Main(QWidget):
return newPASSWORD
else:
return 0
+ # 读入选择
+ elif operation == "question_runner":
+ choice = QMessageBox.question(
+ self.ui,
+ self.MaaRunner.question_title,
+ self.MaaRunner.question_info,
+ )
+ if choice == QMessageBox.Yes:
+ self.MaaRunner.question_choice = "Yes"
+ elif choice == QMessageBox.No:
+ self.MaaRunner.question_choice = "No"
def closeEvent(self, event):
self.MainTimer.quit()
@@ -1144,23 +1409,25 @@ class Main(QWidget):
super().closeEvent(event)
# 中止任务
- def end(self):
+ def RunEnd(self):
self.MaaRunner.ifRun = False
self.MaaRunner.wait()
self.MainTimer.isMaaRun = False
+ self.checkstart.setEnabled(True)
self.runnow.clicked.disconnect()
self.runnow.setText("立即执行")
self.runnow.clicked.connect(self.RunStarter)
- # 启动MaaRunner线程
+ # 启动MaaRunner线程进行代理
def RunStarter(self):
if self.config["Default"]["MaaSet.path"] == "":
QMessageBox.critical(self.ui, "错误", "MAA路径未设置!")
return None
# 运行过程中修改部分组件
+ self.checkstart.setEnabled(False)
self.runnow.clicked.disconnect()
self.runnow.setText("结束运行")
- self.runnow.clicked.connect(self.end)
+ self.runnow.clicked.connect(self.RunEnd)
# 配置参数
self.MaaRunner.SetPath = (
self.config["Default"]["MaaSet.path"] + "/config/gui.json"
@@ -1175,6 +1442,43 @@ class Main(QWidget):
self.cur.execute("SELECT * FROM adminx WHERE True")
self.data_ = self.cur.fetchall()
self.MaaRunner.data = [list(row) for row in self.data_]
+ self.MaaRunner.mode = "日常代理"
+ # 启动执行线程
+ self.MainTimer.isMaaRun = True
+ self.MaaRunner.start()
+
+ # 排查结束
+ def CheckEnd(self):
+ self.MaaRunner.ifRun = False
+ self.MaaRunner.wait()
+ self.MainTimer.isMaaRun = False
+ self.runnow.setEnabled(True)
+ self.checkstart.clicked.disconnect()
+ self.checkstart.setText("开始排查")
+ self.checkstart.clicked.connect(self.CheckStarter)
+
+ # 启动MaaRunner线程进行排查
+ def CheckStarter(self):
+ if self.config["Default"]["MaaSet.path"] == "":
+ QMessageBox.critical(self.ui, "错误", "MAA路径未设置!")
+ return None
+ # 运行过程中修改部分组件
+ self.runnow.setEnabled(False)
+ self.checkstart.clicked.disconnect()
+ self.checkstart.setText("中止排查")
+ self.checkstart.clicked.connect(self.CheckEnd)
+ # 配置参数
+ self.MaaRunner.SetPath = (
+ self.config["Default"]["MaaSet.path"] + "/config/gui.json"
+ )
+ self.MaaRunner.LogPath = (
+ self.config["Default"]["MaaSet.path"] + "/debug/gui.log"
+ )
+ self.MaaRunner.MaaPath = self.config["Default"]["MaaSet.path"] + "/MAA.exe"
+ self.cur.execute("SELECT * FROM adminx WHERE True")
+ self.data_ = self.cur.fetchall()
+ self.MaaRunner.data = [list(row) for row in self.data_]
+ self.MaaRunner.mode = "人工排查"
# 启动执行线程
self.MainTimer.isMaaRun = True
self.MaaRunner.start()
diff --git a/README.md b/README.md
index b125aaf..2bd2667 100644
--- a/README.md
+++ b/README.md
@@ -5,6 +5,15 @@ MAA多账号管理与自动化软件
----------------------------------------------------------------------------------------------
+
+
+[](https://github.com/DLmaster361/AUTO_MAA/stargazers)
+[](https://github.com/DLmaster361/AUTO_MAA/network)
+[](https://github.com/DLmaster361/AUTO_MAA/issues)
+[](https://github.com/DLmaster361/AUTO_MAA/graphs/contributors)
+[](https://github.com/DLmaster361/AUTO_MAA/blob/main/LICENSE)
+
+
## 重要声明
本软件是一个外部工具,旨在优化MAA多账号功能体验,并通过一些方法解决MAA项目未能解决的部分问题,改善代理的稳定性。该软件包可以存储明日方舟多账号数据,并通过修改MAA配置文件、读取MAA日志等行为自动完成多账号代理。本开发团队承诺,不会修改明日方舟游戏本体与相关配置文件。
@@ -103,6 +112,20 @@ gameid.txt在初始已经存储了一些常用资源本的替代方案。
- 保持软件打开,软件会在设定的时间自动运行
+## 人工排查代理结果
+
+### 直接开始人工排查
+
+- 在执行页单击`开始排查`启动排查进程
+
+- 软件将调起MAA,依次登录各用户的账号
+
+- 检查代理情况,可以手动完成未代理的任务
+
+- 在对话框中单击对应账号的代理情况
+
+- 结束人工排查后,相关排查情况将被写入用户管理页的`备注`
+
---
# 关于
diff --git a/gui/ui/main.ui b/gui/ui/main.ui
index ec26c14..989b101 100644
--- a/gui/ui/main.ui
+++ b/gui/ui/main.ui
@@ -7,7 +7,7 @@
0
0
1280
- 720
+ 697
@@ -17,7 +17,7 @@
-
- 2
+ 0
@@ -545,7 +545,7 @@
-
-
+
-
@@ -577,6 +577,13 @@
+ -
+
+
+ 开始排查
+
+
+
-
diff --git a/res/info.txt b/res/info.txt
index 5c3b9f5..bb3c330 100644
--- a/res/info.txt
+++ b/res/info.txt
@@ -4,7 +4,7 @@ VSVersionInfo(
ffi=FixedFileInfo(
# filevers and prodvers should be always a tuple with four items: (1, 2, 3, 4)
# Set not needed items to zero 0.
- filevers=(3, 1, 2, 1),
+ filevers=(3, 1, 3, 0),
prodvers=(0, 0, 0, 0),
# Contains a bitmask that specifies the valid bits 'flags'r
mask=0x3f,
@@ -31,13 +31,13 @@ VSVersionInfo(
[StringStruct('Comments', 'https://github.com/DLmaster361/AUTO_MAA/'),
StringStruct('CompanyName', 'AUTO_MAA Team'),
StringStruct('FileDescription', 'AUTO_MAA Component'),
- StringStruct('FileVersion', '3.1.2.1'),
+ StringStruct('FileVersion', '3.1.3.0'),
StringStruct('InternalName', 'AUTO_MAA'),
StringStruct('LegalCopyright', 'Copyright © 2024 DLmaster361'),
StringStruct('OriginalFilename', 'AUTO_MAA.py'),
StringStruct('ProductName', 'AUTO_MAA'),
- StringStruct('ProductVersion', 'v3.1.2.1'),
- StringStruct('Assembly Version', 'v3.1.2.1')])
+ StringStruct('ProductVersion', 'v3.1.3.0'),
+ StringStruct('Assembly Version', 'v3.1.3.0')])
])
]
)
\ No newline at end of file
diff --git a/res/set.txt b/res/set.txt
index bab00a1..6bc326d 100644
--- a/res/set.txt
+++ b/res/set.txt
@@ -7,6 +7,8 @@
"TaskQueue.Combat.IsChecked": "True" #刷理智
"TaskQueue.Mission.IsChecked": "True" #领取奖励
"TaskQueue.Mall.IsChecked": "True" #获取信用及购物
+"TaskQueue.AutoRoguelike.IsChecked": "False" #自动肉鸽
+"TaskQueue.Reclamation.IsChecked": "False" #生息演算
#刷理智
"MainFunction.Stage1": "" #主关卡
"MainFunction.Stage2": "" #备选关卡1
diff --git a/更新说明.txt b/更新说明.txt
index c0f802e..9f52b6f 100644
--- a/更新说明.txt
+++ b/更新说明.txt
@@ -1,15 +1,15 @@
-v3.1.2_Beta
+v3.1.3
+## 新增功能
+- 人工排查功能上线
## 修复BUG
- 添加对内部任务失败的识别
+- 修复未完成用户无法正确加载的问题
## 程序优化
- 优化log文件读取策略,可以读取无时间戳的日志
- 优化MAA运行判定,为后续开发打基础
## 更新说明
- 项目初始阶段,不会提供专门的版本更新程序,您需要手动更新程序。
- v2.1.5及以前的用户,由于新版本采用全新的架构,您需要手动输入之前的信息。
-- v3.0_Beta版用户,直接用AUTO_MAA.exe替代gui.exe后,将原文件夹下的gui文件夹用新版本对应文件替换,重新设置每个用户的“自定义基建”选项(输入“-”以关闭该功能,输入自定义基建配置文件地址以开启该功能)。
-- v3.1~v3.1.2版用户,将原文件夹下的AUTO_MAA.exe文件和gui文件夹用新版本对应文件替换即可。
-- 新用户请忽略本说明。
-
-
-```内测版,普通用户请忽略```
\ No newline at end of file
+- v3.0_Beta版用户,直接用`AUTO_MAA.exe`替代`gui.exe`后,将原文件夹下的`gui文件夹`用新版本对应文件替换,重新设置每个用户的`自定义基建`选项(输入`-`以关闭该功能,输入自定义基建配置文件地址以开启该功能)。
+- v3.1~v3.1.2版用户,将原文件夹下除`data文件夹`和`config文件夹`外的内容用新版本对应文件替换即可。
+- 新用户请忽略本说明。
\ No newline at end of file