Compare commits

..

34 Commits

Author SHA1 Message Date
DLmaster
537b5d9725 移除最小化启动模拟器选项 2024-11-29 11:01:55 +08:00
DLmaster
697c1b5b43 优化记忆窗口与最小化到托盘的体验 2024-11-28 20:43:12 +08:00
DLmaster
2b6057161e 更新时彻底关闭主程序 2024-11-27 21:17:05 +08:00
DLmaster
8e2a6444bd 修复设定时刻无法中止任务的问题 2024-11-27 20:36:51 +08:00
DLmaster
b04df40b7d 图标优化;添加最小化到托盘功能;更新器摆脱UI文件限制 2024-11-27 00:04:37 +08:00
DLmaster
3e17d94904 合并MAA启动器配置流程 2024-11-21 19:52:15 +08:00
DLmaster
29123054cc 3^3 2024-11-19 20:31:52 +08:00
DLmaster
530c038985 3^3 2024-11-19 20:25:53 +08:00
DLmaster
2e9d2f0491 添加软件介绍 2024-11-19 20:20:46 +08:00
DLmaster
69ab9b4f15 邮件通知功能上线 2024-11-16 10:42:56 +08:00
DLmaster
1c8b940925 记忆窗口位置 2024-11-15 10:08:50 +08:00
DLmaster
0e05a4ea18 修正version配置 2024-11-14 15:50:06 +08:00
DLmaster
9e4285b4c5 发布4.1.2.0 2024-11-14 15:40:46 +08:00
DLmaster
e89d2af8ae 发布4.1.2正式版 2024-11-14 15:35:32 +08:00
DLmaster
8e7d663060 补充注释 2024-11-10 01:51:24 +08:00
DLmaster
179b33387e 完成主程序更新后打开AUTO_MAA 2024-11-10 01:46:38 +08:00
DLmaster
2c9a7c443f 加注释 2024-11-10 01:30:51 +08:00
DLmaster
0de964e68c 修复解压失败时本地版本号异常变动问题 2024-11-09 16:30:25 +08:00
DLmaster
97046af931 version修复缺失字段 2024-11-09 16:24:44 +08:00
DLmaster
ec24e776e7 修复#9与人工排查模式报错 2024-11-09 16:09:28 +08:00
DLmaster
92d4ef05fa 进一步限制log_text长度 2024-11-09 11:58:16 +08:00
DLmaster
fb27c50c75 解决log_text过长导致的log显示于中间 2024-11-09 11:15:44 +08:00
DLmaster
0141bf039a 添加清理可能存在的临时文件步骤 2024-11-08 22:11:48 +08:00
DLmaster
54f9bb7f21 修复url错误 2024-11-08 22:05:06 +08:00
DLmaster
2c4e5eb5cc 发布v4.1.2 2024-11-08 21:57:28 +08:00
DLmaster
cd42f45a1f 打包目录结构优化 2024-11-08 20:32:06 +08:00
DLmaster
ec38895765 修改更新器图标 2024-11-08 19:01:16 +08:00
DLmaster
fc30579bbc 修复部分组件缩放问题 2024-11-07 23:45:19 +08:00
DLmaster
3e6223e4e5 发布公测消息 2024-11-07 23:35:04 +08:00
DLmaster
27c71124ff 尝试解决log框卡中间问题 2024-11-07 23:18:34 +08:00
DLmaster
3a8a8a36f5 去除误注释 2024-11-07 21:55:04 +08:00
DLmaster
ed6de5e806 打包方式优化 2024-11-07 21:51:15 +08:00
DLmaster
bf8a5befa3 添加无限代理天数模式 2024-11-07 21:00:32 +08:00
DLmaster
a3fe641f6b 添加启动AUTO_MAA后直接代理功能 2024-11-07 17:25:58 +08:00
16 changed files with 1087 additions and 573 deletions

View File

@@ -83,7 +83,11 @@ jobs:
- name: Create Zip - name: Create Zip
id: create_zip id: create_zip
run: | run: |
move gui\ico\AUTO_MAA_Updater.ico .\
Compress-Archive -Path gui,res,AUTO_MAA.py,Updater.py,package.py,dist/AUTO_MAA.exe,requirements.txt,README.md,LICENSE -DestinationPath AUTO_MAA_${{ env.AUTO_MAA_version }}.zip Compress-Archive -Path gui,res,AUTO_MAA.py,Updater.py,package.py,dist/AUTO_MAA.exe,requirements.txt,README.md,LICENSE -DestinationPath AUTO_MAA_${{ env.AUTO_MAA_version }}.zip
del gui\ui\main.ui
del gui\ico\AUTO_MAA.ico
move AUTO_MAA_Updater.ico gui\ico
Compress-Archive -Path gui,dist/Updater.exe -DestinationPath Updater_${{ env.updater_version }}.zip Compress-Archive -Path gui,dist/Updater.exe -DestinationPath Updater_${{ env.updater_version }}.zip
- name: Upload Artifact - name: Upload Artifact
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v4

