diff --git a/.github/workflows/python-app.yml b/.github/workflows/python-app.yml index 8337200..b1bcb36 100644 --- a/.github/workflows/python-app.yml +++ b/.github/workflows/python-app.yml @@ -22,12 +22,12 @@ name: Build AUTO_MAA on: push: - branches: [ "main" ] + branches: [ "main","Updater" ] paths-ignore: - '**.md' - 'LICENSE' pull_request: - branches: [ "main" ] + branches: [ "main","Updater" ] paths-ignore: - '**.md' - 'LICENSE' @@ -41,6 +41,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Repo Check + id: repo_check run: | if [[ "$GITHUB_REPOSITORY" != "DLmaster361/AUTO_MAA" ]]; then echo "When forking this repository to make your own builds, you have to adjust this check." @@ -69,21 +70,33 @@ jobs: # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics - name: Built with pyinstaller + id: built_with_pyinstaller run: | - pyinstaller -F --version-file res/info.txt -w --icon=res/AUTO_MAA.ico AUTO_MAA.py --hidden-import plyer.platforms.win.notification + python package.py - name: Read version id: read_version run: | - $VERSION=(Get-Content -Path "更新说明.txt" -TotalCount 1).Trim() - "version=$VERSION" | Out-File -FilePath $env:GITHUB_ENV -Append + $MAIN_VERSION=(Get-Content -Path "update_info.txt" -TotalCount 1).Trim() + "AUTO_MAA_version=$MAIN_VERSION" | Out-File -FilePath $env:GITHUB_ENV -Append + $UPDATER_VERSION=(Get-Content -Path "update_info.txt" -TotalCount 2 | Select-Object -Index 1).Trim() + "updater_version=$UPDATER_VERSION" | Out-File -FilePath $env:GITHUB_ENV -Append - name: Create Zip + id: create_zip run: | - Compress-Archive -Path gui,res,AUTO_MAA.py,dist/AUTO_MAA.exe,requirements.txt,README.md,LICENSE,更新说明.txt -DestinationPath AUTO_MAA_${{ env.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 + Compress-Archive -Path gui,dist/Updater.exe -DestinationPath Updater_${{ env.updater_version }}.zip - name: Upload Artifact uses: actions/upload-artifact@v4 with: - name: AUTO_MAA_${{ env.version }} - path: AUTO_MAA_${{ env.version }}.zip + name: AUTO_MAA_${{ env.AUTO_MAA_version }} + path: | + AUTO_MAA_${{ env.AUTO_MAA_version }}.zip + Updater_${{ env.updater_version }}.zip + - name: Upload Update_Info Artifact + uses: actions/upload-artifact@v4 + with: + name: update_info + path: update_info.txt publish_release: name: Publish release needs: build_AUTO_MAA @@ -97,10 +110,15 @@ jobs: pattern: AUTO_MAA_* merge-multiple: true path: artifacts + - name: Download Update_Info + uses: actions/download-artifact@v4 + with: + name: update_info + path: ./ - name: Check if release exists id: check_if_release_exists run: | - release_id=$(gh release view $(head -n 1 更新说明.txt) --json id --jq .id || true) + release_id=$(gh release view $(sed 's/\r$//g' <(head -n 1 update_info.txt)) --json id --jq .id || true) if [[ -z $release_id ]]; then echo "release_exists=false" >> $GITHUB_OUTPUT else @@ -114,22 +132,23 @@ jobs: run: | set -xe shopt -s nullglob - NAME="$(head -n 1 更新说明.txt)" - TAGNAME="$(head -n 1 更新说明.txt)" - NOTES_MAIN="$(tail -n +2 更新说明.txt)" + NAME="$(sed 's/\r$//g' <(head -n 1 update_info.txt))" + TAGNAME="$(sed 's/\r$//g' <(head -n 1 update_info.txt))" + NOTES_MAIN="$(sed 's/\r$//g' <(tail -n +3 update_info.txt))" NOTES_TAIL="\`\`\`本release通过GitHub Actions自动构建\`\`\`" NOTES="$NOTES_MAIN