File diff suppressed because it is too large Load Diff

View File

@@ -15,11 +15,30 @@ MAA多账号管理与自动化软件
[![GitHub License](https://img.shields.io/github/license/DLmaster361/AUTO_MAA?style=flat-square)](https://github.com/DLmaster361/AUTO_MAA/blob/main/LICENSE) [![GitHub License](https://img.shields.io/github/license/DLmaster361/AUTO_MAA?style=flat-square)](https://github.com/DLmaster361/AUTO_MAA/blob/main/LICENSE)
</div> </div>
## 软件介绍
### 性质
本软件是明日方舟第三方软件`MAA`的第三方工具即第3<sup>3</sup>方软件。旨在优化MAA多账号功能体验并通过一些方法解决MAA项目未能解决的部分问题提高代理的稳定性。
### 原理
本软件可以存储多个明日方舟账号数据,并通过以下流程实现代理功能:
1. **配置:** 根据对应用户的配置信息生成配置文件并将其导入MAA。
2. **监测:** 在MAA开始代理后持续读取MAA的日志以判断其运行状态。当软件认定MAA出现异常时通过重启MAA使之仍能继续完成任务。
3. **循环:** 重复上述步骤使MAA依次完成各个用户的日常代理任务。
### 优势
- **节省运行开销:** 只需要一份MAA软件与一个模拟器无需多开就能完成多账号代理羸弱的电脑也能代理日常。
- **自定义空间大:** 依靠高级用户配置模式支持MAA几乎所有设置选项自定义同时保留对模拟器多开的支持。
- **一键代理无忧:** 无须中途手动修改MAA配置将繁琐交给AUTO_MAA把游戏留给自己。
- **代理结果复核:** 通过人工排查功能核实各用户代理情况,堵住日常代理的最后一丝风险。
## 重要声明 ## 重要声明
本软件是一个外部工具旨在优化MAA多账号功能体验并通过一些方法解决MAA项目未能解决的部分问题改善代理的稳定性。该软件包可以存储明日方舟多账号数据并通过修改MAA配置文件、读取MAA日志等行为自动完成多账号代理。本开发团队承诺,不会修改明日方舟游戏本体与相关配置文件。 本开发团队承诺,不会修改明日方舟游戏本体与相关配置文件。本项目使用GPL开源相关细则如下
本项目使用GPL开源相关细则如下
- **作者:** AUTO_MAA软件作者为DLmaster、DLmaster361或DLmaster_361以上均指代同一人。 - **作者:** AUTO_MAA软件作者为DLmaster、DLmaster361或DLmaster_361以上均指代同一人。
- **使用:** AUTO_MAA使用者可以按自己的意愿自由使用本软件。依据GPL对于由此可能产生的损失AUTO_MAA项目组不负任何责任。 - **使用:** AUTO_MAA使用者可以按自己的意愿自由使用本软件。依据GPL对于由此可能产生的损失AUTO_MAA项目组不负任何责任。
@@ -113,6 +132,8 @@ MAA多账号管理与自动化软件
- `运行失败重试次数上限`:对于每一用户,若超过该次数限制仍未完成代理,视为代理失败。 - `运行失败重试次数上限`:对于每一用户,若超过该次数限制仍未完成代理,视为代理失败。
- `开机自动启动AUTO_MAA`实现AUTO_MAA的自启动。 - `开机自动启动AUTO_MAA`实现AUTO_MAA的自启动。
- `AUTO_MAA启动时禁止电脑休眠`:仅阻止电脑自动休眠,不会影响屏幕是否熄灭。 - `AUTO_MAA启动时禁止电脑休眠`:仅阻止电脑自动休眠,不会影响屏幕是否熄灭。
- `启动AUTO_MAA后直接代理`在AUTO_MAA启动后立即执行代理任务。
- `通过邮件通知结果`在AUTO_MAA完成任务后将结果发送至用户指定邮箱。
- `检查版本更新`从GitHub上获取版本更新要求网络能够访问GitHub。获取版本信息时若遇网络不稳定主程序有概率未响应稍等片刻后恢复。 - `检查版本更新`从GitHub上获取版本更新要求网络能够访问GitHub。获取版本信息时若遇网络不稳定主程序有概率未响应稍等片刻后恢复。
- `修改管理密钥`:修改管理密钥,当用户列表中无用户时,将跳过验证旧管理密钥。 - `修改管理密钥`:修改管理密钥,当用户列表中无用户时,将跳过验证旧管理密钥。
@@ -132,7 +153,7 @@ MAA多账号管理与自动化软件
- `用户名`:展示在执行界面的用户名,用于区分不同用户。 - `用户名`:展示在执行界面的用户名,用于区分不同用户。
- `账号ID`MAA进行账号切换所需的凭据官服用户请输入手机号码、B服请输入B站ID。 - `账号ID`MAA进行账号切换所需的凭据官服用户请输入手机号码、B服请输入B站ID。
- `服务器`当前支持官服、B服。 - `服务器`当前支持官服、B服。
- `代理天数`剩余需要进行代理的天数当剩余天数为0时不再代理或排查。 - `代理天数`:剩余需要进行代理的天数,输入`任意负数`可设置为无限代理天数,当剩余天数为0时不再代理或排查。
- `状态`:用户的状态,禁用时将不再对其进行代理或排查。 - `状态`:用户的状态,禁用时将不再对其进行代理或排查。
- `执行情况`:当日执行情况,不可编辑。 - `执行情况`:当日执行情况,不可编辑。
- `关卡``备选关卡-1``备选关卡-2`:关卡号。 - `关卡``备选关卡-1``备选关卡-2`:关卡号。

View File

@@ -30,17 +30,17 @@ import sys
import json import json
import zipfile import zipfile
import requests import requests
import subprocess
from PySide6.QtWidgets import ( from PySide6.QtWidgets import (
QApplication, QApplication,
QDialog,
QVBoxLayout,
QLabel, QLabel,
QProgressBar, QProgressBar,
) )
from PySide6.QtGui import QIcon from PySide6.QtGui import QIcon
from PySide6.QtCore import QObject, QThread, Signal from PySide6.QtCore import QObject, QThread, Signal
from PySide6.QtUiTools import QUiLoader
uiLoader = QUiLoader()
class UpdateProcess(QThread): class UpdateProcess(QThread):
@@ -49,17 +49,24 @@ class UpdateProcess(QThread):
progress = Signal(int, int, int) progress = Signal(int, int, int)
accomplish = Signal() accomplish = Signal()
def __init__(self, app_path, name, download_url): def __init__(self, app_path, name, download_url, version):
super(UpdateProcess, self).__init__() super(UpdateProcess, self).__init__()
self.app_path = app_path self.app_path = app_path
self.name = name self.name = name
self.download_url = download_url self.download_url = download_url
self.download_path = app_path + "/AUTO_MAA_Update.zip" # 临时下载文件的路径 self.version = version
self.version_path = app_path + "/res/version.json" self.download_path = f"{app_path}/AUTO_MAA_Update.zip" # 临时下载文件的路径
self.version_path = f"{app_path}/res/version.json"
def run(self): def run(self):
# 清理可能存在的临时文件
try:
os.remove(self.download_path)
except FileNotFoundError:
pass
# 下载 # 下载
try: try:
response = requests.get(self.download_url, stream=True) response = requests.get(self.download_url, stream=True)
@@ -82,6 +89,7 @@ class UpdateProcess(QThread):
e = "\n".join([e[_ : _ + 75] for _ in range(0, len(e), 75)]) e = "\n".join([e[_ : _ + 75] for _ in range(0, len(e), 75)])
self.info.emit(f"下载{self.name}时出错:\n{e}") self.info.emit(f"下载{self.name}时出错:\n{e}")
return None return None
# 解压 # 解压
try: try:
self.info.emit("正在解压更新文件") self.info.emit("正在解压更新文件")
@@ -95,30 +103,54 @@ class UpdateProcess(QThread):
self.info.emit(f"{self.name}更新成功!") self.info.emit(f"{self.name}更新成功!")
self.progress.emit(0, 100, 100) self.progress.emit(0, 100, 100)
except Exception as e: except Exception as e:
e = str(e) e = str(e)
e = "\n".join([e[_ : _ + 75] for _ in range(0, len(e), 75)]) e = "\n".join([e[_ : _ + 75] for _ in range(0, len(e), 75)])
self.info.emit(f"解压更新时出错:\n{e}") self.info.emit(f"解压更新时出错:\n{e}")
return None
# 更新version文件
with open(self.version_path, "r", encoding="utf-8") as f:
version_info = json.load(f)
if self.name == "AUTO_MAA更新器":
version_info["updater_version"] = self.version
elif self.name == "AUTO_MAA主程序":
version_info["main_version"] = self.version
with open(self.version_path, "w", encoding="utf-8") as f:
json.dump(version_info, f, indent=4)
# 主程序更新完成后打开AUTO_MAA
if self.name == "AUTO_MAA主程序":
subprocess.Popen(
f"{self.app_path}/AUTO_MAA.exe",
shell=True,
creationflags=subprocess.CREATE_NO_WINDOW,
)
self.accomplish.emit() self.accomplish.emit()
class Updater(QObject): class Updater(QObject):
def __init__(self, app_path, name, download_url): def __init__(self, app_path, name, download_url, version):
super().__init__() super().__init__()
self.ui = uiLoader.load(app_path + "/gui/ui/updater.ui") self.ui = QDialog()
self.ui.setWindowTitle("AUTO_MAA更新器") self.ui.setWindowTitle("AUTO_MAA更新器")
self.ui.setWindowIcon(QIcon(app_path + "/res/AUTO_MAA.ico")) self.ui.resize(500, 70)
self.ui.setWindowIcon(QIcon(f"{app_path}/gui/ico/AUTO_MAA_Updater.ico"))
self.info = self.ui.findChild(QLabel, "label") # 创建垂直布局
self.info.setText("正在初始化") self.Layout_v = QVBoxLayout(self.ui)
self.progress = self.ui.findChild(QProgressBar, "progressBar") self.info = QLabel("正在初始化", self.ui)
self.Layout_v.addWidget(self.info)
self.progress = QProgressBar(self.ui)
self.progress.setRange(0, 0) self.progress.setRange(0, 0)
self.Layout_v.addWidget(self.progress)
self.update_process = UpdateProcess(app_path, name, download_url) self.update_process = UpdateProcess(app_path, name, download_url, version)
self.update_process.info.connect(self.update_info) self.update_process.info.connect(self.update_info)
self.update_process.progress.connect(self.update_progress) self.update_process.progress.connect(self.update_progress)
@@ -134,20 +166,28 @@ class Updater(QObject):
class AUTO_MAA_Updater(QApplication): class AUTO_MAA_Updater(QApplication):
def __init__(self, app_path, name, download_url): def __init__(self, app_path, name, download_url, version):
super().__init__() super().__init__()
self.main = Updater(app_path, name, download_url) self.main = Updater(app_path, name, download_url, version)
self.main.ui.show() self.main.ui.show()
if __name__ == "__main__": if __name__ == "__main__":
# 获取软件自身的路径 # 获取软件自身的路径
app_path = os.path.dirname(os.path.realpath(sys.argv[0])).replace("\\", "/") app_path = os.path.dirname(os.path.realpath(sys.argv[0])).replace("\\", "/")
# 从本地版本信息文件获取当前版本信息 # 从本地版本信息文件获取当前版本信息
with open(app_path + "/res/version.json", "r", encoding="utf-8") as f: if os.path.exists(f"{app_path}/res/version.json"):
version_current = json.load(f) with open(f"{app_path}/res/version.json", "r", encoding="utf-8") as f:
main_version_current = list(map(int, version_current["main_version"].split("."))) version_current = json.load(f)
main_version_current = list(
map(int, version_current["main_version"].split("."))
)
else:
main_version_current = [0, 0, 0, 0]
# 从远程服务器获取最新版本信息 # 从远程服务器获取最新版本信息
response = requests.get( response = requests.get(
"https://ghp.ci/https://github.com/DLmaster361/AUTO_MAA/blob/main/res/version.json" "https://ghp.ci/https://github.com/DLmaster361/AUTO_MAA/blob/main/res/version.json"
@@ -155,8 +195,12 @@ if __name__ == "__main__":
version_remote = response.json() version_remote = response.json()
main_version_remote = list(map(int, version_remote["main_version"].split("."))) main_version_remote = list(map(int, version_remote["main_version"].split(".")))
# 启动更新线程
if main_version_remote > main_version_current: if main_version_remote > main_version_current:
app = AUTO_MAA_Updater( app = AUTO_MAA_Updater(
app_path, "AUTO_MAA主程序", version_remote["main_download_url"] app_path,
"AUTO_MAA主程序",
version_remote["main_download_url"],
version_remote["main_version"],
) )
sys.exit(app.exec()) sys.exit(app.exec())

BIN
gui/ico/AUTO_MAA.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

View File

@@ -15,7 +15,7 @@
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout_13"> <layout class="QVBoxLayout" name="verticalLayout_13">
<item> <item>
<widget class="QTabWidget" name="tabWidget"> <widget class="QTabWidget" name="tabWidget_main">
<property name="currentIndex"> <property name="currentIndex">
<number>0</number> <number>0</number>
</property> </property>
@@ -189,8 +189,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>1156</width> <width>98</width>
<height>546</height> <height>74</height>
</rect> </rect>
</property> </property>
<attribute name="label"> <attribute name="label">
@@ -919,6 +919,12 @@
<height>0</height> <height>0</height>
</size> </size>
</property> </property>
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>1024</number>
</property>
</widget> </widget>
</item> </item>
<item> <item>
@@ -968,6 +974,12 @@
<height>0</height> <height>0</height>
</size> </size>
</property> </property>
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>1024</number>
</property>
</widget> </widget>
</item> </item>
<item> <item>
@@ -1017,6 +1029,12 @@
<height>0</height> <height>0</height>
</size> </size>
</property> </property>
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>1024</number>
</property>
</widget> </widget>
</item> </item>
<item> <item>
@@ -1037,8 +1055,8 @@
<property name="title"> <property name="title">
<string>AUTO_MAA设置</string> <string>AUTO_MAA设置</string>
</property> </property>
<layout class="QHBoxLayout" name="horizontalLayout_20"> <layout class="QGridLayout" name="gridLayout_4">
<item> <item row="0" column="0">
<widget class="QFrame" name="frame_routine_3"> <widget class="QFrame" name="frame_routine_3">
<property name="frameShape"> <property name="frameShape">
<enum>QFrame::Shape::StyledPanel</enum> <enum>QFrame::Shape::StyledPanel</enum>
@@ -1054,10 +1072,23 @@
</property> </property>
</widget> </widget>
</item> </item>
<item>
<spacer name="horizontalSpacer_14">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout> </layout>
</widget> </widget>
</item> </item>
<item> <item row="0" column="1">
<spacer name="horizontalSpacer_6"> <spacer name="horizontalSpacer_6">
<property name="orientation"> <property name="orientation">
<enum>Qt::Orientation::Horizontal</enum> <enum>Qt::Orientation::Horizontal</enum>
@@ -1070,7 +1101,7 @@
</property> </property>
</spacer> </spacer>
</item> </item>
<item> <item row="0" column="2">
<widget class="QFrame" name="frame_routine_2"> <widget class="QFrame" name="frame_routine_2">
<property name="frameShape"> <property name="frameShape">
<enum>QFrame::Shape::StyledPanel</enum> <enum>QFrame::Shape::StyledPanel</enum>
@@ -1086,10 +1117,23 @@
</property> </property>
</widget> </widget>
</item> </item>
<item>
<spacer name="horizontalSpacer_13">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout> </layout>
</widget> </widget>
</item> </item>
<item> <item row="0" column="3">
<spacer name="horizontalSpacer_7"> <spacer name="horizontalSpacer_7">
<property name="orientation"> <property name="orientation">
<enum>Qt::Orientation::Horizontal</enum> <enum>Qt::Orientation::Horizontal</enum>
@@ -1102,7 +1146,132 @@
</property> </property>
</spacer> </spacer>
</item> </item>
<item> <item row="1" column="0">
<widget class="QFrame" name="frame_routine_4">
<property name="frameShape">
<enum>QFrame::Shape::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Shadow::Raised</enum>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_20">
<item>
<widget class="QCheckBox" name="checkBox_ifproxydirectly">
<property name="text">
<string>启动AUTO_MAA后直接代理</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_15">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item row="1" column="1">
<spacer name="horizontalSpacer_11">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>231</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="1" column="2" colspan="2">
<widget class="QFrame" name="frame_routine_5">
<property name="frameShape">
<enum>QFrame::Shape::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Shadow::Raised</enum>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_22" stretch="0,1,3">
<item>
<widget class="QCheckBox" name="checkBox_ifsendmail">
<property name="text">
<string>通过邮件通知结果</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_16">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLineEdit" name="lineEdit_mailaddress"/>
</item>
</layout>
</widget>
</item>
<item row="2" column="0">
<widget class="QFrame" name="frame_iftotray">
<property name="frameShape">
<enum>QFrame::Shape::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Shadow::Raised</enum>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_23">
<item>
<widget class="QCheckBox" name="checkBox_iftotray">
<property name="text">
<string>最小化到托盘</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_17">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>149</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item row="2" column="1">
<spacer name="horizontalSpacer_12">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>311</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="2" column="2">
<widget class="QFrame" name="frame_check_update"> <widget class="QFrame" name="frame_check_update">
<property name="frameShape"> <property name="frameShape">
<enum>QFrame::Shape::StyledPanel</enum> <enum>QFrame::Shape::StyledPanel</enum>
@@ -1147,6 +1316,19 @@
</layout> </layout>
</widget> </widget>
</item> </item>
<item row="2" column="3">
<spacer name="horizontalSpacer_19">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout> </layout>
</widget> </widget>
</item> </item>
@@ -1173,7 +1355,7 @@
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout_15"> <layout class="QVBoxLayout" name="verticalLayout_15">
<item> <item>
<widget class="QTextBrowser" name="textBrowser"> <widget class="QTextBrowser" name="textBrowser_tips">
<property name="html"> <property name="html">
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt; <string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;meta charset=&quot;utf-8&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt; &lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;meta charset=&quot;utf-8&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
@@ -1184,17 +1366,13 @@ li.checked::marker { content: &quot;\2612&quot;; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Microsoft YaHei UI'; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt; &lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Microsoft YaHei UI'; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;致用户:&lt;/p&gt; &lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;致用户:&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; 这是AUTO_MAA_v4.1.0,版本更新程序上线。&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; 使用本程序前请先仔细阅读README.md。&lt;/p&gt; &lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; 使用本程序前请先仔细阅读README.md。&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; 您可以通过设置AUTO_MAA定时执行并勾选最小化到托盘同时勾选MAA的启动MAA后直接最小化与最小化时隐藏至托盘来减少日常代理对电脑使用的影响但此时设置MAA时需要自行前往托盘区打开MAA界面。&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; 对于B服用户由于我们无权替您同意用户协议若出现用户协议弹窗您需要自行完成确认否则可能造成MAA卡死代理任务失败。&lt;/p&gt; &lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; 对于B服用户由于我们无权替您同意用户协议若出现用户协议弹窗您需要自行完成确认否则可能造成MAA卡死代理任务失败。&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; 老用户请务必备份原有数据,此次更新的代码改动较大,可能有数据遗失的风险。&lt;/p&gt; &lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; 由于用户与项目贡献者的稀缺,我们无法确保正式版足够完善,还望谅解。当遇到严重漏洞,请先确保当前为最新版本。&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; 由于用户与项目贡献者的稀缺,我们无法确保正式版足够完善,还望谅解。&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; 当遇到严重漏洞,请先确保当前为最新版本。&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; 您还可以通过官方仓库 &lt;a href=&quot;https://github.com/DLmaster361/AUTO_MAA/&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#007ad6;&quot;&gt;DLmaster361/AUTO_MAA&lt;/span&gt;&lt;/a&gt; 发布Issues求助。&lt;/p&gt; &lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; 您还可以通过官方仓库 &lt;a href=&quot;https://github.com/DLmaster361/AUTO_MAA/&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#007ad6;&quot;&gt;DLmaster361/AUTO_MAA&lt;/span&gt;&lt;/a&gt; 发布Issues求助。&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;

View File

@@ -1,35 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Dialog</class>
<widget class="QDialog" name="Dialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>500</width>
<height>61</height>
</rect>
</property>
<property name="windowTitle">
<string>AUTO_MAA更新器</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>TextLabel</string>
</property>
</widget>
</item>
<item>
<widget class="QProgressBar" name="progressBar">
<property name="value">
<number>24</number>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View File

@@ -28,23 +28,39 @@ v4.1
import os import os
import json import json
os.system(
"pyinstaller -F --version-file res/AUTO_MAA_info.txt -w --icon=res/AUTO_MAA.ico AUTO_MAA.py --hidden-import plyer.platforms.win.notification" def version_text(version_numb):
) """将版本号列表转为可读的文本信息"""
os.system( if version_numb[3] == 0:
"pyinstaller -F --version-file res/Updater_info.txt -w --icon=res/AUTO_MAA.ico Updater.py" version = f"v{'.'.join(str(_) for _ in version_numb[0:3])}"
) else:
version = f"v{'.'.join(str(_) for _ in version_numb[0:3])}_beta"
return version
with open("res/version.json", "r", encoding="utf-8") as f: with open("res/version.json", "r", encoding="utf-8") as f:
version = json.load(f) version = json.load(f)
main_version = list(map(int, version["main_version"].split(".")))
updater_version = list(map(int, version["updater_version"].split("."))) main_version_numb = list(map(int, version["main_version"].split(".")))
if main_version[3] == 0: updater_version_numb = list(map(int, version["updater_version"].split(".")))
main_version = f"v{'.'.join(str(_) for _ in main_version[0:3])}"
elif main_version[3] == 1: main_info = f"# UTF-8\n#\nVSVersionInfo(\n ffi=FixedFileInfo(\n # filevers and prodvers should be always a tuple with four items: (1, 2, 3, 4)\n # Set not needed items to zero 0.\n filevers=({', '.join(str(_) for _ in main_version_numb)}),\n prodvers=(0, 0, 0, 0),\n # Contains a bitmask that specifies the valid bits 'flags'r\n mask=0x3f,\n # Contains a bitmask that specifies the Boolean attributes of the file.\n flags=0x0,\n # The operating system for which this file was designed.\n # 0x4 - NT and there is no need to change it.\n OS=0x4,\n # The general type of file.\n # 0x1 - the file is an application.\n fileType=0x1,\n # The function of the file.\n # 0x0 - the function is not defined for this fileType\n subtype=0x0,\n # Creation date and time stamp.\n date=(0, 0)\n ),\n kids=[\n VarFileInfo([VarStruct('Translation', [0, 1200])]), \n StringFileInfo(\n [\n StringTable(\n '000004b0',\n [StringStruct('Comments', 'https://github.com/DLmaster361/AUTO_MAA/'),\n StringStruct('CompanyName', 'AUTO_MAA Team'),\n StringStruct('FileDescription', 'AUTO_MAA Component'),\n StringStruct('FileVersion', '{version["main_version"]}'),\n StringStruct('InternalName', 'AUTO_MAA'),\n StringStruct('LegalCopyright', 'Copyright © 2024 DLmaster361'),\n StringStruct('OriginalFilename', 'AUTO_MAA.py'),\n StringStruct('ProductName', 'AUTO_MAA'),\n StringStruct('ProductVersion', 'v{version["main_version"]}'),\n StringStruct('Assembly Version', 'v{version["main_version"]}')])\n ])\n ]\n)"
main_version = f"v{'.'.join(str(_) for _ in main_version[0:3])}_beta" updater_info = f"# UTF-8\n#\nVSVersionInfo(\n ffi=FixedFileInfo(\n # filevers and prodvers should be always a tuple with four items: (1, 2, 3, 4)\n # Set not needed items to zero 0.\n filevers=({', '.join(str(_) for _ in updater_version_numb)}),\n prodvers=(0, 0, 0, 0),\n # Contains a bitmask that specifies the valid bits 'flags'r\n mask=0x3f,\n # Contains a bitmask that specifies the Boolean attributes of the file.\n flags=0x0,\n # The operating system for which this file was designed.\n # 0x4 - NT and there is no need to change it.\n OS=0x4,\n # The general type of file.\n # 0x1 - the file is an application.\n fileType=0x1,\n # The function of the file.\n # 0x0 - the function is not defined for this fileType\n subtype=0x0,\n # Creation date and time stamp.\n date=(0, 0)\n ),\n kids=[\n VarFileInfo([VarStruct('Translation', [0, 1200])]), \n StringFileInfo(\n [\n StringTable(\n '000004b0',\n [StringStruct('Comments', 'https://github.com/DLmaster361/AUTO_MAA/'),\n StringStruct('CompanyName', 'AUTO_MAA Team'),\n StringStruct('FileDescription', 'AUTO_MAA Component'),\n StringStruct('FileVersion', '{version["updater_version"]}'),\n StringStruct('InternalName', 'AUTO_MAA_Updater'),\n StringStruct('LegalCopyright', 'Copyright © 2024 DLmaster361'),\n StringStruct('OriginalFilename', 'Updater.py'),\n StringStruct('ProductName', 'AUTO_MAA_Updater'),\n StringStruct('ProductVersion', 'v{version["updater_version"]}'),\n StringStruct('Assembly Version', 'v{version["updater_version"]}')])\n ])\n ]\n)"
if updater_version[3] == 0:
updater_version = f"v{'.'.join(str(_) for _ in updater_version[0:3])}" with open("AUTO_MAA_info.txt", "w", encoding="utf-8") as f:
elif updater_version[3] == 1: print(main_info, end="", file=f)
updater_version = f"v{'.'.join(str(_) for _ in updater_version[0:3])}_beta" with open("Updater_info.txt", "w", encoding="utf-8") as f:
print(updater_info, end="", file=f)
os.system(
"pyinstaller -F --version-file AUTO_MAA_info.txt -w --icon=gui/ico/AUTO_MAA.ico AUTO_MAA.py --hidden-import plyer.platforms.win.notification"
)
os.system(
"pyinstaller -F --version-file Updater_info.txt -w --icon=gui/ico/AUTO_MAA_Updater.ico Updater.py"
)
with open("update_info.txt", "w", encoding="utf-8") as f: with open("update_info.txt", "w", encoding="utf-8") as f:
print(f"{main_version}\n{updater_version}\n{version["announcement"]}", file=f) print(
f"{version_text(main_version_numb)}\n{version_text(updater_version_numb)}{version["announcement"]}",
file=f,
)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 MiB

After

Width:  |  Height:  |  Size: 26 KiB

View File

@@ -1,43 +0,0 @@
# UTF-8
#
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=(4, 1, 1, 0),
prodvers=(0, 0, 0, 0),
# Contains a bitmask that specifies the valid bits 'flags'r
mask=0x3f,
# Contains a bitmask that specifies the Boolean attributes of the file.
flags=0x0,
# The operating system for which this file was designed.
# 0x4 - NT and there is no need to change it.
OS=0x4,
# The general type of file.
# 0x1 - the file is an application.
fileType=0x1,
# The function of the file.
# 0x0 - the function is not defined for this fileType
subtype=0x0,
# Creation date and time stamp.
date=(0, 0)
),
kids=[
VarFileInfo([VarStruct('Translation', [0, 1200])]),
StringFileInfo(
[
StringTable(
'000004b0',
[StringStruct('Comments', 'https://github.com/DLmaster361/AUTO_MAA/'),
StringStruct('CompanyName', 'AUTO_MAA Team'),
StringStruct('FileDescription', 'AUTO_MAA Component'),
StringStruct('FileVersion', '4.1.1.0'),
StringStruct('InternalName', 'AUTO_MAA'),
StringStruct('LegalCopyright', 'Copyright © 2024 DLmaster361'),
StringStruct('OriginalFilename', 'AUTO_MAA.py'),
StringStruct('ProductName', 'AUTO_MAA'),
StringStruct('ProductVersion', 'v4.1.1.0'),
StringStruct('Assembly Version', 'v4.1.1.0')])
])
]
)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 61 KiB

View File

@@ -1,43 +0,0 @@
# UTF-8
#
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=(1, 0, 0, 0),
prodvers=(0, 0, 0, 0),
# Contains a bitmask that specifies the valid bits 'flags'r
mask=0x3f,
# Contains a bitmask that specifies the Boolean attributes of the file.
flags=0x0,
# The operating system for which this file was designed.
# 0x4 - NT and there is no need to change it.
OS=0x4,
# The general type of file.
# 0x1 - the file is an application.
fileType=0x1,
# The function of the file.
# 0x0 - the function is not defined for this fileType
subtype=0x0,
# Creation date and time stamp.
date=(0, 0)
),
kids=[
VarFileInfo([VarStruct('Translation', [0, 1200])]),
StringFileInfo(
[
StringTable(
'000004b0',
[StringStruct('Comments', 'https://github.com/DLmaster361/AUTO_MAA/'),
StringStruct('CompanyName', 'AUTO_MAA Team'),
StringStruct('FileDescription', 'AUTO_MAA Component'),
StringStruct('FileVersion', '1.0.0.0'),
StringStruct('InternalName', 'AUTO_MAA_Updater'),
StringStruct('LegalCopyright', 'Copyright © 2024 DLmaster361'),
StringStruct('OriginalFilename', 'Updater.py'),
StringStruct('ProductName', 'AUTO_MAA_Updater'),
StringStruct('ProductVersion', 'v1.0.0.0'),
StringStruct('Assembly Version', 'v1.0.0.0')])
])
]
)

View File

@@ -36,5 +36,4 @@
"VersionUpdate.AutoInstallUpdatePackage": "True" #自动安装更新包 "VersionUpdate.AutoInstallUpdatePackage": "True" #自动安装更新包
"Start.RunDirectly": "True" #启动MAA后直接运行 "Start.RunDirectly": "True" #启动MAA后直接运行
"Start.MinimizeDirectly": "True" #启动MAA后直接最小化 "Start.MinimizeDirectly": "True" #启动MAA后直接最小化
"Start.OpenEmulatorAfterLaunch": "True" #启动MAA后自动开启模拟器 "Start.OpenEmulatorAfterLaunch": "True" #启动MAA后自动开启模拟器
"Start.MinimizingStartup": "True" #最小化启动模拟器

View File

@@ -1,7 +1,7 @@
{ {
"main_version": "4.1.1.0", "main_version": "4.1.3.0",
"main_download_url": "https://ghp.ci/https://github.com/DLmaster361/AUTO_MAA/releases/download/v4.1.1/AUTO_MAA_v4.1.1.zip", "main_download_url": "https://ghp.ci/https://github.com/DLmaster361/AUTO_MAA/releases/download/v4.1.3/AUTO_MAA_v4.1.3.zip",
"updater_version": "1.0.0.0", "updater_version": "1.0.5.0",
"updater_download_url": "https://ghp.ci/https://github.com/DLmaster361/AUTO_MAA/releases/download/v4.1.1/Updater_v1.0.0.zip", "updater_download_url": "https://ghp.ci/https://github.com/DLmaster361/AUTO_MAA/releases/download/v4.1.3/Updater_v1.0.5.zip",
"announcement": "\n## 修复BUG\n- 适配MAA的`启动MAA后自动开启模拟器`字段更改" "announcement": "\n## 新增功能\n- 记忆窗口与菜单配置\n- 邮件通知功能上线\n- 添加最小化到托盘功能\n## 修复BUG\n- 修复定时执行功能在设定时刻无法中止任务的问题\n- 修复更新时主程序关闭不彻底的问题\n- 与MAA项目同步移除最小化启动模拟器选项\n## 程序优化\n- 优化`MaaRunner`初始化流程\n- 合并MAA启动器配置流程\n- 优化图标\n- Updater.exe不再依赖.ui文件"
} }