$NOTES_TAIL" gh release create "$TAGNAME" --target "main" --title "$NAME" --notes "$NOTES" artifacts/* env: GITHUB_TOKEN: ${{ secrets.WORKFLOW_TOKEN }} - name: Update release + id: update_release if: steps.check_if_release_exists.outputs.release_exists == 'true' run: | set -xe shopt -s nullglob - NAME="$(head -n 1 更新说明.txt)" - TAGNAME="$(head -n 1 更新说明.txt)" - NOTES_MAIN="$(tail -n +2 更新说明.txt)" + NAME="$(sed 's/\r$//g' <(head -n 1 update_info.txt))" + TAGNAME="$(sed 's/\r$//g' <(head -n 1 update_info.txt))" + NOTES_MAIN="$(sed 's/\r$//g' <(tail -n +3 update_info.txt))" NOTES_TAIL="\`\`\`本release通过GitHub Actions自动构建\`\`\`" NOTES="$NOTES_MAIN

$NOTES_TAIL" gh release delete "$TAGNAME" --yes diff --git a/AUTO_MAA.py b/AUTO_MAA.py index 1d604e2..1d5a8d9 100644 --- a/AUTO_MAA.py +++ b/AUTO_MAA.py @@ -18,6 +18,13 @@ # DLmaster_361@163.com +""" +AUTO_MAA +AUTO_MAA主程序 +v4.1 +作者:DLmaster_361 +""" + from PySide6.QtWidgets import ( QWidget, QApplication, @@ -54,11 +61,14 @@ import time import random import secrets import winreg +import requests from Crypto.Cipher import AES from Crypto.PublicKey import RSA from Crypto.Cipher import PKCS1_OAEP from Crypto.Util.Padding import pad, unpad +import Updater + uiLoader = QUiLoader() @@ -1005,6 +1015,7 @@ class Main(QWidget): self.config_path = self.app_path + "/config/gui.json" self.key_path = self.app_path + "/data/key" self.gameid_path = self.app_path + "/data/gameid.txt" + self.version_path = self.app_path + "/res/version.json" self.PASSWORD = PASSWARD self.if_user_list_editable = True self.if_update_database = True @@ -1147,6 +1158,9 @@ class Main(QWidget): self.if_sleep = self.ui.findChild(QCheckBox, "checkBox_ifsleep") self.if_sleep.stateChanged.connect(self.change_config) + self.check_update = self.ui.findChild(QPushButton, "pushButton_check_update") + self.check_update.clicked.connect(self.check_version) + self.run_text = self.ui.findChild(QTextBrowser, "textBrowser_run") self.wait_text = self.ui.findChild(QTextBrowser, "textBrowser_wait") self.over_text = self.ui.findChild(QTextBrowser, "textBrowser_over") @@ -1212,10 +1226,18 @@ class Main(QWidget): os.makedirs(self.app_path + "/data/MAAconfig/simple", exist_ok=True) os.makedirs(self.app_path + "/data/MAAconfig/beta", exist_ok=True) os.makedirs(self.app_path + "/data/MAAconfig/Default", exist_ok=True) + # 生成版本信息文件 + if not os.path.exists(self.version_path): + version = { + "main_version": "0.0.0.0", + "updater_version": "0.0.0.0", + } + with open(self.version_path, "w", encoding="utf-8") as f: + json.dump(version, f, indent=4) # 生成配置文件 if not os.path.exists(self.config_path): config = {"Default": {}} - with open(self.config_path, "w") as f: + with open(self.config_path, "w", encoding="utf-8") as f: json.dump(config, f, indent=4) # 生成预设gameid替换方案文件 if not os.path.exists(self.gameid_path): @@ -1275,7 +1297,7 @@ class Main(QWidget): ["SelfSet.IfSleep", "False"], ] # 导入配置文件 - with open(self.config_path, "r") as f: + with open(self.config_path, "r", encoding="utf-8") as f: config = json.load(f) # 检查并补充缺失的字段 for i in range(len(config_list)): @@ -1283,7 +1305,7 @@ class Main(QWidget): config["Default"][config_list[i][0]] = config_list[i][1] self.config = config # 导出配置文件 - with open(self.config_path, "w") as f: + with open(self.config_path, "w", encoding="utf-8") as f: json.dump(config, f, indent=4) def check_database(self): @@ -2070,7 +2092,7 @@ class Main(QWidget): self.config["Default"]["MaaSet.path"] = self.maa_path.text().replace("\\", "/") if not self.check_maa_path(): self.config["Default"]["MaaSet.path"] = "" - with open(self.config_path, "w") as f: + with open(self.config_path, "w", encoding="utf-8") as f: json.dump(self.config, f, indent=4) self.update_config() QMessageBox.critical( @@ -2098,7 +2120,7 @@ class Main(QWidget): self.config["Default"]["TimeSet.set" + str(i + 1)] = "False" time = self.start_time[i][1].time().toString("HH:mm") self.config["Default"]["TimeSet.run" + str(i + 1)] = time - with open(self.config_path, "w") as f: + with open(self.config_path, "w", encoding="utf-8") as f: json.dump(self.config, f, indent=4) self.update_config() @@ -2309,6 +2331,76 @@ class Main(QWidget): self.run_now.setText("立即执行") self.run_now.clicked.connect(self.routine_starter) + def check_version(self): + """检查版本更新,调起文件下载进程""" + # 从本地版本信息文件获取当前版本信息 + with open(self.version_path, "r", encoding="utf-8") as f: + version_current = json.load(f) + main_version_current = list( + map(int, version_current["main_version"].split(".")) + ) + updater_version_current = list( + map(int, version_current["updater_version"].split(".")) + ) + if not os.path.exists(self.app_path + "/Updater.exe"): + updater_version_current = [0, 0, 0, 0] + # 从远程服务器获取最新版本信息 + try: + response = requests.get( + "https://ghp.ci/https://github.com/DLmaster361/AUTO_MAA/blob/Updater/res/version.json" + ) + except Exception as e: + QMessageBox.critical( + self.ui, + "错误", + f"获取版本信息时出错: {e}", + ) + return None + version_remote = response.json() + main_version_remote = list(map(int, version_remote["main_version"].split("."))) + updater_version_remote = list( + map(int, version_remote["updater_version"].split(".")) + ) + + if (main_version_remote > main_version_current) or ( + updater_version_remote > updater_version_current + ): + choice = QMessageBox.question( + self.ui, + "版本更新", + f"发现新版本:\n 主程序:{self.version_text(main_version_current)} --> {self.version_text(main_version_remote)}\n 更新器:{self.version_text(updater_version_current)} --> {self.version_text(updater_version_remote)}\n 更新说明:\n{version_remote['announcement'].replace("\n","\n ")}\n\n是否开始更新?\n\n 注意:主程序更新时AUTO_MAA将自动关闭", + ) + if choice == QMessageBox.No: + return None + + if updater_version_remote > updater_version_current: + self.updater = Updater.Updater( + self.app_path, + "AUTO_MAA更新器", + version_remote["updater_download_url"], + ) + if main_version_remote > main_version_current: + self.updater.update_process.accomplish.connect(self.update_main) + self.updater.ui.show() + elif main_version_remote > main_version_current: + self.update_main() + + def update_main(self): + subprocess.Popen( + self.app_path + "/Updater.exe", + shell=True, + creationflags=subprocess.CREATE_NO_WINDOW, + ) + sys.exit() + + def version_text(self, version_numb): + """将版本号列表转为可读的文本信息""" + if version_numb[3] == 0: + version = f"v{'.'.join(str(_) for _ in version_numb[0:3])}" + elif version_numb[3] == 1: + version = f"v{'.'.join(str(_) for _ in version_numb[0:3])}_beta" + return version + def push_notification(self, title, message, ticker, t): """推送系统通知""" notification.notify( diff --git a/Updater.py b/Updater.py new file mode 100644 index 0000000..f3aff75 --- /dev/null +++ b/Updater.py @@ -0,0 +1,158 @@ +# +# Copyright © <2024> + +# This file is part of AUTO_MAA. + +# AUTO_MAA is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published +# by the Free Software Foundation, either version 3 of the License, +# or (at your option) any later version. + +# AUTO_MAA is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty +# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See +# the GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with AUTO_MAA. If not, see . + +# DLmaster_361@163.com + +""" +AUTO_MAA +AUTO_MAA更新器 +v1.0 +作者:DLmaster_361 +""" + +import os +import sys +import json +import zipfile +import requests + +from PySide6.QtWidgets import ( + QApplication, + QLabel, + QProgressBar, +) +from PySide6.QtGui import QIcon +from PySide6.QtCore import QObject, QThread, Signal +from PySide6.QtUiTools import QUiLoader + +uiLoader = QUiLoader() + + +class UpdateProcess(QThread): + + info = Signal(str) + progress = Signal(int, int, int) + accomplish = Signal() + + def __init__(self, app_path, name, download_url): + super(UpdateProcess, self).__init__() + + self.app_path = app_path + self.name = name + self.download_url = download_url + self.download_path = app_path + "/AUTO_MAA_Update.zip" # 临时下载文件的路径 + self.version_path = app_path + "/res/version.json" + + def run(self): + + # 下载 + try: + response = requests.get(self.download_url, stream=True) + file_size = response.headers.get("Content-Length") + if file_size is None: + file_size = 1 + else: + file_size = int(file_size) + with open(self.download_path, "wb") as f: + downloaded_size = 0 + for chunk in response.iter_content(chunk_size=8192): + f.write(chunk) + downloaded_size += len(chunk) + self.info.emit( + f"正在下载:{self.name} 已下载: {downloaded_size / 1048576:.2f}/{file_size / 1048576:.2f} MB ({downloaded_size / file_size * 100:.2f}%)" + ) + self.progress.emit(0, 100, int(downloaded_size / file_size * 100)) + except Exception as e: + self.info.emit(f"下载{self.name}时出错: {e}") + return None + # 解压 + try: + self.info.emit("正在解压更新文件") + self.progress.emit(0, 0, 0) + with zipfile.ZipFile(self.download_path, "r") as zip_ref: + zip_ref.extractall(self.app_path) + + self.info.emit("正在删除临时文件") + self.progress.emit(0, 0, 0) + os.remove(self.download_path) + + self.info.emit(f"{self.name}更新成功!") + self.progress.emit(0, 100, 100) + + except Exception as e: + self.info.emit(f"解压更新时出错: {e}") + self.accomplish.emit() + + +class Updater(QObject): + + def __init__(self, app_path, name, download_url): + super().__init__() + + self.ui = uiLoader.load(app_path + "/gui/ui/updater.ui") + self.ui.setWindowTitle("AUTO_MAA更新器") + self.ui.setWindowIcon(QIcon(app_path + "/res/AUTO_MAA.ico")) + + self.info = self.ui.findChild(QLabel, "label") + self.info.setText("正在初始化") + + self.progress = self.ui.findChild(QProgressBar, "progressBar") + self.progress.setRange(0, 0) + + self.update_process = UpdateProcess(app_path, name, download_url) + + self.update_process.info.connect(self.update_info) + self.update_process.progress.connect(self.update_progress) + + self.update_process.start() + + def update_info(self, text): + self.info.setText(text) + + def update_progress(self, begin, end, current): + self.progress.setRange(begin, end) + self.progress.setValue(current) + + +class AUTO_MAA_Updater(QApplication): + def __init__(self, app_path, name, download_url): + super().__init__() + + self.main = Updater(app_path, name, download_url) + self.main.ui.show() + + +if __name__ == "__main__": + # 获取软件自身的路径 + 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: + version_current = json.load(f) + main_version_current = list(map(int, version_current["main_version"].split("."))) + # 从远程服务器获取最新版本信息 + response = requests.get( + "https://ghp.ci/https://github.com/DLmaster361/AUTO_MAA/blob/Updater/res/version.json" + ) + version_remote = response.json() + main_version_remote = list(map(int, version_remote["main_version"].split("."))) + + if main_version_remote > main_version_current: + app = AUTO_MAA_Updater( + app_path, "AUTO_MAA主程序", version_remote["main_download_url"] + ) + sys.exit(app.exec()) diff --git a/gui/ui/main.ui b/gui/ui/main.ui index 27926f9..6281af9 100644 --- a/gui/ui/main.ui +++ b/gui/ui/main.ui @@ -6,12 +6,12 @@ 0 0 - 1280 - 697 + 1200 + 700 - Form + AUTO_MAA @@ -105,8 +105,8 @@ 0 0 - 1218 - 525 + 1138 + 528 @@ -189,8 +189,8 @@ 0 0 - 98 - 74 + 1156 + 546 @@ -1102,6 +1102,25 @@ + + + + QFrame::Shape::StyledPanel + + + QFrame::Shadow::Raised + + + + + + 检查版本更新 + + + + + + diff --git a/gui/ui/updater.ui b/gui/ui/updater.ui new file mode 100644 index 0000000..efb35f2 --- /dev/null +++ b/gui/ui/updater.ui @@ -0,0 +1,35 @@ + + + Dialog + + + + 0 + 0 + 500 + 61 + + + + AUTO_MAA更新器 + + + + + + TextLabel + + + + + + + 24 + + + + + + + + diff --git a/package.py b/package.py new file mode 100644 index 0000000..633bea6 --- /dev/null +++ b/package.py @@ -0,0 +1,50 @@ +# +# Copyright © <2024> + +# This file is part of AUTO_MAA. + +# AUTO_MAA is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published +# by the Free Software Foundation, either version 3 of the License, +# or (at your option) any later version. + +# AUTO_MAA is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty +# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See +# the GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with AUTO_MAA. If not, see . + +# DLmaster_361@163.com + +""" +AUTO_MAA +AUTO_MAA打包程序 +v4.1 +作者:DLmaster_361 +""" + +import os +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" +) +os.system( + "pyinstaller -F --version-file res/Updater_info.txt -w --icon=res/AUTO_MAA.ico Updater.py" +) +with open("res/version.json", "r", encoding="utf-8") as f: + version = json.load(f) +main_version = list(map(int, version["main_version"].split("."))) +updater_version = list(map(int, version["updater_version"].split("."))) +if main_version[3] == 0: + main_version = f"v{'.'.join(str(_) for _ in main_version[0:3])}" +elif main_version[3] == 1: + main_version = f"v{'.'.join(str(_) for _ in main_version[0:3])}_beta" +if updater_version[3] == 0: + updater_version = f"v{'.'.join(str(_) for _ in updater_version[0:3])}" +elif updater_version[3] == 1: + updater_version = f"v{'.'.join(str(_) for _ in updater_version[0:3])}_beta" +with open("update_info.txt", "w", encoding="utf-8") as f: + print(f"{main_version}\n{updater_version}\n{version["announcement"]}", file=f) diff --git a/requirements.txt b/requirements.txt index 2f0e33d..3f55615 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,5 @@ plyer PySide6 pycryptodome -pyinstaller \ No newline at end of file +pyinstaller +requests \ No newline at end of file diff --git a/res/info.txt b/res/AUTO_MAA_info.txt similarity index 87% rename from res/info.txt rename to res/AUTO_MAA_info.txt index 0adb420..481f489 100644 --- a/res/info.txt +++ b/res/AUTO_MAA_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=(4, 0, 0, 1), + filevers=(4, 0, 1, 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', '4.0.0.1'), + StringStruct('FileVersion', '4.0.1.0'), StringStruct('InternalName', 'AUTO_MAA'), StringStruct('LegalCopyright', 'Copyright © 2024 DLmaster361'), StringStruct('OriginalFilename', 'AUTO_MAA.py'), StringStruct('ProductName', 'AUTO_MAA'), - StringStruct('ProductVersion', 'v4.0.0.1'), - StringStruct('Assembly Version', 'v4.0.0.1')]) + StringStruct('ProductVersion', 'v4.0.1.0'), + StringStruct('Assembly Version', 'v4.0.1.0')]) ]) ] ) \ No newline at end of file diff --git a/res/Updater_info.txt b/res/Updater_info.txt new file mode 100644 index 0000000..361d7a8 --- /dev/null +++ b/res/Updater_info.txt @@ -0,0 +1,43 @@ +# 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=(0, 1, 0, 1), + 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', '0.1.0.1'), + StringStruct('InternalName', 'AUTO_MAA_Updater'), + StringStruct('LegalCopyright', 'Copyright © 2024 DLmaster361'), + StringStruct('OriginalFilename', 'Updater.py'), + StringStruct('ProductName', 'AUTO_MAA_Updater'), + StringStruct('ProductVersion', 'v0.1.0.1'), + StringStruct('Assembly Version', 'v0.1.0.1')]) + ]) + ] +) \ No newline at end of file diff --git a/res/version.json b/res/version.json new file mode 100644 index 0000000..5fdd933 --- /dev/null +++ b/res/version.json @@ -0,0 +1,7 @@ +{ + "main_version": "4.1.0.0", + "main_download_url": "https://ghp.ci/https://github.com/DLmaster361/AUTO_MAA/releases/download/v4.1.0/AUTO_MAA_v4.1.0.zip", + "updater_version": "0.1.0.0", + "updater_download_url": "https://ghp.ci/https://github.com/DLmaster361/AUTO_MAA/releases/download/v4.1.0/Updater_v0.1.0.zip", + "announcement": "\n测试版本,一般用户请下载v4.0_beta" +} \ No newline at end of file diff --git a/toexe.py b/toexe.py deleted file mode 100644 index 7962c51..0000000 --- a/toexe.py +++ /dev/null @@ -1,25 +0,0 @@ -# -# Copyright © <2024> - -# This file is part of AUTO_MAA. - -# AUTO_MAA is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published -# by the Free Software Foundation, either version 3 of the License, -# or (at your option) any later version. - -# AUTO_MAA is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty -# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See -# the GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with AUTO_MAA. If not, see . - -# DLmaster_361@163.com - -import os - -os.system( - "pyinstaller -F --version-file res/info.txt -w --icon=res/AUTO_MAA.ico AUTO_MAA.py --hidden-import plyer.platforms.win.notification" -) diff --git a/更新说明.txt b/更新说明.txt deleted file mode 100644 index 6772526..0000000 --- a/更新说明.txt +++ /dev/null @@ -1,20 +0,0 @@ -v4.0_beta -## 新增功能 -- 服务器切换功能上线,支持B服 #7 -- 用户高级配置功能上线,支持用户修改几乎所有MAA配置 -## 修复BUG -- 修复无用户进行代理时的逻辑错误 -## 程序优化 -- 进一步优化MAA配置流程 -- 优化自定义基建配置方法 #7 -- 无命令行窗口中止MAA进程 -- `gameid.txt`改由主程序进行初始化 -- log获取部分集成为1个函数 -- 消除部分if嵌套 -## 更新说明 -- 项目初始阶段,不会提供专门的版本更新程序,您需要手动更新程序。 -- v2.1.5及以前的用户,由于新版本采用全新的架构,您需要手动输入之前的信息。 -- v3.0_Beta版用户,直接用`AUTO_MAA.exe`替代`gui.exe`后,将原文件夹下的`gui文件夹`用新版本对应文件替换,重新设置每个用户的`自定义基建`选项(输入`-`以关闭该功能,输入自定义基建配置文件地址以开启该功能)。 -- v3.1~v3.1.3_beta版用户,直接用新版本文件替换旧版本即可。 -- 老用户请务必备份原有数据,在更新前确保所填MAA路径有效且已存在MAA配置文件,此次更新的代码改动较大,可能有数据遗失的风险。 -- 新用户请忽略本说明。 \ No newline at end of file