From f135a6510f5fe1d305953739beef60c10d322204 Mon Sep 17 00:00:00 2001 From: DLmaster Date: Sat, 4 Jan 2025 04:02:20 +0800 Subject: [PATCH 01/12] =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E7=95=8C=E9=9D=A2?= =?UTF-8?q?=E4=B8=8E=E5=AE=9E=E4=BE=8B=E7=AE=A1=E7=90=86=E7=95=8C=E9=9D=A2?= =?UTF-8?q?=E5=88=9D=E6=AD=A5=E9=87=8D=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/__init__.py | 3 +- app/config.py | 148 ++++---- app/models/MAA.py | 12 + app/ui/Widget.py | 149 ++++++++ app/ui/__init__.py | 2 +- app/ui/{gui.py => else.py} | 737 +++++++------------------------------ app/ui/main_window.py | 312 ++++++++++++++++ app/ui/member_manager.py | 527 ++++++++++++++++++++++++++ app/ui/setting.py | 623 +++++++++++++++++++++++++++++++ app/utils/Updater.py | 27 +- main.py | 12 +- resources/version.json | 4 +- 12 files changed, 1879 insertions(+), 677 deletions(-) create mode 100644 app/ui/Widget.py rename app/ui/{gui.py => else.py} (65%) create mode 100644 app/ui/main_window.py create mode 100644 app/ui/member_manager.py create mode 100644 app/ui/setting.py diff --git a/app/__init__.py b/app/__init__.py index 27ce45c..38b0e75 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -29,7 +29,7 @@ __version__ = "4.2.0" __author__ = "DLmaster361 " __license__ = "GPL-3.0 license" -from .config import AppConfig +from .config import AppConfig, MaaConfig from .models import MaaManager from .services import Notification, CryptoHandler from .ui import AUTO_MAA @@ -37,6 +37,7 @@ from .utils import Updater, version_text __all__ = [ "AppConfig", + "MaaConfig", "MaaManager", "Notification", "CryptoHandler", diff --git a/app/config.py b/app/config.py index 8323da6..35c95b3 100644 --- a/app/config.py +++ b/app/config.py @@ -31,6 +31,18 @@ import os import sys from pathlib import Path from typing import Dict, Union +from qfluentwidgets import ( + QConfig, + ConfigItem, + qconfig, + OptionsConfigItem, + RangeConfigItem, + OptionsValidator, + FolderValidator, + BoolValidator, + RangeValidator, + EnumSerializer, +) class AppConfig: @@ -42,7 +54,7 @@ class AppConfig: self.app_name = os.path.basename(self.app_path) # 获取软件自身的名称 self.database_path = self.app_path / "data/data.db" - self.config_path = self.app_path / "config/gui.json" + self.config_path = self.app_path / "config/config.json" self.key_path = self.app_path / "data/key" self.gameid_path = self.app_path / "data/gameid.txt" self.version_path = self.app_path / "resources/version.json" @@ -68,12 +80,6 @@ class AppConfig: with self.version_path.open(mode="w", encoding="utf-8") as f: json.dump(version, f, indent=4) - # 生成配置文件 - if not self.config_path.exists(): - config = {"Default": {}} - with self.config_path.open(mode="w", encoding="utf-8") as f: - json.dump(config, f, indent=4) - # 生成预设gameid替换方案文件 if not self.gameid_path.exists(): self.gameid_path.write_text( @@ -87,60 +93,11 @@ class AppConfig: def check_config(self) -> None: """检查配置文件字段完整性并补全""" - config_list = [ - ["TimeSet.set1", "False"], - ["TimeSet.run1", "00:00"], - ["TimeSet.set2", "False"], - ["TimeSet.run2", "00:00"], - ["TimeSet.set3", "False"], - ["TimeSet.run3", "00:00"], - ["TimeSet.set4", "False"], - ["TimeSet.run4", "00:00"], - ["TimeSet.set5", "False"], - ["TimeSet.run5", "00:00"], - ["TimeSet.set6", "False"], - ["TimeSet.run6", "00:00"], - ["TimeSet.set7", "False"], - ["TimeSet.run7", "00:00"], - ["TimeSet.set8", "False"], - ["TimeSet.run8", "00:00"], - ["TimeSet.set9", "False"], - ["TimeSet.run9", "00:00"], - ["TimeSet.set10", "False"], - ["TimeSet.run10", "00:00"], - ["MaaSet.path", ""], - ["TimeLimit.routine", 10], - ["TimeLimit.annihilation", 40], - ["TimesLimit.run", 3], - ["SelfSet.IfSelfStart", "False"], - ["SelfSet.IfSleep", "False"], - ["SelfSet.IfProxyDirectly", "False"], - ["SelfSet.IfSendMail", "False"], - ["SelfSet.MailAddress", ""], - ["SelfSet.IfSendMail.OnlyError", "False"], - ["SelfSet.IfSilence", "False"], - ["SelfSet.BossKey", ""], - ["SelfSet.IfToTray", "False"], - ["SelfSet.UIsize", "1200x700"], - ["SelfSet.UIlocation", "100x100"], - ["SelfSet.UImaximized", "False"], - ["SelfSet.MainIndex", 2], - ] + self.global_config = GlobalConfig() + qconfig.load(self.config_path, self.global_config) + self.global_config.save() - # 导入配置文件 - with self.config_path.open(mode="r", encoding="utf-8") as f: - config = json.load(f) - - # 检查并补充缺失的字段 - for i in range(len(config_list)): - if not config_list[i][0] in config["Default"]: - config["Default"][config_list[i][0]] = config_list[i][1] - - # 初始化配置信息 - self.content: Dict[str, Dict[str, Union[str, int]]] = config - - # 导出配置文件 - self.save_config() + self.maa_config = MaaConfig() def check_database(self) -> None: """检查用户数据库文件并处理数据库版本更新""" @@ -233,8 +190,71 @@ class AppConfig: self.cur.close() self.db.close() - def save_config(self) -> None: - """保存配置文件""" - with self.config_path.open(mode="w", encoding="utf-8") as f: - json.dump(self.content, f, indent=4) +class GlobalConfig(QConfig): + """全局配置""" + + # ["TimeSet.set1", "False"], + # ["TimeSet.run1", "00:00"], + # ["TimeSet.set2", "False"], + # ["TimeSet.run2", "00:00"], + # ["TimeSet.set3", "False"], + # ["TimeSet.run3", "00:00"], + # ["TimeSet.set4", "False"], + # ["TimeSet.run4", "00:00"], + # ["TimeSet.set5", "False"], + # ["TimeSet.run5", "00:00"], + # ["TimeSet.set6", "False"], + # ["TimeSet.run6", "00:00"], + # ["TimeSet.set7", "False"], + # ["TimeSet.run7", "00:00"], + # ["TimeSet.set8", "False"], + # ["TimeSet.run8", "00:00"], + # ["TimeSet.set9", "False"], + # ["TimeSet.run9", "00:00"], + # ["TimeSet.set10", "False"], + # ["TimeSet.run10", "00:00"], + # ["MaaSet.path", ""], + # ["TimeLimit.routine", 10], + # ["TimeLimit.annihilation", 40], + # ["TimesLimit.run", 3], + + function_IfSleep = ConfigItem("Function", "IfSleep", False, BoolValidator()) + function_IfSilence = ConfigItem("Function", "IfSilence", False, BoolValidator()) + function_BossKey = ConfigItem("Function", "BossKey", "") + + start_IfSelfStart = ConfigItem("Start", "IfSelfStart", False, BoolValidator()) + start_IfRunDirectly = ConfigItem("Start", "IfRunDirectly", False, BoolValidator()) + + ui_IfShowTray = ConfigItem("UI", "IfShowTray", False, BoolValidator()) + ui_IfToTray = ConfigItem("UI", "IfToTray", False, BoolValidator()) + ui_size = ConfigItem("UI", "size", "1200x700") + ui_location = ConfigItem("UI", "location", "100x100") + ui_maximized = ConfigItem("UI", "maximized", False, BoolValidator()) + ui_MainIndex = RangeConfigItem("UI", "MainIndex", 0, RangeValidator(0, 3)) + + notify_IfPushPlyer = ConfigItem("Notify", "IfPushPlyer", False, BoolValidator()) + notify_IfSendMail = ConfigItem("Notify", "IfSendMail", False, BoolValidator()) + notify_IfSendErrorOnly = ConfigItem( + "Notify", "IfSendErrorOnly", False, BoolValidator() + ) + notify_MailAddress = ConfigItem("Notify", "MailAddress", "") + + update_IfAutoUpdate = ConfigItem("Update", "IfAutoUpdate", False, BoolValidator()) + + +class MaaConfig(QConfig): + """MAA配置""" + + MaaSet_Name = ConfigItem("MaaSet", "Name", "") + MaaSet_Path = ConfigItem("MaaSet", "Path", ".", FolderValidator()) + + RunSet_AnnihilationTimeLimit = RangeConfigItem( + "RunSet", "AnnihilationTimeLimit", 40, RangeValidator(1, 1024) + ) + RunSet_RoutineTimeLimit = RangeConfigItem( + "RunSet", "RoutineTimeLimit", 10, RangeValidator(1, 1024) + ) + RunSet_RunTimesLimit = RangeConfigItem( + "RunSet", "RunTimesLimit", 3, RangeValidator(1, 1024) + ) diff --git a/app/models/MAA.py b/app/models/MAA.py index e268645..2e7b953 100644 --- a/app/models/MAA.py +++ b/app/models/MAA.py @@ -33,6 +33,18 @@ import subprocess import shutil import time from pathlib import Path +from qfluentwidgets import ( + QConfig, + ConfigItem, + qconfig, + OptionsConfigItem, + RangeConfigItem, + OptionsValidator, + BoolValidator, + RangeValidator, + EnumSerializer, + FolderValidator, +) from app import AppConfig diff --git a/app/ui/Widget.py b/app/ui/Widget.py new file mode 100644 index 0000000..6ed0a41 --- /dev/null +++ b/app/ui/Widget.py @@ -0,0 +1,149 @@ +# +# 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.2 +作者:DLmaster_361 +""" + +from PySide6.QtCore import Qt +from PySide6.QtGui import QIcon +from qfluentwidgets import ( + LineEdit, + PasswordLineEdit, + MessageBoxBase, + SubtitleLabel, + SettingCard, + SpinBox, + FluentIconBase, + Signal, + ComboBox, + qconfig, + ConfigItem, +) + +from typing import Union + + +class InputMessageBox(MessageBoxBase): + """输入对话框""" + + def __init__(self, parent, title: str, content: str, mode: str, list: list = None): + super().__init__(parent) + self.title = SubtitleLabel(title) + + if mode == "明文": + self.input = LineEdit() + self.input.setClearButtonEnabled(True) + elif mode == "密码": + self.input = PasswordLineEdit() + elif mode == "选择": + self.input = ComboBox() + self.input.addItems(list) + self.input.setCurrentIndex(-1) + + self.input.setPlaceholderText(content) + + # 将组件添加到布局中 + self.viewLayout.addWidget(self.title) + self.viewLayout.addWidget(self.input) + + +class LineEditSettingCard(SettingCard): + """Setting card with switch button""" + + textChanged = Signal(str) + + def __init__( + self, + text, + icon: Union[str, QIcon, FluentIconBase], + title, + content=None, + configItem: ConfigItem = None, + parent=None, + ): + + super().__init__(icon, title, content, parent) + self.configItem = configItem + self.LineEdit = LineEdit(self) + self.LineEdit.setMinimumWidth(250) + self.LineEdit.setPlaceholderText(text) + + if configItem: + self.setValue(qconfig.get(configItem)) + configItem.valueChanged.connect(self.setValue) + + self.hBoxLayout.addWidget(self.LineEdit, 0, Qt.AlignRight) + self.hBoxLayout.addSpacing(16) + + self.LineEdit.textChanged.connect(self.__textChanged) + + def __textChanged(self, content: str): + self.setValue(content) + self.textChanged.emit(content) + + def setValue(self, content: str): + if self.configItem: + qconfig.set(self.configItem, content) + + self.LineEdit.setText(content) + + +class SpinBoxSettingCard(SettingCard): + + textChanged = Signal(int) + + def __init__( + self, + range: tuple[int, int], + icon: Union[str, QIcon, FluentIconBase], + title, + content=None, + configItem: ConfigItem = None, + parent=None, + ): + + super().__init__(icon, title, content, parent) + self.configItem = configItem + self.SpinBox = SpinBox(self) + self.SpinBox.setRange(range[0], range[1]) + self.SpinBox.setMinimumWidth(150) + + if configItem: + self.setValue(qconfig.get(configItem)) + configItem.valueChanged.connect(self.setValue) + + self.hBoxLayout.addWidget(self.SpinBox, 0, Qt.AlignRight) + self.hBoxLayout.addSpacing(16) + + self.SpinBox.valueChanged.connect(self.__valueChanged) + + def __valueChanged(self, value: int): + self.setValue(value) + self.textChanged.emit(value) + + def setValue(self, value: int): + if self.configItem: + qconfig.set(self.configItem, value) + + self.SpinBox.setValue(value) diff --git a/app/ui/__init__.py b/app/ui/__init__.py index 7156ee7..3764f04 100644 --- a/app/ui/__init__.py +++ b/app/ui/__init__.py @@ -29,6 +29,6 @@ __version__ = "4.2.0" __author__ = "DLmaster361 " __license__ = "GPL-3.0 license" -from .gui import AUTO_MAA +from .main_window import AUTO_MAA __all__ = ["AUTO_MAA"] diff --git a/app/ui/gui.py b/app/ui/else.py similarity index 65% rename from app/ui/gui.py rename to app/ui/else.py index d19fd28..04994bd 100644 --- a/app/ui/gui.py +++ b/app/ui/else.py @@ -1,88 +1,3 @@ -# -# 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.2 -作者:DLmaster_361 -""" - -from PySide6.QtWidgets import ( - QWidget, # - QMainWindow, # - QApplication, # - QSystemTrayIcon, # - QFileDialog, # - QTabWidget, # - QToolBox, # - QComboBox, # - QTableWidgetItem, # - QHeaderView, # -) -from qfluentwidgets import ( - Action, - PushButton, - LineEdit, - PasswordLineEdit, - TextBrowser, - TableWidget, - TimePicker, - ComboBox, - CheckBox, - SpinBox, - FluentIcon, - RoundMenu, - MessageBox, - MessageBoxBase, - HeaderCardWidget, - BodyLabel, - SubtitleLabel, -) -from PySide6.QtUiTools import QUiLoader -from PySide6.QtGui import QIcon, QCloseEvent -from PySide6 import QtCore -from functools import partial -from typing import List, Tuple -from pathlib import Path -import json -import datetime -import ctypes -import subprocess -import shutil -import win32gui -import win32process -import psutil -import pyautogui -import time -import winreg -import requests - -uiLoader = QUiLoader() - -from app import AppConfig -from app.models import MaaManager -from app.services import Notification, CryptoHandler -from app.utils import Updater, version_text - - class Main(QWidget): ES_CONTINUOUS = 0x80000000 @@ -158,168 +73,168 @@ class Main(QWidget): "-", ] - uiLoader.registerCustomWidget(PushButton) - uiLoader.registerCustomWidget(LineEdit) - uiLoader.registerCustomWidget(TextBrowser) - uiLoader.registerCustomWidget(TableWidget) - uiLoader.registerCustomWidget(TimePicker) - uiLoader.registerCustomWidget(SpinBox) - uiLoader.registerCustomWidget(CheckBox) - uiLoader.registerCustomWidget(HeaderCardWidget) - uiLoader.registerCustomWidget(BodyLabel) + # uiLoader.registerCustomWidget(PushButton) + # uiLoader.registerCustomWidget(LineEdit) + # uiLoader.registerCustomWidget(TextBrowser) + # uiLoader.registerCustomWidget(TableWidget) + # uiLoader.registerCustomWidget(TimePicker) + # uiLoader.registerCustomWidget(SpinBox) + # uiLoader.registerCustomWidget(CheckBox) + # uiLoader.registerCustomWidget(HeaderCardWidget) + # uiLoader.registerCustomWidget(BodyLabel) - # 导入ui配置 - self.ui = uiLoader.load(self.config.app_path / "resources/gui/main.ui") - self.ui.setWindowIcon( - QIcon(str(self.config.app_path / "resources/icons/AUTO_MAA.ico")) - ) + # # 导入ui配置 + # self.ui = uiLoader.load(self.config.app_path / "resources/gui/main.ui") + # self.ui.setWindowIcon( + # QIcon(str(self.config.app_path / "resources/icons/AUTO_MAA.ico")) + # ) - # 初始化控件 - self.main_tab: QTabWidget = self.ui.findChild(QTabWidget, "tabWidget_main") - self.main_tab.currentChanged.connect(self.change_config) + # # 初始化控件 + # self.main_tab: QTabWidget = self.ui.findChild(QTabWidget, "tabWidget_main") + # self.main_tab.currentChanged.connect(self.change_config) - self.user_set: QToolBox = self.ui.findChild(QToolBox, "toolBox_userset") - self.user_set.currentChanged.connect(lambda: self.update_user_info("normal")) + # self.user_set: QToolBox = self.ui.findChild(QToolBox, "toolBox_userset") + # self.user_set.currentChanged.connect(lambda: self.update_user_info("normal")) - self.user_list_simple: TableWidget = self.ui.findChild( - TableWidget, "tableWidget_userlist_simple" - ) - self.user_list_simple.itemChanged.connect( - lambda item: self.change_user_Item(item, "simple") - ) + # self.user_list_simple: TableWidget = self.ui.findChild( + # TableWidget, "tableWidget_userlist_simple" + # ) + # self.user_list_simple.itemChanged.connect( + # lambda item: self.change_user_Item(item, "simple") + # ) - self.user_list_beta: TableWidget = self.ui.findChild( - TableWidget, "tableWidget_userlist_beta" - ) - self.user_list_beta.itemChanged.connect( - lambda item: self.change_user_Item(item, "beta") - ) + # self.user_list_beta: TableWidget = self.ui.findChild( + # TableWidget, "tableWidget_userlist_beta" + # ) + # self.user_list_beta.itemChanged.connect( + # lambda item: self.change_user_Item(item, "beta") + # ) - self.user_add: PushButton = self.ui.findChild(PushButton, "pushButton_new") - self.user_add.setIcon(FluentIcon.ADD_TO) - self.user_add.clicked.connect(self.add_user) + # self.user_add: PushButton = self.ui.findChild(PushButton, "pushButton_new") + # self.user_add.setIcon(FluentIcon.ADD_TO) + # self.user_add.clicked.connect(self.add_user) - self.user_del: PushButton = self.ui.findChild(PushButton, "pushButton_del") - self.user_del.setIcon(FluentIcon.REMOVE_FROM) - self.user_del.clicked.connect(self.del_user) + # self.user_del: PushButton = self.ui.findChild(PushButton, "pushButton_del") + # self.user_del.setIcon(FluentIcon.REMOVE_FROM) + # self.user_del.clicked.connect(self.del_user) - self.user_switch: PushButton = self.ui.findChild( - PushButton, "pushButton_switch" - ) - self.user_switch.setIcon(FluentIcon.MOVE) - self.user_switch.clicked.connect(self.switch_user) + # self.user_switch: PushButton = self.ui.findChild( + # PushButton, "pushButton_switch" + # ) + # self.user_switch.setIcon(FluentIcon.MOVE) + # self.user_switch.clicked.connect(self.switch_user) - self.read_PASSWORD: PushButton = self.ui.findChild( - PushButton, "pushButton_password" - ) - self.read_PASSWORD.setIcon(FluentIcon.HIDE) - self.read_PASSWORD.clicked.connect(lambda: self.read("key")) + # self.read_PASSWORD: PushButton = self.ui.findChild( + # PushButton, "pushButton_password" + # ) + # self.read_PASSWORD.setIcon(FluentIcon.HIDE) + # self.read_PASSWORD.clicked.connect(lambda: self.read("key")) - self.refresh: PushButton = self.ui.findChild(PushButton, "pushButton_refresh") - self.refresh.setIcon(FluentIcon.SYNC) - self.refresh.clicked.connect(lambda: self.update_user_info("clear")) + # self.refresh: PushButton = self.ui.findChild(PushButton, "pushButton_refresh") + # self.refresh.setIcon(FluentIcon.SYNC) + # self.refresh.clicked.connect(lambda: self.update_user_info("clear")) - self.run_now: PushButton = self.ui.findChild(PushButton, "pushButton_runnow") - self.run_now.setIcon(FluentIcon.PLAY) - self.run_now.clicked.connect(lambda: self.maa_starter("日常代理")) + # self.run_now: PushButton = self.ui.findChild(PushButton, "pushButton_runnow") + # self.run_now.setIcon(FluentIcon.PLAY) + # self.run_now.clicked.connect(lambda: self.maa_starter("日常代理")) - self.check_start: PushButton = self.ui.findChild( - PushButton, "pushButton_checkstart" - ) - self.check_start.setIcon(FluentIcon.PLAY) - self.check_start.clicked.connect(lambda: self.maa_starter("人工排查")) + # self.check_start: PushButton = self.ui.findChild( + # PushButton, "pushButton_checkstart" + # ) + # self.check_start.setIcon(FluentIcon.PLAY) + # self.check_start.clicked.connect(lambda: self.maa_starter("人工排查")) - self.maa_path: LineEdit = self.ui.findChild(LineEdit, "lineEdit_MAApath") - self.maa_path.textChanged.connect(self.change_config) - self.maa_path.setReadOnly(True) + # self.maa_path: LineEdit = self.ui.findChild(LineEdit, "lineEdit_MAApath") + # self.maa_path.textChanged.connect(self.change_config) + # self.maa_path.setReadOnly(True) - self.get_maa_path: PushButton = self.ui.findChild( - PushButton, "pushButton_getMAApath" - ) - self.get_maa_path.setIcon(FluentIcon.FOLDER) - self.get_maa_path.clicked.connect(lambda: self.read("file_path_maa")) + # self.get_maa_path: PushButton = self.ui.findChild( + # PushButton, "pushButton_getMAApath" + # ) + # self.get_maa_path.setIcon(FluentIcon.FOLDER) + # self.get_maa_path.clicked.connect(lambda: self.read("file_path_maa")) - self.set_maa: PushButton = self.ui.findChild(PushButton, "pushButton_setMAA") - self.set_maa.setIcon(FluentIcon.SETTING) - self.set_maa.clicked.connect(lambda: self.maa_starter("设置MAA_全局")) + # self.set_maa: PushButton = self.ui.findChild(PushButton, "pushButton_setMAA") + # self.set_maa.setIcon(FluentIcon.SETTING) + # self.set_maa.clicked.connect(lambda: self.maa_starter("设置MAA_全局")) - self.routine: SpinBox = self.ui.findChild(SpinBox, "spinBox_routine") - self.routine.valueChanged.connect(self.change_config) + # self.routine: SpinBox = self.ui.findChild(SpinBox, "spinBox_routine") + # self.routine.valueChanged.connect(self.change_config) - self.annihilation: SpinBox = self.ui.findChild(SpinBox, "spinBox_annihilation") - self.annihilation.valueChanged.connect(self.change_config) + # self.annihilation: SpinBox = self.ui.findChild(SpinBox, "spinBox_annihilation") + # self.annihilation.valueChanged.connect(self.change_config) - self.num: SpinBox = self.ui.findChild(SpinBox, "spinBox_numt") - self.num.valueChanged.connect(self.change_config) + # self.num: SpinBox = self.ui.findChild(SpinBox, "spinBox_numt") + # self.num.valueChanged.connect(self.change_config) - self.if_self_start: CheckBox = self.ui.findChild( - CheckBox, "checkBox_ifselfstart" - ) - self.if_self_start.stateChanged.connect(self.change_config) + # self.if_self_start: CheckBox = self.ui.findChild( + # CheckBox, "checkBox_ifselfstart" + # ) + # self.if_self_start.stateChanged.connect(self.change_config) - self.if_sleep: CheckBox = self.ui.findChild(CheckBox, "checkBox_ifsleep") - self.if_sleep.stateChanged.connect(self.change_config) + # self.if_sleep: CheckBox = self.ui.findChild(CheckBox, "checkBox_ifsleep") + # self.if_sleep.stateChanged.connect(self.change_config) - self.if_proxy_directly: CheckBox = self.ui.findChild( - CheckBox, "checkBox_ifproxydirectly" - ) - self.if_proxy_directly.stateChanged.connect(self.change_config) + # self.if_proxy_directly: CheckBox = self.ui.findChild( + # CheckBox, "checkBox_ifproxydirectly" + # ) + # self.if_proxy_directly.stateChanged.connect(self.change_config) - self.if_send_mail: CheckBox = self.ui.findChild(CheckBox, "checkBox_ifsendmail") - self.if_send_mail.stateChanged.connect(self.change_config) + # self.if_send_mail: CheckBox = self.ui.findChild(CheckBox, "checkBox_ifsendmail") + # self.if_send_mail.stateChanged.connect(self.change_config) - self.mail_address: LineEdit = self.ui.findChild( - LineEdit, "lineEdit_mailaddress" - ) - self.mail_address.textChanged.connect(self.change_config) + # self.mail_address: LineEdit = self.ui.findChild( + # LineEdit, "lineEdit_mailaddress" + # ) + # self.mail_address.textChanged.connect(self.change_config) - self.if_send_error_only: CheckBox = self.ui.findChild( - CheckBox, "checkBox_ifonlyerror" - ) - self.if_send_error_only.stateChanged.connect(self.change_config) + # self.if_send_error_only: CheckBox = self.ui.findChild( + # CheckBox, "checkBox_ifonlyerror" + # ) + # self.if_send_error_only.stateChanged.connect(self.change_config) - self.if_silence: CheckBox = self.ui.findChild(CheckBox, "checkBox_silence") - self.if_silence.stateChanged.connect(self.change_config) + # self.if_silence: CheckBox = self.ui.findChild(CheckBox, "checkBox_silence") + # self.if_silence.stateChanged.connect(self.change_config) - self.boss_key: LineEdit = self.ui.findChild(LineEdit, "lineEdit_boss") - self.boss_key.textChanged.connect(self.change_config) + # self.boss_key: LineEdit = self.ui.findChild(LineEdit, "lineEdit_boss") + # self.boss_key.textChanged.connect(self.change_config) - self.if_to_tray: CheckBox = self.ui.findChild(CheckBox, "checkBox_iftotray") - self.if_to_tray.stateChanged.connect(self.change_config) + # self.if_to_tray: CheckBox = self.ui.findChild(CheckBox, "checkBox_iftotray") + # self.if_to_tray.stateChanged.connect(self.change_config) - self.check_update: PushButton = self.ui.findChild( - PushButton, "pushButton_check_update" - ) - self.check_update.setIcon(FluentIcon.UPDATE) - self.check_update.clicked.connect(self.check_version) + # self.check_update: PushButton = self.ui.findChild( + # PushButton, "pushButton_check_update" + # ) + # self.check_update.setIcon(FluentIcon.UPDATE) + # self.check_update.clicked.connect(self.check_version) - self.tips: TextBrowser = self.ui.findChild(TextBrowser, "textBrowser_tips") - self.tips.setOpenExternalLinks(True) + # self.tips: TextBrowser = self.ui.findChild(TextBrowser, "textBrowser_tips") + # self.tips.setOpenExternalLinks(True) - self.run_text: TextBrowser = self.ui.findChild(TextBrowser, "textBrowser_run") - self.wait_text: TextBrowser = self.ui.findChild(TextBrowser, "textBrowser_wait") - self.over_text: TextBrowser = self.ui.findChild(TextBrowser, "textBrowser_over") - self.error_text: TextBrowser = self.ui.findChild( - TextBrowser, "textBrowser_error" - ) - self.log_text: TextBrowser = self.ui.findChild(TextBrowser, "textBrowser_log") + # self.run_text: TextBrowser = self.ui.findChild(TextBrowser, "textBrowser_run") + # self.wait_text: TextBrowser = self.ui.findChild(TextBrowser, "textBrowser_wait") + # self.over_text: TextBrowser = self.ui.findChild(TextBrowser, "textBrowser_over") + # self.error_text: TextBrowser = self.ui.findChild( + # TextBrowser, "textBrowser_error" + # ) + # self.log_text: TextBrowser = self.ui.findChild(TextBrowser, "textBrowser_log") - self.start_time: List[Tuple[CheckBox, TimePicker]] = [] - for i in range(10): - self.start_time.append( - [ - self.ui.findChild(CheckBox, f"checkBox_t{i + 1}"), - self.ui.findChild(TimePicker, f"timeEdit_{i + 1}"), - ] - ) - self.start_time[i][0].stateChanged.connect(self.change_config) - self.start_time[i][1].timeChanged.connect(self.change_config) + # self.start_time: List[Tuple[CheckBox, TimePicker]] = [] + # for i in range(10): + # self.start_time.append( + # [ + # self.ui.findChild(CheckBox, f"checkBox_t{i + 1}"), + # self.ui.findChild(TimePicker, f"timeEdit_{i + 1}"), + # ] + # ) + # self.start_time[i][0].stateChanged.connect(self.change_config) + # self.start_time[i][1].timeChanged.connect(self.change_config) - self.change_password: PushButton = self.ui.findChild( - PushButton, "pushButton_changePASSWORD" - ) - self.change_password.setIcon(FluentIcon.VPN) - self.change_password.clicked.connect(self.change_PASSWORD) + # self.change_password: PushButton = self.ui.findChild( + # PushButton, "pushButton_changePASSWORD" + # ) + # self.change_password.setIcon(FluentIcon.VPN) + # self.change_password.clicked.connect(self.change_PASSWORD) # 初始化线程 self.MaaManager = MaaManager(self.config) @@ -332,16 +247,16 @@ class Main(QWidget): self.MaaManager.get_json.connect(self.get_maa_config) self.MaaManager.set_silence.connect(self.switch_silence) - self.last_time = "0000-00-00 00:00" - self.Timer = QtCore.QTimer() - self.Timer.timeout.connect(self.set_theme) - self.Timer.timeout.connect(self.set_system) - self.Timer.timeout.connect(self.timed_start) - self.Timer.start(1000) + # self.last_time = "0000-00-00 00:00" + # self.Timer = QtCore.QTimer() + # self.Timer.timeout.connect(self.set_theme) + # self.Timer.timeout.connect(self.set_system) + # self.Timer.timeout.connect(self.timed_start) + # self.Timer.start(1000) # 载入GUI数据 - self.update_user_info("normal") - self.update_config() + # self.update_user_info("normal") + # self.update_config() # 启动后直接开始代理 if self.config.content["Default"]["SelfSet.IfProxyDirectly"] == "True": @@ -365,86 +280,6 @@ class Main(QWidget): if choice.exec(): break - def change_PASSWORD(self) -> None: - """修改管理密钥""" - - # 获取用户信息 - self.config.cur.execute("SELECT * FROM adminx WHERE True") - data = self.config.cur.fetchall() - - if len(data) == 0: - choice = MessageBox("验证通过", "当前无用户,验证自动通过", self.ui) - choice.cancelButton.hide() - choice.buttonLayout.insertStretch(1) - # 获取新的管理密钥 - if choice.exec(): - while True: - PASSWORD_new = self.read("newkey") - if PASSWORD_new == None: - choice = MessageBox( - "确认", - "您没有输入新的管理密钥,是否取消修改管理密钥?", - self.ui, - ) - if choice.exec(): - break - else: - # 修改管理密钥 - self.PASSWORD = PASSWORD_new - self.crypto.get_PASSWORD(self.PASSWORD) - choice = MessageBox("操作成功", "管理密钥修改成功", self.ui) - choice.cancelButton.hide() - choice.buttonLayout.insertStretch(1) - if choice.exec(): - break - else: - # 验证管理密钥 - if_change = True - while if_change: - if self.read("oldkey"): - # 验证旧管理密钥 - if not self.crypto.check_PASSWORD(self.PASSWORD): - choice = MessageBox("错误", "管理密钥错误", self.ui) - choice.cancelButton.hide() - choice.buttonLayout.insertStretch(1) - if choice.exec(): - pass - else: - # 获取新的管理密钥 - while True: - PASSWORD_new = self.read("newkey") - if PASSWORD_new == None: - choice = MessageBox( - "确认", - "您没有输入新的管理密钥,是否取消修改管理密钥?", - self.ui, - ) - if choice.exec(): - if_change = False - break - # 修改管理密钥 - else: - self.crypto.change_PASSWORD( - data, self.PASSWORD, PASSWORD_new - ) - self.PASSWORD = PASSWORD_new - choice = MessageBox( - "操作成功", "管理密钥修改成功", self.ui - ) - choice.cancelButton.hide() - choice.buttonLayout.insertStretch(1) - if choice.exec(): - if_change = False - break - else: - choice = MessageBox( - "确认", - "您没有输入管理密钥,是否取消修改管理密钥?", - self.ui, - ) - if choice.exec(): - break - def update_user_info(self, operation: str) -> None: """将本地数据库中的用户配置同步至GUI的用户管理界面""" @@ -1518,111 +1353,6 @@ class Main(QWidget): self.run_now.setEnabled(True) self.check_start.setEnabled(True) - def check_version(self): - """检查版本更新,调起文件下载进程""" - - # 从本地版本信息文件获取当前版本信息 - with self.config.version_path.open(mode="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 (self.config.app_path / "Updater.exe").exists(): - updater_version_current = [0, 0, 0, 0] - - # 从远程服务器获取最新版本信息 - for _ in range(3): - try: - response = requests.get( - "https://gitee.com/DLmaster_361/AUTO_MAA/raw/main/resources/version.json" - ) - version_remote = response.json() - break - except Exception as e: - err = e - time.sleep(0.1) - else: - choice = MessageBox( - "错误", - f"获取版本信息时出错:\n{err}", - self.ui, - ) - choice.cancelButton.hide() - choice.buttonLayout.insertStretch(1) - if choice.exec(): - return None - - 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 - ): - - # 生成版本更新信息 - if main_version_remote > main_version_current: - main_version_info = f" 主程序:{version_text(main_version_current)} --> {version_text(main_version_remote)}\n" - else: - main_version_info = ( - f" 主程序:{version_text(main_version_current)}\n" - ) - if updater_version_remote > updater_version_current: - updater_version_info = f" 更新器:{version_text(updater_version_current)} --> {version_text(updater_version_remote)}\n" - else: - updater_version_info = ( - f" 更新器:{version_text(updater_version_current)}\n" - ) - - # 询问是否开始版本更新 - choice = MessageBox( - "版本更新", - f"发现新版本:\n{main_version_info}{updater_version_info} 更新说明:\n{version_remote['announcement'].replace("\n# ","\n !").replace("\n## ","\n - ").replace("\n- ","\n · ")}\n\n是否开始更新?\n\n 注意:主程序更新时AUTO_MAA将自动关闭", - self.ui, - ) - if not choice.exec(): - return None - - # 更新更新器 - if updater_version_remote > updater_version_current: - # 创建更新进程 - self.updater = Updater( - self.config.app_path, - "AUTO_MAA更新器", - main_version_remote, - updater_version_remote, - ) - # 完成更新器的更新后更新主程序 - 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() - - # 无版本更新 - else: - self.notify.push_notification("已是最新版本~", " ", " ", 3) - - def update_main(self): - """更新主程序""" - - subprocess.Popen( - str(self.config.app_path / "Updater.exe"), - shell=True, - creationflags=subprocess.CREATE_NO_WINDOW, - ) - self.close() - QApplication.quit() - def server_date(self): """获取当前的服务器日期""" @@ -1630,194 +1360,3 @@ class Main(QWidget): if dt.time() < datetime.datetime.min.time().replace(hour=4): dt = dt - datetime.timedelta(days=1) return dt.strftime("%Y-%m-%d") - - -class AUTO_MAA(QMainWindow): - - if_save = True - - def __init__(self, config: AppConfig, notify: Notification, crypto: CryptoHandler): - super(AUTO_MAA, self).__init__() - - self.config = config - self.notify = notify - - self.config.open_database() - - # 创建主窗口 - self.main = Main(config=config, notify=notify, crypto=crypto) - self.setCentralWidget(self.main.ui) - self.setWindowIcon( - QIcon(str(self.config.app_path / "resources/icons/AUTO_MAA.ico")) - ) - self.setWindowTitle("AUTO_MAA") - - # 创建系统托盘及其菜单 - self.tray = QSystemTrayIcon( - QIcon(str(self.config.app_path / "resources/icons/AUTO_MAA.ico")), - self, - ) - self.tray.setToolTip("AUTO_MAA") - self.tray_menu = RoundMenu() - - # 显示主界面菜单项 - self.tray_menu.addAction( - Action(FluentIcon.CAFE, "显示主界面", triggered=self.show_main) - ) - self.tray_menu.addSeparator() - - # 开始任务菜单项 - self.tray_menu.addActions( - [ - Action( - FluentIcon.PLAY, - "运行日常代理", - triggered=lambda: self.start_task("日常代理"), - ), - # Action( - # FluentIcon.PLAY, - # "运行人工排查", - # triggered=lambda: self.start_task("人工排查"), - # ), - Action(FluentIcon.PAUSE, "中止当前任务", triggered=self.stop_task), - ] - ) - self.tray_menu.addSeparator() - - # 退出主程序菜单项 - self.tray_menu.addAction( - Action(FluentIcon.POWER_BUTTON, "退出主程序", triggered=self.kill_main) - ) - - # 设置托盘菜单 - self.tray.setContextMenu(self.tray_menu) - self.tray.activated.connect(self.on_tray_activated) - - self.show_main() - - def show_tray(self): - """最小化到托盘""" - if self.if_save: - self.set_ui("保存") - self.hide() - self.tray.show() - - def show_main(self): - """显示主界面""" - self.set_ui("配置") - self.tray.hide() - - def on_tray_activated(self, reason): - """双击返回主界面""" - if reason == QSystemTrayIcon.DoubleClick: - self.show_main() - - def start_task(self, mode): - """调起对应任务""" - if self.main.MaaManager.isRunning(): - self.notify.push_notification( - f"无法运行{mode}!", - "当前已有任务正在运行,请在该任务结束后重试", - "当前已有任务正在运行,请在该任务结束后重试", - 3, - ) - else: - self.main.maa_starter(mode) - - def stop_task(self): - """中止当前任务""" - if self.main.MaaManager.isRunning(): - if ( - self.main.MaaManager.mode == "日常代理" - or self.main.MaaManager.mode == "人工排查" - ): - self.main.maa_ender(f"{self.main.MaaManager.mode}_结束") - elif "设置MAA" in self.main.MaaManager.mode: - self.notify.push_notification( - "正在设置MAA!", - "正在运行设置MAA任务,无法中止", - "正在运行设置MAA任务,无法中止", - 3, - ) - else: - self.notify.push_notification( - "无任务运行!", - "当前无任务正在运行,无需中止", - "当前无任务正在运行,无需中止", - 3, - ) - - def kill_main(self): - """退出主程序""" - self.close() - QApplication.quit() - - def set_ui(self, mode): - """设置窗口相关属性""" - - # 保存窗口相关属性 - if mode == "保存": - - self.config.content["Default"][ - "SelfSet.UIsize" - ] = f"{self.geometry().width()}x{self.geometry().height()}" - self.config.content["Default"][ - "SelfSet.UIlocation" - ] = f"{self.geometry().x()}x{self.geometry().y()}" - if self.isMaximized(): - self.config.content["Default"]["SelfSet.UImaximized"] = "True" - else: - self.config.content["Default"]["SelfSet.UImaximized"] = "False" - self.config.save_config() - - # 配置窗口相关属性 - elif mode == "配置": - - self.if_save = False - - size = list( - map(int, self.config.content["Default"]["SelfSet.UIsize"].split("x")) - ) - location = list( - map( - int, self.config.content["Default"]["SelfSet.UIlocation"].split("x") - ) - ) - self.setGeometry(location[0], location[1], size[0], size[1]) - if self.config.content["Default"]["SelfSet.UImaximized"] == "True": - self.showMinimized() - self.showMaximized() - else: - self.showMinimized() - self.showNormal() - - self.if_save = True - - def changeEvent(self, event: QtCore.QEvent): - """重写后的 changeEvent""" - - # 最小化到托盘功能实现 - if event.type() == QtCore.QEvent.WindowStateChange: - if self.windowState() & QtCore.Qt.WindowMinimized: - if self.config.content["Default"]["SelfSet.IfToTray"] == "True": - self.show_tray() - - # 保留其它 changeEvent 方法 - return super().changeEvent(event) - - def closeEvent(self, event: QCloseEvent): - """清理残余进程""" - - self.set_ui("保存") - - # 清理各功能线程 - self.main.Timer.stop() - self.main.Timer.deleteLater() - self.main.MaaManager.requestInterruption() - self.main.MaaManager.quit() - self.main.MaaManager.wait() - - # 关闭数据库连接 - self.config.close_database() - - event.accept() diff --git a/app/ui/main_window.py b/app/ui/main_window.py new file mode 100644 index 0000000..18e85f0 --- /dev/null +++ b/app/ui/main_window.py @@ -0,0 +1,312 @@ +# +# 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.2 +作者:DLmaster_361 +""" + +from PySide6.QtWidgets import ( + QWidget, # + QMainWindow, # + QApplication, # + QSystemTrayIcon, # + QFileDialog, # + QTabWidget, # + QToolBox, # + QComboBox, # + QTableWidgetItem, # + QHeaderView, # + QVBoxLayout, +) +from qfluentwidgets import ( + Action, + PushButton, + LineEdit, + PasswordLineEdit, + TextBrowser, + TableWidget, + TimePicker, + SystemTrayMenu, + ComboBox, + CheckBox, + SpinBox, + FluentIcon, + RoundMenu, + MessageBox, + MessageBoxBase, + HeaderCardWidget, + BodyLabel, + Dialog, + SingleDirectionScrollArea, + SubtitleLabel, + MSFluentWindow, + NavigationItemPosition, +) +from PySide6.QtUiTools import QUiLoader +from PySide6.QtGui import QIcon, QCloseEvent +from PySide6 import QtCore +from functools import partial +from typing import List, Tuple +from pathlib import Path +import json +import datetime +import ctypes +import subprocess +import shutil +import win32gui +import win32process +import psutil +import pyautogui +import time +import winreg +import requests + +uiLoader = QUiLoader() + +from app import AppConfig, MaaConfig +from app.services import Notification, CryptoHandler +from app.utils import Updater, version_text +from .Widget import InputMessageBox, LineEditSettingCard, SpinBoxSettingCard +from .setting import Setting +from .member_manager import MemberManager + + +class AUTO_MAA(MSFluentWindow): + + if_save = True + + def __init__(self, config: AppConfig, notify: Notification, crypto: CryptoHandler): + super(AUTO_MAA, self).__init__() + + self.config = config + self.notify = notify + + self.config.open_database() + + # 创建主窗口 + self.setting = Setting(config=config, notify=notify, crypto=crypto) + self.member_manager = MemberManager(config=config, notify=notify, crypto=crypto) + + self.addSubInterface( + self.setting, + FluentIcon.SETTING, + "设置", + FluentIcon.SETTING, + NavigationItemPosition.BOTTOM, + ) + self.addSubInterface( + self.member_manager, + FluentIcon.ROBOT, + "脚本管理", + FluentIcon.ROBOT, + NavigationItemPosition.TOP, + ) + + self.setWindowIcon( + QIcon(str(self.config.app_path / "resources/icons/AUTO_MAA.ico")) + ) + self.setWindowTitle("AUTO_MAA") + + # 创建系统托盘及其菜单 + self.tray = QSystemTrayIcon( + QIcon(str(self.config.app_path / "resources/icons/AUTO_MAA.ico")), + self, + ) + self.tray.setToolTip("AUTO_MAA") + self.tray_menu = SystemTrayMenu() + + # 显示主界面菜单项 + self.tray_menu.addAction( + Action(FluentIcon.CAFE, "显示主界面", triggered=self.show_main) + ) + self.tray_menu.addSeparator() + + # 开始任务菜单项 + # self.tray_menu.addActions( + # [ + # Action( + # FluentIcon.PLAY, + # "运行日常代理", + # triggered=lambda: self.start_task("日常代理"), + # ), + # Action( + # FluentIcon.PLAY, + # "运行人工排查", + # triggered=lambda: self.start_task("人工排查"), + # ), + # Action(FluentIcon.PAUSE, "中止当前任务", triggered=self.stop_task), + # ] + # ) + # self.tray_menu.addSeparator() + + # 退出主程序菜单项 + self.tray_menu.addAction( + Action(FluentIcon.POWER_BUTTON, "退出主程序", triggered=self.kill_main) + ) + + # 设置托盘菜单 + self.tray.setContextMenu(self.tray_menu) + self.tray.activated.connect(self.on_tray_activated) + + self.show_main() + + def show_tray(self): + """最小化到托盘""" + if self.if_save: + self.set_ui("保存") + self.hide() + self.tray.show() + + def show_main(self): + """显示主界面""" + self.set_ui("配置") + self.tray.hide() + + def on_tray_activated(self, reason): + """双击返回主界面""" + if reason == QSystemTrayIcon.DoubleClick: + self.show_main() + + def start_task(self, mode): + """调起对应任务""" + if self.main.MaaManager.isRunning(): + self.notify.push_notification( + f"无法运行{mode}!", + "当前已有任务正在运行,请在该任务结束后重试", + "当前已有任务正在运行,请在该任务结束后重试", + 3, + ) + else: + self.main.maa_starter(mode) + + def stop_task(self): + """中止当前任务""" + if self.main.MaaManager.isRunning(): + if ( + self.main.MaaManager.mode == "日常代理" + or self.main.MaaManager.mode == "人工排查" + ): + self.main.maa_ender(f"{self.main.MaaManager.mode}_结束") + elif "设置MAA" in self.main.MaaManager.mode: + self.notify.push_notification( + "正在设置MAA!", + "正在运行设置MAA任务,无法中止", + "正在运行设置MAA任务,无法中止", + 3, + ) + else: + self.notify.push_notification( + "无任务运行!", + "当前无任务正在运行,无需中止", + "当前无任务正在运行,无需中止", + 3, + ) + + def kill_main(self): + """退出主程序""" + self.close() + QApplication.quit() + + def set_ui(self, mode): + """设置窗口相关属性""" + + # 保存窗口相关属性 + if mode == "保存": + + self.config.global_config.set( + self.config.global_config.ui_size, + f"{self.geometry().width()}x{self.geometry().height()}", + ) + self.config.global_config.set( + self.config.global_config.ui_location, + f"{self.geometry().x()}x{self.geometry().y()}", + ) + if self.isMaximized(): + self.config.global_config.set( + self.config.global_config.ui_maximized, True + ) + else: + self.config.global_config.set( + self.config.global_config.ui_maximized, False + ) + self.config.global_config.save() + + # 配置窗口相关属性 + elif mode == "配置": + + self.if_save = False + + size = list( + map( + int, + self.config.global_config.get( + self.config.global_config.ui_size + ).split("x"), + ) + ) + location = list( + map( + int, + self.config.global_config.get( + self.config.global_config.ui_location + ).split("x"), + ) + ) + self.setGeometry(location[0], location[1], size[0], size[1]) + if self.config.global_config.get(self.config.global_config.ui_maximized): + self.showMinimized() + self.showMaximized() + else: + self.showMinimized() + self.showNormal() + + self.if_save = True + + def changeEvent(self, event: QtCore.QEvent): + """重写后的 changeEvent""" + + # 最小化到托盘功能实现 + if event.type() == QtCore.QEvent.WindowStateChange: + if self.windowState() & QtCore.Qt.WindowMinimized: + if self.config.global_config.get(self.config.global_config.ui_IfToTray): + self.show_tray() + + # 保留其它 changeEvent 方法 + return super().changeEvent(event) + + def closeEvent(self, event: QCloseEvent): + """清理残余进程""" + + self.set_ui("保存") + + # 清理各功能线程 + # self.main.Timer.stop() + # self.main.Timer.deleteLater() + # self.main.MaaManager.requestInterruption() + # self.main.MaaManager.quit() + # self.main.MaaManager.wait() + + # 关闭数据库连接 + self.config.close_database() + + event.accept() diff --git a/app/ui/member_manager.py b/app/ui/member_manager.py new file mode 100644 index 0000000..a3e78a9 --- /dev/null +++ b/app/ui/member_manager.py @@ -0,0 +1,527 @@ +# +# 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.2 +作者:DLmaster_361 +""" + +from PySide6.QtWidgets import ( + QWidget, # + QMainWindow, # + QApplication, # + QSystemTrayIcon, # + QFileDialog, # + QTabWidget, # + QToolBox, # + QComboBox, # + QTableWidgetItem, # + QHeaderView, # + QVBoxLayout, + QStackedWidget, + QHBoxLayout, +) +from qfluentwidgets import ( + Action, + PushButton, + LineEdit, + PasswordLineEdit, + qconfig, + TableWidget, + Pivot, + TimePicker, + ComboBox, + CheckBox, + ScrollArea, + SpinBox, + FluentIcon, + SwitchButton, + RoundMenu, + MessageBox, + MessageBoxBase, + HeaderCardWidget, + BodyLabel, + CommandBar, + SubtitleLabel, + GroupHeaderCardWidget, + SwitchSettingCard, + ExpandGroupSettingCard, + SingleDirectionScrollArea, + PushSettingCard, +) +from PySide6.QtUiTools import QUiLoader +from PySide6.QtGui import QIcon, QCloseEvent +from PySide6 import QtCore +from functools import partial +from typing import List, Tuple +from pathlib import Path +import os +import datetime +import ctypes +import subprocess +import shutil +import win32gui +import win32process +import psutil +import pyautogui +import time +import winreg +import requests + +uiLoader = QUiLoader() + +from app import AppConfig, MaaConfig +from app.services import Notification, CryptoHandler +from app.utils import Updater, version_text +from .Widget import InputMessageBox, LineEditSettingCard, SpinBoxSettingCard + + +class MemberManager(QWidget): + + def __init__(self, config: AppConfig, notify: Notification, crypto: CryptoHandler): + super(MemberManager, self).__init__() + + self.setObjectName("脚本管理") + + self.config = config + self.notify = notify + self.crypto = crypto + + layout = QVBoxLayout(self) + + self.tools = CommandBar() + + self.member_manager = MemberSettingBox(self.config) + + # 逐个添加动作 + self.tools.addActions( + [ + Action( + FluentIcon.ADD_TO, "新建脚本实例", triggered=self.add_setting_box + ), + Action( + FluentIcon.REMOVE_FROM, + "删除脚本实例", + triggered=self.del_setting_box, + ), + ] + ) + self.tools.addSeparator() + self.tools.addActions( + [ + Action( + FluentIcon.LEFT_ARROW, "向左移动", triggered=self.left_setting_box + ), + Action( + FluentIcon.RIGHT_ARROW, + "向右移动", + triggered=self.right_setting_box, + ), + ] + ) + + # 批量添加动作 + self.tools.addAction( + Action( + FluentIcon.HIDE, + "显示/隐藏密码", + checkable=True, + triggered=self.show_password, + ), + ) + + layout.addWidget(self.tools) + layout.addWidget(self.member_manager) + + def add_setting_box(self): + """添加一个脚本实例""" + + choice = InputMessageBox( + self, "选择一个脚本类型并添加相应脚本实例", "选择脚本类型", "选择", ["MAA"] + ) + if choice.exec() and choice.input.currentIndex() != -1: + + if choice.input.currentText() == "MAA": + + index = len(self.member_manager.search_member()) + 1 + + qconfig.load( + self.config.app_path / f"config/MaaConfig/脚本_{index}/config.json", + self.config.maa_config, + ) + + self.config.maa_config.set(self.config.maa_config.MaaSet_Name, "") + self.config.maa_config.set(self.config.maa_config.MaaSet_Path, ".") + self.config.maa_config.set( + self.config.maa_config.RunSet_AnnihilationTimeLimit, 40 + ) + self.config.maa_config.set( + self.config.maa_config.RunSet_RoutineTimeLimit, 10 + ) + self.config.maa_config.set( + self.config.maa_config.RunSet_RunTimesLimit, 3 + ) + self.config.maa_config.set(self.config.maa_config.MaaSet_Name, "") + self.config.maa_config.set(self.config.maa_config.MaaSet_Name, "") + self.config.maa_config.set(self.config.maa_config.MaaSet_Name, "") + self.config.maa_config.save() + + self.member_manager.add_MaaSettingBox(index) + self.member_manager.switch_SettingBox(index) + + def del_setting_box(self): + """删除一个脚本实例""" + + name = self.member_manager.pivot.currentRouteKey() + + if name == None: + return None + + choice = MessageBox( + "确认", + f"确定要删除 {name} 实例吗?", + self, + ) + if choice.exec(): + + member_list = self.member_manager.search_member() + move_list = [_ for _ in member_list if int(_[0][3:]) > int(name[3:])] + + type = [_[1] for _ in member_list if _[0] == name] + index = max(int(name[3:]) - 1, 1) + + shutil.rmtree(self.config.app_path / f"config/{type[0]}Config/{name}") + for member in move_list: + if ( + self.config.app_path / f"config/{member[1]}Config/{member[0]}" + ).exists(): + ( + self.config.app_path / f"config/{member[1]}Config/{member[0]}" + ).rename( + self.config.app_path + / f"config/{member[1]}Config/{member[0][:3]}{int(member[0][3:])-1}", + ) + + self.member_manager.clear_SettingBox() + self.member_manager.show_SettingBox() + self.member_manager.switch_SettingBox(index, if_after_clear=True) + + def left_setting_box(self): + """向左移动脚本实例""" + + name = self.member_manager.pivot.currentRouteKey() + + if name == None: + return None + + member_list = self.member_manager.search_member() + index = int(name[3:]) + + if index == 1: + return None + + type_right = [_[1] for _ in member_list if _[0] == name] + type_left = [_[1] for _ in member_list if _[0] == f"脚本_{index-1}"] + + (self.config.app_path / f"config/{type_right[0]}Config/脚本_{index}").rename( + self.config.app_path / f"config/{type_right[0]}Config/脚本_0", + ) + (self.config.app_path / f"config/{type_left[0]}Config/脚本_{index-1}").rename( + self.config.app_path / f"config/{type_left[0]}Config/脚本_{index}", + ) + (self.config.app_path / f"config/{type_right[0]}Config/脚本_0").rename( + self.config.app_path / f"config/{type_right[0]}Config/脚本_{index-1}", + ) + + self.member_manager.clear_SettingBox() + self.member_manager.show_SettingBox() + self.member_manager.switch_SettingBox(index - 1, if_after_clear=True) + + def right_setting_box(self): + """向左移动脚本实例""" + + name = self.member_manager.pivot.currentRouteKey() + + if name == None: + return None + + member_list = self.member_manager.search_member() + index = int(name[3:]) + + if index == len(member_list): + return None + + type_left = [_[1] for _ in member_list if _[0] == name] + type_right = [_[1] for _ in member_list if _[0] == f"脚本_{index+1}"] + + (self.config.app_path / f"config/{type_left[0]}Config/脚本_{index}").rename( + self.config.app_path / f"config/{type_left[0]}Config/脚本_0", + ) + (self.config.app_path / f"config/{type_right[0]}Config/脚本_{index+1}").rename( + self.config.app_path / f"config/{type_right[0]}Config/脚本_{index}", + ) + (self.config.app_path / f"config/{type_left[0]}Config/脚本_0").rename( + self.config.app_path / f"config/{type_left[0]}Config/脚本_{index+1}", + ) + + self.member_manager.clear_SettingBox() + self.member_manager.show_SettingBox() + self.member_manager.switch_SettingBox(index + 1, if_after_clear=True) + + def show_password(self): + + pass + + +class MemberSettingBox(QWidget): + + def __init__(self, config: AppConfig): + super().__init__() + + self.setObjectName("脚本管理") + self.config = config + + self.pivot = Pivot(self) + self.stackedWidget = QStackedWidget(self) + self.Layout = QVBoxLayout(self) + + self.SubInterface: List[MaaSettingBox] = [] + + self.Layout.addWidget(self.pivot, 0, QtCore.Qt.AlignHCenter) + self.Layout.addWidget(self.stackedWidget) + self.Layout.setContentsMargins(0, 0, 0, 0) + + self.pivot.currentItemChanged.connect( + lambda index: self.stackedWidget.setCurrentWidget( + self.findChild(QWidget, index) + ) + ) + self.pivot.currentItemChanged.connect( + lambda index: qconfig.load( + self.config.app_path / f"config/MaaConfig/{index}/config.json", + self.config.maa_config, + ) + ) + + self.show_SettingBox() + self.switch_SettingBox(1) + + def show_SettingBox(self) -> None: + """加载所有子界面""" + + member_list = self.search_member() + + for member in member_list: + if member[1] == "Maa": + self.add_MaaSettingBox(int(member[0][3:])) + + def switch_SettingBox(self, index: int, if_after_clear: bool = False) -> None: + """切换到指定的子界面""" + + member_list = self.search_member() + + if index > len(member_list): + return None + + type = [_[1] for _ in member_list if _[0] == f"脚本_{index}"] + + if if_after_clear: + self.pivot.currentItemChanged.disconnect() + + self.stackedWidget.setCurrentWidget(self.SubInterface[index - 1]) + self.pivot.setCurrentItem(self.SubInterface[index - 1].objectName()) + qconfig.load( + self.config.app_path + / f"config/{type[0]}Config/{self.SubInterface[index-1].objectName()}/config.json", + self.config.maa_config, + ) + + if if_after_clear: + self.pivot.currentItemChanged.connect( + lambda index: self.stackedWidget.setCurrentWidget( + self.findChild(QWidget, index) + ) + ) + self.pivot.currentItemChanged.connect( + lambda index: qconfig.load( + self.config.app_path / f"config/MaaConfig/{index}/config.json", + self.config.maa_config, + ) + ) + + def clear_SettingBox(self) -> None: + """清空所有子界面""" + + for sub_interface in self.SubInterface: + self.stackedWidget.removeWidget(sub_interface) + sub_interface.deleteLater() + self.SubInterface.clear() + self.pivot.clear() + + def add_MaaSettingBox(self, uid: int) -> None: + """添加一个MAA设置界面""" + + maa_setting_box = MaaSettingBox(self.config, uid) + + self.SubInterface.append(maa_setting_box) + + self.stackedWidget.addWidget(self.SubInterface[-1]) + + self.pivot.addItem(routeKey=f"脚本_{uid}", text=f"脚本 {uid}") + + def search_member(self) -> list: + """搜索所有脚本实例""" + + member_list = [] + + if (self.config.app_path / "config/MaaConfig").exists(): + for subdir in (self.config.app_path / "config/MaaConfig").iterdir(): + if subdir.is_dir(): + member_list.append([subdir.name, "Maa"]) + + return member_list + + +class MaaSettingBox(QWidget): + + def __init__(self, config: AppConfig, uid: int): + super().__init__() + + self.setObjectName(f"脚本_{uid}") + + self.config = config + + layout = QVBoxLayout() + + scrollArea = ScrollArea() + scrollArea.setWidgetResizable(True) + + content_widget = QWidget() + content_layout = QVBoxLayout(content_widget) + + self.app_setting = self.AppSettingCard(self, self.config.maa_config) + + content_layout.addWidget(self.app_setting) + content_layout.addStretch(1) + + scrollArea.setWidget(content_widget) + + layout.addWidget(scrollArea) + + self.setLayout(layout) + + class AppSettingCard(HeaderCardWidget): + + def __init__(self, parent=None, maa_config: MaaConfig = None): + super().__init__(parent) + + self.setTitle("MAA实例") + + self.maa_config = maa_config + + Layout = QVBoxLayout() + + self.card_Name = LineEditSettingCard( + "实例名称", + FluentIcon.EDIT, + "实例名称", + "用于标识MAA实例的名称", + self.maa_config.MaaSet_Name, + ) + self.card_Path = PushSettingCard( + "选择文件夹", + FluentIcon.FOLDER, + "MAA目录", + self.maa_config.get(self.maa_config.MaaSet_Path), + ) + self.card_Set = PushSettingCard( + "设置", + FluentIcon.HOME, + "MAA全局配置", + "简洁模式下MAA将继承全局配置", + ) + self.RunSet = self.RunSetSettingCard(self, self.maa_config) + + self.card_Path.clicked.connect(self.PathClicked) + + Layout.addWidget(self.card_Name) + Layout.addWidget(self.card_Path) + Layout.addWidget(self.card_Set) + Layout.addWidget(self.RunSet) + + self.viewLayout.addLayout(Layout) + + def PathClicked(self): + + folder = QFileDialog.getExistingDirectory(self, "选择MAA目录", "./") + if not folder or self.maa_config.get(self.maa_config.MaaSet_Path) == folder: + return + self.maa_config.set(self.maa_config.MaaSet_Path, folder) + self.card_Path.setContent(folder) + + class RunSetSettingCard(ExpandGroupSettingCard): + + def __init__(self, parent=None, maa_config: MaaConfig = None): + super().__init__( + FluentIcon.SETTING, + "运行", + "MAA运行调控选项", + parent, + ) + + self.maa_config = maa_config + + widget = QWidget() + Layout = QVBoxLayout(widget) + + self.AnnihilationTimeLimit = SpinBoxSettingCard( + (1, 1024), + FluentIcon.PAGE_RIGHT, + "剿灭代理超时限制", + "MAA日志无变化时间超过该阈值视为超时", + self.maa_config.RunSet_AnnihilationTimeLimit, + ) + + self.RoutineTimeLimit = SpinBoxSettingCard( + (1, 1024), + FluentIcon.PAGE_RIGHT, + "日常代理超时限制", + "MAA日志无变化时间超过该阈值视为超时", + self.maa_config.RunSet_RoutineTimeLimit, + ) + + self.RunTimesLimit = SpinBoxSettingCard( + (1, 1024), + FluentIcon.PAGE_RIGHT, + "代理重试次数限制", + "若超过该次数限制仍未完成代理,视为代理失败", + self.maa_config.RunSet_RunTimesLimit, + ) + + Layout.addWidget(self.AnnihilationTimeLimit) + Layout.addWidget(self.RoutineTimeLimit) + Layout.addWidget(self.RunTimesLimit) + + self.viewLayout.setContentsMargins(0, 0, 0, 0) + self.viewLayout.setSpacing(0) + + self.addGroupWidget(widget) diff --git a/app/ui/setting.py b/app/ui/setting.py new file mode 100644 index 0000000..d261f2b --- /dev/null +++ b/app/ui/setting.py @@ -0,0 +1,623 @@ +# +# 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.2 +作者:DLmaster_361 +""" + +from PySide6.QtWidgets import ( + QWidget, # + QMainWindow, # + QApplication, # + QSystemTrayIcon, # + QFileDialog, # + QTabWidget, # + QToolBox, # + QComboBox, # + QTableWidgetItem, # + QHeaderView, # + QVBoxLayout, + QHBoxLayout, +) +from qfluentwidgets import ( + Action, + PushButton, + LineEdit, + PasswordLineEdit, + TextBrowser, + TableWidget, + TimePicker, + ComboBox, + CheckBox, + ScrollArea, + SpinBox, + FluentIcon, + SwitchButton, + RoundMenu, + MessageBox, + MessageBoxBase, + HeaderCardWidget, + BodyLabel, + Dialog, + SubtitleLabel, + GroupHeaderCardWidget, + SwitchSettingCard, + ExpandGroupSettingCard, + SingleDirectionScrollArea, + PushSettingCard, +) +from PySide6.QtUiTools import QUiLoader +from PySide6.QtGui import QIcon, QCloseEvent +from PySide6 import QtCore +from functools import partial +from typing import List, Tuple +from pathlib import Path +import json +import datetime +import ctypes +import subprocess +import shutil +import win32gui +import win32process +import psutil +import pyautogui +import time +import winreg +import requests + +uiLoader = QUiLoader() + +from app import AppConfig +from app.services import Notification, CryptoHandler +from app.utils import Updater, version_text +from .Widget import InputMessageBox, LineEditSettingCard + + +class Setting(QWidget): + + def __init__(self, config: AppConfig, notify: Notification, crypto: CryptoHandler): + super(Setting, self).__init__() + + self.setObjectName("设置") + + self.config = config + self.notify = notify + self.crypto = crypto + + layout = QVBoxLayout() + + scrollArea = ScrollArea() + scrollArea.setWidgetResizable(True) + + content_widget = QWidget() + content_layout = QVBoxLayout(content_widget) + + self.function = FunctionSettingCard(self, self.config) + self.start = StartSettingCard(self, self.config) + self.ui = UiSettingCard(self, self.config) + self.notification = NotifySettingCard(self, self.config) + self.security = SecuritySettingCard(self) + self.updater = UpdaterSettingCard(self, self.config) + self.other = OtherSettingCard(self, self.config) + + self.security.card_changePASSWORD.clicked.connect(self.change_PASSWORD) + self.updater.card_CheckUpdate.clicked.connect(self.check_version) + self.other.card_Tips.clicked.connect(self.show_tips) + + content_layout.addWidget(self.function) + content_layout.addWidget(self.start) + content_layout.addWidget(self.ui) + content_layout.addWidget(self.notification) + content_layout.addWidget(self.security) + content_layout.addWidget(self.updater) + content_layout.addWidget(self.other) + + scrollArea.setWidget(content_widget) + + layout.addWidget(scrollArea) + + self.setLayout(layout) + + def check_PASSWORD(self) -> None: + """检查并配置管理密钥""" + + if self.config.key_path.exists(): + return None + + while True: + + choice = InputMessageBox( + self, + "未检测到管理密钥,请设置您的管理密钥", + "管理密钥", + "密码", + ) + if choice.exec() and choice.input.text() != "": + self.crypto.get_PASSWORD(choice.input.text()) + break + else: + choice = MessageBox( + "确认", "您没有输入管理密钥,确定要暂时跳过这一步吗?", self + ) + if choice.exec(): + break + + def change_PASSWORD(self) -> None: + """修改管理密钥""" + + # 获取用户信息 + self.config.cur.execute("SELECT * FROM adminx WHERE True") + data = self.config.cur.fetchall() + + if len(data) == 0: + + choice = MessageBox("验证通过", "当前无用户,验证自动通过", self) + choice.cancelButton.hide() + choice.buttonLayout.insertStretch(1) + + # 获取新的管理密钥 + if choice.exec(): + + while True: + + a = InputMessageBox( + self, "请输入新的管理密钥", "新管理密钥", "密码" + ) + if a.exec() and a.input.text() != "": + # 修改管理密钥 + self.crypto.get_PASSWORD(a.input.text()) + choice = MessageBox("操作成功", "管理密钥修改成功", self) + choice.cancelButton.hide() + choice.buttonLayout.insertStretch(1) + if choice.exec(): + break + else: + choice = MessageBox( + "确认", + "您没有输入新的管理密钥,是否取消修改管理密钥?", + self, + ) + if choice.exec(): + break + + else: + # 验证管理密钥 + if_change = True + + while if_change: + + choice = InputMessageBox( + self, "请输入旧的管理密钥", "旧管理密钥", "密码" + ) + if choice.exec() and choice.input.text() != "": + + # 验证旧管理密钥 + if self.crypto.check_PASSWORD(choice.input.text()): + + PASSWORD_old = choice.input.text() + # 获取新的管理密钥 + while True: + + choice = InputMessageBox( + self, "请输入新的管理密钥", "新管理密钥", "密码" + ) + if choice.exec() and choice.input.text() != "": + + # 修改管理密钥 + self.crypto.change_PASSWORD( + data, PASSWORD_old, choice.input.text() + ) + choice = MessageBox( + "操作成功", "管理密钥修改成功", self + ) + choice.cancelButton.hide() + choice.buttonLayout.insertStretch(1) + if choice.exec(): + if_change = False + break + + else: + + choice = MessageBox( + "确认", + "您没有输入新的管理密钥,是否取消修改管理密钥?", + self, + ) + if choice.exec(): + if_change = False + break + + else: + choice = MessageBox("错误", "管理密钥错误", self) + choice.cancelButton.hide() + choice.buttonLayout.insertStretch(1) + if choice.exec(): + pass + else: + choice = MessageBox( + "确认", + "您没有输入管理密钥,是否取消修改管理密钥?", + self, + ) + if choice.exec(): + break + + def check_version(self): + """检查版本更新,调起文件下载进程""" + + # 从本地版本信息文件获取当前版本信息 + with self.config.version_path.open(mode="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 (self.config.app_path / "Updater.exe").exists(): + updater_version_current = [0, 0, 0, 0] + + # 从远程服务器获取最新版本信息 + for _ in range(3): + try: + response = requests.get( + "https://gitee.com/DLmaster_361/AUTO_MAA/raw/main/resources/version.json" + ) + version_remote = response.json() + break + except Exception as e: + err = e + time.sleep(0.1) + else: + choice = MessageBox( + "错误", + f"获取版本信息时出错:\n{err}", + self, + ) + choice.cancelButton.hide() + choice.buttonLayout.insertStretch(1) + if choice.exec(): + return None + + 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 + ): + + # 生成版本更新信息 + if main_version_remote > main_version_current: + main_version_info = f" 主程序:{version_text(main_version_current)} --> {version_text(main_version_remote)}\n" + else: + main_version_info = ( + f" 主程序:{version_text(main_version_current)}\n" + ) + if updater_version_remote > updater_version_current: + updater_version_info = f" 更新器:{version_text(updater_version_current)} --> {version_text(updater_version_remote)}\n" + else: + updater_version_info = ( + f" 更新器:{version_text(updater_version_current)}\n" + ) + + # 询问是否开始版本更新 + choice = MessageBox( + "版本更新", + f"发现新版本:\n{main_version_info}{updater_version_info} 更新说明:\n{version_remote['announcement'].replace("\n# ","\n !").replace("\n## ","\n - ").replace("\n- ","\n · ")}\n\n是否开始更新?\n\n 注意:主程序更新时AUTO_MAA将自动关闭", + self, + ) + if not choice.exec(): + return None + + # 更新更新器 + if updater_version_remote > updater_version_current: + # 创建更新进程 + self.updater = Updater( + self.config.app_path, + "AUTO_MAA更新器", + main_version_remote, + updater_version_remote, + ) + # 完成更新器的更新后更新主程序 + 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() + + # 无版本更新 + else: + self.notify.push_notification("已是最新版本~", " ", " ", 3) + + def update_main(self): + """更新主程序""" + + subprocess.Popen( + str(self.config.app_path / "Updater.exe"), + shell=True, + creationflags=subprocess.CREATE_NO_WINDOW, + ) + self.close() + QApplication.quit() + + def show_tips(self): + """显示小贴士""" + + choice = MessageBox("小贴士", "这里什么都没有~", self) + choice.cancelButton.hide() + choice.buttonLayout.insertStretch(1) + if choice.exec(): + pass + + +class FunctionSettingCard(HeaderCardWidget): + + def __init__(self, parent=None, config: AppConfig = None): + super().__init__(parent) + + self.setTitle("功能") + + self.config = config.global_config + + Layout = QVBoxLayout() + + self.card_IfSleep = SwitchSettingCard( + icon=FluentIcon.PAGE_RIGHT, + title="启动时阻止系统休眠", + content="仅阻止电脑自动休眠,不会影响屏幕是否熄灭", + configItem=self.config.function_IfSleep, + ) + + self.card_IfSilence = SwitchSettingCard( + icon=FluentIcon.PAGE_RIGHT, + title="静默模式", + content="将各代理窗口置于后台运行,减少对前台的干扰", + configItem=self.config.function_IfSilence, + ) + + # 添加各组到设置卡中 + Layout.addWidget(self.card_IfSleep) + Layout.addWidget(self.card_IfSilence) + + self.viewLayout.addLayout(Layout) + + +class StartSettingCard(HeaderCardWidget): + + def __init__(self, parent=None, config: AppConfig = None): + super().__init__(parent) + + self.setTitle("启动") + + self.config = config.global_config + + Layout = QVBoxLayout() + + self.card_IfSelfStart = SwitchSettingCard( + icon=FluentIcon.PAGE_RIGHT, + title="开机时自动启动", + content="将AUTO_MAA添加到开机启动项", + configItem=self.config.start_IfSelfStart, + ) + + self.card_IfRunDirectly = SwitchSettingCard( + icon=FluentIcon.PAGE_RIGHT, + title="启动后直接运行", + content="启动AUTO_MAA后自动运行任务", + configItem=self.config.start_IfRunDirectly, + ) + + # 添加各组到设置卡中 + Layout.addWidget( + self.card_IfSelfStart, + ) + Layout.addWidget(self.card_IfRunDirectly) + + self.viewLayout.addLayout(Layout) + + +class UiSettingCard(HeaderCardWidget): + + def __init__(self, parent=None, config: AppConfig = None): + super().__init__(parent) + + self.setTitle("界面") + + self.config = config.global_config + + Layout = QVBoxLayout() + + self.card_IfShowTray = SwitchSettingCard( + icon=FluentIcon.PAGE_RIGHT, + title="显示托盘图标", + content="常态显示托盘图标", + configItem=self.config.ui_IfShowTray, + ) + + self.card_IfToTray = SwitchSettingCard( + icon=FluentIcon.PAGE_RIGHT, + title="最小化到托盘", + content="最小化时隐藏到托盘", + configItem=self.config.ui_IfToTray, + ) + + # 添加各组到设置卡中 + Layout.addWidget(self.card_IfShowTray) + Layout.addWidget(self.card_IfToTray) + + self.viewLayout.addLayout(Layout) + + +class NotifySettingCard(HeaderCardWidget): + + def __init__(self, parent=None, config: AppConfig = None): + super().__init__(parent) + + self.setTitle("通知") + + self.config = config + + Layout = QVBoxLayout() + + self.card_IfPushPlyer = SwitchSettingCard( + icon=FluentIcon.PAGE_RIGHT, + title="推送系统通知", + content="推送系统级通知,不会在通知中心停留", + configItem=self.config.global_config.notify_IfPushPlyer, + ) + + self.card_SendMail = self.SendMailSettingCard(self, self.config) + + Layout.addWidget(self.card_IfPushPlyer) + Layout.addWidget(self.card_SendMail) + + self.viewLayout.addLayout(Layout) + + class SendMailSettingCard(ExpandGroupSettingCard): + + def __init__(self, parent=None, config: AppConfig = None): + super().__init__( + FluentIcon.SETTING, + "推送邮件通知", + "通过AUTO_MAA官方通知服务邮箱推送任务结果", + parent, + ) + + self.config = config.global_config + + widget = QWidget() + Layout = QVBoxLayout(widget) + + self.card_IfSendMail = SwitchSettingCard( + icon=FluentIcon.PAGE_RIGHT, + title="推送邮件通知", + content="是否启用邮件通知功能", + configItem=self.config.notify_IfSendMail, + ) + + self.MailAddress = LineEditSettingCard( + text="请输入邮箱地址", + icon=FluentIcon.PAGE_RIGHT, + title="邮箱地址", + content="接收通知的邮箱地址", + configItem=self.config.notify_MailAddress, + ) + + self.card_IfSendErrorOnly = SwitchSettingCard( + icon=FluentIcon.PAGE_RIGHT, + title="仅推送异常信息", + content="仅在任务出现异常时推送通知", + configItem=self.config.notify_IfSendErrorOnly, + ) + + Layout.addWidget(self.card_IfSendMail) + Layout.addWidget(self.MailAddress) + Layout.addWidget(self.card_IfSendErrorOnly) + + # 调整内部布局 + self.viewLayout.setContentsMargins(0, 0, 0, 0) + self.viewLayout.setSpacing(0) + + self.addGroupWidget(widget) + + +class SecuritySettingCard(HeaderCardWidget): + + def __init__(self, parent=None): + super().__init__(parent) + + self.setTitle("安全") + + Layout = QVBoxLayout() + + self.card_changePASSWORD = PushSettingCard( + text="修改", + icon=FluentIcon.VPN, + title="修改管理密钥", + content="修改用于解密用户密码的管理密钥", + ) + + Layout.addWidget(self.card_changePASSWORD) + + self.viewLayout.addLayout(Layout) + + +class UpdaterSettingCard(HeaderCardWidget): + + def __init__(self, parent=None, config: AppConfig = None): + super().__init__(parent) + + self.setTitle("更新") + + self.config = config.global_config + + Layout = QVBoxLayout() + + self.card_IfAutoUpdate = SwitchSettingCard( + icon=FluentIcon.PAGE_RIGHT, + title="自动检查更新", + content="将在启动时自动检查AUTO_MAA是否有新版本", + configItem=self.config.update_IfAutoUpdate, + ) + + self.card_CheckUpdate = PushSettingCard( + text="检查更新", + icon=FluentIcon.UPDATE, + title="获取最新版本", + content="检查AUTO_MAA是否有新版本", + ) + + Layout.addWidget(self.card_IfAutoUpdate) + Layout.addWidget(self.card_CheckUpdate) + + self.viewLayout.addLayout(Layout) + + +class OtherSettingCard(HeaderCardWidget): + + def __init__(self, parent=None, config: AppConfig = None): + super().__init__(parent) + + self.setTitle("其他") + + self.config = config.global_config + + Layout = QVBoxLayout() + + self.card_Tips = PushSettingCard( + text="查看", + icon=FluentIcon.PAGE_RIGHT, + title="小贴士", + content="查看AUTO_MAA的小贴士", + ) + + Layout.addWidget(self.card_Tips) + + self.viewLayout.addLayout(Layout) diff --git a/app/utils/Updater.py b/app/utils/Updater.py index 86a335f..ec59e17 100644 --- a/app/utils/Updater.py +++ b/app/utils/Updater.py @@ -39,7 +39,7 @@ from PySide6.QtWidgets import ( QDialog, QVBoxLayout, ) -from qfluentwidgets import ProgressBar, BodyLabel +from qfluentwidgets import ProgressBar, IndeterminateProgressBar, BodyLabel from PySide6.QtGui import QIcon from PySide6.QtCore import QObject, QThread, Signal @@ -262,14 +262,19 @@ class Updater(QObject): ) # 创建垂直布局 - self.Layout_v = QVBoxLayout(self.ui) + self.Layout = QVBoxLayout(self.ui) self.info = BodyLabel("正在初始化", self.ui) - self.Layout_v.addWidget(self.info) + self.progress_1 = IndeterminateProgressBar(self.ui) + self.progress_2 = ProgressBar(self.ui) - self.progress = ProgressBar(self.ui) - self.progress.setRange(0, 0) - self.Layout_v.addWidget(self.progress) + self.update_progress(0, 0, 0) + + self.Layout.addWidget(self.info) + self.Layout.addStretch(1) + self.Layout.addWidget(self.progress_1) + self.Layout.addWidget(self.progress_2) + self.Layout.addStretch(1) self.update_process = UpdateProcess( app_path, name, main_version, updater_version @@ -284,8 +289,14 @@ class Updater(QObject): self.info.setText(text) def update_progress(self, begin: int, end: int, current: int) -> None: - self.progress.setRange(begin, end) - self.progress.setValue(current) + if begin == 0 and end == 0: + self.progress_2.setVisible(False) + self.progress_1.setVisible(True) + else: + self.progress_1.setVisible(False) + self.progress_2.setVisible(True) + self.progress_2.setRange(begin, end) + self.progress_2.setValue(current) class AUTO_MAA_Updater(QApplication): diff --git a/main.py b/main.py index f185b0d..9bbb470 100644 --- a/main.py +++ b/main.py @@ -26,9 +26,13 @@ v4.2 """ from PySide6.QtWidgets import QApplication +from qfluentwidgets import FluentTranslator import sys -from app import AppConfig, Notification, CryptoHandler, AUTO_MAA +from app.config import AppConfig +from app.services.notification import Notification +from app.services.security import CryptoHandler +from app.ui.main_window import AUTO_MAA if __name__ == "__main__": @@ -37,6 +41,10 @@ if __name__ == "__main__": crypto = CryptoHandler(config) application = QApplication(sys.argv) + + translator = FluentTranslator() + application.installTranslator(translator) + window = AUTO_MAA(config=config, notify=notify, crypto=crypto) - window.main.check_PASSWORD() + window.setting.check_PASSWORD() sys.exit(application.exec()) diff --git a/resources/version.json b/resources/version.json index fbe690f..cbceef2 100644 --- a/resources/version.json +++ b/resources/version.json @@ -1,8 +1,8 @@ { "main_version": "4.2.0.1", "updater_version": "1.1.0.1", - "announcement": "\n## 新增功能\n- 初步引入`qfluentwidgets`,UI界面美化", - "proxy_list":[ + "announcement": "\n# 这是一个预览版本!\n# 这个版本仅能进行用于展示页面,未实现任何功能!!!\n- 若不慎更新到此版本,请前往官方仓库,下载4.2.0版本压缩包替换本地文件即可回退版本", + "proxy_list": [ "", "https://gitproxy.click/", "https://cdn.moran233.xyz/", From 87a140d3734f6b4195470c4306d394c16880dc51 Mon Sep 17 00:00:00 2001 From: DLmaster Date: Sat, 4 Jan 2025 04:03:27 +0800 Subject: [PATCH 02/12] =?UTF-8?q?=E8=A6=86=E7=9B=96pre=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/python-app.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/python-app.yml b/.github/workflows/python-app.yml index 8b14e97..b07af9f 100644 --- a/.github/workflows/python-app.yml +++ b/.github/workflows/python-app.yml @@ -22,7 +22,7 @@ name: Build AUTO_MAA on: push: - branches: [ "main" ] + branches: [ "main","fluent-gui-dev" ] paths-ignore: - '**.md' - 'LICENSE' From f94e129cbaab50b7e1757061a14c5f42d976420f Mon Sep 17 00:00:00 2001 From: DLmaster Date: Sat, 4 Jan 2025 14:22:45 +0800 Subject: [PATCH 03/12] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=90=AF=E5=8A=A8?= =?UTF-8?q?=E7=95=8C=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/ui/main_window.py | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/app/ui/main_window.py b/app/ui/main_window.py index 18e85f0..7dd66f3 100644 --- a/app/ui/main_window.py +++ b/app/ui/main_window.py @@ -50,6 +50,7 @@ from qfluentwidgets import ( ComboBox, CheckBox, SpinBox, + SplashScreen, FluentIcon, RoundMenu, MessageBox, @@ -103,6 +104,14 @@ class AUTO_MAA(MSFluentWindow): self.config.open_database() + self.setWindowIcon( + QIcon(str(self.config.app_path / "resources/icons/AUTO_MAA.ico")) + ) + self.setWindowTitle("AUTO_MAA") + + self.splashScreen = SplashScreen(self.windowIcon(), self) + self.show() + # 创建主窗口 self.setting = Setting(config=config, notify=notify, crypto=crypto) self.member_manager = MemberManager(config=config, notify=notify, crypto=crypto) @@ -122,11 +131,6 @@ class AUTO_MAA(MSFluentWindow): NavigationItemPosition.TOP, ) - self.setWindowIcon( - QIcon(str(self.config.app_path / "resources/icons/AUTO_MAA.ico")) - ) - self.setWindowTitle("AUTO_MAA") - # 创建系统托盘及其菜单 self.tray = QSystemTrayIcon( QIcon(str(self.config.app_path / "resources/icons/AUTO_MAA.ico")), @@ -168,6 +172,7 @@ class AUTO_MAA(MSFluentWindow): self.tray.setContextMenu(self.tray_menu) self.tray.activated.connect(self.on_tray_activated) + self.splashScreen.finish() self.show_main() def show_tray(self): @@ -274,10 +279,8 @@ class AUTO_MAA(MSFluentWindow): ) self.setGeometry(location[0], location[1], size[0], size[1]) if self.config.global_config.get(self.config.global_config.ui_maximized): - self.showMinimized() self.showMaximized() else: - self.showMinimized() self.showNormal() self.if_save = True From 684211c1296d9b3e2443cc3d5785abbac9d360e1 Mon Sep 17 00:00:00 2001 From: DLmaster Date: Sun, 5 Jan 2025 19:24:01 +0800 Subject: [PATCH 04/12] =?UTF-8?q?=E5=88=9D=E6=AD=A5=E5=AE=8C=E6=88=90?= =?UTF-8?q?=E8=B0=83=E5=BA=A6=E9=98=9F=E5=88=97=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/__init__.py | 6 +- app/config.py | 113 +++- app/services/__init__.py | 3 +- app/services/notification.py | 87 +-- app/services/security.py | 2 +- app/services/system.py | 125 ++++ app/ui/Widget.py | 137 +++- app/ui/else.py | 848 +++-------------------- app/ui/main_window.py | 81 ++- app/ui/member_manager.py | 1227 +++++++++++++++++++++++++++++++--- app/ui/queue_manager.py | 714 ++++++++++++++++++++ app/ui/setting.py | 135 +++- main.py | 4 +- resources/gui/main.ui | 2 +- 14 files changed, 2527 insertions(+), 957 deletions(-) create mode 100644 app/services/system.py create mode 100644 app/ui/queue_manager.py diff --git a/app/__init__.py b/app/__init__.py index 38b0e75..4ec17e7 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -29,18 +29,20 @@ __version__ = "4.2.0" __author__ = "DLmaster361 " __license__ = "GPL-3.0 license" -from .config import AppConfig, MaaConfig +from .config import AppConfig, QueueConfig, MaaConfig from .models import MaaManager -from .services import Notification, CryptoHandler +from .services import Notification, CryptoHandler, SystemHandler from .ui import AUTO_MAA from .utils import Updater, version_text __all__ = [ "AppConfig", + "QueueConfig", "MaaConfig", "MaaManager", "Notification", "CryptoHandler", + "SystemHandler", "AUTO_MAA", "Updater", "version_text", diff --git a/app/config.py b/app/config.py index 35c95b3..14bd977 100644 --- a/app/config.py +++ b/app/config.py @@ -59,6 +59,9 @@ class AppConfig: self.gameid_path = self.app_path / "data/gameid.txt" self.version_path = self.app_path / "resources/version.json" + self.PASSWORD = "" + self.if_database_opened = False + # 检查文件完整性 self.initialize() @@ -87,16 +90,16 @@ class AppConfig: encoding="utf-8", ) - self.check_config() - self.check_database() + self.get_config() + # self.check_database() - def check_config(self) -> None: - """检查配置文件字段完整性并补全""" + def get_config(self) -> None: + """创建配置类""" self.global_config = GlobalConfig() qconfig.load(self.config_path, self.global_config) - self.global_config.save() + self.queue_config = QueueConfig() self.maa_config = MaaConfig() def check_database(self) -> None: @@ -178,48 +181,44 @@ class AppConfig: cur.close() db.close() - def open_database(self) -> None: + def init_database(self, mode: str) -> None: + """初始化用户数据库""" + + if mode == "Maa": + self.cur.execute( + "CREATE TABLE adminx(admin text,id text,server text,day int,status text,last date,game text,game_1 text,game_2 text,routine text,annihilation text,infrastructure text,password byte,notes text,numb int,mode text,uid int)" + ) + self.cur.execute("CREATE TABLE version(v text)") + self.cur.execute("INSERT INTO version VALUES(?)", ("v1.3",)) + self.db.commit() + + def open_database(self, mode: str, index: str = None) -> None: """打开数据库""" - self.db = sqlite3.connect(self.database_path) + if self.if_database_opened: + self.close_database() + + if mode == "Maa": + self.db = sqlite3.connect( + self.app_path / f"config/{mode}Config/{index}/user_date.db" + ) self.cur = self.db.cursor() + self.if_database_opened = True def close_database(self) -> None: """关闭数据库""" self.cur.close() self.db.close() + self.if_database_opened = False class GlobalConfig(QConfig): """全局配置""" - # ["TimeSet.set1", "False"], - # ["TimeSet.run1", "00:00"], - # ["TimeSet.set2", "False"], - # ["TimeSet.run2", "00:00"], - # ["TimeSet.set3", "False"], - # ["TimeSet.run3", "00:00"], - # ["TimeSet.set4", "False"], - # ["TimeSet.run4", "00:00"], - # ["TimeSet.set5", "False"], - # ["TimeSet.run5", "00:00"], - # ["TimeSet.set6", "False"], - # ["TimeSet.run6", "00:00"], - # ["TimeSet.set7", "False"], - # ["TimeSet.run7", "00:00"], - # ["TimeSet.set8", "False"], - # ["TimeSet.run8", "00:00"], - # ["TimeSet.set9", "False"], - # ["TimeSet.run9", "00:00"], - # ["TimeSet.set10", "False"], - # ["TimeSet.run10", "00:00"], - # ["MaaSet.path", ""], - # ["TimeLimit.routine", 10], - # ["TimeLimit.annihilation", 40], - # ["TimesLimit.run", 3], - - function_IfSleep = ConfigItem("Function", "IfSleep", False, BoolValidator()) + function_IfAllowSleep = ConfigItem( + "Function", "IfAllowSleep", False, BoolValidator() + ) function_IfSilence = ConfigItem("Function", "IfSilence", False, BoolValidator()) function_BossKey = ConfigItem("Function", "BossKey", "") @@ -243,6 +242,54 @@ class GlobalConfig(QConfig): update_IfAutoUpdate = ConfigItem("Update", "IfAutoUpdate", False, BoolValidator()) +class QueueConfig(QConfig): + """队列配置""" + + queueSet_Name = ConfigItem("QueueSet", "Name", "") + queueSet_Enabled = ConfigItem("QueueSet", "Enabled", False, BoolValidator()) + + time_TimeEnabled_0 = ConfigItem("Time", "TimeEnabled_0", False, BoolValidator()) + time_TimeSet_0 = ConfigItem("Time", "TimeSet_0", "00:00") + + time_TimeEnabled_1 = ConfigItem("Time", "TimeEnabled_1", False, BoolValidator()) + time_TimeSet_1 = ConfigItem("Time", "TimeSet_1", "00:00") + + time_TimeEnabled_2 = ConfigItem("Time", "TimeEnabled_2", False, BoolValidator()) + time_TimeSet_2 = ConfigItem("Time", "TimeSet_2", "00:00") + + time_TimeEnabled_3 = ConfigItem("Time", "TimeEnabled_3", False, BoolValidator()) + time_TimeSet_3 = ConfigItem("Time", "TimeSet_3", "00:00") + + time_TimeEnabled_4 = ConfigItem("Time", "TimeEnabled_4", False, BoolValidator()) + time_TimeSet_4 = ConfigItem("Time", "TimeSet_4", "00:00") + + time_TimeEnabled_5 = ConfigItem("Time", "TimeEnabled_5", False, BoolValidator()) + time_TimeSet_5 = ConfigItem("Time", "TimeSet_5", "00:00") + + time_TimeEnabled_6 = ConfigItem("Time", "TimeEnabled_6", False, BoolValidator()) + time_TimeSet_6 = ConfigItem("Time", "TimeSet_6", "00:00") + + time_TimeEnabled_7 = ConfigItem("Time", "TimeEnabled_7", False, BoolValidator()) + time_TimeSet_7 = ConfigItem("Time", "TimeSet_7", "00:00") + + time_TimeEnabled_8 = ConfigItem("Time", "TimeEnabled_8", False, BoolValidator()) + time_TimeSet_8 = ConfigItem("Time", "TimeSet_8", "00:00") + + time_TimeEnabled_9 = ConfigItem("Time", "TimeEnabled_9", False, BoolValidator()) + time_TimeSet_9 = ConfigItem("Time", "TimeSet_9", "00:00") + + queue_Member_1 = OptionsConfigItem("Queue", "Member_1", "禁用") + queue_Member_2 = OptionsConfigItem("Queue", "Member_2", "禁用") + queue_Member_3 = OptionsConfigItem("Queue", "Member_3", "禁用") + queue_Member_4 = OptionsConfigItem("Queue", "Member_4", "禁用") + queue_Member_5 = OptionsConfigItem("Queue", "Member_5", "禁用") + queue_Member_6 = OptionsConfigItem("Queue", "Member_6", "禁用") + queue_Member_7 = OptionsConfigItem("Queue", "Member_7", "禁用") + queue_Member_8 = OptionsConfigItem("Queue", "Member_8", "禁用") + queue_Member_9 = OptionsConfigItem("Queue", "Member_9", "禁用") + queue_Member_10 = OptionsConfigItem("Queue", "Member_10", "禁用") + + class MaaConfig(QConfig): """MAA配置""" diff --git a/app/services/__init__.py b/app/services/__init__.py index cf23c93..2ca32a7 100644 --- a/app/services/__init__.py +++ b/app/services/__init__.py @@ -31,5 +31,6 @@ __license__ = "GPL-3.0 license" from .notification import Notification from .security import CryptoHandler +from .system import SystemHandler -__all__ = ["Notification", "CryptoHandler"] +__all__ = ["Notification", "CryptoHandler", "SystemHandler"] diff --git a/app/services/notification.py b/app/services/notification.py index 4afd7f5..6ea9ff7 100644 --- a/app/services/notification.py +++ b/app/services/notification.py @@ -44,15 +44,17 @@ class Notification: def push_notification(self, title, message, ticker, t): """推送系统通知""" - notification.notify( - title=title, - message=message, - app_name="AUTO_MAA", - app_icon=str(self.config.app_path / "resources/icons/AUTO_MAA.ico"), - timeout=t, - ticker=ticker, - toast=True, - ) + if self.config.global_config.get(self.config.global_config.notify_IfPushPlyer): + + notification.notify( + title=title, + message=message, + app_name="AUTO_MAA", + app_icon=str(self.config.app_path / "resources/icons/AUTO_MAA.ico"), + timeout=t, + ticker=ticker, + toast=True, + ) return True @@ -62,34 +64,43 @@ class Notification: # 声明:此邮箱为AUTO_MAA项目组资产,未经授权不得私自使用 # 注意:此声明注释只有使用者更换发信邮箱时才能删除,本条规则优先级高于GPLv3 - # 第三方 SMTP 服务配置 - mail_host = "smtp.163.com" # 设置服务器 - mail_sender = "AUTO_MAA_server@163.com" # 用户名 - mail_key = "SYrq87nDLD4RNB5T" # 授权码 24/11/15 + if self.config.global_config.get(self.config.global_config.notify_IfSendMail): - # 定义邮件正文 - message = MIMEText(content, "plain", "utf-8") - message["From"] = formataddr( - (Header("AUTO_MAA通知服务", "utf-8").encode(), "AUTO_MAA_server@163.com") - ) # 发件人显示的名字 - message["To"] = formataddr( - ( - Header("AUTO_MAA用户", "utf-8").encode(), - self.config.content["Default"]["SelfSet.MailAddress"], - ) - ) # 收件人显示的名字 - message["Subject"] = Header(title, "utf-8") + # 第三方 SMTP 服务配置 + mail_host = "smtp.163.com" # 设置服务器 + mail_sender = "AUTO_MAA_server@163.com" # 用户名 + mail_key = "SYrq87nDLD4RNB5T" # 授权码 24/11/15 - try: - smtpObj = smtplib.SMTP_SSL(mail_host, 465) # 465为SMTP_SSL默认端口 - smtpObj.login(mail_sender, mail_key) - smtpObj.sendmail( - mail_sender, - self.config.content["Default"]["SelfSet.MailAddress"], - message.as_string(), - ) - return True - except smtplib.SMTPException as e: - return f"发送邮件时出错:\n{e}" - finally: - smtpObj.quit() + # 定义邮件正文 + message = MIMEText(content, "plain", "utf-8") + message["From"] = formataddr( + ( + Header("AUTO_MAA通知服务", "utf-8").encode(), + "AUTO_MAA_server@163.com", + ) + ) # 发件人显示的名字 + message["To"] = formataddr( + ( + Header("AUTO_MAA用户", "utf-8").encode(), + self.config.global_config.get( + self.config.global_config.notify_MailAddress + ), + ) + ) # 收件人显示的名字 + message["Subject"] = Header(title, "utf-8") + + try: + smtpObj = smtplib.SMTP_SSL(mail_host, 465) # 465为SMTP_SSL默认端口 + smtpObj.login(mail_sender, mail_key) + smtpObj.sendmail( + mail_sender, + self.config.global_config.get( + self.config.global_config.notify_MailAddress + ), + message.as_string(), + ) + return True + except smtplib.SMTPException as e: + return f"发送邮件时出错:\n{e}" + finally: + smtpObj.quit() diff --git a/app/services/security.py b/app/services/security.py index b39dc00..236ed0a 100644 --- a/app/services/security.py +++ b/app/services/security.py @@ -20,7 +20,7 @@ """ AUTO_MAA -AUTO_MAA主程序 +AUTO_MAA安全服务 v4.2 作者:DLmaster_361 """ diff --git a/app/services/system.py b/app/services/system.py new file mode 100644 index 0000000..583d641 --- /dev/null +++ b/app/services/system.py @@ -0,0 +1,125 @@ +# +# 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.2 +作者:DLmaster_361 +""" + +import ctypes +import win32gui +import win32process +import winreg +import psutil + +from app import AppConfig + + +class SystemHandler: + + ES_CONTINUOUS = 0x80000000 + ES_SYSTEM_REQUIRED = 0x00000001 + + def __init__(self, config: AppConfig): + + self.config = config + + self.set_Sleep() + self.set_SelfStart() + + def set_Sleep(self): + """同步系统休眠状态""" + + if self.config.global_config.get( + self.config.global_config.function_IfAllowSleep + ): + # 设置系统电源状态 + ctypes.windll.kernel32.SetThreadExecutionState( + self.ES_CONTINUOUS | self.ES_SYSTEM_REQUIRED + ) + else: + # 恢复系统电源状态 + ctypes.windll.kernel32.SetThreadExecutionState(self.ES_CONTINUOUS) + + def set_SelfStart(self): + """同步开机自启""" + + if ( + self.config.global_config.get(self.config.global_config.start_IfSelfStart) + and not self.is_startup() + ): + key = winreg.OpenKey( + winreg.HKEY_CURRENT_USER, + r"Software\Microsoft\Windows\CurrentVersion\Run", + winreg.KEY_SET_VALUE, + winreg.KEY_ALL_ACCESS | winreg.KEY_WRITE | winreg.KEY_CREATE_SUB_KEY, + ) + winreg.SetValueEx( + key, self.config.app_name, 0, winreg.REG_SZ, self.config.app_path_sys + ) + winreg.CloseKey(key) + elif ( + not self.config.global_config.get( + self.config.global_config.start_IfSelfStart + ) + and self.is_startup() + ): + key = winreg.OpenKey( + winreg.HKEY_CURRENT_USER, + r"Software\Microsoft\Windows\CurrentVersion\Run", + winreg.KEY_SET_VALUE, + winreg.KEY_ALL_ACCESS | winreg.KEY_WRITE | winreg.KEY_CREATE_SUB_KEY, + ) + winreg.DeleteValue(key, self.config.app_name) + winreg.CloseKey(key) + + def is_startup(self): + """判断程序是否已经开机自启""" + + key = winreg.OpenKey( + winreg.HKEY_CURRENT_USER, + r"Software\Microsoft\Windows\CurrentVersion\Run", + 0, + winreg.KEY_READ, + ) + + try: + value, _ = winreg.QueryValueEx(key, self.config.app_name) + winreg.CloseKey(key) + return True + except FileNotFoundError: + winreg.CloseKey(key) + return False + + def get_window_info(self): + """获取当前窗口信息""" + + def callback(hwnd, window_info): + if win32gui.IsWindowVisible(hwnd) and win32gui.GetWindowText(hwnd): + _, pid = win32process.GetWindowThreadProcessId(hwnd) + process = psutil.Process(pid) + window_info.append((win32gui.GetWindowText(hwnd), process.exe())) + return True + + window_info = [] + win32gui.EnumWindows(callback, window_info) + return window_info diff --git a/app/ui/Widget.py b/app/ui/Widget.py index 6ed0a41..1ec5a8f 100644 --- a/app/ui/Widget.py +++ b/app/ui/Widget.py @@ -25,8 +25,9 @@ v4.2 作者:DLmaster_361 """ -from PySide6.QtCore import Qt +from PySide6.QtCore import Qt, QTime from PySide6.QtGui import QIcon +from PySide6.QtWidgets import QWidget, QHBoxLayout from qfluentwidgets import ( LineEdit, PasswordLineEdit, @@ -37,11 +38,14 @@ from qfluentwidgets import ( FluentIconBase, Signal, ComboBox, + CheckBox, qconfig, ConfigItem, + TimeEdit, + OptionsConfigItem, ) -from typing import Union +from typing import Union, List class InputMessageBox(MessageBoxBase): @@ -68,6 +72,31 @@ class InputMessageBox(MessageBoxBase): self.viewLayout.addWidget(self.input) +class SetMessageBox(MessageBoxBase): + """输入对话框""" + + def __init__(self, parent, title: str, content: List[str], list: List[List[str]]): + super().__init__(parent) + self.title = SubtitleLabel(title) + + Widget = QWidget() + Layout = QHBoxLayout(Widget) + + self.input: List[ComboBox] = [] + + for i in range(len(content)): + + self.input.append(ComboBox()) + self.input[i].addItems(list[i]) + self.input[i].setCurrentIndex(-1) + self.input[i].setPlaceholderText(content[i]) + Layout.addWidget(self.input[i]) + + # 将组件添加到布局中 + self.viewLayout.addWidget(self.title) + self.viewLayout.addWidget(Widget) + + class LineEditSettingCard(SettingCard): """Setting card with switch button""" @@ -147,3 +176,107 @@ class SpinBoxSettingCard(SettingCard): qconfig.set(self.configItem, value) self.SpinBox.setValue(value) + + +class NoOptionComboBoxSettingCard(SettingCard): + + def __init__( + self, + configItem: OptionsConfigItem, + icon: Union[str, QIcon, FluentIconBase], + title, + content=None, + value=None, + texts=None, + parent=None, + ): + + super().__init__(icon, title, content, parent) + self.configItem = configItem + self.comboBox = ComboBox(self) + self.comboBox.setMinimumWidth(250) + self.hBoxLayout.addWidget(self.comboBox, 0, Qt.AlignRight) + self.hBoxLayout.addSpacing(16) + + self.optionToText = {o: t for o, t in zip(value, texts)} + for text, option in zip(texts, value): + self.comboBox.addItem(text, userData=option) + + self.comboBox.setCurrentText(self.optionToText[qconfig.get(configItem)]) + self.comboBox.currentIndexChanged.connect(self._onCurrentIndexChanged) + configItem.valueChanged.connect(self.setValue) + + def _onCurrentIndexChanged(self, index: int): + + qconfig.set(self.configItem, self.comboBox.itemData(index)) + + def setValue(self, value): + if value not in self.optionToText: + return + + self.comboBox.setCurrentText(self.optionToText[value]) + qconfig.set(self.configItem, value) + + +class TimeEditSettingCard(SettingCard): + + enabledChanged = Signal(bool) + timeChanged = Signal(str) + + def __init__( + self, + icon: Union[str, QIcon, FluentIconBase], + title, + content=None, + configItem_bool: ConfigItem = None, + configItem_time: ConfigItem = None, + parent=None, + ): + + super().__init__(icon, title, content, parent) + self.configItem_bool = configItem_bool + self.configItem_time = configItem_time + self.CheckBox = CheckBox(self) + self.CheckBox.setTristate(False) + self.TimeEdit = TimeEdit(self) + self.TimeEdit.setDisplayFormat("HH:mm") + self.TimeEdit.setMinimumWidth(150) + + if configItem_bool: + self.setValue_bool(qconfig.get(configItem_bool)) + configItem_bool.valueChanged.connect(self.setValue_bool) + + if configItem_time: + self.setValue_time(qconfig.get(configItem_time)) + configItem_time.valueChanged.connect(self.setValue_time) + + self.hBoxLayout.addWidget(self.CheckBox, 0, Qt.AlignRight) + self.hBoxLayout.addWidget(self.TimeEdit, 0, Qt.AlignRight) + self.hBoxLayout.addSpacing(16) + + self.CheckBox.stateChanged.connect(self.__enableChanged) + self.TimeEdit.timeChanged.connect(self.__timeChanged) + + def __timeChanged(self, value: QTime): + self.setValue_time(value.toString("HH:mm")) + self.timeChanged.emit(value.toString("HH:mm")) + + def __enableChanged(self, value: int): + if value == 0: + self.setValue_bool(False) + self.enabledChanged.emit(False) + else: + self.setValue_bool(True) + self.enabledChanged.emit(True) + + def setValue_bool(self, value: bool): + if self.configItem_bool: + qconfig.set(self.configItem_bool, value) + + self.CheckBox.setChecked(value) + + def setValue_time(self, value: str): + if self.configItem_time: + qconfig.set(self.configItem_time, value) + + self.TimeEdit.setTime(QTime.fromString(value, "HH:mm")) diff --git a/app/ui/else.py b/app/ui/else.py index 04994bd..501b815 100644 --- a/app/ui/else.py +++ b/app/ui/else.py @@ -10,68 +10,7 @@ class Main(QWidget): self.notify = notify self.crypto = crypto - self.PASSWORD = "" - self.if_user_list_editable = True - self.if_update_database = True - self.if_update_config = True - self.user_mode_list = ["simple", "beta"] - self.user_column = [ - "admin", - "id", - "server", - "day", - "status", - "last", - "game", - "game_1", - "game_2", - "routine", - "annihilation", - "infrastructure", - "password", - "notes", - "numb", - "mode", - "uid", - ] - self.userlist_simple_index = [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - "-", - 9, - 10, - 11, - 12, - "-", - "-", - "-", - ] - self.userlist_beta_index = [ - 0, - "-", - "-", - 1, - 2, - 3, - "-", - "-", - "-", - 4, - 5, - "-", - 6, - 7, - "-", - "-", - "-", - ] + # uiLoader.registerCustomWidget(PushButton) # uiLoader.registerCustomWidget(LineEdit) @@ -172,7 +111,7 @@ class Main(QWidget): # ) # self.if_self_start.stateChanged.connect(self.change_config) - # self.if_sleep: CheckBox = self.ui.findChild(CheckBox, "checkBox_ifsleep") + # self.if_sleep: CheckBox = self.ui.findChild(CheckBox, "checkBox_IfAllowSleep") # self.if_sleep.stateChanged.connect(self.change_config) # self.if_proxy_directly: CheckBox = self.ui.findChild( @@ -262,279 +201,79 @@ class Main(QWidget): if self.config.content["Default"]["SelfSet.IfProxyDirectly"] == "True": self.maa_starter("日常代理") - def check_PASSWORD(self) -> None: - """检查并配置管理密钥""" - if self.config.key_path.exists(): - return None - while True: + # def update_config(self): + # """将self.config中的程序配置同步至GUI界面""" - if self.read("setkey"): - self.crypto.get_PASSWORD(self.PASSWORD) - break - else: - choice = MessageBox( - "确认", "您没有输入管理密钥,确定要暂时跳过这一步吗?", self.ui - ) - if choice.exec(): - break + # # 阻止GUI程序配置被立即读入程序形成死循环 + # self.if_update_config = False - def update_user_info(self, operation: str) -> None: - """将本地数据库中的用户配置同步至GUI的用户管理界面""" + # self.main_tab.setCurrentIndex( + # self.config.content["Default"]["SelfSet.MainIndex"] + # ) - # 读入本地数据库 - self.config.cur.execute("SELECT * FROM adminx WHERE True") - data = self.config.cur.fetchall() + # self.maa_path.setText(str(Path(self.config.content["Default"]["MaaSet.path"]))) + # self.routine.setValue(self.config.content["Default"]["TimeLimit.routine"]) + # self.annihilation.setValue( + # self.config.content["Default"]["TimeLimit.annihilation"] + # ) + # self.num.setValue(self.config.content["Default"]["TimesLimit.run"]) + # self.mail_address.setText(self.config.content["Default"]["SelfSet.MailAddress"]) + # self.boss_key.setText(self.config.content["Default"]["SelfSet.BossKey"]) - # 处理部分模式调整 - if operation == "clear": - self.PASSWORD = "" - elif operation == "read_only": - self.if_user_list_editable = False - elif operation == "editable": - self.if_user_list_editable = True + # self.if_self_start.setChecked( + # bool(self.config.content["Default"]["SelfSet.IfSelfStart"] == "True") + # ) - # 阻止GUI用户数据被立即写入数据库形成死循环 - self.if_update_database = False + # self.if_sleep.setChecked( + # bool(self.config.content["Default"]["SelfSet.IfAllowSleep"] == "True") + # ) - user_switch_list = ["转为高级", "转为简洁"] - self.user_switch.setText(user_switch_list[self.user_set.currentIndex()]) + # self.if_proxy_directly.setChecked( + # bool(self.config.content["Default"]["SelfSet.IfProxyDirectly"] == "True") + # ) - # 同步简洁用户配置列表 - data_simple = [_ for _ in data if _[15] == "simple"] - self.user_list_simple.setRowCount(len(data_simple)) + # self.if_send_mail.setChecked( + # bool(self.config.content["Default"]["SelfSet.IfSendMail"] == "True") + # ) - for i, row in enumerate(data_simple): + # self.mail_address.setVisible( + # bool(self.config.content["Default"]["SelfSet.IfSendMail"] == "True") + # ) - for j, value in enumerate(row): + # self.if_send_error_only.setChecked( + # bool( + # self.config.content["Default"]["SelfSet.IfSendMail.OnlyError"] == "True" + # ) + # ) - if self.userlist_simple_index[j] == "-": - continue + # self.if_send_error_only.setVisible( + # bool(self.config.content["Default"]["SelfSet.IfSendMail"] == "True") + # ) - # 生成表格组件 - if j == 2: - item = ComboBox() - item.addItems(["官服", "B服"]) - if value == "Official": - item.setCurrentIndex(0) - elif value == "Bilibili": - item.setCurrentIndex(1) - item.currentIndexChanged.connect( - partial( - self.change_user_CellWidget, - data_simple[i][16], - self.user_column[j], - ) - ) - elif j in [4, 10, 11]: - item = QComboBox() - if j in [4, 10]: - item.addItems(["启用", "禁用"]) - elif j == 11: - item.addItems(["启用", "禁用", "更改配置文件"]) - if value == "y": - item.setCurrentIndex(0) - elif value == "n": - item.setCurrentIndex(1) - item.currentIndexChanged.connect( - partial( - self.change_user_CellWidget, - data_simple[i][16], - self.user_column[j], - ) - ) - elif j == 3 and value == -1: - item = QTableWidgetItem("无限") - elif j == 5: - curdate = self.server_date() - if curdate != value: - item = QTableWidgetItem("今日未代理") - else: - item = QTableWidgetItem(f"今日已代理{data_simple[i][14]}次") - item.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) - elif j == 12: - if self.PASSWORD == "": - item = QTableWidgetItem("******") - item.setFlags( - QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled - ) - else: - result = self.crypto.decryptx(value, self.PASSWORD) - item = QTableWidgetItem(result) - if result == "管理密钥错误": - item.setFlags( - QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled - ) - else: - item = QTableWidgetItem(str(value)) + # self.if_silence.setChecked( + # bool(self.config.content["Default"]["SelfSet.IfSilence"] == "True") + # ) - # 组件录入表格 - if j in [2, 4, 10, 11]: - if not self.if_user_list_editable: - item.setEnabled(False) - self.user_list_simple.setCellWidget( - data_simple[i][16], self.userlist_simple_index[j], item - ) - else: - self.user_list_simple.setItem( - data_simple[i][16], self.userlist_simple_index[j], item - ) + # self.boss_key.setVisible( + # bool(self.config.content["Default"]["SelfSet.IfSilence"] == "True") + # ) - # 同步高级用户配置列表 - data_beta = [_ for _ in data if _[15] == "beta"] - self.user_list_beta.setRowCount(len(data_beta)) + # self.if_to_tray.setChecked( + # bool(self.config.content["Default"]["SelfSet.IfToTray"] == "True") + # ) - for i, row in enumerate(data_beta): - - for j, value in enumerate(row): - - if self.userlist_beta_index[j] == "-": - continue - - # 生成表格组件 - if j in [4, 9, 10]: - item = ComboBox() - if j == 4: - item.addItems(["启用", "禁用"]) - elif j in [9, 10]: - item.addItems(["启用", "禁用", "修改MAA配置"]) - if value == "y": - item.setCurrentIndex(0) - elif value == "n": - item.setCurrentIndex(1) - item.currentIndexChanged.connect( - partial( - self.change_user_CellWidget, - data_beta[i][16], - self.user_column[j], - ) - ) - elif j == 3 and value == -1: - item = QTableWidgetItem("无限") - elif j == 5: - curdate = self.server_date() - if curdate != value: - item = QTableWidgetItem("今日未代理") - else: - item = QTableWidgetItem(f"今日已代理{data_beta[i][14]}次") - item.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) - elif j == 12: - if self.PASSWORD == "": - item = QTableWidgetItem("******") - item.setFlags( - QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled - ) - else: - result = self.crypto.decryptx(value, self.PASSWORD) - item = QTableWidgetItem(result) - if result == "管理密钥错误": - item.setFlags( - QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled - ) - else: - item = QTableWidgetItem(str(value)) - - # 组件录入表格 - if j in [4, 9, 10]: - if not self.if_user_list_editable: - item.setEnabled(False) - self.user_list_beta.setCellWidget( - data_beta[i][16], self.userlist_beta_index[j], item - ) - else: - self.user_list_beta.setItem( - data_beta[i][16], self.userlist_beta_index[j], item - ) - - # 设置列表可编辑状态 - if self.if_user_list_editable: - self.user_list_simple.setEditTriggers(TableWidget.AllEditTriggers) - self.user_list_beta.setEditTriggers(TableWidget.AllEditTriggers) - else: - self.user_list_simple.setEditTriggers(TableWidget.NoEditTriggers) - self.user_list_beta.setEditTriggers(TableWidget.NoEditTriggers) - - # 允许GUI改变被同步到本地数据库 - self.if_update_database = True - - # 设置用户配置列表的标题栏宽度 - self.user_list_simple.horizontalHeader().setSectionResizeMode( - QHeaderView.Stretch - ) - self.user_list_beta.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) - - def update_config(self): - """将self.config中的程序配置同步至GUI界面""" - - # 阻止GUI程序配置被立即读入程序形成死循环 - self.if_update_config = False - - self.main_tab.setCurrentIndex( - self.config.content["Default"]["SelfSet.MainIndex"] - ) - - self.maa_path.setText(str(Path(self.config.content["Default"]["MaaSet.path"]))) - self.routine.setValue(self.config.content["Default"]["TimeLimit.routine"]) - self.annihilation.setValue( - self.config.content["Default"]["TimeLimit.annihilation"] - ) - self.num.setValue(self.config.content["Default"]["TimesLimit.run"]) - self.mail_address.setText(self.config.content["Default"]["SelfSet.MailAddress"]) - self.boss_key.setText(self.config.content["Default"]["SelfSet.BossKey"]) - - self.if_self_start.setChecked( - bool(self.config.content["Default"]["SelfSet.IfSelfStart"] == "True") - ) - - self.if_sleep.setChecked( - bool(self.config.content["Default"]["SelfSet.IfSleep"] == "True") - ) - - self.if_proxy_directly.setChecked( - bool(self.config.content["Default"]["SelfSet.IfProxyDirectly"] == "True") - ) - - self.if_send_mail.setChecked( - bool(self.config.content["Default"]["SelfSet.IfSendMail"] == "True") - ) - - self.mail_address.setVisible( - bool(self.config.content["Default"]["SelfSet.IfSendMail"] == "True") - ) - - self.if_send_error_only.setChecked( - bool( - self.config.content["Default"]["SelfSet.IfSendMail.OnlyError"] == "True" - ) - ) - - self.if_send_error_only.setVisible( - bool(self.config.content["Default"]["SelfSet.IfSendMail"] == "True") - ) - - self.if_silence.setChecked( - bool(self.config.content["Default"]["SelfSet.IfSilence"] == "True") - ) - - self.boss_key.setVisible( - bool(self.config.content["Default"]["SelfSet.IfSilence"] == "True") - ) - - self.if_to_tray.setChecked( - bool(self.config.content["Default"]["SelfSet.IfToTray"] == "True") - ) - - for i in range(10): - self.start_time[i][0].setChecked( - bool(self.config.content["Default"][f"TimeSet.set{i + 1}"] == "True") - ) - time = QtCore.QTime( - int(self.config.content["Default"][f"TimeSet.run{i + 1}"][:2]), - int(self.config.content["Default"][f"TimeSet.run{i + 1}"][3:]), - ) - self.start_time[i][1].setTime(time) - self.if_update_config = True + # for i in range(10): + # self.start_time[i][0].setChecked( + # bool(self.config.content["Default"][f"TimeSet.set{i + 1}"] == "True") + # ) + # time = QtCore.QTime( + # int(self.config.content["Default"][f"TimeSet.run{i + 1}"][:2]), + # int(self.config.content["Default"][f"TimeSet.run{i + 1}"][3:]), + # ) + # self.start_time[i][1].setTime(time) + # self.if_update_config = True def update_board(self, run_text, wait_text, over_text, error_text, log_text): """写入数据至GUI执行界面的调度台面板""" @@ -548,372 +287,6 @@ class Main(QWidget): self.log_text.verticalScrollBar().maximum() ) - def add_user(self): - """添加一位新用户""" - - # 判断是否已设置管理密钥 - if not self.config.key_path.exists(): - choice = MessageBox( - "错误", - "请先设置管理密钥再执行添加用户操作", - self.ui, - ) - choice.cancelButton.hide() - choice.buttonLayout.insertStretch(1) - if choice.exec(): - return None - - # 插入预设用户数据 - set_book = [ - ["simple", self.user_list_simple.rowCount()], - ["beta", self.user_list_beta.rowCount()], - ] - self.config.cur.execute( - "INSERT INTO adminx VALUES('新用户','手机号码(官服)/B站ID(B服)','Official',-1,'y','2000-01-01','1-7','-','-','n','n','n',?,'无',0,?,?)", - ( - self.crypto.encryptx("未设置"), - set_book[self.user_set.currentIndex()][0], - set_book[self.user_set.currentIndex()][1], - ), - ) - self.config.db.commit(), - - # 同步新用户至GUI - self.update_user_info("normal") - - def del_user(self): - """删除选中的首位用户""" - - # 获取对应的行索引 - if self.user_set.currentIndex() == 0: - row = self.user_list_simple.currentRow() - elif self.user_set.currentIndex() == 1: - row = self.user_list_beta.currentRow() - - # 判断选择合理性 - if row == -1: - choice = MessageBox("错误", "请选中一个用户后再执行删除操作", self.ui) - choice.cancelButton.hide() - choice.buttonLayout.insertStretch(1) - if choice.exec(): - return None - - # 确认待删除用户信息 - self.config.cur.execute( - "SELECT * FROM adminx WHERE mode = ? AND uid = ?", - ( - self.user_mode_list[self.user_set.currentIndex()], - row, - ), - ) - data = self.config.cur.fetchall() - choice = MessageBox("确认", f"确定要删除用户 {data[0][0]} 吗?", self.ui) - - # 删除用户 - if choice.exec(): - # 删除所选用户 - self.config.cur.execute( - "DELETE FROM adminx WHERE mode = ? AND uid = ?", - ( - self.user_mode_list[self.user_set.currentIndex()], - row, - ), - ) - self.config.db.commit() - if ( - self.config.app_path - / f"data/MAAconfig/{self.user_mode_list[self.user_set.currentIndex()]}/{row}" - ).exists(): - shutil.rmtree( - self.config.app_path - / f"data/MAAconfig/{self.user_mode_list[self.user_set.currentIndex()]}/{row}" - ) - # 后续用户补位 - if self.user_set.currentIndex() == 0: - current_numb = self.user_list_simple.rowCount() - elif self.user_set.currentIndex() == 1: - current_numb = self.user_list_beta.rowCount() - for i in range(row + 1, current_numb): - self.config.cur.execute( - "UPDATE adminx SET uid = ? WHERE mode = ? AND uid = ?", - (i - 1, self.user_mode_list[self.user_set.currentIndex()], i), - ) - self.config.db.commit() - if ( - self.config.app_path - / f"data/MAAconfig/{self.user_mode_list[self.user_set.currentIndex()]}/{i}" - ).exists(): - ( - self.config.app_path - / f"data/MAAconfig/{self.user_mode_list[self.user_set.currentIndex()]}/{i}" - ).rename( - self.config.app_path - / f"data/MAAconfig/{self.user_mode_list[self.user_set.currentIndex()]}/{i - 1}", - ) - - # 同步最终结果至GUI - self.update_user_info("normal") - - def switch_user(self): - """切换用户配置模式""" - - # 获取当前用户配置模式信息 - if self.user_set.currentIndex() == 0: - row = self.user_list_simple.currentRow() - elif self.user_set.currentIndex() == 1: - row = self.user_list_beta.currentRow() - - # 判断选择合理性 - if row == -1: - choice = MessageBox("错误", "请选中一个用户后再执行切换操作", self.ui) - choice.cancelButton.hide() - choice.buttonLayout.insertStretch(1) - if choice.exec(): - return None - - # 确认待切换用户信息 - self.config.cur.execute( - "SELECT * FROM adminx WHERE mode = ? AND uid = ?", - ( - self.user_mode_list[self.user_set.currentIndex()], - row, - ), - ) - data = self.config.cur.fetchall() - - mode_list = ["简洁", "高级"] - choice = MessageBox( - "确认", - f"确定要将用户 {data[0][0]} 转为{mode_list[1 - self.user_set.currentIndex()]}配置模式吗?", - self.ui, - ) - - # 切换用户 - if choice.exec(): - self.config.cur.execute("SELECT * FROM adminx WHERE True") - data = self.config.cur.fetchall() - if self.user_set.currentIndex() == 0: - current_numb = self.user_list_simple.rowCount() - elif self.user_set.currentIndex() == 1: - current_numb = self.user_list_beta.rowCount() - # 切换所选用户 - other_numb = len(data) - current_numb - self.config.cur.execute( - "UPDATE adminx SET mode = ?, uid = ? WHERE mode = ? AND uid = ?", - ( - self.user_mode_list[1 - self.user_set.currentIndex()], - other_numb, - self.user_mode_list[self.user_set.currentIndex()], - row, - ), - ) - self.config.db.commit() - if ( - self.config.app_path - / f"data/MAAconfig/{self.user_mode_list[self.user_set.currentIndex()]}/{row}" - ).exists(): - shutil.move( - self.config.app_path - / f"data/MAAconfig/{self.user_mode_list[self.user_set.currentIndex()]}/{row}", - self.config.app_path - / f"data/MAAconfig/{self.user_mode_list[1 - self.user_set.currentIndex()]}/{other_numb}", - ) - # 后续用户补位 - for i in range(row + 1, current_numb): - self.config.cur.execute( - "UPDATE adminx SET uid = ? WHERE mode = ? AND uid = ?", - (i - 1, self.user_mode_list[self.user_set.currentIndex()], i), - ) - self.config.db.commit(), - if ( - self.config.app_path - / f"data/MAAconfig/{self.user_mode_list[self.user_set.currentIndex()]}/{i}" - ).exists(): - ( - self.config.app_path - / f"data/MAAconfig/{self.user_mode_list[self.user_set.currentIndex()]}/{i}" - ).rename( - self.config.app_path - / f"data/MAAconfig/{self.user_mode_list[self.user_set.currentIndex()]}/{i - 1}" - ) - - self.update_user_info("normal") - - def get_maa_config(self, info): - """获取MAA配置文件""" - - # 获取全局MAA配置文件 - if info == ["Default"]: - shutil.copy( - Path(self.config.content["Default"]["MaaSet.path"]) / "config/gui.json", - self.config.app_path / "data/MAAconfig/Default", - ) - # 获取基建配置文件 - elif info[2] == "infrastructure": - infrastructure_path = self.read("file_path_infrastructure") - if infrastructure_path: - ( - self.config.app_path - / f"data/MAAconfig/{self.user_mode_list[info[0]]}/{info[1]}/infrastructure" - ).mkdir(parents=True, exist_ok=True) - shutil.copy( - infrastructure_path, - self.config.app_path - / f"data/MAAconfig/{self.user_mode_list[info[0]]}/{info[1]}/infrastructure/infrastructure.json", - ) - return True - else: - choice = MessageBox( - "错误", - "未选择自定义基建文件", - self.ui, - ) - choice.cancelButton.hide() - choice.buttonLayout.insertStretch(1) - if choice.exec(): - return False - # 获取高级用户MAA配置文件 - elif info[2] in ["routine", "annihilation"]: - ( - self.config.app_path - / f"data/MAAconfig/{self.user_mode_list[info[0]]}/{info[1]}/{info[2]}" - ).mkdir(parents=True, exist_ok=True) - shutil.copy( - Path(self.config.content["Default"]["MaaSet.path"]) / "config/gui.json", - self.config.app_path - / f"data/MAAconfig/{self.user_mode_list[info[0]]}/{info[1]}/{info[2]}", - ) - - def change_user_Item(self, item: TableWidget, mode): - """将GUI中发生修改的用户配置表中的一般信息同步至本地数据库""" - - # 验证能否写入本地数据库 - if not self.if_update_database: - return None - - text = item.text() - # 简洁用户配置列表 - if mode == "simple": - # 待写入信息预处理 - if item.column() == 3: # 代理天数 - try: - text = max(int(text), -1) - except ValueError: - self.update_user_info("normal") - return None - if item.column() in [6, 7, 8]: # 关卡号 - # 导入与应用特殊关卡规则 - games = {} - with self.config.gameid_path.open(mode="r", encoding="utf-8") as f: - gameids = f.readlines() - for line in gameids: - if ":" in line: - game_in, game_out = line.split(":", 1) - games[game_in.strip()] = game_out.strip() - text = games.get(text, text) - if item.column() == 11: # 密码 - text = self.crypto.encryptx(text) - - # 保存至本地数据库 - if text != "": - self.config.cur.execute( - f"UPDATE adminx SET {self.user_column[self.userlist_simple_index.index(item.column())]} = ? WHERE mode = 'simple' AND uid = ?", - (text, item.row()), - ) - # 高级用户配置列表 - elif mode == "beta": - # 待写入信息预处理 - if item.column() == 1: # 代理天数 - try: - text = max(int(text), -1) - except ValueError: - self.update_user_info("normal") - return None - if item.column() == 6: # 密码 - text = self.crypto.encryptx(text) - - # 保存至本地数据库 - if text != "": - self.config.cur.execute( - f"UPDATE adminx SET {self.user_column[self.userlist_beta_index.index(item.column())]} = ? WHERE mode = 'beta' AND uid = ?", - (text, item.row()), - ) - self.config.db.commit() - - # 同步一般用户信息更改到GUI - self.update_user_info("normal") - - def change_user_CellWidget(self, row, column, index): - """将GUI中发生修改的用户配置表中的CellWidget类信息同步至本地数据库""" - - # 验证能否写入本地数据库 - if not self.if_update_database: - return None - - # 初次开启自定义基建或选择修改配置文件时选择配置文件 - if ( - self.user_set.currentIndex() == 0 - and column == "infrastructure" - and ( - index == 2 - or ( - index == 0 - and not ( - self.config.app_path - / f"data/MAAconfig/{self.user_mode_list[self.user_set.currentIndex()]}/{row}/infrastructure/infrastructure.json" - ).exists() - ) - ) - ): - result = self.get_maa_config([0, row, "infrastructure"]) - if index == 0 and not result: - index = 1 - - # 初次开启自定义MAA配置或选择修改MAA配置时调起MAA配置任务 - if ( - self.user_set.currentIndex() == 1 - and column in ["routine", "annihilation"] - and ( - index == 2 - or ( - index == 0 - and not ( - self.config.app_path - / f"data/MAAconfig/{self.user_mode_list[self.user_set.currentIndex()]}/{row}/{column}/gui.json" - ).exists() - ) - ) - ): - self.MaaManager.get_json_path = [ - self.user_set.currentIndex(), - row, - column, - ] - self.maa_starter("设置MAA_用户") - - # 服务器 - if self.user_set.currentIndex() == 0 and column == "server": - server_list = ["Official", "Bilibili"] - self.config.cur.execute( - f"UPDATE adminx SET server = ? WHERE mode = 'simple' AND uid = ?", - (server_list[index], row), - ) - # 其它(启用/禁用) - elif index in [0, 1]: - index_list = ["y", "n"] - self.config.cur.execute( - f"UPDATE adminx SET {column} = ? WHERE mode = ? AND uid = ?", - ( - index_list[index], - self.user_mode_list[self.user_set.currentIndex()], - row, - ), - ) - self.config.db.commit() - - # 同步用户组件信息修改到GUI - self.update_user_info("normal") - def change_user_info(self, modes, uids, days, lasts, notes, numbs): """将代理完成后发生改动的用户信息同步至本地数据库""" @@ -978,9 +351,9 @@ class Main(QWidget): self.config.content["Default"]["SelfSet.BossKey"] = self.boss_key.text() if self.if_sleep.isChecked(): - self.config.content["Default"]["SelfSet.IfSleep"] = "True" + self.config.content["Default"]["SelfSet.IfAllowSleep"] = "True" else: - self.config.content["Default"]["SelfSet.IfSleep"] = "False" + self.config.content["Default"]["SelfSet.IfAllowSleep"] = "False" if self.if_self_start.isChecked(): self.config.content["Default"]["SelfSet.IfSelfStart"] = "True" @@ -1026,6 +399,32 @@ class Main(QWidget): # 同步程序配置至GUI self.update_config() + + def get_maa_config(self, info): + """获取MAA配置文件""" + + # 获取全局MAA配置文件 + if info == ["Default"]: + shutil.copy( + Path(self.config.content["Default"]["MaaSet.path"]) + / "config/gui.json", + self.config.app_path / "data/MAAconfig/Default", + ) + # 获取基建配置文件 + + # 获取高级用户MAA配置文件 + elif info[2] in ["routine", "annihilation"]: + ( + self.config.app_path + / f"data/MAAconfig/{self.user_mode_list[info[0]]}/{info[1]}/{info[2]}" + ).mkdir(parents=True, exist_ok=True) + shutil.copy( + Path(self.config.content["Default"]["MaaSet.path"]) + / "config/gui.json", + self.config.app_path + / f"data/MAAconfig/{self.user_mode_list[info[0]]}/{info[1]}/{info[2]}", + ) + def set_theme(self): """手动更新主题色到组件""" @@ -1122,65 +521,6 @@ class Main(QWidget): ) return file_path - def set_system(self): - """设置系统相关配置""" - - # 同步系统休眠状态 - if self.config.content["Default"]["SelfSet.IfSleep"] == "True": - # 设置系统电源状态 - ctypes.windll.kernel32.SetThreadExecutionState( - self.ES_CONTINUOUS | self.ES_SYSTEM_REQUIRED - ) - elif self.config.content["Default"]["SelfSet.IfSleep"] == "False": - # 恢复系统电源状态 - ctypes.windll.kernel32.SetThreadExecutionState(self.ES_CONTINUOUS) - - # 同步开机自启 - if ( - self.config.content["Default"]["SelfSet.IfSelfStart"] == "True" - and not self.is_startup() - ): - key = winreg.OpenKey( - winreg.HKEY_CURRENT_USER, - r"Software\Microsoft\Windows\CurrentVersion\Run", - winreg.KEY_SET_VALUE, - winreg.KEY_ALL_ACCESS | winreg.KEY_WRITE | winreg.KEY_CREATE_SUB_KEY, - ) - winreg.SetValueEx( - key, self.config.app_name, 0, winreg.REG_SZ, self.config.app_path_sys - ) - winreg.CloseKey(key) - elif ( - self.config.content["Default"]["SelfSet.IfSelfStart"] == "False" - and self.is_startup() - ): - key = winreg.OpenKey( - winreg.HKEY_CURRENT_USER, - r"Software\Microsoft\Windows\CurrentVersion\Run", - winreg.KEY_SET_VALUE, - winreg.KEY_ALL_ACCESS | winreg.KEY_WRITE | winreg.KEY_CREATE_SUB_KEY, - ) - winreg.DeleteValue(key, self.config.app_name) - winreg.CloseKey(key) - - def is_startup(self): - """判断程序是否已经开机自启""" - - key = winreg.OpenKey( - winreg.HKEY_CURRENT_USER, - r"Software\Microsoft\Windows\CurrentVersion\Run", - 0, - winreg.KEY_READ, - ) - - try: - value, _ = winreg.QueryValueEx(key, self.config.app_name) - winreg.CloseKey(key) - return True - except FileNotFoundError: - winreg.CloseKey(key) - return False - def timed_start(self): """定时启动代理任务""" @@ -1228,20 +568,6 @@ class Main(QWidget): # 执行日志记录,暂时缺省 pass - def get_window_info(self): - """获取当前窗口信息""" - - def callback(hwnd, window_info): - if win32gui.IsWindowVisible(hwnd) and win32gui.GetWindowText(hwnd): - _, pid = win32process.GetWindowThreadProcessId(hwnd) - process = psutil.Process(pid) - window_info.append((win32gui.GetWindowText(hwnd), process.exe())) - return True - - window_info = [] - win32gui.EnumWindows(callback, window_info) - return window_info - def maa_starter(self, mode): """启动MaaManager线程运行任务""" diff --git a/app/ui/main_window.py b/app/ui/main_window.py index 7dd66f3..45090f0 100644 --- a/app/ui/main_window.py +++ b/app/ui/main_window.py @@ -33,7 +33,6 @@ from PySide6.QtWidgets import ( QFileDialog, # QTabWidget, # QToolBox, # - QComboBox, # QTableWidgetItem, # QHeaderView, # QVBoxLayout, @@ -55,11 +54,14 @@ from qfluentwidgets import ( RoundMenu, MessageBox, MessageBoxBase, - HeaderCardWidget, + InfoBar, + InfoBarPosition, BodyLabel, Dialog, - SingleDirectionScrollArea, - SubtitleLabel, + setTheme, + Theme, + SystemThemeListener, + qconfig, MSFluentWindow, NavigationItemPosition, ) @@ -85,36 +87,46 @@ import requests uiLoader = QUiLoader() from app import AppConfig, MaaConfig -from app.services import Notification, CryptoHandler +from app.services import Notification, CryptoHandler, SystemHandler from app.utils import Updater, version_text from .Widget import InputMessageBox, LineEditSettingCard, SpinBoxSettingCard from .setting import Setting from .member_manager import MemberManager +from .queue_manager import QueueManager class AUTO_MAA(MSFluentWindow): if_save = True - def __init__(self, config: AppConfig, notify: Notification, crypto: CryptoHandler): - super(AUTO_MAA, self).__init__() + def __init__( + self, + config: AppConfig, + notify: Notification, + crypto: CryptoHandler, + system: SystemHandler, + ): + super().__init__() self.config = config self.notify = notify - - self.config.open_database() + self.crypto = crypto + self.system = system self.setWindowIcon( QIcon(str(self.config.app_path / "resources/icons/AUTO_MAA.ico")) ) self.setWindowTitle("AUTO_MAA") + setTheme(Theme.AUTO) + self.splashScreen = SplashScreen(self.windowIcon(), self) self.show() # 创建主窗口 - self.setting = Setting(config=config, notify=notify, crypto=crypto) - self.member_manager = MemberManager(config=config, notify=notify, crypto=crypto) + self.setting = Setting(self.config, self.notify, self.crypto, self.system, self) + self.member_manager = MemberManager(self.config, self.notify, self.crypto, self) + self.queue_manager = QueueManager(self.config, self.notify, self) self.addSubInterface( self.setting, @@ -130,6 +142,13 @@ class AUTO_MAA(MSFluentWindow): FluentIcon.ROBOT, NavigationItemPosition.TOP, ) + self.addSubInterface( + self.queue_manager, + FluentIcon.BOOK_SHELF, + "调度队列", + FluentIcon.BOOK_SHELF, + NavigationItemPosition.TOP, + ) # 创建系统托盘及其菜单 self.tray = QSystemTrayIcon( @@ -137,7 +156,7 @@ class AUTO_MAA(MSFluentWindow): self, ) self.tray.setToolTip("AUTO_MAA") - self.tray_menu = SystemTrayMenu() + self.tray_menu = SystemTrayMenu("AUTO_MAA", self) # 显示主界面菜单项 self.tray_menu.addAction( @@ -171,10 +190,43 @@ class AUTO_MAA(MSFluentWindow): # 设置托盘菜单 self.tray.setContextMenu(self.tray_menu) self.tray.activated.connect(self.on_tray_activated) + self.setting.ui.card_IfShowTray.checkedChanged.connect( + lambda x: self.tray.show() if x else self.tray.hide() + ) self.splashScreen.finish() self.show_main() + if self.config.global_config.get(self.config.global_config.update_IfAutoUpdate): + result = self.setting.check_update() + if result == "已是最新版本~": + InfoBar.success( + title="更新检查", + content=result, + orient=QtCore.Qt.Horizontal, + isClosable=True, + position=InfoBarPosition.TOP_RIGHT, + duration=3000, + parent=self, + ) + else: + info = InfoBar.info( + title="更新检查", + content=result, + orient=QtCore.Qt.Horizontal, + isClosable=True, + position=InfoBarPosition.BOTTOM_LEFT, + duration=-1, + parent=self, + ) + Up = PushButton("更新") + Up.clicked.connect( + lambda: self.setting.check_version(if_question=False) + ) + Up.clicked.connect(info.close) + info.addWidget(Up) + info.show() + def show_tray(self): """最小化到托盘""" if self.if_save: @@ -185,7 +237,10 @@ class AUTO_MAA(MSFluentWindow): def show_main(self): """显示主界面""" self.set_ui("配置") - self.tray.hide() + if self.config.global_config.get(self.config.global_config.ui_IfShowTray): + self.tray.show() + else: + self.tray.hide() def on_tray_activated(self, reason): """双击返回主界面""" diff --git a/app/ui/member_manager.py b/app/ui/member_manager.py index a3e78a9..4c8c9ad 100644 --- a/app/ui/member_manager.py +++ b/app/ui/member_manager.py @@ -20,7 +20,7 @@ """ AUTO_MAA -AUTO_MAA设置界面 +AUTO_MAA脚本管理界面 v4.2 作者:DLmaster_361 """ @@ -61,8 +61,8 @@ from qfluentwidgets import ( HeaderCardWidget, BodyLabel, CommandBar, - SubtitleLabel, - GroupHeaderCardWidget, + setTheme, + Theme, SwitchSettingCard, ExpandGroupSettingCard, SingleDirectionScrollArea, @@ -92,13 +92,24 @@ uiLoader = QUiLoader() from app import AppConfig, MaaConfig from app.services import Notification, CryptoHandler from app.utils import Updater, version_text -from .Widget import InputMessageBox, LineEditSettingCard, SpinBoxSettingCard +from .Widget import ( + InputMessageBox, + LineEditSettingCard, + SpinBoxSettingCard, + SetMessageBox, +) class MemberManager(QWidget): - def __init__(self, config: AppConfig, notify: Notification, crypto: CryptoHandler): - super(MemberManager, self).__init__() + def __init__( + self, + config: AppConfig, + notify: Notification, + crypto: CryptoHandler, + parent=None, + ): + super().__init__(parent) self.setObjectName("脚本管理") @@ -106,11 +117,13 @@ class MemberManager(QWidget): self.notify = notify self.crypto = crypto + setTheme(Theme.AUTO) + layout = QVBoxLayout(self) self.tools = CommandBar() - self.member_manager = MemberSettingBox(self.config) + self.member_manager = MemberSettingBox(self.config, self.crypto, self) # 逐个添加动作 self.tools.addActions( @@ -132,21 +145,19 @@ class MemberManager(QWidget): FluentIcon.LEFT_ARROW, "向左移动", triggered=self.left_setting_box ), Action( - FluentIcon.RIGHT_ARROW, - "向右移动", - triggered=self.right_setting_box, + FluentIcon.RIGHT_ARROW, "向右移动", triggered=self.right_setting_box ), ] ) - - # 批量添加动作 + self.tools.addSeparator() + self.key = Action( + FluentIcon.HIDE, + "显示/隐藏密码", + checkable=True, + triggered=self.show_password, + ) self.tools.addAction( - Action( - FluentIcon.HIDE, - "显示/隐藏密码", - checkable=True, - triggered=self.show_password, - ), + self.key, ) layout.addWidget(self.tools) @@ -156,7 +167,11 @@ class MemberManager(QWidget): """添加一个脚本实例""" choice = InputMessageBox( - self, "选择一个脚本类型并添加相应脚本实例", "选择脚本类型", "选择", ["MAA"] + self, + "选择一个脚本类型并添加相应脚本实例", + "选择脚本类型", + "选择", + ["MAA"], ) if choice.exec() and choice.input.currentIndex() != -1: @@ -185,6 +200,8 @@ class MemberManager(QWidget): self.config.maa_config.set(self.config.maa_config.MaaSet_Name, "") self.config.maa_config.save() + self.config.open_database("Maa", f"脚本_{index}") + self.config.init_database("Maa") self.member_manager.add_MaaSettingBox(index) self.member_manager.switch_SettingBox(index) @@ -209,6 +226,8 @@ class MemberManager(QWidget): type = [_[1] for _ in member_list if _[0] == name] index = max(int(name[3:]) - 1, 1) + self.member_manager.clear_SettingBox() + shutil.rmtree(self.config.app_path / f"config/{type[0]}Config/{name}") for member in move_list: if ( @@ -221,9 +240,7 @@ class MemberManager(QWidget): / f"config/{member[1]}Config/{member[0][:3]}{int(member[0][3:])-1}", ) - self.member_manager.clear_SettingBox() - self.member_manager.show_SettingBox() - self.member_manager.switch_SettingBox(index, if_after_clear=True) + self.member_manager.show_SettingBox(index) def left_setting_box(self): """向左移动脚本实例""" @@ -242,22 +259,23 @@ class MemberManager(QWidget): type_right = [_[1] for _ in member_list if _[0] == name] type_left = [_[1] for _ in member_list if _[0] == f"脚本_{index-1}"] + self.member_manager.clear_SettingBox() + (self.config.app_path / f"config/{type_right[0]}Config/脚本_{index}").rename( self.config.app_path / f"config/{type_right[0]}Config/脚本_0", ) - (self.config.app_path / f"config/{type_left[0]}Config/脚本_{index-1}").rename( - self.config.app_path / f"config/{type_left[0]}Config/脚本_{index}", + shutil.move( + str(self.config.app_path / f"config/{type_left[0]}Config/脚本_{index-1}"), + str(self.config.app_path / f"config/{type_left[0]}Config/脚本_{index}"), ) (self.config.app_path / f"config/{type_right[0]}Config/脚本_0").rename( self.config.app_path / f"config/{type_right[0]}Config/脚本_{index-1}", ) - self.member_manager.clear_SettingBox() - self.member_manager.show_SettingBox() - self.member_manager.switch_SettingBox(index - 1, if_after_clear=True) + self.member_manager.show_SettingBox(index - 1) def right_setting_box(self): - """向左移动脚本实例""" + """向右移动脚本实例""" name = self.member_manager.pivot.currentRouteKey() @@ -273,6 +291,8 @@ class MemberManager(QWidget): type_left = [_[1] for _ in member_list if _[0] == name] type_right = [_[1] for _ in member_list if _[0] == f"脚本_{index+1}"] + self.member_manager.clear_SettingBox() + (self.config.app_path / f"config/{type_left[0]}Config/脚本_{index}").rename( self.config.app_path / f"config/{type_left[0]}Config/脚本_0", ) @@ -283,58 +303,78 @@ class MemberManager(QWidget): self.config.app_path / f"config/{type_left[0]}Config/脚本_{index+1}", ) - self.member_manager.clear_SettingBox() - self.member_manager.show_SettingBox() - self.member_manager.switch_SettingBox(index + 1, if_after_clear=True) + self.member_manager.show_SettingBox(index + 1) def show_password(self): - pass + if self.config.PASSWORD == "": + choice = InputMessageBox( + self, + "请输入管理密钥", + "管理密钥", + "密码", + ) + if choice.exec() and choice.input.text() != "": + self.config.PASSWORD = choice.input.text() + self.member_manager.script_list[ + int(self.member_manager.pivot.currentRouteKey()[3:]) - 1 + ].user_setting.user_list.update_user_info("normal") + self.key.setIcon(FluentIcon.VIEW) + self.key.setChecked(True) + else: + self.config.PASSWORD = "" + self.member_manager.script_list[ + int(self.member_manager.pivot.currentRouteKey()[3:]) - 1 + ].user_setting.user_list.update_user_info("normal") + self.key.setIcon(FluentIcon.HIDE) + self.key.setChecked(False) + else: + self.config.PASSWORD = "" + self.member_manager.script_list[ + int(self.member_manager.pivot.currentRouteKey()[3:]) - 1 + ].user_setting.user_list.update_user_info("normal") + self.key.setIcon(FluentIcon.HIDE) + self.key.setChecked(False) class MemberSettingBox(QWidget): - def __init__(self, config: AppConfig): - super().__init__() + def __init__(self, config: AppConfig, crypto: CryptoHandler, parent=None): + super().__init__(parent) self.setObjectName("脚本管理") self.config = config + self.crypto = crypto self.pivot = Pivot(self) self.stackedWidget = QStackedWidget(self) self.Layout = QVBoxLayout(self) - self.SubInterface: List[MaaSettingBox] = [] + self.script_list: List[MaaSettingBox] = [] self.Layout.addWidget(self.pivot, 0, QtCore.Qt.AlignHCenter) self.Layout.addWidget(self.stackedWidget) self.Layout.setContentsMargins(0, 0, 0, 0) self.pivot.currentItemChanged.connect( - lambda index: self.stackedWidget.setCurrentWidget( - self.findChild(QWidget, index) - ) - ) - self.pivot.currentItemChanged.connect( - lambda index: qconfig.load( - self.config.app_path / f"config/MaaConfig/{index}/config.json", - self.config.maa_config, - ) + lambda index: self.switch_SettingBox(int(index[3:]), if_chang_pivot=False) ) - self.show_SettingBox() - self.switch_SettingBox(1) + self.show_SettingBox(1) - def show_SettingBox(self) -> None: + def show_SettingBox(self, index) -> None: """加载所有子界面""" member_list = self.search_member() for member in member_list: if member[1] == "Maa": + self.config.open_database(member[1], member[0]) self.add_MaaSettingBox(int(member[0][3:])) - def switch_SettingBox(self, index: int, if_after_clear: bool = False) -> None: + self.switch_SettingBox(index) + + def switch_SettingBox(self, index: int, if_chang_pivot: bool = True) -> None: """切换到指定的子界面""" member_list = self.search_member() @@ -344,47 +384,36 @@ class MemberSettingBox(QWidget): type = [_[1] for _ in member_list if _[0] == f"脚本_{index}"] - if if_after_clear: - self.pivot.currentItemChanged.disconnect() - - self.stackedWidget.setCurrentWidget(self.SubInterface[index - 1]) - self.pivot.setCurrentItem(self.SubInterface[index - 1].objectName()) qconfig.load( self.config.app_path - / f"config/{type[0]}Config/{self.SubInterface[index-1].objectName()}/config.json", + / f"config/{type[0]}Config/{self.script_list[index-1].objectName()}/config.json", self.config.maa_config, ) + self.config.open_database(type[0], self.script_list[index - 1].objectName()) + self.script_list[index - 1].user_setting.user_list.update_user_info("normal") - if if_after_clear: - self.pivot.currentItemChanged.connect( - lambda index: self.stackedWidget.setCurrentWidget( - self.findChild(QWidget, index) - ) - ) - self.pivot.currentItemChanged.connect( - lambda index: qconfig.load( - self.config.app_path / f"config/MaaConfig/{index}/config.json", - self.config.maa_config, - ) - ) + if if_chang_pivot: + self.pivot.setCurrentItem(self.script_list[index - 1].objectName()) + self.stackedWidget.setCurrentWidget(self.script_list[index - 1]) def clear_SettingBox(self) -> None: """清空所有子界面""" - for sub_interface in self.SubInterface: + for sub_interface in self.script_list: self.stackedWidget.removeWidget(sub_interface) sub_interface.deleteLater() - self.SubInterface.clear() + self.script_list.clear() self.pivot.clear() + self.config.close_database() def add_MaaSettingBox(self, uid: int) -> None: """添加一个MAA设置界面""" - maa_setting_box = MaaSettingBox(self.config, uid) + maa_setting_box = MaaSettingBox(self.config, self.crypto, uid, self) - self.SubInterface.append(maa_setting_box) + self.script_list.append(maa_setting_box) - self.stackedWidget.addWidget(self.SubInterface[-1]) + self.stackedWidget.addWidget(self.script_list[-1]) self.pivot.addItem(routeKey=f"脚本_{uid}", text=f"脚本 {uid}") @@ -403,12 +432,13 @@ class MemberSettingBox(QWidget): class MaaSettingBox(QWidget): - def __init__(self, config: AppConfig, uid: int): - super().__init__() + def __init__(self, config: AppConfig, crypto: CryptoHandler, uid: int, parent=None): + super().__init__(parent) self.setObjectName(f"脚本_{uid}") self.config = config + self.crypto = crypto layout = QVBoxLayout() @@ -419,8 +449,12 @@ class MaaSettingBox(QWidget): content_layout = QVBoxLayout(content_widget) self.app_setting = self.AppSettingCard(self, self.config.maa_config) + self.user_setting = self.UserSettingCard( + self, self.objectName(), self.config, self.crypto + ) content_layout.addWidget(self.app_setting) + content_layout.addWidget(self.user_setting) content_layout.addStretch(1) scrollArea.setWidget(content_widget) @@ -497,7 +531,7 @@ class MaaSettingBox(QWidget): (1, 1024), FluentIcon.PAGE_RIGHT, "剿灭代理超时限制", - "MAA日志无变化时间超过该阈值视为超时", + "MAA日志无变化时间超过该阈值视为超时,单位为分钟", self.maa_config.RunSet_AnnihilationTimeLimit, ) @@ -505,7 +539,7 @@ class MaaSettingBox(QWidget): (1, 1024), FluentIcon.PAGE_RIGHT, "日常代理超时限制", - "MAA日志无变化时间超过该阈值视为超时", + "MAA日志无变化时间超过该阈值视为超时,单位为分钟", self.maa_config.RunSet_RoutineTimeLimit, ) @@ -525,3 +559,1046 @@ class MaaSettingBox(QWidget): self.viewLayout.setSpacing(0) self.addGroupWidget(widget) + + class UserSettingCard(HeaderCardWidget): + + def __init__( + self, + parent=None, + name: str = None, + config: AppConfig = None, + crypto: CryptoHandler = None, + ): + super().__init__(parent) + + self.setTitle("用户列表") + + self.config = config + self.crypto = crypto + self.name = name + + Layout = QVBoxLayout() + + self.user_list = self.UserListBox(self.name, self.config, self.crypto, self) + + self.tools = CommandBar() + self.tools.addActions( + [ + Action( + FluentIcon.ADD, "新建用户", triggered=self.user_list.add_user + ), + Action( + FluentIcon.REMOVE, "删除用户", triggered=self.user_list.del_user + ), + ] + ) + self.tools.addSeparator() + self.tools.addActions( + [ + Action(FluentIcon.UP, "向上移动", triggered=self.user_list.up_user), + Action( + FluentIcon.DOWN, "向下移动", triggered=self.user_list.down_user + ), + ] + ) + self.tools.addSeparator() + self.tools.addAction( + Action( + FluentIcon.SCROLL, "模式转换", triggered=self.user_list.switch_user + ) + ) + self.tools.addSeparator() + self.tools.addAction( + Action( + FluentIcon.DEVELOPER_TOOLS, "用户选项配置", triggered=self.set_more + ) + ) + + Layout.addWidget(self.tools) + Layout.addWidget(self.user_list) + + self.viewLayout.addLayout(Layout) + + def set_more(self): + + self.config.cur.execute("SELECT * FROM adminx WHERE True") + data = self.config.cur.fetchall() + + if self.user_list.pivot.currentRouteKey() == f"{self.name}_简洁用户列表": + + user_list = [_[0] for _ in data if _[15] == "simple"] + set_list = ["自定义基建"] + + choice = SetMessageBox( + self.parent().parent().parent().parent().parent().parent().parent(), + "用户选项配置", + ["选择要配置的用户", "选择要配置的选项"], + [user_list, set_list], + ) + if ( + choice.exec() + and choice.input[0].currentIndex() != -1 + and choice.input[1].currentIndex() != -1 + ): + + if choice.input[1].currentIndex() == 0: + file_path, _ = QFileDialog.getOpenFileName( + self, + "选择自定义基建文件", + ".", + "JSON 文件 (*.json)", + ) + if file_path != "": + ( + self.config.app_path + / f"config/MaaConfig/{self.name}/simple/{choice.input[0].currentIndex()}/infrastructure" + ).mkdir(parents=True, exist_ok=True) + shutil.copy( + file_path, + self.config.app_path + / f"config/MaaConfig/{self.name}/simple/{choice.input[0].currentIndex()}/infrastructure", + ) + else: + choice = MessageBox( + "错误", + "未选择自定义基建文件", + self.parent() + .parent() + .parent() + .parent() + .parent() + .parent() + .parent(), + ) + choice.cancelButton.hide() + choice.buttonLayout.insertStretch(1) + if choice.exec(): + pass + + class UserListBox(QWidget): + + def __init__( + self, name: str, config: AppConfig, crypto: CryptoHandler, parent=None + ): + super().__init__(parent) + self.setObjectName(f"{name}_用户列表") + self.config = config + self.crypto = crypto + + self.name = name + + self.if_user_list_editable = True + self.if_update_database = True + self.if_update_config = True + + self.user_mode_list = ["simple", "beta"] + self.user_column = [ + "admin", + "id", + "server", + "day", + "status", + "last", + "game", + "game_1", + "game_2", + "routine", + "annihilation", + "infrastructure", + "password", + "notes", + "numb", + "mode", + "uid", + ] + self.userlist_simple_index = [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + "-", + 9, + 10, + 11, + 12, + "-", + "-", + "-", + ] + self.userlist_beta_index = [ + 0, + "-", + "-", + 1, + 2, + 3, + "-", + "-", + "-", + 4, + 5, + "-", + 6, + 7, + "-", + "-", + "-", + ] + + self.pivot = Pivot(self) + self.stackedWidget = QStackedWidget(self) + self.Layout = QVBoxLayout(self) + + self.user_list_simple = TableWidget() + self.user_list_simple.setObjectName(f"{self.name}_简洁用户列表") + self.user_list_simple.setColumnCount(13) + self.user_list_simple.setBorderVisible(True) + self.user_list_simple.setBorderRadius(10) + self.user_list_simple.setWordWrap(False) + self.user_list_simple.setVerticalScrollBarPolicy( + QtCore.Qt.ScrollBarAlwaysOff + ) + self.user_list_simple.setHorizontalHeaderLabels( + [ + "用户名", + "账号ID", + "服务器", + "代理天数", + "状态", + "执行情况", + "关卡", + "备选关卡-1", + "备选关卡-2", + "剿灭", + "自定义基建", + "密码", + "备注", + ] + ) + + self.user_list_beta = TableWidget() + self.user_list_beta.setObjectName(f"{name}_高级用户列表") + self.user_list_beta.setColumnCount(8) + self.user_list_beta.setBorderVisible(True) + self.user_list_beta.setBorderRadius(10) + self.user_list_beta.setWordWrap(False) + self.user_list_beta.setVerticalScrollBarPolicy( + QtCore.Qt.ScrollBarAlwaysOff + ) + self.user_list_beta.setHorizontalHeaderLabels( + [ + "用户名", + "代理天数", + "状态", + "执行情况", + "日常", + "剿灭", + "密码", + "备注", + ] + ) + + self.user_list_simple.itemChanged.connect( + lambda item: self.change_user_Item(item, "simple") + ) + + self.stackedWidget.addWidget(self.user_list_simple) + self.pivot.addItem( + routeKey=f"{name}_简洁用户列表", text=f"简洁用户列表" + ) + self.stackedWidget.addWidget(self.user_list_beta) + self.pivot.addItem( + routeKey=f"{name}_高级用户列表", text=f"高级用户列表" + ) + + self.Layout.addWidget(self.pivot, 0, QtCore.Qt.AlignHCenter) + self.Layout.addWidget(self.stackedWidget) + self.Layout.setContentsMargins(0, 0, 0, 0) + + self.update_user_info("normal") + self.switch_SettingBox(f"{name}_简洁用户列表") + self.pivot.currentItemChanged.connect( + lambda index: self.switch_SettingBox(index) + ) + + def switch_SettingBox(self, index: str) -> None: + """切换到指定的子界面""" + + self.pivot.setCurrentItem(index) + if "简洁用户列表" in index: + self.stackedWidget.setCurrentWidget(self.user_list_simple) + elif "高级用户列表" in index: + self.stackedWidget.setCurrentWidget(self.user_list_beta) + + def update_user_info(self, operation: str) -> None: + """将本地数据库中的用户配置同步至GUI的用户管理界面""" + + # 读入本地数据库 + self.config.cur.execute("SELECT * FROM adminx WHERE True") + data = self.config.cur.fetchall() + + # 处理部分模式调整 + if operation == "read_only": + self.if_user_list_editable = False + elif operation == "editable": + self.if_user_list_editable = True + + # 阻止GUI用户数据被立即写入数据库形成死循环 + self.if_update_database = False + + # user_switch_list = ["转为高级", "转为简洁"] + # self.user_switch.setText(user_switch_list[index]) + + # 同步简洁用户配置列表 + data_simple = [_ for _ in data if _[15] == "simple"] + self.user_list_simple.setRowCount(len(data_simple)) + height = self.user_list_simple.horizontalHeader().height() + + for i, row in enumerate(data_simple): + + height += self.user_list_simple.rowHeight(i) + + for j, value in enumerate(row): + + if self.userlist_simple_index[j] == "-": + continue + + # 生成表格组件 + if j == 2: + item = ComboBox() + item.addItems(["官服", "B服"]) + if value == "Official": + item.setCurrentIndex(0) + elif value == "Bilibili": + item.setCurrentIndex(1) + item.currentIndexChanged.connect( + partial( + self.change_user_CellWidget, + data_simple[i][16], + self.user_column[j], + ) + ) + elif j in [4, 10, 11]: + item = ComboBox() + item.addItems(["启用", "禁用"]) + if value == "y": + item.setCurrentIndex(0) + elif value == "n": + item.setCurrentIndex(1) + item.currentIndexChanged.connect( + partial( + self.change_user_CellWidget, + data_simple[i][16], + self.user_column[j], + ) + ) + elif j == 3 and value == -1: + item = QTableWidgetItem("无限") + elif j == 5: + curdate = server_date() + if curdate != value: + item = QTableWidgetItem("今日未代理") + else: + item = QTableWidgetItem( + f"今日已代理{data_simple[i][14]}次" + ) + item.setFlags( + QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled + ) + elif j == 12: + if self.config.PASSWORD == "": + item = QTableWidgetItem("******") + item.setFlags( + QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled + ) + else: + result = self.crypto.decryptx( + value, self.config.PASSWORD + ) + item = QTableWidgetItem(result) + if result == "管理密钥错误": + item.setFlags( + QtCore.Qt.ItemIsSelectable + | QtCore.Qt.ItemIsEnabled + ) + else: + item = QTableWidgetItem(str(value)) + + # 组件录入表格 + if j in [2, 4, 10, 11]: + if not self.if_user_list_editable: + item.setEnabled(False) + self.user_list_simple.setCellWidget( + data_simple[i][16], self.userlist_simple_index[j], item + ) + else: + self.user_list_simple.setItem( + data_simple[i][16], self.userlist_simple_index[j], item + ) + self.user_list_simple.setFixedHeight( + height + self.user_list_simple.frameWidth() * 2 + 10 + ) + + # 同步高级用户配置列表 + data_beta = [_ for _ in data if _[15] == "beta"] + self.user_list_beta.setRowCount(len(data_beta)) + height = self.user_list_beta.horizontalHeader().height() + + for i, row in enumerate(data_beta): + + height += self.user_list_beta.rowHeight(i) + + for j, value in enumerate(row): + + if self.userlist_beta_index[j] == "-": + continue + + # 生成表格组件 + if j in [4, 9, 10]: + item = ComboBox() + item.addItems(["启用", "禁用"]) + if value == "y": + item.setCurrentIndex(0) + elif value == "n": + item.setCurrentIndex(1) + item.currentIndexChanged.connect( + partial( + self.change_user_CellWidget, + data_beta[i][16], + self.user_column[j], + ) + ) + elif j == 3 and value == -1: + item = QTableWidgetItem("无限") + elif j == 5: + curdate = server_date() + if curdate != value: + item = QTableWidgetItem("今日未代理") + else: + item = QTableWidgetItem( + f"今日已代理{data_beta[i][14]}次" + ) + item.setFlags( + QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled + ) + elif j == 12: + if self.config.PASSWORD == "": + item = QTableWidgetItem("******") + item.setFlags( + QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled + ) + else: + result = self.crypto.decryptx( + value, self.config.PASSWORD + ) + item = QTableWidgetItem(result) + if result == "管理密钥错误": + item.setFlags( + QtCore.Qt.ItemIsSelectable + | QtCore.Qt.ItemIsEnabled + ) + else: + item = QTableWidgetItem(str(value)) + + # 组件录入表格 + if j in [4, 9, 10]: + if not self.if_user_list_editable: + item.setEnabled(False) + self.user_list_beta.setCellWidget( + data_beta[i][16], self.userlist_beta_index[j], item + ) + else: + self.user_list_beta.setItem( + data_beta[i][16], self.userlist_beta_index[j], item + ) + self.user_list_beta.setFixedHeight( + height + self.user_list_beta.frameWidth() * 2 + 10 + ) + + # 设置列表可编辑状态 + if self.if_user_list_editable: + self.user_list_simple.setEditTriggers(TableWidget.AllEditTriggers) + self.user_list_beta.setEditTriggers(TableWidget.AllEditTriggers) + else: + self.user_list_simple.setEditTriggers(TableWidget.NoEditTriggers) + self.user_list_beta.setEditTriggers(TableWidget.NoEditTriggers) + + # 允许GUI改变被同步到本地数据库 + self.if_update_database = True + + # 设置用户配置列表的标题栏宽度 + self.user_list_simple.horizontalHeader().setSectionResizeMode( + QHeaderView.Stretch + ) + self.user_list_beta.horizontalHeader().setSectionResizeMode( + QHeaderView.Stretch + ) + + def change_user_Item(self, item: QTableWidgetItem, mode): + """将GUI中发生修改的用户配置表中的一般信息同步至本地数据库""" + + # 验证能否写入本地数据库 + if not self.if_update_database: + return None + + text = item.text() + # 简洁用户配置列表 + if mode == "simple": + # 待写入信息预处理 + if item.column() == 3: # 代理天数 + try: + text = max(int(text), -1) + except ValueError: + self.update_user_info("normal") + return None + if item.column() in [6, 7, 8]: # 关卡号 + # 导入与应用特殊关卡规则 + games = {} + with self.config.gameid_path.open( + mode="r", encoding="utf-8" + ) as f: + gameids = f.readlines() + for line in gameids: + if ":" in line: + game_in, game_out = line.split(":", 1) + games[game_in.strip()] = game_out.strip() + text = games.get(text, text) + if item.column() == 11: # 密码 + text = self.crypto.encryptx(text) + + # 保存至本地数据库 + if text != "": + self.config.cur.execute( + f"UPDATE adminx SET {self.user_column[self.userlist_simple_index.index(item.column())]} = ? WHERE mode = 'simple' AND uid = ?", + (text, item.row()), + ) + # 高级用户配置列表 + elif mode == "beta": + # 待写入信息预处理 + if item.column() == 1: # 代理天数 + try: + text = max(int(text), -1) + except ValueError: + self.update_user_info("normal") + return None + if item.column() == 6: # 密码 + text = self.crypto.encryptx(text) + + # 保存至本地数据库 + if text != "": + self.config.cur.execute( + f"UPDATE adminx SET {self.user_column[self.userlist_beta_index.index(item.column())]} = ? WHERE mode = 'beta' AND uid = ?", + (text, item.row()), + ) + self.config.db.commit() + + # 同步一般用户信息更改到GUI + self.update_user_info("normal") + + def change_user_CellWidget(self, row, column, index): + """将GUI中发生修改的用户配置表中的CellWidget类信息同步至本地数据库""" + + # 验证能否写入本地数据库 + if not self.if_update_database: + return None + + if "简洁用户列表" in self.pivot.currentRouteKey(): + mode = 0 + elif "高级用户列表" in self.pivot.currentRouteKey(): + mode = 1 + + # 初次开启自定义MAA配置或选择修改MAA配置时调起MAA配置任务 + # if ( + # mode == 1 + # and column in ["routine", "annihilation"] + # and ( + # index == 2 + # or ( + # index == 0 + # and not ( + # self.config.app_path + # / f"data/MAAconfig/{self.user_mode_list[index]}/{row}/{column}/gui.json" + # ).exists() + # ) + # ) + # ): + # pass + # self.MaaManager.get_json_path = [ + # index, + # row, + # column, + # ] + # self.maa_starter("设置MAA_用户") + + # 服务器 + if mode == 0 and column == "server": + server_list = ["Official", "Bilibili"] + self.config.cur.execute( + f"UPDATE adminx SET server = ? WHERE mode = 'simple' AND uid = ?", + (server_list[index], row), + ) + # 其它(启用/禁用) + elif index in [0, 1]: + index_list = ["y", "n"] + self.config.cur.execute( + f"UPDATE adminx SET {column} = ? WHERE mode = ? AND uid = ?", + ( + index_list[index], + self.user_mode_list[mode], + row, + ), + ) + self.config.db.commit() + + # 同步用户组件信息修改到GUI + self.update_user_info("normal") + + def add_user(self): + """添加一位新用户""" + + # 插入预设用户数据 + if "简洁用户列表" in self.pivot.currentRouteKey(): + set_book = ["simple", self.user_list_simple.rowCount()] + elif "高级用户列表" in self.pivot.currentRouteKey(): + set_book = ["beta", self.user_list_beta.rowCount()] + self.config.cur.execute( + "INSERT INTO adminx VALUES('新用户','手机号码(官服)/B站ID(B服)','Official',-1,'y','2000-01-01','1-7','-','-','n','n','n',?,'无',0,?,?)", + ( + self.crypto.encryptx("未设置"), + set_book[0], + set_book[1], + ), + ) + self.config.db.commit(), + + # 同步新用户至GUI + self.update_user_info("normal") + + def del_user(self) -> None: + """删除选中的首位用户""" + + # 获取对应的行索引 + if "简洁用户列表" in self.pivot.currentRouteKey(): + row = self.user_list_simple.currentRow() + current_numb = self.user_list_simple.rowCount() + mode = 0 + elif "高级用户列表" in self.pivot.currentRouteKey(): + row = self.user_list_beta.currentRow() + current_numb = self.user_list_beta.rowCount() + mode = 1 + + # 判断选择合理性 + if row == -1: + choice = MessageBox( + "错误", + "请选中一个用户后再执行删除操作", + self.parent() + .parent() + .parent() + .parent() + .parent() + .parent() + .parent() + .parent() + .parent(), + ) + choice.cancelButton.hide() + choice.buttonLayout.insertStretch(1) + if choice.exec(): + return None + + # 确认待删除用户信息 + self.config.cur.execute( + "SELECT * FROM adminx WHERE mode = ? AND uid = ?", + ( + self.user_mode_list[mode], + row, + ), + ) + data = self.config.cur.fetchall() + choice = MessageBox( + "确认", + f"确定要删除用户 {data[0][0]} 吗?", + self.parent() + .parent() + .parent() + .parent() + .parent() + .parent() + .parent() + .parent() + .parent(), + ) + + # 删除用户 + if choice.exec(): + # 删除所选用户 + self.config.cur.execute( + "DELETE FROM adminx WHERE mode = ? AND uid = ?", + ( + self.user_mode_list[mode], + row, + ), + ) + self.config.db.commit() + + if ( + self.config.app_path + / f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{row}" + ).exists(): + shutil.rmtree( + self.config.app_path + / f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{row}" + ) + # 后续用户补位 + for i in range(row + 1, current_numb): + self.config.cur.execute( + "UPDATE adminx SET uid = ? WHERE mode = ? AND uid = ?", + ( + i - 1, + self.user_mode_list[mode], + i, + ), + ) + self.config.db.commit() + if ( + self.config.app_path + / f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{i}" + ).exists(): + ( + self.config.app_path + / f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{i}" + ).rename( + self.config.app_path + / f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{i}" + ) + + # 同步最终结果至GUI + self.update_user_info("normal") + + def up_user(self): + """向上移动用户""" + + # 获取对应的行索引 + if "简洁用户列表" in self.pivot.currentRouteKey(): + row = self.user_list_simple.currentRow() + mode = 0 + elif "高级用户列表" in self.pivot.currentRouteKey(): + row = self.user_list_beta.currentRow() + mode = 1 + + # 判断选择合理性 + if row == -1: + choice = MessageBox( + "错误", + "请选中一个用户后再执行向下移动操作", + self.parent() + .parent() + .parent() + .parent() + .parent() + .parent() + .parent() + .parent() + .parent(), + ) + choice.cancelButton.hide() + choice.buttonLayout.insertStretch(1) + if choice.exec(): + return None + + if row == 0: + return None + + self.config.cur.execute( + "UPDATE adminx SET uid = ? WHERE mode = ? AND uid = ?", + ( + -1, + self.user_mode_list[mode], + row, + ), + ) + self.config.cur.execute( + "UPDATE adminx SET uid = ? WHERE mode = ? AND uid = ?", + ( + row, + self.user_mode_list[mode], + row - 1, + ), + ) + self.config.cur.execute( + "UPDATE adminx SET uid = ? WHERE mode = ? AND uid = ?", + ( + row - 1, + self.user_mode_list[mode], + -1, + ), + ) + self.config.db.commit() + + if ( + self.config.app_path + / f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{row}" + ).exists(): + ( + self.config.app_path + / f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{row}" + ).rename( + self.config.app_path + / f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{-1}" + ) + if ( + self.config.app_path + / f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{row - 1}" + ).exists(): + ( + self.config.app_path + / f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{row - 1}" + ).rename( + self.config.app_path + / f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{row}" + ) + if ( + self.config.app_path + / f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{-1}" + ).exists(): + ( + self.config.app_path + / f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{-1}" + ).rename( + self.config.app_path + / f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{row - 1}" + ) + + self.update_user_info("normal") + if "简洁用户列表" in self.pivot.currentRouteKey(): + self.user_list_simple.selectRow(row - 1) + elif "高级用户列表" in self.pivot.currentRouteKey(): + self.user_list_beta.selectRow(row - 1) + + def down_user(self): + """向下移动用户""" + + # 获取对应的行索引 + if "简洁用户列表" in self.pivot.currentRouteKey(): + row = self.user_list_simple.currentRow() + current_numb = self.user_list_simple.rowCount() + mode = 0 + elif "高级用户列表" in self.pivot.currentRouteKey(): + row = self.user_list_beta.currentRow() + current_numb = self.user_list_beta.rowCount() + mode = 1 + + # 判断选择合理性 + if row == -1: + choice = MessageBox( + "错误", + "请选中一个用户后再执行向下移动操作", + self.parent() + .parent() + .parent() + .parent() + .parent() + .parent() + .parent() + .parent() + .parent(), + ) + choice.cancelButton.hide() + choice.buttonLayout.insertStretch(1) + if choice.exec(): + return None + + if row == current_numb - 1: + return None + + self.config.cur.execute( + "UPDATE adminx SET uid = ? WHERE mode = ? AND uid = ?", + ( + -1, + self.user_mode_list[mode], + row, + ), + ) + self.config.cur.execute( + "UPDATE adminx SET uid = ? WHERE mode = ? AND uid = ?", + ( + row, + self.user_mode_list[mode], + row + 1, + ), + ) + self.config.cur.execute( + "UPDATE adminx SET uid = ? WHERE mode = ? AND uid = ?", + ( + row + 1, + self.user_mode_list[mode], + -1, + ), + ) + self.config.db.commit() + + if ( + self.config.app_path + / f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{row}" + ).exists(): + ( + self.config.app_path + / f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{row}" + ).rename( + self.config.app_path + / f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{-1}" + ) + if ( + self.config.app_path + / f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{row + 1}" + ).exists(): + ( + self.config.app_path + / f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{row + 1}" + ).rename( + self.config.app_path + / f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{row}" + ) + if ( + self.config.app_path + / f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{-1}" + ).exists(): + ( + self.config.app_path + / f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{-1}" + ).rename( + self.config.app_path + / f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{row + 1}" + ) + + self.update_user_info("normal") + if "简洁用户列表" in self.pivot.currentRouteKey(): + self.user_list_simple.selectRow(row + 1) + elif "高级用户列表" in self.pivot.currentRouteKey(): + self.user_list_beta.selectRow(row + 1) + + def switch_user(self) -> None: + """切换用户配置模式""" + + # 获取当前用户配置模式信息 + if "简洁用户列表" in self.pivot.currentRouteKey(): + row = self.user_list_simple.currentRow() + mode = 0 + elif "高级用户列表" in self.pivot.currentRouteKey(): + row = self.user_list_beta.currentRow() + mode = 1 + + # 判断选择合理性 + if row == -1: + choice = MessageBox( + "错误", + "请选中一个用户后再执行切换操作", + self.parent() + .parent() + .parent() + .parent() + .parent() + .parent() + .parent() + .parent() + .parent(), + ) + choice.cancelButton.hide() + choice.buttonLayout.insertStretch(1) + if choice.exec(): + return None + + # 确认待切换用户信息 + self.config.cur.execute( + "SELECT * FROM adminx WHERE mode = ? AND uid = ?", + ( + self.user_mode_list[mode], + row, + ), + ) + data = self.config.cur.fetchall() + + mode_list = ["简洁", "高级"] + choice = MessageBox( + "确认", + f"确定要将用户 {data[0][0]} 转为{mode_list[1 - mode]}配置模式吗?", + self.parent() + .parent() + .parent() + .parent() + .parent() + .parent() + .parent() + .parent() + .parent(), + ) + + # 切换用户 + if choice.exec(): + self.config.cur.execute("SELECT * FROM adminx WHERE True") + data = self.config.cur.fetchall() + if mode == 0: + current_numb = self.user_list_simple.rowCount() + elif mode == 1: + current_numb = self.user_list_beta.rowCount() + # 切换所选用户 + other_numb = len(data) - current_numb + self.config.cur.execute( + "UPDATE adminx SET mode = ?, uid = ? WHERE mode = ? AND uid = ?", + ( + self.user_mode_list[1 - mode], + other_numb, + self.user_mode_list[mode], + row, + ), + ) + self.config.db.commit() + if ( + self.config.app_path + / f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{row}" + ).exists(): + shutil.move( + self.config.app_path + / f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{row}", + self.config.app_path + / f"config/MaaConfig/{self.name}/{self.user_mode_list[1 - mode]}/{other_numb}", + ) + # 后续用户补位 + for i in range(row + 1, current_numb): + self.config.cur.execute( + "UPDATE adminx SET uid = ? WHERE mode = ? AND uid = ?", + ( + i - 1, + self.user_mode_list[mode], + i, + ), + ) + self.config.db.commit(), + if ( + self.config.app_path + / f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{i}" + ).exists(): + ( + self.config.app_path + / f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{i}" + ).rename( + self.config.app_path + / f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{i - 1}" + ) + + self.update_user_info("normal") + + +def server_date() -> str: + """获取当前的服务器日期""" + + dt = datetime.datetime.now() + if dt.time() < datetime.datetime.min.time().replace(hour=4): + dt = dt - datetime.timedelta(days=1) + return dt.strftime("%Y-%m-%d") diff --git a/app/ui/queue_manager.py b/app/ui/queue_manager.py new file mode 100644 index 0000000..6a2c75e --- /dev/null +++ b/app/ui/queue_manager.py @@ -0,0 +1,714 @@ +# +# 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.2 +作者:DLmaster_361 +""" + +from PySide6.QtWidgets import ( + QWidget, # + QMainWindow, # + QApplication, # + QSystemTrayIcon, # + QFileDialog, # + QTabWidget, # + QToolBox, # + QComboBox, # + QTableWidgetItem, # + QHeaderView, # + QVBoxLayout, + QStackedWidget, + QHBoxLayout, +) +from qfluentwidgets import ( + Action, + PushButton, + LineEdit, + PasswordLineEdit, + qconfig, + TableWidget, + Pivot, + TimePicker, + ComboBox, + CheckBox, + ScrollArea, + SpinBox, + FluentIcon, + SwitchButton, + RoundMenu, + MessageBox, + MessageBoxBase, + HeaderCardWidget, + BodyLabel, + CommandBar, + setTheme, + Theme, + SwitchSettingCard, + ExpandGroupSettingCard, + SingleDirectionScrollArea, +) +from PySide6.QtUiTools import QUiLoader +from PySide6.QtGui import QIcon, QCloseEvent +from PySide6 import QtCore +from functools import partial +from typing import List, Tuple +from pathlib import Path +import os +import datetime +import json +import subprocess +import shutil +import win32gui +import win32process +import psutil +import pyautogui +import time +import winreg +import requests + +uiLoader = QUiLoader() + +from app import AppConfig, QueueConfig, MaaConfig +from app.services import Notification, CryptoHandler +from app.utils import Updater, version_text +from .Widget import ( + InputMessageBox, + LineEditSettingCard, + SpinBoxSettingCard, + TimeEditSettingCard, + NoOptionComboBoxSettingCard, +) + + +class QueueManager(QWidget): + + def __init__( + self, + config: AppConfig, + notify: Notification, + parent=None, + ): + super().__init__(parent) + + self.setObjectName("调度队列") + + self.config = config + self.notify = notify + + setTheme(Theme.AUTO) + + layout = QVBoxLayout(self) + + self.tools = CommandBar() + + self.queue_manager = QueueSettingBox(self.config, self) + + # 逐个添加动作 + self.tools.addActions( + [ + Action( + FluentIcon.ADD_TO, "新建调度队列", triggered=self.add_setting_box + ), + Action( + FluentIcon.REMOVE_FROM, + "删除调度队列", + triggered=self.del_setting_box, + ), + ] + ) + self.tools.addSeparator() + self.tools.addActions( + [ + Action( + FluentIcon.LEFT_ARROW, "向左移动", triggered=self.left_setting_box + ), + Action( + FluentIcon.RIGHT_ARROW, "向右移动", triggered=self.right_setting_box + ), + ] + ) + self.tools.addSeparator() + self.tools.addAction(Action(FluentIcon.ROTATE, "刷新", triggered=self.refresh)) + + layout.addWidget(self.tools) + layout.addWidget(self.queue_manager) + + def add_setting_box(self): + """添加一个调度队列""" + + index = len(self.queue_manager.search_queue()) + 1 + + qconfig.load( + self.config.app_path / f"config/QueueConfig/调度队列_{index}.json", + self.config.queue_config, + ) + + self.config.queue_config.set(self.config.queue_config.queueSet_Name, "") + self.config.queue_config.set(self.config.queue_config.queueSet_Enabled, False) + + self.config.queue_config.set(self.config.queue_config.time_TimeEnabled_0, False) + self.config.queue_config.set(self.config.queue_config.time_TimeSet_0, "00:00") + self.config.queue_config.set(self.config.queue_config.time_TimeEnabled_1, False) + self.config.queue_config.set(self.config.queue_config.time_TimeSet_1, "00:00") + self.config.queue_config.set(self.config.queue_config.time_TimeEnabled_2, False) + self.config.queue_config.set(self.config.queue_config.time_TimeSet_2, "00:00") + self.config.queue_config.set(self.config.queue_config.time_TimeEnabled_3, False) + self.config.queue_config.set(self.config.queue_config.time_TimeSet_3, "00:00") + self.config.queue_config.set(self.config.queue_config.time_TimeEnabled_4, False) + self.config.queue_config.set(self.config.queue_config.time_TimeSet_4, "00:00") + self.config.queue_config.set(self.config.queue_config.time_TimeEnabled_5, False) + self.config.queue_config.set(self.config.queue_config.time_TimeSet_5, "00:00") + self.config.queue_config.set(self.config.queue_config.time_TimeEnabled_6, False) + self.config.queue_config.set(self.config.queue_config.time_TimeSet_6, "00:00") + self.config.queue_config.set(self.config.queue_config.time_TimeEnabled_7, False) + self.config.queue_config.set(self.config.queue_config.time_TimeSet_7, "00:00") + self.config.queue_config.set(self.config.queue_config.time_TimeEnabled_8, False) + self.config.queue_config.set(self.config.queue_config.time_TimeSet_8, "00:00") + self.config.queue_config.set(self.config.queue_config.time_TimeEnabled_9, False) + self.config.queue_config.set(self.config.queue_config.time_TimeSet_9, "00:00") + + self.config.queue_config.set(self.config.queue_config.queue_Member_1, "禁用") + self.config.queue_config.set(self.config.queue_config.queue_Member_2, "禁用") + self.config.queue_config.set(self.config.queue_config.queue_Member_3, "禁用") + self.config.queue_config.set(self.config.queue_config.queue_Member_4, "禁用") + self.config.queue_config.set(self.config.queue_config.queue_Member_5, "禁用") + self.config.queue_config.set(self.config.queue_config.queue_Member_6, "禁用") + self.config.queue_config.set(self.config.queue_config.queue_Member_7, "禁用") + self.config.queue_config.set(self.config.queue_config.queue_Member_8, "禁用") + self.config.queue_config.set(self.config.queue_config.queue_Member_9, "禁用") + self.config.queue_config.set(self.config.queue_config.queue_Member_10, "禁用") + + self.config.queue_config.save() + + self.queue_manager.add_QueueSettingBox(index) + self.queue_manager.switch_SettingBox(index) + + def del_setting_box(self): + """删除一个调度队列实例""" + + name = self.queue_manager.pivot.currentRouteKey() + + if name == None: + return None + + choice = MessageBox( + "确认", + f"确定要删除 {name} 吗?", + self, + ) + if choice.exec(): + + queue_list = self.queue_manager.search_queue() + move_list = [_ for _ in queue_list if int(_[0][3:]) > int(name[3:])] + + index = max(int(name[3:]) - 1, 1) + + self.queue_manager.clear_SettingBox() + + os.remove(self.config.app_path / f"config/QueueConfig/{name}.json") + for queue in move_list: + if ( + self.config.app_path / f"config/QueueConfig/{queue[0]}.json" + ).exists(): + ( + self.config.app_path / f"config/QueueConfig/{queue[0]}.json" + ).rename( + self.config.app_path + / f"config/QueueConfig/调度队列_{int(queue[0][5:])-1}.json", + ) + + self.queue_manager.show_SettingBox(index) + + def left_setting_box(self): + """向左移动调度队列实例""" + + name = self.queue_manager.pivot.currentRouteKey() + + if name == None: + return None + + index = int(name[5:]) + + if index == 1: + return None + + self.queue_manager.clear_SettingBox() + + (self.config.app_path / f"config/QueueConfig/调度队列_{index}.json").rename( + self.config.app_path / f"config/QueueConfig/调度队列_0.json", + ) + shutil.move( + str(self.config.app_path / f"config/QueueConfig/调度队列_{index-1}.json"), + str(self.config.app_path / f"config/QueueConfig/调度队列_{index}.json"), + ) + (self.config.app_path / f"config/QueueConfig/调度队列_0.json").rename( + self.config.app_path / f"config/QueueConfig/调度队列_{index-1}.json", + ) + + self.queue_manager.show_SettingBox(index - 1) + + def right_setting_box(self): + """向右移动调度队列实例""" + + name = self.queue_manager.pivot.currentRouteKey() + + if name == None: + return None + + queue_list = self.queue_manager.search_queue() + index = int(name[5:]) + + if index == len(queue_list): + return None + + self.queue_manager.clear_SettingBox() + + (self.config.app_path / f"config/QueueConfig/调度队列_{index}.json").rename( + self.config.app_path / f"config/QueueConfig/调度队列_0.json", + ) + (self.config.app_path / f"config/QueueConfig/调度队列_{index+1}.json").rename( + self.config.app_path / f"config/QueueConfig/调度队列_{index}.json", + ) + (self.config.app_path / f"config/QueueConfig/调度队列_0.json").rename( + self.config.app_path / f"config/QueueConfig/调度队列_{index+1}.json", + ) + + self.queue_manager.show_SettingBox(index + 1) + + def refresh(self): + """刷新调度队列界面""" + + index = int(self.queue_manager.pivot.currentRouteKey()[5:]) + self.queue_manager.clear_SettingBox() + self.queue_manager.show_SettingBox(index) + + +class QueueSettingBox(QWidget): + + def __init__(self, config: AppConfig, parent=None): + super().__init__(parent) + + self.setObjectName("调度队列管理") + self.config = config + + self.pivot = Pivot(self) + self.stackedWidget = QStackedWidget(self) + self.Layout = QVBoxLayout(self) + + self.script_list: List[QueueMemberSettingBox] = [] + + self.Layout.addWidget(self.pivot, 0, QtCore.Qt.AlignHCenter) + self.Layout.addWidget(self.stackedWidget) + self.Layout.setContentsMargins(0, 0, 0, 0) + + self.pivot.currentItemChanged.connect( + lambda index: self.switch_SettingBox(int(index[5:]), if_chang_pivot=False) + ) + + self.show_SettingBox(1) + + def show_SettingBox(self, index) -> None: + """加载所有子界面""" + + queue_list = self.search_queue() + + for queue in queue_list: + self.add_QueueSettingBox(int(queue[0][5:])) + + self.switch_SettingBox(index) + + def switch_SettingBox(self, index: int, if_chang_pivot: bool = True) -> None: + """切换到指定的子界面""" + + queue_list = self.search_queue() + + if index > len(queue_list): + return None + + qconfig.load( + self.config.app_path + / f"config/QueueConfig/{self.script_list[index-1].objectName()}.json", + self.config.queue_config, + ) + + if if_chang_pivot: + self.pivot.setCurrentItem(self.script_list[index - 1].objectName()) + self.stackedWidget.setCurrentWidget(self.script_list[index - 1]) + + def clear_SettingBox(self) -> None: + """清空所有子界面""" + + for sub_interface in self.script_list: + self.stackedWidget.removeWidget(sub_interface) + sub_interface.deleteLater() + self.script_list.clear() + self.pivot.clear() + + def add_QueueSettingBox(self, uid: int) -> None: + """添加一个调度队列设置界面""" + + maa_setting_box = QueueMemberSettingBox(self.config, uid, self) + + self.script_list.append(maa_setting_box) + + self.stackedWidget.addWidget(self.script_list[-1]) + + self.pivot.addItem(routeKey=f"调度队列_{uid}", text=f"调度队列 {uid}") + + def search_queue(self) -> list: + """搜索所有调度队列实例""" + + queue_list = [] + + if (self.config.app_path / "config/QueueConfig").exists(): + for json_file in (self.config.app_path / "config/QueueConfig").glob( + "*.json" + ): + with json_file.open("r", encoding="utf-8") as f: + info = json.load(f) + queue_list.append([json_file.stem, info["QueueSet"]["Name"]]) + + return queue_list + + +class QueueMemberSettingBox(QWidget): + + def __init__(self, config: AppConfig, uid: int, parent=None): + super().__init__(parent) + + self.setObjectName(f"调度队列_{uid}") + + self.config = config + + layout = QVBoxLayout() + + scrollArea = ScrollArea() + scrollArea.setWidgetResizable(True) + + content_widget = QWidget() + content_layout = QVBoxLayout(content_widget) + + self.queue_set = self.QueueSetSettingCard(self, self.config.queue_config) + self.time = self.TimeSettingCard(self, self.config.queue_config) + self.task = self.TaskSettingCard(self, self.config) + + content_layout.addWidget(self.queue_set) + content_layout.addWidget(self.time) + content_layout.addWidget(self.task) + content_layout.addStretch(1) + + scrollArea.setWidget(content_widget) + + layout.addWidget(scrollArea) + + self.setLayout(layout) + + class QueueSetSettingCard(HeaderCardWidget): + + def __init__(self, parent=None, queue_config: QueueConfig = None): + super().__init__(parent) + + self.setTitle("队列设置") + + self.queue_config = queue_config + + Layout = QVBoxLayout() + + self.card_Name = LineEditSettingCard( + "调度队列名称", + FluentIcon.EDIT, + "调度队列名称", + "用于标识调度队列的名称", + self.queue_config.queueSet_Name, + ) + self.card_Enable = SwitchSettingCard( + FluentIcon.HOME, + "状态", + "调度队列状态", + self.queue_config.queueSet_Enabled, + ) + + Layout.addWidget(self.card_Name) + Layout.addWidget(self.card_Enable) + + self.viewLayout.addLayout(Layout) + + class TimeSettingCard(HeaderCardWidget): + + def __init__(self, parent=None, queue_config: QueueConfig = None): + super().__init__(parent) + + self.setTitle("定时设置") + + self.queue_config = queue_config + + widget_1 = QWidget() + Layout_1 = QVBoxLayout(widget_1) + widget_2 = QWidget() + Layout_2 = QVBoxLayout(widget_2) + Layout = QHBoxLayout() + + self.card_Time_0 = TimeEditSettingCard( + FluentIcon.STOP_WATCH, + "定时 1", + "", + self.queue_config.time_TimeEnabled_0, + self.queue_config.time_TimeSet_0, + ) + self.card_Time_1 = TimeEditSettingCard( + FluentIcon.STOP_WATCH, + "定时 2", + "", + self.queue_config.time_TimeEnabled_1, + self.queue_config.time_TimeSet_1, + ) + self.card_Time_2 = TimeEditSettingCard( + FluentIcon.STOP_WATCH, + "定时 3", + "", + self.queue_config.time_TimeEnabled_2, + self.queue_config.time_TimeSet_2, + ) + self.card_Time_3 = TimeEditSettingCard( + FluentIcon.STOP_WATCH, + "定时 4", + "", + self.queue_config.time_TimeEnabled_3, + self.queue_config.time_TimeSet_3, + ) + self.card_Time_4 = TimeEditSettingCard( + FluentIcon.STOP_WATCH, + "定时 5", + "", + self.queue_config.time_TimeEnabled_4, + self.queue_config.time_TimeSet_4, + ) + self.card_Time_5 = TimeEditSettingCard( + FluentIcon.STOP_WATCH, + "定时 6", + "", + self.queue_config.time_TimeEnabled_5, + self.queue_config.time_TimeSet_5, + ) + self.card_Time_6 = TimeEditSettingCard( + FluentIcon.STOP_WATCH, + "定时 7", + "", + self.queue_config.time_TimeEnabled_6, + self.queue_config.time_TimeSet_6, + ) + self.card_Time_7 = TimeEditSettingCard( + FluentIcon.STOP_WATCH, + "定时 8", + "", + self.queue_config.time_TimeEnabled_7, + self.queue_config.time_TimeSet_7, + ) + self.card_Time_8 = TimeEditSettingCard( + FluentIcon.STOP_WATCH, + "定时 9", + "", + self.queue_config.time_TimeEnabled_8, + self.queue_config.time_TimeSet_8, + ) + self.card_Time_9 = TimeEditSettingCard( + FluentIcon.STOP_WATCH, + "定时 10", + "", + self.queue_config.time_TimeEnabled_9, + self.queue_config.time_TimeSet_9, + ) + + Layout_1.addWidget(self.card_Time_0) + Layout_1.addWidget(self.card_Time_1) + Layout_1.addWidget(self.card_Time_2) + Layout_1.addWidget(self.card_Time_3) + Layout_1.addWidget(self.card_Time_4) + Layout_2.addWidget(self.card_Time_5) + Layout_2.addWidget(self.card_Time_6) + Layout_2.addWidget(self.card_Time_7) + Layout_2.addWidget(self.card_Time_8) + Layout_2.addWidget(self.card_Time_9) + Layout.addWidget(widget_1) + Layout.addWidget(widget_2) + + self.viewLayout.addLayout(Layout) + + class QueueSetSettingCard(HeaderCardWidget): + + def __init__(self, parent=None, queue_config: QueueConfig = None): + super().__init__(parent) + + self.setTitle("队列设置") + + self.queue_config = queue_config + + Layout = QVBoxLayout() + + self.card_Name = LineEditSettingCard( + "调度队列名称", + FluentIcon.EDIT, + "调度队列名称", + "用于标识调度队列的名称", + self.queue_config.queueSet_Name, + ) + self.card_Enable = SwitchSettingCard( + FluentIcon.HOME, + "状态", + "调度队列状态", + self.queue_config.queueSet_Enabled, + ) + + Layout.addWidget(self.card_Name) + Layout.addWidget(self.card_Enable) + + self.viewLayout.addLayout(Layout) + + class TaskSettingCard(HeaderCardWidget): + + def __init__(self, parent=None, config: AppConfig = None): + super().__init__(parent) + + self.setTitle("定时设置") + + self.config = config + self.queue_config = config.queue_config + + Layout = QVBoxLayout() + + member_list = self.search_member() + + self.card_Member_1 = NoOptionComboBoxSettingCard( + self.queue_config.queue_Member_1, + FluentIcon.APPLICATION, + "任务实例1", + "第一个调起的脚本任务实例", + member_list[0], + member_list[1], + ) + self.card_Member_2 = NoOptionComboBoxSettingCard( + self.queue_config.queue_Member_2, + FluentIcon.APPLICATION, + "任务实例2", + "第二个调起的脚本任务实例", + member_list[0], + member_list[1], + ) + self.card_Member_3 = NoOptionComboBoxSettingCard( + self.queue_config.queue_Member_3, + FluentIcon.APPLICATION, + "任务实例3", + "第三个调起的脚本任务实例", + member_list[0], + member_list[1], + ) + self.card_Member_4 = NoOptionComboBoxSettingCard( + self.queue_config.queue_Member_4, + FluentIcon.APPLICATION, + "任务实例4", + "第四个调起的脚本任务实例", + member_list[0], + member_list[1], + ) + self.card_Member_5 = NoOptionComboBoxSettingCard( + self.queue_config.queue_Member_5, + FluentIcon.APPLICATION, + "任务实例5", + "第五个调起的脚本任务实例", + member_list[0], + member_list[1], + ) + self.card_Member_6 = NoOptionComboBoxSettingCard( + self.queue_config.queue_Member_6, + FluentIcon.APPLICATION, + "任务实例6", + "第六个调起的脚本任务实例", + member_list[0], + member_list[1], + ) + self.card_Member_7 = NoOptionComboBoxSettingCard( + self.queue_config.queue_Member_7, + FluentIcon.APPLICATION, + "任务实例7", + "第七个调起的脚本任务实例", + member_list[0], + member_list[1], + ) + self.card_Member_8 = NoOptionComboBoxSettingCard( + self.queue_config.queue_Member_8, + FluentIcon.APPLICATION, + "任务实例8", + "第八个调起的脚本任务实例", + member_list[0], + member_list[1], + ) + self.card_Member_9 = NoOptionComboBoxSettingCard( + self.queue_config.queue_Member_9, + FluentIcon.APPLICATION, + "任务实例9", + "第九个调起的脚本任务实例", + member_list[0], + member_list[1], + ) + self.card_Member_10 = NoOptionComboBoxSettingCard( + self.queue_config.queue_Member_10, + FluentIcon.APPLICATION, + "任务实例10", + "第十个调起的脚本任务实例", + member_list[0], + member_list[1], + ) + + Layout.addWidget(self.card_Member_1) + Layout.addWidget(self.card_Member_2) + Layout.addWidget(self.card_Member_3) + Layout.addWidget(self.card_Member_4) + Layout.addWidget(self.card_Member_5) + Layout.addWidget(self.card_Member_6) + Layout.addWidget(self.card_Member_7) + Layout.addWidget(self.card_Member_8) + Layout.addWidget(self.card_Member_9) + Layout.addWidget(self.card_Member_10) + + self.viewLayout.addLayout(Layout) + + def search_member(self) -> list: + """搜索所有脚本实例""" + + member_list_name = ["禁用"] + member_list_text = ["未启用"] + + if (self.config.app_path / "config/MaaConfig").exists(): + for subdir in (self.config.app_path / "config/MaaConfig").iterdir(): + if subdir.is_dir(): + member_list_name.append(subdir.name) + with (subdir / "config.json").open("r", encoding="utf-8") as f: + info = json.load(f) + if info["MaaSet"]["Name"] != "": + member_list_text.append( + f"{subdir.name} - {info["MaaSet"]["Name"]}" + ) + else: + member_list_text.append(subdir.name) + + return [member_list_name, member_list_text] diff --git a/app/ui/setting.py b/app/ui/setting.py index d261f2b..c2b768c 100644 --- a/app/ui/setting.py +++ b/app/ui/setting.py @@ -52,13 +52,14 @@ from qfluentwidgets import ( ScrollArea, SpinBox, FluentIcon, - SwitchButton, - RoundMenu, + setTheme, + Theme, MessageBox, MessageBoxBase, HeaderCardWidget, BodyLabel, - Dialog, + InfoBar, + InfoBarPosition, SubtitleLabel, GroupHeaderCardWidget, SwitchSettingCard, @@ -88,21 +89,31 @@ import requests uiLoader = QUiLoader() from app import AppConfig -from app.services import Notification, CryptoHandler +from app.services import Notification, CryptoHandler, SystemHandler from app.utils import Updater, version_text from .Widget import InputMessageBox, LineEditSettingCard class Setting(QWidget): - def __init__(self, config: AppConfig, notify: Notification, crypto: CryptoHandler): - super(Setting, self).__init__() + def __init__( + self, + config: AppConfig, + notify: Notification, + crypto: CryptoHandler, + system: SystemHandler, + parent=None, + ): + super().__init__(parent) self.setObjectName("设置") self.config = config self.notify = notify self.crypto = crypto + self.system = system + + setTheme(Theme.AUTO) layout = QVBoxLayout() @@ -120,6 +131,8 @@ class Setting(QWidget): self.updater = UpdaterSettingCard(self, self.config) self.other = OtherSettingCard(self, self.config) + self.function.card_IfAllowSleep.checkedChanged.connect(self.system.set_Sleep) + self.start.card_IfSelfStart.checkedChanged.connect(self.system.set_SelfStart) self.security.card_changePASSWORD.clicked.connect(self.change_PASSWORD) self.updater.card_CheckUpdate.clicked.connect(self.check_version) self.other.card_Tips.clicked.connect(self.show_tips) @@ -147,7 +160,7 @@ class Setting(QWidget): while True: choice = InputMessageBox( - self, + self.parent().parent().parent(), "未检测到管理密钥,请设置您的管理密钥", "管理密钥", "密码", @@ -157,10 +170,14 @@ class Setting(QWidget): break else: choice = MessageBox( - "确认", "您没有输入管理密钥,确定要暂时跳过这一步吗?", self + "警告", + "您没有设置管理密钥,无法使用本软件,请先设置管理密钥", + self.parent().parent().parent(), ) + choice.cancelButton.hide() + choice.buttonLayout.insertStretch(1) if choice.exec(): - break + pass def change_PASSWORD(self) -> None: """修改管理密钥""" @@ -180,13 +197,20 @@ class Setting(QWidget): while True: - a = InputMessageBox( - self, "请输入新的管理密钥", "新管理密钥", "密码" + choice = InputMessageBox( + self, + "请输入新的管理密钥", + "新管理密钥", + "密码", ) - if a.exec() and a.input.text() != "": + if choice.exec() and choice.input.text() != "": # 修改管理密钥 - self.crypto.get_PASSWORD(a.input.text()) - choice = MessageBox("操作成功", "管理密钥修改成功", self) + self.crypto.get_PASSWORD(choice.input.text()) + choice = MessageBox( + "操作成功", + "管理密钥修改成功", + self, + ) choice.cancelButton.hide() choice.buttonLayout.insertStretch(1) if choice.exec(): @@ -207,7 +231,10 @@ class Setting(QWidget): while if_change: choice = InputMessageBox( - self, "请输入旧的管理密钥", "旧管理密钥", "密码" + self, + "请输入旧的管理密钥", + "旧管理密钥", + "密码", ) if choice.exec() and choice.input.text() != "": @@ -219,7 +246,10 @@ class Setting(QWidget): while True: choice = InputMessageBox( - self, "请输入新的管理密钥", "新管理密钥", "密码" + self, + "请输入新的管理密钥", + "新管理密钥", + "密码", ) if choice.exec() and choice.input.text() != "": @@ -228,7 +258,9 @@ class Setting(QWidget): data, PASSWORD_old, choice.input.text() ) choice = MessageBox( - "操作成功", "管理密钥修改成功", self + "操作成功", + "管理密钥修改成功", + self, ) choice.cancelButton.hide() choice.buttonLayout.insertStretch(1) @@ -262,7 +294,43 @@ class Setting(QWidget): if choice.exec(): break - def check_version(self): + def check_update(self) -> str: + """检查主程序版本更新,返回更新信息""" + + # 从本地版本信息文件获取当前版本信息 + with self.config.version_path.open(mode="r", encoding="utf-8") as f: + version_current = json.load(f) + main_version_current = list( + map(int, version_current["main_version"].split(".")) + ) + + # 从远程服务器获取最新版本信息 + for _ in range(3): + try: + response = requests.get( + "https://gitee.com/DLmaster_361/AUTO_MAA/raw/main/resources/version.json" + ) + version_remote = response.json() + break + except Exception as e: + err = e + time.sleep(0.1) + else: + return f"获取版本信息时出错:\n{err}" + + main_version_remote = list(map(int, version_remote["main_version"].split("."))) + + # 有版本更新 + if main_version_remote > main_version_current: + + main_version_info = f" 主程序:{version_text(main_version_current)} --> {version_text(main_version_remote)}\n" + + return f"发现新版本:\n{main_version_info} 更新说明:\n{version_remote['announcement'].replace("\n# ","\n !").replace("\n## ","\n - ").replace("\n- ","\n · ")}\n\n是否开始更新?\n\n 注意:主程序更新时AUTO_MAA将自动关闭" + + else: + return "已是最新版本~" + + def check_version(self, if_question: bool = True) -> None: """检查版本更新,调起文件下载进程""" # 从本地版本信息文件获取当前版本信息 @@ -325,13 +393,14 @@ class Setting(QWidget): ) # 询问是否开始版本更新 - choice = MessageBox( - "版本更新", - f"发现新版本:\n{main_version_info}{updater_version_info} 更新说明:\n{version_remote['announcement'].replace("\n# ","\n !").replace("\n## ","\n - ").replace("\n- ","\n · ")}\n\n是否开始更新?\n\n 注意:主程序更新时AUTO_MAA将自动关闭", - self, - ) - if not choice.exec(): - return None + if if_question: + choice = MessageBox( + "版本更新", + f"发现新版本:\n{main_version_info}{updater_version_info} 更新说明:\n{version_remote['announcement'].replace("\n# ","\n !").replace("\n## ","\n - ").replace("\n- ","\n · ")}\n\n是否开始更新?\n\n 注意:主程序更新时AUTO_MAA将自动关闭", + self, + ) + if not choice.exec(): + return None # 更新更新器 if updater_version_remote > updater_version_current: @@ -354,7 +423,15 @@ class Setting(QWidget): # 无版本更新 else: - self.notify.push_notification("已是最新版本~", " ", " ", 3) + InfoBar.success( + title="更新检查", + content="已是最新版本~", + orient=QtCore.Qt.Horizontal, + isClosable=True, + position=InfoBarPosition.TOP_RIGHT, + duration=3000, + parent=self, + ) def update_main(self): """更新主程序""" @@ -388,11 +465,11 @@ class FunctionSettingCard(HeaderCardWidget): Layout = QVBoxLayout() - self.card_IfSleep = SwitchSettingCard( + self.card_IfAllowSleep = SwitchSettingCard( icon=FluentIcon.PAGE_RIGHT, title="启动时阻止系统休眠", content="仅阻止电脑自动休眠,不会影响屏幕是否熄灭", - configItem=self.config.function_IfSleep, + configItem=self.config.function_IfAllowSleep, ) self.card_IfSilence = SwitchSettingCard( @@ -403,7 +480,7 @@ class FunctionSettingCard(HeaderCardWidget): ) # 添加各组到设置卡中 - Layout.addWidget(self.card_IfSleep) + Layout.addWidget(self.card_IfAllowSleep) Layout.addWidget(self.card_IfSilence) self.viewLayout.addLayout(Layout) diff --git a/main.py b/main.py index 9bbb470..51163da 100644 --- a/main.py +++ b/main.py @@ -32,6 +32,7 @@ import sys from app.config import AppConfig from app.services.notification import Notification from app.services.security import CryptoHandler +from app.services.system import SystemHandler from app.ui.main_window import AUTO_MAA if __name__ == "__main__": @@ -39,12 +40,13 @@ if __name__ == "__main__": config = AppConfig() notify = Notification(config) crypto = CryptoHandler(config) + system = SystemHandler(config) application = QApplication(sys.argv) translator = FluentTranslator() application.installTranslator(translator) - window = AUTO_MAA(config=config, notify=notify, crypto=crypto) + window = AUTO_MAA(config=config, notify=notify, crypto=crypto, system=system) window.setting.check_PASSWORD() sys.exit(application.exec()) diff --git a/resources/gui/main.ui b/resources/gui/main.ui index eb11ac9..6bf706e 100644 --- a/resources/gui/main.ui +++ b/resources/gui/main.ui @@ -1279,7 +1279,7 @@ - + AUTO_MAA启动时禁止电脑休眠 From e79417ec5e84f7036b91861a31af0c048a99e74d Mon Sep 17 00:00:00 2001 From: DLmaster Date: Mon, 6 Jan 2025 16:23:45 +0800 Subject: [PATCH 05/12] =?UTF-8?q?=E8=B0=83=E5=BA=A6=E9=98=9F=E5=88=97?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/config.py | 84 ++++++++++++++++++++++++++++++++-------- app/ui/main_window.py | 3 ++ app/ui/member_manager.py | 70 ++++++++++++++++++++++----------- app/ui/queue_manager.py | 81 ++++++++++++++------------------------ app/ui/setting.py | 6 --- app/utils/Updater.py | 8 ++-- app/utils/package.py | 2 +- 7 files changed, 150 insertions(+), 104 deletions(-) diff --git a/app/config.py b/app/config.py index 14bd977..c11b620 100644 --- a/app/config.py +++ b/app/config.py @@ -70,9 +70,9 @@ class AppConfig: # 检查目录 (self.app_path / "config").mkdir(parents=True, exist_ok=True) - (self.app_path / "data/MAAconfig/simple").mkdir(parents=True, exist_ok=True) - (self.app_path / "data/MAAconfig/beta").mkdir(parents=True, exist_ok=True) - (self.app_path / "data/MAAconfig/Default").mkdir(parents=True, exist_ok=True) + # (self.app_path / "data/MAAconfig/simple").mkdir(parents=True, exist_ok=True) + # (self.app_path / "data/MAAconfig/beta").mkdir(parents=True, exist_ok=True) + # (self.app_path / "data/MAAconfig/Default").mkdir(parents=True, exist_ok=True) # 生成版本信息文件 if not self.version_path.exists(): @@ -90,11 +90,11 @@ class AppConfig: encoding="utf-8", ) - self.get_config() + self.init_config() # self.check_database() - def get_config(self) -> None: - """创建配置类""" + def init_config(self) -> None: + """初始化配置类""" self.global_config = GlobalConfig() qconfig.load(self.config_path, self.global_config) @@ -102,6 +102,17 @@ class AppConfig: self.queue_config = QueueConfig() self.maa_config = MaaConfig() + def init_database(self, mode: str) -> None: + """初始化用户数据库""" + + if mode == "Maa": + self.cur.execute( + "CREATE TABLE adminx(admin text,id text,server text,day int,status text,last date,game text,game_1 text,game_2 text,routine text,annihilation text,infrastructure text,password byte,notes text,numb int,mode text,uid int)" + ) + self.cur.execute("CREATE TABLE version(v text)") + self.cur.execute("INSERT INTO version VALUES(?)", ("v1.3",)) + self.db.commit() + def check_database(self) -> None: """检查用户数据库文件并处理数据库版本更新""" @@ -181,17 +192,6 @@ class AppConfig: cur.close() db.close() - def init_database(self, mode: str) -> None: - """初始化用户数据库""" - - if mode == "Maa": - self.cur.execute( - "CREATE TABLE adminx(admin text,id text,server text,day int,status text,last date,game text,game_1 text,game_2 text,routine text,annihilation text,infrastructure text,password byte,notes text,numb int,mode text,uid int)" - ) - self.cur.execute("CREATE TABLE version(v text)") - self.cur.execute("INSERT INTO version VALUES(?)", ("v1.3",)) - self.db.commit() - def open_database(self, mode: str, index: str = None) -> None: """打开数据库""" @@ -212,6 +212,56 @@ class AppConfig: self.db.close() self.if_database_opened = False + def clear_maa_config(self) -> None: + """清空MAA配置""" + + self.maa_config.set(self.maa_config.MaaSet_Name, "") + self.maa_config.set(self.maa_config.MaaSet_Path, ".") + self.maa_config.set(self.maa_config.RunSet_AnnihilationTimeLimit, 40) + self.maa_config.set(self.maa_config.RunSet_RoutineTimeLimit, 10) + self.maa_config.set(self.maa_config.RunSet_RunTimesLimit, 3) + self.maa_config.set(self.maa_config.MaaSet_Name, "") + self.maa_config.set(self.maa_config.MaaSet_Name, "") + self.maa_config.set(self.maa_config.MaaSet_Name, "") + + def clear_queue_config(self) -> None: + """清空队列配置""" + + self.queue_config.set(self.queue_config.queueSet_Name, "") + self.queue_config.set(self.queue_config.queueSet_Enabled, False) + + self.queue_config.set(self.queue_config.time_TimeEnabled_0, False) + self.queue_config.set(self.queue_config.time_TimeSet_0, "00:00") + self.queue_config.set(self.queue_config.time_TimeEnabled_1, False) + self.queue_config.set(self.queue_config.time_TimeSet_1, "00:00") + self.queue_config.set(self.queue_config.time_TimeEnabled_2, False) + self.queue_config.set(self.queue_config.time_TimeSet_2, "00:00") + self.queue_config.set(self.queue_config.time_TimeEnabled_3, False) + self.queue_config.set(self.queue_config.time_TimeSet_3, "00:00") + self.queue_config.set(self.queue_config.time_TimeEnabled_4, False) + self.queue_config.set(self.queue_config.time_TimeSet_4, "00:00") + self.queue_config.set(self.queue_config.time_TimeEnabled_5, False) + self.queue_config.set(self.queue_config.time_TimeSet_5, "00:00") + self.queue_config.set(self.queue_config.time_TimeEnabled_6, False) + self.queue_config.set(self.queue_config.time_TimeSet_6, "00:00") + self.queue_config.set(self.queue_config.time_TimeEnabled_7, False) + self.queue_config.set(self.queue_config.time_TimeSet_7, "00:00") + self.queue_config.set(self.queue_config.time_TimeEnabled_8, False) + self.queue_config.set(self.queue_config.time_TimeSet_8, "00:00") + self.queue_config.set(self.queue_config.time_TimeEnabled_9, False) + self.queue_config.set(self.queue_config.time_TimeSet_9, "00:00") + + self.queue_config.set(self.queue_config.queue_Member_1, "禁用") + self.queue_config.set(self.queue_config.queue_Member_2, "禁用") + self.queue_config.set(self.queue_config.queue_Member_3, "禁用") + self.queue_config.set(self.queue_config.queue_Member_4, "禁用") + self.queue_config.set(self.queue_config.queue_Member_5, "禁用") + self.queue_config.set(self.queue_config.queue_Member_6, "禁用") + self.queue_config.set(self.queue_config.queue_Member_7, "禁用") + self.queue_config.set(self.queue_config.queue_Member_8, "禁用") + self.queue_config.set(self.queue_config.queue_Member_9, "禁用") + self.queue_config.set(self.queue_config.queue_Member_10, "禁用") + class GlobalConfig(QConfig): """全局配置""" diff --git a/app/ui/main_window.py b/app/ui/main_window.py index 45090f0..974925e 100644 --- a/app/ui/main_window.py +++ b/app/ui/main_window.py @@ -149,6 +149,9 @@ class AUTO_MAA(MSFluentWindow): FluentIcon.BOOK_SHELF, NavigationItemPosition.TOP, ) + self.stackedWidget.currentChanged.connect( + lambda index: self.queue_manager.refresh() if index == 2 else None + ) # 创建系统托盘及其菜单 self.tray = QSystemTrayIcon( diff --git a/app/ui/member_manager.py b/app/ui/member_manager.py index 4c8c9ad..e9c3a58 100644 --- a/app/ui/member_manager.py +++ b/app/ui/member_manager.py @@ -76,7 +76,7 @@ from typing import List, Tuple from pathlib import Path import os import datetime -import ctypes +import json import subprocess import shutil import win32gui @@ -183,21 +183,7 @@ class MemberManager(QWidget): self.config.app_path / f"config/MaaConfig/脚本_{index}/config.json", self.config.maa_config, ) - - self.config.maa_config.set(self.config.maa_config.MaaSet_Name, "") - self.config.maa_config.set(self.config.maa_config.MaaSet_Path, ".") - self.config.maa_config.set( - self.config.maa_config.RunSet_AnnihilationTimeLimit, 40 - ) - self.config.maa_config.set( - self.config.maa_config.RunSet_RoutineTimeLimit, 10 - ) - self.config.maa_config.set( - self.config.maa_config.RunSet_RunTimesLimit, 3 - ) - self.config.maa_config.set(self.config.maa_config.MaaSet_Name, "") - self.config.maa_config.set(self.config.maa_config.MaaSet_Name, "") - self.config.maa_config.set(self.config.maa_config.MaaSet_Name, "") + self.config.clear_maa_config() self.config.maa_config.save() self.config.open_database("Maa", f"脚本_{index}") @@ -229,6 +215,7 @@ class MemberManager(QWidget): self.member_manager.clear_SettingBox() shutil.rmtree(self.config.app_path / f"config/{type[0]}Config/{name}") + self.change_queue(name, "禁用") for member in move_list: if ( self.config.app_path / f"config/{member[1]}Config/{member[0]}" @@ -237,8 +224,9 @@ class MemberManager(QWidget): self.config.app_path / f"config/{member[1]}Config/{member[0]}" ).rename( self.config.app_path - / f"config/{member[1]}Config/{member[0][:3]}{int(member[0][3:])-1}", + / f"config/{member[1]}Config/脚本_{int(member[0][3:])-1}", ) + self.change_queue(member[0], f"脚本_{int(member[0][3:])-1}") self.member_manager.show_SettingBox(index) @@ -262,15 +250,17 @@ class MemberManager(QWidget): self.member_manager.clear_SettingBox() (self.config.app_path / f"config/{type_right[0]}Config/脚本_{index}").rename( - self.config.app_path / f"config/{type_right[0]}Config/脚本_0", + self.config.app_path / f"config/{type_right[0]}Config/脚本_0" ) - shutil.move( - str(self.config.app_path / f"config/{type_left[0]}Config/脚本_{index-1}"), - str(self.config.app_path / f"config/{type_left[0]}Config/脚本_{index}"), + self.change_queue(f"脚本_{index}", "脚本_0") + (self.config.app_path / f"config/{type_left[0]}Config/脚本_{index-1}").rename( + self.config.app_path / f"config/{type_left[0]}Config/脚本_{index}" ) + self.change_queue(f"脚本_{index-1}", f"脚本_{index}") (self.config.app_path / f"config/{type_right[0]}Config/脚本_0").rename( - self.config.app_path / f"config/{type_right[0]}Config/脚本_{index-1}", + self.config.app_path / f"config/{type_right[0]}Config/脚本_{index-1}" ) + self.change_queue("脚本_0", f"脚本_{index-1}") self.member_manager.show_SettingBox(index - 1) @@ -296,12 +286,15 @@ class MemberManager(QWidget): (self.config.app_path / f"config/{type_left[0]}Config/脚本_{index}").rename( self.config.app_path / f"config/{type_left[0]}Config/脚本_0", ) + self.change_queue(f"脚本_{index}", "脚本_0") (self.config.app_path / f"config/{type_right[0]}Config/脚本_{index+1}").rename( self.config.app_path / f"config/{type_right[0]}Config/脚本_{index}", ) + self.change_queue(f"脚本_{index+1}", f"脚本_{index}") (self.config.app_path / f"config/{type_left[0]}Config/脚本_0").rename( self.config.app_path / f"config/{type_left[0]}Config/脚本_{index+1}", ) + self.change_queue("脚本_0", f"脚本_{index+1}") self.member_manager.show_SettingBox(index + 1) @@ -336,6 +329,23 @@ class MemberManager(QWidget): self.key.setIcon(FluentIcon.HIDE) self.key.setChecked(False) + def change_queue(self, old: str, new: str) -> None: + """修改调度队列配置文件的队列参数""" + + if (self.config.app_path / "config/QueueConfig").exists(): + for json_file in (self.config.app_path / "config/QueueConfig").glob( + "*.json" + ): + with json_file.open("r", encoding="utf-8") as f: + data = json.load(f) + + for i in range(10): + if data["Queue"][f"Member_{i+1}"] == old: + data["Queue"][f"Member_{i+1}"] = new + + with json_file.open("w", encoding="utf-8") as f: + json.dump(data, f, ensure_ascii=False, indent=4) + class MemberSettingBox(QWidget): @@ -367,10 +377,17 @@ class MemberSettingBox(QWidget): member_list = self.search_member() + qconfig.load( + self.config.app_path / "config/临时.json", + self.config.maa_config, + ) + self.config.clear_maa_config() for member in member_list: if member[1] == "Maa": self.config.open_database(member[1], member[0]) self.add_MaaSettingBox(int(member[0][3:])) + if (self.config.app_path / "config/临时.json").exists(): + (self.config.app_path / "config/临时.json").unlink() self.switch_SettingBox(index) @@ -404,6 +421,13 @@ class MemberSettingBox(QWidget): sub_interface.deleteLater() self.script_list.clear() self.pivot.clear() + qconfig.load( + self.config.app_path / "config/临时.json", + self.config.maa_config, + ) + self.config.clear_maa_config() + if (self.config.app_path / "config/临时.json").exists(): + (self.config.app_path / "config/临时.json").unlink() self.config.close_database() def add_MaaSettingBox(self, uid: int) -> None: @@ -475,7 +499,7 @@ class MaaSettingBox(QWidget): Layout = QVBoxLayout() self.card_Name = LineEditSettingCard( - "实例名称", + "请输入实例名称", FluentIcon.EDIT, "实例名称", "用于标识MAA实例的名称", diff --git a/app/ui/queue_manager.py b/app/ui/queue_manager.py index 6a2c75e..d594aa4 100644 --- a/app/ui/queue_manager.py +++ b/app/ui/queue_manager.py @@ -147,8 +147,6 @@ class QueueManager(QWidget): ), ] ) - self.tools.addSeparator() - self.tools.addAction(Action(FluentIcon.ROTATE, "刷新", triggered=self.refresh)) layout.addWidget(self.tools) layout.addWidget(self.queue_manager) @@ -162,42 +160,7 @@ class QueueManager(QWidget): self.config.app_path / f"config/QueueConfig/调度队列_{index}.json", self.config.queue_config, ) - - self.config.queue_config.set(self.config.queue_config.queueSet_Name, "") - self.config.queue_config.set(self.config.queue_config.queueSet_Enabled, False) - - self.config.queue_config.set(self.config.queue_config.time_TimeEnabled_0, False) - self.config.queue_config.set(self.config.queue_config.time_TimeSet_0, "00:00") - self.config.queue_config.set(self.config.queue_config.time_TimeEnabled_1, False) - self.config.queue_config.set(self.config.queue_config.time_TimeSet_1, "00:00") - self.config.queue_config.set(self.config.queue_config.time_TimeEnabled_2, False) - self.config.queue_config.set(self.config.queue_config.time_TimeSet_2, "00:00") - self.config.queue_config.set(self.config.queue_config.time_TimeEnabled_3, False) - self.config.queue_config.set(self.config.queue_config.time_TimeSet_3, "00:00") - self.config.queue_config.set(self.config.queue_config.time_TimeEnabled_4, False) - self.config.queue_config.set(self.config.queue_config.time_TimeSet_4, "00:00") - self.config.queue_config.set(self.config.queue_config.time_TimeEnabled_5, False) - self.config.queue_config.set(self.config.queue_config.time_TimeSet_5, "00:00") - self.config.queue_config.set(self.config.queue_config.time_TimeEnabled_6, False) - self.config.queue_config.set(self.config.queue_config.time_TimeSet_6, "00:00") - self.config.queue_config.set(self.config.queue_config.time_TimeEnabled_7, False) - self.config.queue_config.set(self.config.queue_config.time_TimeSet_7, "00:00") - self.config.queue_config.set(self.config.queue_config.time_TimeEnabled_8, False) - self.config.queue_config.set(self.config.queue_config.time_TimeSet_8, "00:00") - self.config.queue_config.set(self.config.queue_config.time_TimeEnabled_9, False) - self.config.queue_config.set(self.config.queue_config.time_TimeSet_9, "00:00") - - self.config.queue_config.set(self.config.queue_config.queue_Member_1, "禁用") - self.config.queue_config.set(self.config.queue_config.queue_Member_2, "禁用") - self.config.queue_config.set(self.config.queue_config.queue_Member_3, "禁用") - self.config.queue_config.set(self.config.queue_config.queue_Member_4, "禁用") - self.config.queue_config.set(self.config.queue_config.queue_Member_5, "禁用") - self.config.queue_config.set(self.config.queue_config.queue_Member_6, "禁用") - self.config.queue_config.set(self.config.queue_config.queue_Member_7, "禁用") - self.config.queue_config.set(self.config.queue_config.queue_Member_8, "禁用") - self.config.queue_config.set(self.config.queue_config.queue_Member_9, "禁用") - self.config.queue_config.set(self.config.queue_config.queue_Member_10, "禁用") - + self.config.clear_queue_config() self.config.queue_config.save() self.queue_manager.add_QueueSettingBox(index) @@ -225,7 +188,7 @@ class QueueManager(QWidget): self.queue_manager.clear_SettingBox() - os.remove(self.config.app_path / f"config/QueueConfig/{name}.json") + (self.config.app_path / f"config/QueueConfig/{name}.json").unlink() for queue in move_list: if ( self.config.app_path / f"config/QueueConfig/{queue[0]}.json" @@ -332,8 +295,15 @@ class QueueSettingBox(QWidget): queue_list = self.search_queue() + qconfig.load( + self.config.app_path / "config/临时.json", + self.config.queue_config, + ) + self.config.clear_queue_config() for queue in queue_list: self.add_QueueSettingBox(int(queue[0][5:])) + if (self.config.app_path / "config/临时.json").exists(): + (self.config.app_path / "config/临时.json").unlink() self.switch_SettingBox(index) @@ -363,6 +333,13 @@ class QueueSettingBox(QWidget): sub_interface.deleteLater() self.script_list.clear() self.pivot.clear() + qconfig.load( + self.config.app_path / "config/临时.json", + self.config.queue_config, + ) + self.config.clear_queue_config() + if (self.config.app_path / "config/临时.json").exists(): + (self.config.app_path / "config/临时.json").unlink() def add_QueueSettingBox(self, uid: int) -> None: """添加一个调度队列设置界面""" @@ -435,7 +412,7 @@ class QueueMemberSettingBox(QWidget): Layout = QVBoxLayout() self.card_Name = LineEditSettingCard( - "调度队列名称", + "请输入调度队列名称", FluentIcon.EDIT, "调度队列名称", "用于标识调度队列的名称", @@ -566,7 +543,7 @@ class QueueMemberSettingBox(QWidget): Layout = QVBoxLayout() self.card_Name = LineEditSettingCard( - "调度队列名称", + "请输入调度队列名称", FluentIcon.EDIT, "调度队列名称", "用于标识调度队列的名称", @@ -589,7 +566,7 @@ class QueueMemberSettingBox(QWidget): def __init__(self, parent=None, config: AppConfig = None): super().__init__(parent) - self.setTitle("定时设置") + self.setTitle("任务队列") self.config = config self.queue_config = config.queue_config @@ -601,7 +578,7 @@ class QueueMemberSettingBox(QWidget): self.card_Member_1 = NoOptionComboBoxSettingCard( self.queue_config.queue_Member_1, FluentIcon.APPLICATION, - "任务实例1", + "任务实例 1", "第一个调起的脚本任务实例", member_list[0], member_list[1], @@ -609,7 +586,7 @@ class QueueMemberSettingBox(QWidget): self.card_Member_2 = NoOptionComboBoxSettingCard( self.queue_config.queue_Member_2, FluentIcon.APPLICATION, - "任务实例2", + "任务实例 2", "第二个调起的脚本任务实例", member_list[0], member_list[1], @@ -617,7 +594,7 @@ class QueueMemberSettingBox(QWidget): self.card_Member_3 = NoOptionComboBoxSettingCard( self.queue_config.queue_Member_3, FluentIcon.APPLICATION, - "任务实例3", + "任务实例 3", "第三个调起的脚本任务实例", member_list[0], member_list[1], @@ -625,7 +602,7 @@ class QueueMemberSettingBox(QWidget): self.card_Member_4 = NoOptionComboBoxSettingCard( self.queue_config.queue_Member_4, FluentIcon.APPLICATION, - "任务实例4", + "任务实例 4", "第四个调起的脚本任务实例", member_list[0], member_list[1], @@ -633,7 +610,7 @@ class QueueMemberSettingBox(QWidget): self.card_Member_5 = NoOptionComboBoxSettingCard( self.queue_config.queue_Member_5, FluentIcon.APPLICATION, - "任务实例5", + "任务实例 5", "第五个调起的脚本任务实例", member_list[0], member_list[1], @@ -641,7 +618,7 @@ class QueueMemberSettingBox(QWidget): self.card_Member_6 = NoOptionComboBoxSettingCard( self.queue_config.queue_Member_6, FluentIcon.APPLICATION, - "任务实例6", + "任务实例 6", "第六个调起的脚本任务实例", member_list[0], member_list[1], @@ -649,7 +626,7 @@ class QueueMemberSettingBox(QWidget): self.card_Member_7 = NoOptionComboBoxSettingCard( self.queue_config.queue_Member_7, FluentIcon.APPLICATION, - "任务实例7", + "任务实例 7", "第七个调起的脚本任务实例", member_list[0], member_list[1], @@ -657,7 +634,7 @@ class QueueMemberSettingBox(QWidget): self.card_Member_8 = NoOptionComboBoxSettingCard( self.queue_config.queue_Member_8, FluentIcon.APPLICATION, - "任务实例8", + "任务实例 8", "第八个调起的脚本任务实例", member_list[0], member_list[1], @@ -665,7 +642,7 @@ class QueueMemberSettingBox(QWidget): self.card_Member_9 = NoOptionComboBoxSettingCard( self.queue_config.queue_Member_9, FluentIcon.APPLICATION, - "任务实例9", + "任务实例 9", "第九个调起的脚本任务实例", member_list[0], member_list[1], @@ -673,7 +650,7 @@ class QueueMemberSettingBox(QWidget): self.card_Member_10 = NoOptionComboBoxSettingCard( self.queue_config.queue_Member_10, FluentIcon.APPLICATION, - "任务实例10", + "任务实例 10", "第十个调起的脚本任务实例", member_list[0], member_list[1], diff --git a/app/ui/setting.py b/app/ui/setting.py index c2b768c..6155c9d 100644 --- a/app/ui/setting.py +++ b/app/ui/setting.py @@ -77,13 +77,7 @@ import json import datetime import ctypes import subprocess -import shutil -import win32gui -import win32process -import psutil -import pyautogui import time -import winreg import requests uiLoader = QUiLoader() diff --git a/app/utils/Updater.py b/app/utils/Updater.py index ec59e17..32fb829 100644 --- a/app/utils/Updater.py +++ b/app/utils/Updater.py @@ -67,10 +67,8 @@ class UpdateProcess(QThread): def run(self) -> None: # 清理可能存在的临时文件 - try: - os.remove(self.download_path) - except FileNotFoundError: - pass + if self.download_path.exists(): + self.download_path.unlink() self.info.emit("正在获取下载链接") url_list = self.get_download_url() @@ -158,7 +156,7 @@ class UpdateProcess(QThread): self.info.emit("正在删除临时文件") self.progress.emit(0, 0, 0) - os.remove(self.download_path) + self.download_path.unlink() self.info.emit(f"{self.name}更新成功!") self.progress.emit(0, 100, 100) diff --git a/app/utils/package.py b/app/utils/package.py index 5120980..de65d2b 100644 --- a/app/utils/package.py +++ b/app/utils/package.py @@ -99,7 +99,7 @@ if __name__ == "__main__": print(result.stderr) print("AUTO_MAA update program packaging completed !") - os.remove(root_path / "Updater.py") + (root_path / "Updater.py").unlink() (root_path / "version_info.txt").write_text( f"{version_text(main_version_numb)}\n{version_text(updater_version_numb)}{version["announcement"]}", From 04fd2b10fab27e184ccbed8d4fc88f6c00d63a59 Mon Sep 17 00:00:00 2001 From: DLmaster Date: Mon, 6 Jan 2025 18:45:48 +0800 Subject: [PATCH 06/12] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=BC=93=E5=AD=98?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E5=A4=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/utils/package.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/utils/package.py b/app/utils/package.py index de65d2b..d1e424b 100644 --- a/app/utils/package.py +++ b/app/utils/package.py @@ -49,6 +49,7 @@ if __name__ == "__main__": result = subprocess.run( f"powershell -Command nuitka --standalone --onefile --mingw64" f" --enable-plugins=pyside6 --windows-console-mode=disable" + f" --onefile-tempdir-spec=%TEMP%\\AUTO_MAA" f" --windows-icon-from-ico=resources\\icons\\AUTO_MAA.ico" f" --company-name='AUTO_MAA Team' --product-name=AUTO_MAA" f" --file-version={version["main_version"]}" @@ -82,6 +83,7 @@ if __name__ == "__main__": result = subprocess.run( f"powershell -Command nuitka --standalone --onefile --mingw64" f" --enable-plugins=pyside6 --windows-console-mode=disable" + f" --onefile-tempdir-spec=%TEMP%\\AUTO_MAA_Updater" f" --windows-icon-from-ico=resources\\icons\\AUTO_MAA_Updater.ico" f" --company-name='AUTO_MAA Team' --product-name=AUTO_MAA" f" --file-version={version["updater_version"]}" From 1ea9d10bb453ba209d3a5b6839340f02f0f59966 Mon Sep 17 00:00:00 2001 From: DLmaster Date: Tue, 7 Jan 2025 11:32:06 +0800 Subject: [PATCH 07/12] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=BC=80=E6=9C=BA?= =?UTF-8?q?=E8=87=AA=E5=90=AF=E6=97=B6=E7=9B=AE=E5=BD=95=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/config.py | 15 ++++++------- app/services/system.py | 6 ++--- app/ui/main_window.py | 1 - app/utils/package.py | 50 +++++++++++++++++------------------------- main.py | 1 + 5 files changed, 31 insertions(+), 42 deletions(-) diff --git a/app/config.py b/app/config.py index c11b620..3e9eb18 100644 --- a/app/config.py +++ b/app/config.py @@ -49,9 +49,8 @@ class AppConfig: def __init__(self) -> None: - self.app_path = Path.cwd() # 获取软件根目录 - self.app_path_sys = os.path.realpath(sys.argv[0]) # 获取软件自身的路径 - self.app_name = os.path.basename(self.app_path) # 获取软件自身的名称 + self.app_path = Path(sys.argv[0]).resolve().parent # 获取软件根目录 + self.app_path_sys = str(Path(sys.argv[0]).resolve()) # 获取软件自身的路径 self.database_path = self.app_path / "data/data.db" self.config_path = self.app_path / "config/config.json" @@ -70,6 +69,7 @@ class AppConfig: # 检查目录 (self.app_path / "config").mkdir(parents=True, exist_ok=True) + (self.app_path / "data").mkdir(parents=True, exist_ok=True) # (self.app_path / "data/MAAconfig/simple").mkdir(parents=True, exist_ok=True) # (self.app_path / "data/MAAconfig/beta").mkdir(parents=True, exist_ok=True) # (self.app_path / "data/MAAconfig/Default").mkdir(parents=True, exist_ok=True) @@ -195,9 +195,7 @@ class AppConfig: def open_database(self, mode: str, index: str = None) -> None: """打开数据库""" - if self.if_database_opened: - self.close_database() - + self.close_database() if mode == "Maa": self.db = sqlite3.connect( self.app_path / f"config/{mode}Config/{index}/user_date.db" @@ -208,8 +206,9 @@ class AppConfig: def close_database(self) -> None: """关闭数据库""" - self.cur.close() - self.db.close() + if self.if_database_opened: + self.cur.close() + self.db.close() self.if_database_opened = False def clear_maa_config(self) -> None: diff --git a/app/services/system.py b/app/services/system.py index 583d641..839ab34 100644 --- a/app/services/system.py +++ b/app/services/system.py @@ -74,7 +74,7 @@ class SystemHandler: winreg.KEY_ALL_ACCESS | winreg.KEY_WRITE | winreg.KEY_CREATE_SUB_KEY, ) winreg.SetValueEx( - key, self.config.app_name, 0, winreg.REG_SZ, self.config.app_path_sys + key, "AUTO_MAA主程序", 0, winreg.REG_SZ, self.config.app_path_sys ) winreg.CloseKey(key) elif ( @@ -89,7 +89,7 @@ class SystemHandler: winreg.KEY_SET_VALUE, winreg.KEY_ALL_ACCESS | winreg.KEY_WRITE | winreg.KEY_CREATE_SUB_KEY, ) - winreg.DeleteValue(key, self.config.app_name) + winreg.DeleteValue(key, "AUTO_MAA主程序") winreg.CloseKey(key) def is_startup(self): @@ -103,7 +103,7 @@ class SystemHandler: ) try: - value, _ = winreg.QueryValueEx(key, self.config.app_name) + value, _ = winreg.QueryValueEx(key, "AUTO_MAA主程序") winreg.CloseKey(key) return True except FileNotFoundError: diff --git a/app/ui/main_window.py b/app/ui/main_window.py index 974925e..59e020a 100644 --- a/app/ui/main_window.py +++ b/app/ui/main_window.py @@ -198,7 +198,6 @@ class AUTO_MAA(MSFluentWindow): ) self.splashScreen.finish() - self.show_main() if self.config.global_config.get(self.config.global_config.update_IfAutoUpdate): result = self.setting.check_update() diff --git a/app/utils/package.py b/app/utils/package.py index d1e424b..18f6d08 100644 --- a/app/utils/package.py +++ b/app/utils/package.py @@ -46,25 +46,20 @@ if __name__ == "__main__": print("Packaging AUTO_MAA main program ...") - result = subprocess.run( - f"powershell -Command nuitka --standalone --onefile --mingw64" - f" --enable-plugins=pyside6 --windows-console-mode=disable" - f" --onefile-tempdir-spec=%TEMP%\\AUTO_MAA" - f" --windows-icon-from-ico=resources\\icons\\AUTO_MAA.ico" - f" --company-name='AUTO_MAA Team' --product-name=AUTO_MAA" + os.system( + "powershell -Command python -m nuitka --standalone --onefile --mingw64" + " --enable-plugins=pyside6 --windows-console-mode=disable" + " --onefile-tempdir-spec='{TEMP}\\AUTO_MAA'" + " --windows-icon-from-ico=resources\\icons\\AUTO_MAA.ico" + " --company-name='AUTO_MAA Team' --product-name=AUTO_MAA" f" --file-version={version["main_version"]}" f" --product-version={version["main_version"]}" - f" --file-description='AUTO_MAA Component'" - f" --copyright='Copyright © 2024 DLmaster361'" - f" --assume-yes-for-downloads --output-filename=AUTO_MAA" - f" --remove-output main.py", - shell=True, - capture_output=True, - text=True, + " --file-description='AUTO_MAA Component'" + " --copyright='Copyright © 2024 DLmaster361'" + " --assume-yes-for-downloads --output-filename=AUTO_MAA" + " --remove-output main.py" ) - print(result.stdout) - print(result.stderr) print("AUTO_MAA main program packaging completed !") shutil.copy(root_path / "app/utils/Updater.py", root_path) @@ -80,25 +75,20 @@ if __name__ == "__main__": print("Packaging AUTO_MAA update program ...") - result = subprocess.run( - f"powershell -Command nuitka --standalone --onefile --mingw64" - f" --enable-plugins=pyside6 --windows-console-mode=disable" - f" --onefile-tempdir-spec=%TEMP%\\AUTO_MAA_Updater" - f" --windows-icon-from-ico=resources\\icons\\AUTO_MAA_Updater.ico" - f" --company-name='AUTO_MAA Team' --product-name=AUTO_MAA" + os.system( + "powershell -Command python -m nuitka --standalone --onefile --mingw64" + " --enable-plugins=pyside6 --windows-console-mode=disable" + " --onefile-tempdir-spec='{TEMP}\\AUTO_MAA_Updater'" + " --windows-icon-from-ico=resources\\icons\\AUTO_MAA_Updater.ico" + " --company-name='AUTO_MAA Team' --product-name=AUTO_MAA" f" --file-version={version["updater_version"]}" f" --product-version={version["main_version"]}" - f" --file-description='AUTO_MAA Component'" - f" --copyright='Copyright © 2024 DLmaster361'" - f" --assume-yes-for-downloads --output-filename=Updater" - f" --remove-output Updater.py", - shell=True, - capture_output=True, - text=True, + " --file-description='AUTO_MAA Component'" + " --copyright='Copyright © 2024 DLmaster361'" + " --assume-yes-for-downloads --output-filename=Updater" + " --remove-output Updater.py" ) - print(result.stdout) - print(result.stderr) print("AUTO_MAA update program packaging completed !") (root_path / "Updater.py").unlink() diff --git a/main.py b/main.py index 51163da..c225ba8 100644 --- a/main.py +++ b/main.py @@ -48,5 +48,6 @@ if __name__ == "__main__": application.installTranslator(translator) window = AUTO_MAA(config=config, notify=notify, crypto=crypto, system=system) + window.show_main() window.setting.check_PASSWORD() sys.exit(application.exec()) From ff7e4336344547f74c3158c00c40e11e5013ee27 Mon Sep 17 00:00:00 2001 From: DLmaster Date: Sun, 12 Jan 2025 11:59:22 +0800 Subject: [PATCH 08/12] =?UTF-8?q?fix(gui):=20=E4=BF=AE=E5=A4=8D=E7=95=8C?= =?UTF-8?q?=E9=9D=A2=E6=98=BE=E7=A4=BA=E7=9A=84=E8=8B=A5=E5=B9=B2=E6=96=B9?= =?UTF-8?q?=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/services/system.py | 6 +- app/ui/main_window.py | 239 +++++++++++++++++---------------------- app/ui/member_manager.py | 44 ++----- app/ui/queue_manager.py | 55 ++------- app/ui/setting.py | 34 +----- main.py | 4 +- 6 files changed, 129 insertions(+), 253 deletions(-) diff --git a/app/services/system.py b/app/services/system.py index 839ab34..b531408 100644 --- a/app/services/system.py +++ b/app/services/system.py @@ -74,7 +74,7 @@ class SystemHandler: winreg.KEY_ALL_ACCESS | winreg.KEY_WRITE | winreg.KEY_CREATE_SUB_KEY, ) winreg.SetValueEx( - key, "AUTO_MAA主程序", 0, winreg.REG_SZ, self.config.app_path_sys + key, "AUTO_MAA", 0, winreg.REG_SZ, self.config.app_path_sys ) winreg.CloseKey(key) elif ( @@ -89,7 +89,7 @@ class SystemHandler: winreg.KEY_SET_VALUE, winreg.KEY_ALL_ACCESS | winreg.KEY_WRITE | winreg.KEY_CREATE_SUB_KEY, ) - winreg.DeleteValue(key, "AUTO_MAA主程序") + winreg.DeleteValue(key, "AUTO_MAA") winreg.CloseKey(key) def is_startup(self): @@ -103,7 +103,7 @@ class SystemHandler: ) try: - value, _ = winreg.QueryValueEx(key, "AUTO_MAA主程序") + value, _ = winreg.QueryValueEx(key, "AUTO_MAA") winreg.CloseKey(key) return True except FileNotFoundError: diff --git a/app/ui/main_window.py b/app/ui/main_window.py index 59e020a..9b84506 100644 --- a/app/ui/main_window.py +++ b/app/ui/main_window.py @@ -26,70 +26,30 @@ v4.2 """ from PySide6.QtWidgets import ( - QWidget, # - QMainWindow, # - QApplication, # - QSystemTrayIcon, # - QFileDialog, # - QTabWidget, # - QToolBox, # - QTableWidgetItem, # - QHeaderView, # - QVBoxLayout, + QApplication, + QSystemTrayIcon, ) from qfluentwidgets import ( Action, PushButton, - LineEdit, - PasswordLineEdit, - TextBrowser, - TableWidget, - TimePicker, SystemTrayMenu, - ComboBox, - CheckBox, - SpinBox, SplashScreen, FluentIcon, - RoundMenu, - MessageBox, - MessageBoxBase, InfoBar, InfoBarPosition, - BodyLabel, - Dialog, setTheme, Theme, - SystemThemeListener, - qconfig, MSFluentWindow, NavigationItemPosition, ) from PySide6.QtUiTools import QUiLoader from PySide6.QtGui import QIcon, QCloseEvent from PySide6 import QtCore -from functools import partial -from typing import List, Tuple -from pathlib import Path -import json -import datetime -import ctypes -import subprocess -import shutil -import win32gui -import win32process -import psutil -import pyautogui -import time -import winreg -import requests uiLoader = QUiLoader() -from app import AppConfig, MaaConfig +from app import AppConfig from app.services import Notification, CryptoHandler, SystemHandler -from app.utils import Updater, version_text -from .Widget import InputMessageBox, LineEditSettingCard, SpinBoxSettingCard from .setting import Setting from .member_manager import MemberManager from .queue_manager import QueueManager @@ -97,8 +57,6 @@ from .queue_manager import QueueManager class AUTO_MAA(MSFluentWindow): - if_save = True - def __init__( self, config: AppConfig, @@ -121,7 +79,7 @@ class AUTO_MAA(MSFluentWindow): setTheme(Theme.AUTO) self.splashScreen = SplashScreen(self.windowIcon(), self) - self.show() + self.show_ui("显示主窗口", if_quick=True) # 创建主窗口 self.setting = Setting(self.config, self.notify, self.crypto, self.system, self) @@ -163,7 +121,11 @@ class AUTO_MAA(MSFluentWindow): # 显示主界面菜单项 self.tray_menu.addAction( - Action(FluentIcon.CAFE, "显示主界面", triggered=self.show_main) + Action( + FluentIcon.CAFE, + "显示主界面", + triggered=lambda: self.show_ui("显示主窗口"), + ) ) self.tray_menu.addSeparator() @@ -193,12 +155,21 @@ class AUTO_MAA(MSFluentWindow): # 设置托盘菜单 self.tray.setContextMenu(self.tray_menu) self.tray.activated.connect(self.on_tray_activated) + self.setting.ui.card_IfShowTray.checkedChanged.connect( - lambda x: self.tray.show() if x else self.tray.hide() + lambda: self.show_ui("配置托盘") ) + self.setting.ui.card_IfToTray.checkedChanged.connect(self.set_min_method) self.splashScreen.finish() + def start_up_task(self) -> None: + """启动时任务""" + + # 检查密码 + self.setting.check_PASSWORD() + + # 检查更新 if self.config.global_config.get(self.config.global_config.update_IfAutoUpdate): result = self.setting.check_update() if result == "已是最新版本~": @@ -229,95 +200,70 @@ class AUTO_MAA(MSFluentWindow): info.addWidget(Up) info.show() - def show_tray(self): - """最小化到托盘""" - if self.if_save: - self.set_ui("保存") - self.hide() - self.tray.show() + def set_min_method(self) -> None: + """设置最小化方法""" + + if self.config.global_config.get(self.config.global_config.ui_IfToTray): + + self.titleBar.minBtn.clicked.disconnect() + self.titleBar.minBtn.clicked.connect(lambda: self.show_ui("隐藏到托盘")) - def show_main(self): - """显示主界面""" - self.set_ui("配置") - if self.config.global_config.get(self.config.global_config.ui_IfShowTray): - self.tray.show() else: - self.tray.hide() + + self.titleBar.minBtn.clicked.disconnect() + self.titleBar.minBtn.clicked.connect(self.showMinimized) def on_tray_activated(self, reason): """双击返回主界面""" if reason == QSystemTrayIcon.DoubleClick: - self.show_main() + self.show_ui("显示主窗口") - def start_task(self, mode): - """调起对应任务""" - if self.main.MaaManager.isRunning(): - self.notify.push_notification( - f"无法运行{mode}!", - "当前已有任务正在运行,请在该任务结束后重试", - "当前已有任务正在运行,请在该任务结束后重试", - 3, - ) - else: - self.main.maa_starter(mode) + # def start_task(self, mode): + # """调起对应任务""" + # if self.main.MaaManager.isRunning(): + # self.notify.push_notification( + # f"无法运行{mode}!", + # "当前已有任务正在运行,请在该任务结束后重试", + # "当前已有任务正在运行,请在该任务结束后重试", + # 3, + # ) + # else: + # self.main.maa_starter(mode) - def stop_task(self): - """中止当前任务""" - if self.main.MaaManager.isRunning(): - if ( - self.main.MaaManager.mode == "日常代理" - or self.main.MaaManager.mode == "人工排查" - ): - self.main.maa_ender(f"{self.main.MaaManager.mode}_结束") - elif "设置MAA" in self.main.MaaManager.mode: - self.notify.push_notification( - "正在设置MAA!", - "正在运行设置MAA任务,无法中止", - "正在运行设置MAA任务,无法中止", - 3, - ) - else: - self.notify.push_notification( - "无任务运行!", - "当前无任务正在运行,无需中止", - "当前无任务正在运行,无需中止", - 3, - ) + # def stop_task(self): + # """中止当前任务""" + # if self.main.MaaManager.isRunning(): + # if ( + # self.main.MaaManager.mode == "日常代理" + # or self.main.MaaManager.mode == "人工排查" + # ): + # self.main.maa_ender(f"{self.main.MaaManager.mode}_结束") + # elif "设置MAA" in self.main.MaaManager.mode: + # self.notify.push_notification( + # "正在设置MAA!", + # "正在运行设置MAA任务,无法中止", + # "正在运行设置MAA任务,无法中止", + # 3, + # ) + # else: + # self.notify.push_notification( + # "无任务运行!", + # "当前无任务正在运行,无需中止", + # "当前无任务正在运行,无需中止", + # 3, + # ) - def kill_main(self): + def kill_main(self) -> None: """退出主程序""" self.close() QApplication.quit() - def set_ui(self, mode): - """设置窗口相关属性""" + def show_ui(self, mode: str, if_quick: bool = False) -> None: + """配置窗口状态""" - # 保存窗口相关属性 - if mode == "保存": - - self.config.global_config.set( - self.config.global_config.ui_size, - f"{self.geometry().width()}x{self.geometry().height()}", - ) - self.config.global_config.set( - self.config.global_config.ui_location, - f"{self.geometry().x()}x{self.geometry().y()}", - ) - if self.isMaximized(): - self.config.global_config.set( - self.config.global_config.ui_maximized, True - ) - else: - self.config.global_config.set( - self.config.global_config.ui_maximized, False - ) - self.config.global_config.save() - - # 配置窗口相关属性 - elif mode == "配置": - - self.if_save = False + if mode == "显示主窗口": + # 配置主窗口 size = list( map( int, @@ -335,29 +281,50 @@ class AUTO_MAA(MSFluentWindow): ) ) self.setGeometry(location[0], location[1], size[0], size[1]) - if self.config.global_config.get(self.config.global_config.ui_maximized): - self.showMaximized() + self.show() + if not if_quick: + if self.config.global_config.get( + self.config.global_config.ui_maximized + ): + self.showMaximized() + self.set_min_method() + self.show_ui("配置托盘") + + elif mode == "配置托盘": + + if self.config.global_config.get(self.config.global_config.ui_IfShowTray): + self.tray.show() else: - self.showNormal() + self.tray.hide() - self.if_save = True + elif mode == "隐藏到托盘": - def changeEvent(self, event: QtCore.QEvent): - """重写后的 changeEvent""" + # 保存窗口相关属性 + if not self.isMaximized(): - # 最小化到托盘功能实现 - if event.type() == QtCore.QEvent.WindowStateChange: - if self.windowState() & QtCore.Qt.WindowMinimized: - if self.config.global_config.get(self.config.global_config.ui_IfToTray): - self.show_tray() + self.config.global_config.set( + self.config.global_config.ui_size, + f"{self.geometry().width()}x{self.geometry().height()}", + ) + self.config.global_config.set( + self.config.global_config.ui_location, + f"{self.geometry().x()}x{self.geometry().y()}", + ) + self.config.global_config.set( + self.config.global_config.ui_maximized, self.isMaximized() + ) + self.config.global_config.save() - # 保留其它 changeEvent 方法 - return super().changeEvent(event) + # 隐藏主窗口 + if not if_quick: + + self.hide() + self.tray.show() def closeEvent(self, event: QCloseEvent): """清理残余进程""" - self.set_ui("保存") + self.show_ui("隐藏到托盘", if_quick=True) # 清理各功能线程 # self.main.Timer.stop() diff --git a/app/ui/member_manager.py b/app/ui/member_manager.py index e9c3a58..1558b76 100644 --- a/app/ui/member_manager.py +++ b/app/ui/member_manager.py @@ -26,72 +26,41 @@ v4.2 """ from PySide6.QtWidgets import ( - QWidget, # - QMainWindow, # - QApplication, # - QSystemTrayIcon, # - QFileDialog, # - QTabWidget, # - QToolBox, # - QComboBox, # - QTableWidgetItem, # - QHeaderView, # + QWidget, + QFileDialog, + QTableWidgetItem, + QHeaderView, QVBoxLayout, QStackedWidget, - QHBoxLayout, ) from qfluentwidgets import ( Action, - PushButton, - LineEdit, - PasswordLineEdit, qconfig, TableWidget, Pivot, - TimePicker, ComboBox, - CheckBox, ScrollArea, - SpinBox, FluentIcon, - SwitchButton, - RoundMenu, MessageBox, - MessageBoxBase, HeaderCardWidget, - BodyLabel, CommandBar, setTheme, Theme, - SwitchSettingCard, ExpandGroupSettingCard, - SingleDirectionScrollArea, PushSettingCard, ) from PySide6.QtUiTools import QUiLoader -from PySide6.QtGui import QIcon, QCloseEvent from PySide6 import QtCore from functools import partial -from typing import List, Tuple -from pathlib import Path -import os +from typing import List import datetime import json -import subprocess import shutil -import win32gui -import win32process -import psutil -import pyautogui -import time -import winreg -import requests uiLoader = QUiLoader() from app import AppConfig, MaaConfig from app.services import Notification, CryptoHandler -from app.utils import Updater, version_text from .Widget import ( InputMessageBox, LineEditSettingCard, @@ -396,6 +365,9 @@ class MemberSettingBox(QWidget): member_list = self.search_member() + if len(member_list) == 0: + return None + if index > len(member_list): return None diff --git a/app/ui/queue_manager.py b/app/ui/queue_manager.py index d594aa4..0148c6b 100644 --- a/app/ui/queue_manager.py +++ b/app/ui/queue_manager.py @@ -26,75 +26,36 @@ v4.2 """ from PySide6.QtWidgets import ( - QWidget, # - QMainWindow, # - QApplication, # - QSystemTrayIcon, # - QFileDialog, # - QTabWidget, # - QToolBox, # - QComboBox, # - QTableWidgetItem, # - QHeaderView, # + QWidget, QVBoxLayout, QStackedWidget, QHBoxLayout, ) from qfluentwidgets import ( Action, - PushButton, - LineEdit, - PasswordLineEdit, qconfig, - TableWidget, Pivot, - TimePicker, - ComboBox, - CheckBox, ScrollArea, - SpinBox, FluentIcon, - SwitchButton, - RoundMenu, MessageBox, - MessageBoxBase, HeaderCardWidget, - BodyLabel, CommandBar, setTheme, Theme, SwitchSettingCard, - ExpandGroupSettingCard, - SingleDirectionScrollArea, ) from PySide6.QtUiTools import QUiLoader -from PySide6.QtGui import QIcon, QCloseEvent from PySide6 import QtCore -from functools import partial -from typing import List, Tuple -from pathlib import Path -import os -import datetime +from typing import List import json -import subprocess import shutil -import win32gui -import win32process -import psutil -import pyautogui -import time -import winreg -import requests uiLoader = QUiLoader() -from app import AppConfig, QueueConfig, MaaConfig -from app.services import Notification, CryptoHandler -from app.utils import Updater, version_text +from app import AppConfig, QueueConfig +from app.services import Notification from .Widget import ( - InputMessageBox, LineEditSettingCard, - SpinBoxSettingCard, TimeEditSettingCard, NoOptionComboBoxSettingCard, ) @@ -261,7 +222,10 @@ class QueueManager(QWidget): def refresh(self): """刷新调度队列界面""" - index = int(self.queue_manager.pivot.currentRouteKey()[5:]) + if len(self.queue_manager.search_queue()) == 0: + index = 0 + else: + index = int(self.queue_manager.pivot.currentRouteKey()[5:]) self.queue_manager.clear_SettingBox() self.queue_manager.show_SettingBox(index) @@ -312,6 +276,9 @@ class QueueSettingBox(QWidget): queue_list = self.search_queue() + if len(queue_list) == 0: + return None + if index > len(queue_list): return None diff --git a/app/ui/setting.py b/app/ui/setting.py index 6155c9d..f522b40 100644 --- a/app/ui/setting.py +++ b/app/ui/setting.py @@ -26,56 +26,26 @@ v4.2 """ from PySide6.QtWidgets import ( - QWidget, # - QMainWindow, # - QApplication, # - QSystemTrayIcon, # - QFileDialog, # - QTabWidget, # - QToolBox, # - QComboBox, # - QTableWidgetItem, # - QHeaderView, # + QWidget, + QApplication, QVBoxLayout, - QHBoxLayout, ) from qfluentwidgets import ( - Action, - PushButton, - LineEdit, - PasswordLineEdit, - TextBrowser, - TableWidget, - TimePicker, - ComboBox, - CheckBox, ScrollArea, - SpinBox, FluentIcon, setTheme, Theme, MessageBox, - MessageBoxBase, HeaderCardWidget, - BodyLabel, InfoBar, InfoBarPosition, - SubtitleLabel, - GroupHeaderCardWidget, SwitchSettingCard, ExpandGroupSettingCard, - SingleDirectionScrollArea, PushSettingCard, ) from PySide6.QtUiTools import QUiLoader -from PySide6.QtGui import QIcon, QCloseEvent from PySide6 import QtCore -from functools import partial -from typing import List, Tuple -from pathlib import Path import json -import datetime -import ctypes import subprocess import time import requests diff --git a/main.py b/main.py index c225ba8..6a44d3b 100644 --- a/main.py +++ b/main.py @@ -48,6 +48,6 @@ if __name__ == "__main__": application.installTranslator(translator) window = AUTO_MAA(config=config, notify=notify, crypto=crypto, system=system) - window.show_main() - window.setting.check_PASSWORD() + window.show_ui("显示主窗口") + window.start_up_task() sys.exit(application.exec()) From 7e08c88a3ec7558de4d81290632f69ea49fe7eef Mon Sep 17 00:00:00 2001 From: DLmaster Date: Sat, 25 Jan 2025 18:00:56 +0800 Subject: [PATCH 09/12] =?UTF-8?q?feat(core):=E5=88=9D=E6=AD=A5=E5=AE=8C?= =?UTF-8?q?=E6=88=90=E5=AE=9A=E6=97=B6=E6=89=A7=E8=A1=8C=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 12 +- Updater.exe | 0 app/__init__.py | 5 +- app/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 818 bytes app/__pycache__/config.cpython-312.pyc | Bin 0 -> 19115 bytes app/__pycache__/task_manager.cpython-312.pyc | Bin 0 -> 7150 bytes app/__pycache__/timer.cpython-312.pyc | Bin 0 -> 3363 bytes app/core/__init__.py | 45 + app/core/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 659 bytes app/core/__pycache__/config.cpython-312.pyc | Bin 0 -> 21589 bytes .../__pycache__/main_info_bar.cpython-312.pyc | Bin 0 -> 2158 bytes .../__pycache__/task_manager.cpython-312.pyc | Bin 0 -> 11605 bytes app/core/__pycache__/timer.cpython-312.pyc | Bin 0 -> 4078 bytes app/{ => core}/config.py | 73 +- app/core/main_info_bar.py | 92 + app/core/task_manager.py | 222 + app/core/timer.py | 119 + app/models/MAA.py | 447 +- app/models/__pycache__/MAA.cpython-312.pyc | Bin 0 -> 34278 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 420 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 537 bytes .../__pycache__/notification.cpython-312.pyc | Bin 0 -> 3534 bytes .../__pycache__/security.cpython-312.pyc | Bin 0 -> 6933 bytes .../__pycache__/system.cpython-312.pyc | Bin 0 -> 4953 bytes app/services/notification.py | 2 +- app/services/security.py | 2 +- app/services/system.py | 2 +- app/ui/__pycache__/Widget.cpython-312.pyc | Bin 0 -> 14323 bytes app/ui/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 431 bytes .../dispatch_center.cpython-312.pyc | Bin 0 -> 20114 bytes .../__pycache__/main_window.cpython-312.pyc | Bin 0 -> 14633 bytes .../member_manager.cpython-312.pyc | Bin 0 -> 72264 bytes .../__pycache__/queue_manager.cpython-312.pyc | Bin 0 -> 29172 bytes app/ui/__pycache__/setting.cpython-312.pyc | Bin 0 -> 25764 bytes app/ui/dispatch_center.py | 359 ++ app/ui/else.py | 169 +- app/ui/main_window.py | 62 +- app/ui/member_manager.py | 69 +- app/ui/queue_manager.py | 60 +- app/ui/setting.py | 23 +- app/utils/__pycache__/Updater.cpython-312.pyc | Bin 0 -> 16996 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 466 bytes app/utils/__pycache__/version.cpython-312.pyc | Bin 0 -> 1115 bytes config/MaaConfig/脚本_1/Default/gui.json | 334 ++ config/MaaConfig/脚本_1/config.json | 15 + config/MaaConfig/脚本_1/user_data.db | Bin 0 -> 12288 bytes config/MaaConfig/脚本_2/Default/gui.json | 335 ++ config/MaaConfig/脚本_2/config.json | 15 + config/MaaConfig/脚本_2/user_data.db | Bin 0 -> 12288 bytes config/QueueConfig/调度队列_1.json | 44 + config/QueueConfig/调度队列_2.json | 44 + config/QueueConfig/调度队列_3.json | 44 + config/config.json | 32 + config/history.json | 18 + data/gameid.txt | 5 + data/key/AES_password_verify.bin | 1 + data/key/PASSWORDsalt.txt | 1 + data/key/private_key.bin | Bin 0 -> 1696 bytes data/key/public_key.pem | 9 + data/key/verifysalt.txt | 1 + debug/AUTO_MAA.log | 3682 +++++++++++++++++ log.txt | 10 + main.py | 12 +- requirements.txt | 1 + 64 files changed, 5858 insertions(+), 508 deletions(-) create mode 100644 Updater.exe create mode 100644 app/__pycache__/__init__.cpython-312.pyc create mode 100644 app/__pycache__/config.cpython-312.pyc create mode 100644 app/__pycache__/task_manager.cpython-312.pyc create mode 100644 app/__pycache__/timer.cpython-312.pyc create mode 100644 app/core/__init__.py create mode 100644 app/core/__pycache__/__init__.cpython-312.pyc create mode 100644 app/core/__pycache__/config.cpython-312.pyc create mode 100644 app/core/__pycache__/main_info_bar.cpython-312.pyc create mode 100644 app/core/__pycache__/task_manager.cpython-312.pyc create mode 100644 app/core/__pycache__/timer.cpython-312.pyc rename app/{ => core}/config.py (86%) create mode 100644 app/core/main_info_bar.py create mode 100644 app/core/task_manager.py create mode 100644 app/core/timer.py create mode 100644 app/models/__pycache__/MAA.cpython-312.pyc create mode 100644 app/models/__pycache__/__init__.cpython-312.pyc create mode 100644 app/services/__pycache__/__init__.cpython-312.pyc create mode 100644 app/services/__pycache__/notification.cpython-312.pyc create mode 100644 app/services/__pycache__/security.cpython-312.pyc create mode 100644 app/services/__pycache__/system.cpython-312.pyc create mode 100644 app/ui/__pycache__/Widget.cpython-312.pyc create mode 100644 app/ui/__pycache__/__init__.cpython-312.pyc create mode 100644 app/ui/__pycache__/dispatch_center.cpython-312.pyc create mode 100644 app/ui/__pycache__/main_window.cpython-312.pyc create mode 100644 app/ui/__pycache__/member_manager.cpython-312.pyc create mode 100644 app/ui/__pycache__/queue_manager.cpython-312.pyc create mode 100644 app/ui/__pycache__/setting.cpython-312.pyc create mode 100644 app/ui/dispatch_center.py create mode 100644 app/utils/__pycache__/Updater.cpython-312.pyc create mode 100644 app/utils/__pycache__/__init__.cpython-312.pyc create mode 100644 app/utils/__pycache__/version.cpython-312.pyc create mode 100644 config/MaaConfig/脚本_1/Default/gui.json create mode 100644 config/MaaConfig/脚本_1/config.json create mode 100644 config/MaaConfig/脚本_1/user_data.db create mode 100644 config/MaaConfig/脚本_2/Default/gui.json create mode 100644 config/MaaConfig/脚本_2/config.json create mode 100644 config/MaaConfig/脚本_2/user_data.db create mode 100644 config/QueueConfig/调度队列_1.json create mode 100644 config/QueueConfig/调度队列_2.json create mode 100644 config/QueueConfig/调度队列_3.json create mode 100644 config/config.json create mode 100644 config/history.json create mode 100644 data/gameid.txt create mode 100644 data/key/AES_password_verify.bin create mode 100644 data/key/PASSWORDsalt.txt create mode 100644 data/key/private_key.bin create mode 100644 data/key/public_key.pem create mode 100644 data/key/verifysalt.txt create mode 100644 debug/AUTO_MAA.log create mode 100644 log.txt diff --git a/README.md b/README.md index e6e67f2..381448b 100644 --- a/README.md +++ b/README.md @@ -27,14 +27,14 @@ MAA多账号管理与自动化软件 1. **配置:** 根据对应用户的配置信息,生成配置文件并将其导入MAA。 2. **监测:** 在MAA开始代理后,持续读取MAA的日志以判断其运行状态。当软件认定MAA出现异常时,通过重启MAA使之仍能继续完成任务。 -3. **循环:** 重复上述步骤,使MAA依次完成各个用户的日常代理任务。 +3. **循环:** 重复上述步骤,使MAA依次完成各个用户的自动代理任务。 ### 优势 - **节省运行开销:** 只需要一份MAA软件与一个模拟器,无需多开就能完成多账号代理,羸弱的电脑也能代理日常。 - **自定义空间大:** 依靠高级用户配置模式,支持MAA几乎所有设置选项自定义,同时保留对模拟器多开的支持。 - **一键代理无忧:** 无须中途手动修改MAA配置,将繁琐交给AUTO_MAA,把游戏留给自己。 -- **代理结果复核:** 通过人工排查功能核实各用户代理情况,堵住日常代理的最后一丝风险。 +- **代理结果复核:** 通过人工排查功能核实各用户代理情况,堵住自动代理的最后一丝风险。 ## 重要声明 @@ -127,8 +127,8 @@ MAA多账号管理与自动化软件 - `MAA路径`:该项无法直接编辑,仅用于展示当前程序所绑定MAA的路径。 - `浏览`:选择MAA文件夹。 - `设置MAA`:编辑MAA全局配置,具体使用方法参见前文。 -- `日常限制`:执行日常代理的日常部分时的超时阈值,当MAA日志无变化时间超过阈值时,视为超时。 -- `剿灭限制`:执行日常代理的剿灭部分时的超时阈值,当MAA日志无变化时间超过阈值时,视为超时。 +- `日常限制`:执行自动代理的日常部分时的超时阈值,当MAA日志无变化时间超过阈值时,视为超时。 +- `剿灭限制`:执行自动代理的剿灭部分时的超时阈值,当MAA日志无变化时间超过阈值时,视为超时。 - `运行失败重试次数上限`:对于每一用户,若超过该次数限制仍未完成代理,视为代理失败。 - `开机自动启动AUTO_MAA`:实现AUTO_MAA的自启动。 - `AUTO_MAA启动时禁止电脑休眠`:仅阻止电脑自动休眠,不会影响屏幕是否熄灭。 @@ -154,8 +154,8 @@ MAA多账号管理与自动化软件 - `状态`:用户的状态,禁用时将不再对其进行代理或排查。 - `执行情况`:当日执行情况,不可编辑。 - `关卡`、`备选关卡-1`、`备选关卡-2`:关卡号。 - - `日常`:单独设定是否进行日常代理的日常部分,可进一步配置MAA的具体代理任务,该配置与全局MAA配置相互独立。 - - `剿灭`:单独设定是否进行日常代理的剿灭部分,高级配置模式下可进一步配置MAA的具体代理任务,该配置与全局MAA配置相互独立。 + - `日常`:单独设定是否进行自动代理的日常部分,可进一步配置MAA的具体代理任务,该配置与全局MAA配置相互独立。 + - `剿灭`:单独设定是否进行自动代理的剿灭部分,高级配置模式下可进一步配置MAA的具体代理任务,该配置与全局MAA配置相互独立。 - `自定义基建`:是否启用自定义基建功能,需要进一步配置自定义基建文件,该配置与其他用户相互独立。 - `密码`:仅用于登记用户的密码,可留空。 - `备注`:用于备注用户信息。 diff --git a/Updater.exe b/Updater.exe new file mode 100644 index 0000000..e69de29 diff --git a/app/__init__.py b/app/__init__.py index 4ec17e7..a07fab1 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -29,7 +29,7 @@ __version__ = "4.2.0" __author__ = "DLmaster361 " __license__ = "GPL-3.0 license" -from .config import AppConfig, QueueConfig, MaaConfig +from .core import AppConfig, QueueConfig, MaaConfig, Task, TaskManager, MainTimer from .models import MaaManager from .services import Notification, CryptoHandler, SystemHandler from .ui import AUTO_MAA @@ -39,6 +39,9 @@ __all__ = [ "AppConfig", "QueueConfig", "MaaConfig", + "Task", + "TaskManager", + "MainTimer", "MaaManager", "Notification", "CryptoHandler", diff --git a/app/__pycache__/__init__.cpython-312.pyc b/app/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6f92029f5b8f592bef2c7cc96c0e45ddaf58e208 GIT binary patch literal 818 zcmaKp&ui2`6vrpK$tIg@c57{`AZqc{2rgYK6-p^xTF^s(xY%BXg&}OxHJC}lBw4yW zt%sfzswY7_dD8ztwEhL2JXr=x54KcKwifTcS+hNOa1I~dk9qUH^WJCE)DfK3=R56F z1)*=k8Jt{ZoNa>f5;+JXN5Ybm!#O99^N#E&zDyOY&;l+{6{}Rk8ZF`?)v+!i$QOKr zmT;+WtG-FgxJ)a!LWl5BKc@K?=rA7c+eQB(9l;}X6pu=%jU4@rgvYvuRZ3@|yg3jq zK@@`Hvjaz5nXgSxRa+sQ+p64quykvxIyvrpEjNhW9}={-3cOg4qJ=Qn@Y>vHq;BeF zPI1|`GgDr(Y34$$Hu$`ibNY1YLd8{iDj}pNM*7B>=ChofGVH~6a~bp znITXTFa^p26~KyhiK~P-VT%xM5Hfh4aGel4O&*2pZz7uwIC3jw?*AL}0u3G4kNX0+ z7Q3tiqmBQO!gHzDm&27b@!PXHEYn%U}idq+DjnuGB)?I>yz z;sstpNHywmZ5FzxzB|XRLYY`*d>3$%mn7-*rXtBFWmFmK8GB}}r|*@o_l#rI_=+0) b=-L6A|AOZC(d7d)@k=fnxhE>S0=0htzs~0~ literal 0 HcmV?d00001 diff --git a/app/__pycache__/config.cpython-312.pyc b/app/__pycache__/config.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..de7a882eaacaa791c419f9e29f0426ad12c071be GIT binary patch literal 19115 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 literal 0 HcmV?d00001 diff --git a/app/__pycache__/task_manager.cpython-312.pyc b/app/__pycache__/task_manager.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..02a6d68dfefbd8f56439901c8afc7cdb4cf48e50 GIT binary patch literal 7150 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 literal 0 HcmV?d00001 diff --git a/app/__pycache__/timer.cpython-312.pyc b/app/__pycache__/timer.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8cb95542bd1621f6e9aba09743e884e2bd9d58bb GIT binary patch literal 3363 zcmb7GYfu~46~4RLU9DbN*dRc*fj}_`2igF(vFkd)rg755IMi-B)?n{!v@0T6TFJXB z+fXrOTG|SS3}QMR@S`=fGYuVksDETSOq`^Tzx{)3JYqI+hfa9@Dt^^zfA!p5tz>)n z)2q?F=f2K8_w4z;d;acn*%6e6s~`5p9SD7eJ7%GC!XpWUaU>u=5(t5e5K+=k5?HoG zEK$l&=`t0eql}-?WjbQ@TVbA#uzprx1Z%_=wfpT+hu;D7jKD^mQJ3FEAQBx#f^7&1 zc9FbcG0yWB_0c{@;x*{mJAQETICre0BQGq?-d>u$vV3W3dFIN>_@9<9PutJ8HMiK8 zKD)Ly__Kd~dZqL2D6goZ%(d=)#lDU;`UuV1{lk#ZE2UBOX5zlY*gM&326E4H0%YPV&mxW4y%oigEy}HcQ@9hhgLw;42aN z3Gf#wumT}k1X84eR0;*bV?!=KEl@+q&j>WsR)G=OASqafD8DU*E)stG3FNckb3@X} zP*jvPCSaK2RN-_knme8{&xRH|4*ws4_tCG2air!ahp8m`5X?(jZs5y7AyAS?B91hA zFhfEw=X!)xn>ilV1H*EYu&9PI_@oY`&I3KG z(;qB@+j{>Ts)d~g*$Q70Ou17t4>kf+OG6`iC6vI4XTmLz=@{aTl0M}CwljE<2bUJ4B` z1GJilKsYbu41y+%Eq|eyc82poURWT|X7~(PlYmOW>P1QBJW_~}P|^bT-UJSt1^#&g zcKk%$VrmxHqy^u|)DG}NVf>L_DB*1{3_w?~!O4`#iv${(p-`Va0NfiO2j~kB+zId= z%28qZkIR>)mu~-VHU0CY+qZ!t*RjbOg~M8N;`+N1|6T+lSz~eUgs5`;MRli|>Y`0` zLUr962kMTk!yACsv3Us$v1c`}Ph4M4jRV6bFn-qloL-w6F~+)lcFn1Xyc~F+JC_g> zqDBL!_KF%S@T!O-TeC>93mU7aau9cQ)M!pQAxR;rmy3iHz*SrhNvaM@jpYS_!))hc z8`t_4JrFq#oJRIixuAC@1;7^-+0U-Z`Fi+t>O_)l^6Z9 zq9)z3u&r!@89O-n^7Ogsz+839oo%ffG%7AlzdPofxHwHrDide!x?f(XsDWWu=>~$0 zkDaKjD(k7wc92#0$c2*)5AM}35k)T3%`=JVChW|n3zt=yb4zBatK z>*F7H{Q+K7{j(^T3JmvZE^t2ww5M{|vHfKQM?W|5HtbL^GQrghvbp5#AZv^)stH+o z&a6D~1a;!+ML;en469!(;rvThm=TD62;{K&EEgv7R3-oD|JJq%p$K_c1MR(I(B7ux zViBmD^o^XQdw>>I3^cuLMk0mRdVm5df}gn;zuw_IxtKceE4~@2{Fv&^TL|>=eF}D; zK(*)!-_~{N8~1^2~3R zKL4P9tC5a;vl}DbNR9fL#^$gRlQcr^rxR+hsU4CfR+IuU0r1`Bvl)PA;i2Q=y!yVz zh!+9#ibnNDV()2GEG|kKrE8!fF<#IZSSd;Zys@en_0f8?$-BWe&4yQT!B9lhh@jjI zL-|)W2lQGP>-Rhxe+6Rd#_O*_rH7xVJY`>Wx<}s{ek<#&&N!>*YWHQF`?8K#Gmcm1 z9UTjmHP_ExKAWv<$yBz??Rhg(`DS+K@yyQS3-0oNTgb|yv<-sTQ#F2O?9AkmTlMKP z^Q8x7`7gIuUEhCs|77>ogXzwv7UcQ%qT6eLb8`Pjho%nQYMZNRzvte+;Q$>QMab=) zV=JE8VBuWpf&VI)UjN$QIb2Wwt)4#oEt`+%f-DBo7tDGbr`b6!8WR!`EIT=1Ts~sV z$T&h}{I=;?gid*K8+0`aQ>=_Vqq%bFNkEK5I1Z4EpIsfvuNg#%15?J;E5z;$2Q!s^mkkR+5Dyw@f_hSfh+X%Q_deSF1#*0WwydIt`>5_Q(@uEP L)+Y!WUETix-JB#7 literal 0 HcmV?d00001 diff --git a/app/core/__init__.py b/app/core/__init__.py new file mode 100644 index 0000000..ae97862 --- /dev/null +++ b/app/core/__init__.py @@ -0,0 +1,45 @@ +# +# 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.2 +作者:DLmaster_361 +""" + +__version__ = "4.2.0" +__author__ = "DLmaster361 " +__license__ = "GPL-3.0 license" + +from .config import AppConfig, QueueConfig, MaaConfig +from .main_info_bar import MainInfoBar +from .task_manager import Task, TaskManager +from .timer import MainTimer + +__all__ = [ + "AppConfig", + "QueueConfig", + "MaaConfig", + "MainInfoBar", + "Task", + "TaskManager", + "MainTimer", +] diff --git a/app/core/__pycache__/__init__.cpython-312.pyc b/app/core/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b73b8f0b491fb274c3c5901bdc5215f916f94d23 GIT binary patch literal 659 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 UpLhRMQJ~OX)qO$1gDC0$19SRJHvj+t literal 0 HcmV?d00001 diff --git a/app/core/__pycache__/main_info_bar.cpython-312.pyc b/app/core/__pycache__/main_info_bar.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cf0a9268b0a8da7e9791abbdd968f638df5c72eb GIT binary patch literal 2158 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
  • O$&#tE^(k({MXof>Etk0EiH>A=f}d^yRKY^I(a#CuTf+5zQOH7A7f?X_;Q^2~b2-c+L{ z-&x@uyXGvj^Ux6I3mh|d&zc`J-*V*78LH2KxBFTvbc7OL(ysacu{wPQ_~gf^pqvx$ zU4HN9S)q%YajBp{MUsiMmGwLK?rn9OHANJWU5(IOc8UrxS%_82%;8=@Gnt?G0#R_G zP^c2Q6hSV^x|*^%67B9Gg0z2ep?J*|e+b|y8OI8B7Wm^<$AN$ehkEEhyDCQ6eRHPNk zz%;j2;=YyhWwptvI5V$;fkjk!l7&3+`=0Kgh77%*Y-cS6x<^`=UI|k^y5p|m}wZ7s&Cu3eH?5WQVAM>HozjF4|YbXC!;q1$a z<5%AwFSzPJJmc-tDt{N;cPJHv;mLIkxo3h;vjXtV6;;r|Z0xlwXUFmG1JBxTKO2!v zj{?%rE%wQ@rQcuyr>GiOU4Tll6QWi(rztqrAptI!%n_L6P_`43DD(tkwr=6v7dUSJq!{~kS4#~NEsCl}iZ0HBSDXoaD4cCKXHIo|eR zNy@Qh+EF@PvOM8W)|}}`{15;IQZZqcHawKx@R+pWu`e2?_W$twhNq|2d!{@Gr(Dl| zt=APV8a2ViMOh`_5n##?&iT44ym`VoAx!T2!ubV1*(&WgFtzo7)X+Y)u3cLF z#C0Uk)VmC;;{NLtB$+kEhWdm)LqU?<^bID8$i>OJ%g7RuuU&h^Ugch`cz@r4053Gv zw?&@{@SQ?5BBBE&o3iB!Qpa>f;GjULvWkOE1w~n+V(xy1$TJ_*f>WiFOa=dRdB@} zVjpykHfv-bL>WCz(_gPP(9BI6MVEg?t^SHC{|#mRZ>mzztOJWOVjnS6=U_I^*1TZlL7w^hKdq% literal 0 HcmV?d00001 diff --git a/app/core/__pycache__/timer.cpython-312.pyc b/app/core/__pycache__/timer.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..98994b9c349098da6f1975c1019ef8f075ef793c GIT binary patch literal 4078 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 Usl%-g*rOEXh#MXv@>OO23vS1;Z2$lO literal 0 HcmV?d00001 diff --git a/app/config.py b/app/core/config.py similarity index 86% rename from app/config.py rename to app/core/config.py index 3e9eb18..123356a 100644 --- a/app/config.py +++ b/app/core/config.py @@ -25,9 +25,9 @@ v4.2 作者:DLmaster_361 """ +from loguru import logger import sqlite3 import json -import os import sys from pathlib import Path from typing import Dict, Union @@ -37,11 +37,9 @@ from qfluentwidgets import ( qconfig, OptionsConfigItem, RangeConfigItem, - OptionsValidator, FolderValidator, BoolValidator, RangeValidator, - EnumSerializer, ) @@ -52,13 +50,17 @@ class AppConfig: self.app_path = Path(sys.argv[0]).resolve().parent # 获取软件根目录 self.app_path_sys = str(Path(sys.argv[0]).resolve()) # 获取软件自身的路径 + self.log_path = self.app_path / "debug/AUTO_MAA.log" self.database_path = self.app_path / "data/data.db" self.config_path = self.app_path / "config/config.json" + self.history_path = self.app_path / "config/history.json" self.key_path = self.app_path / "data/key" self.gameid_path = self.app_path / "data/gameid.txt" self.version_path = self.app_path / "resources/version.json" self.PASSWORD = "" + self.running_list = [] + self.if_silence_needed = 0 self.if_database_opened = False # 检查文件完整性 @@ -70,6 +72,7 @@ class AppConfig: # 检查目录 (self.app_path / "config").mkdir(parents=True, exist_ok=True) (self.app_path / "data").mkdir(parents=True, exist_ok=True) + (self.app_path / "debug").mkdir(parents=True, exist_ok=True) # (self.app_path / "data/MAAconfig/simple").mkdir(parents=True, exist_ok=True) # (self.app_path / "data/MAAconfig/beta").mkdir(parents=True, exist_ok=True) # (self.app_path / "data/MAAconfig/Default").mkdir(parents=True, exist_ok=True) @@ -90,18 +93,47 @@ class AppConfig: encoding="utf-8", ) + self.init_logger() self.init_config() # self.check_database() + logger.info("程序配置管理模块初始化完成") + + def init_logger(self) -> None: + """初始化日志记录器""" + + # logger.remove(0) + + # logger.add( + # sink=sys.stdout, + # level="DEBUG", + # format="{time:YYYY-MM-DD HH:mm:ss.SSS} | {level: <8} | {message}", + # enqueue=True, + # backtrace=True, + # diagnose=True, + # ) + logger.add( + sink=self.log_path, + level="DEBUG", + format="{time:YYYY-MM-DD HH:mm:ss.SSS} | {level: <8} | {message}", + enqueue=True, + backtrace=True, + diagnose=True, + rotation="1 week", + retention="1 month", + compression="zip", + ) + + logger.info("日志记录器初始化完成") def init_config(self) -> None: """初始化配置类""" self.global_config = GlobalConfig() - qconfig.load(self.config_path, self.global_config) - self.queue_config = QueueConfig() self.maa_config = MaaConfig() + logger.info("配置类初始化完成") + def init_database(self, mode: str) -> None: """初始化用户数据库""" @@ -113,6 +145,8 @@ class AppConfig: self.cur.execute("INSERT INTO version VALUES(?)", ("v1.3",)) self.db.commit() + logger.info("用户数据库初始化完成") + def check_database(self) -> None: """检查用户数据库文件并处理数据库版本更新""" @@ -196,10 +230,9 @@ class AppConfig: """打开数据库""" self.close_database() - if mode == "Maa": - self.db = sqlite3.connect( - self.app_path / f"config/{mode}Config/{index}/user_date.db" - ) + self.db = sqlite3.connect( + self.app_path / f"config/{mode}Config/{index}/user_data.db" + ) self.cur = self.db.cursor() self.if_database_opened = True @@ -211,6 +244,28 @@ class AppConfig: self.db.close() self.if_database_opened = False + def save_history(self, key: str, content: dict) -> None: + """保存历史记录""" + + history = {} + if self.history_path.exists(): + with self.history_path.open(mode="r", encoding="utf-8") as f: + history = json.load(f) + history[key] = content + with self.history_path.open(mode="w", encoding="utf-8") as f: + json.dump(history, f, indent=4) + + def get_history(self, key: str) -> dict: + """获取历史记录""" + + history = {} + if self.history_path.exists(): + with self.history_path.open(mode="r", encoding="utf-8") as f: + history = json.load(f) + return history.get( + key, {"Time": "0000-00-00 00:00", "History": "暂无历史运行记录"} + ) + def clear_maa_config(self) -> None: """清空MAA配置""" diff --git a/app/core/main_info_bar.py b/app/core/main_info_bar.py new file mode 100644 index 0000000..349df7e --- /dev/null +++ b/app/core/main_info_bar.py @@ -0,0 +1,92 @@ +# +# 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.2 +作者:DLmaster_361 +""" + +from loguru import logger +from PySide6.QtCore import Qt +from qfluentwidgets import ( + InfoBar, + InfoBarPosition, +) + + +class _MainInfoBar: + """信息通知栏""" + + def __init__(self, parent=None): + + self.parent = parent + + def push_info_bar(self, mode: str, title: str, content: str, time: int): + """推送到信息通知栏""" + + if self.parent is None: + logger.error("信息通知栏未设置父窗口") + return None + + if mode == "success": + InfoBar.success( + title=title, + content=content, + orient=Qt.Horizontal, + isClosable=True, + position=InfoBarPosition.TOP_RIGHT, + duration=time, + parent=self.parent, + ) + elif mode == "warning": + InfoBar.warning( + title=title, + content=content, + orient=Qt.Horizontal, + isClosable=True, + position=InfoBarPosition.TOP_RIGHT, + duration=time, + parent=self.parent, + ) + elif mode == "error": + InfoBar.error( + title=title, + content=content, + orient=Qt.Horizontal, + isClosable=True, + position=InfoBarPosition.TOP_RIGHT, + duration=time, + parent=self.parent, + ) + elif mode == "info": + InfoBar.info( + title=title, + content=content, + orient=Qt.Horizontal, + isClosable=True, + position=InfoBarPosition.TOP_RIGHT, + duration=time, + parent=self.parent, + ) + + +MainInfoBar = _MainInfoBar() diff --git a/app/core/task_manager.py b/app/core/task_manager.py new file mode 100644 index 0000000..452df8c --- /dev/null +++ b/app/core/task_manager.py @@ -0,0 +1,222 @@ +# +# 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.2 +作者:DLmaster_361 +""" + +from loguru import logger +from PySide6.QtWidgets import QApplication +from PySide6 import QtCore +import json +from typing import Dict, Union, List + +from .config import AppConfig +from .main_info_bar import MainInfoBar +from app.models import MaaManager +from app.services import Notification + + +class Task(QtCore.QThread): + """业务线程""" + + push_info_bar = QtCore.Signal(str, str, str, int) + update_user_info = QtCore.Signal(list, list, list, list, list, list) + create_task_list = QtCore.Signal(list) + create_user_list = QtCore.Signal(list) + update_task_list = QtCore.Signal(list) + update_user_list = QtCore.Signal(list) + update_log_text = QtCore.Signal(str) + accomplish = QtCore.Signal(list) + + def __init__( + self, + config: AppConfig, + notify: Notification, + name: str, + info: Dict[str, Dict[str, Union[str, int, bool]]], + ): + super(Task, self).__init__() + + self.config = config + self.notify = notify + self.name = name + self.info = info + + self.logs = [] + + def run(self): + + self.member_dict = self.search_member() + self.task_list = [ + [value, "等待"] + for _, value in self.info["Queue"].items() + if value != "禁用" + ] + + self.create_task_list.emit(self.task_list) + + for i in range(len(self.task_list)): + + if self.isInterruptionRequested(): + break + + self.task_list[i][1] = "运行" + self.update_task_list.emit(self.task_list) + + if self.task_list[i][0] not in self.config.running_list: + + self.config.running_list.append(self.task_list[i][0]) + logger.info(f"任务开始:{self.task_list[i][0]}") + self.push_info_bar.emit("info", "任务开始", self.task_list[i][0], 5000) + + if self.member_dict[self.task_list[i][0]][0] == "Maa": + + self.task = MaaManager( + self.config, + self.notify, + "自动代理", + self.member_dict[self.task_list[i][0]][1], + ) + + self.task.push_info_bar.connect(self.push_info_bar.emit) + self.task.create_user_list.connect(self.create_user_list.emit) + self.task.update_user_list.connect(self.update_user_list.emit) + self.task.update_log_text.connect(self.update_log_text.emit) + self.task.update_user_info.connect(self.update_user_info.emit) + self.task.accomplish.connect( + lambda log: self.save_log(self.task_list[i][0], log) + ) + + self.task.run() + + self.config.running_list.remove(self.task_list[i][0]) + + self.task_list[i][1] = "完成" + logger.info(f"任务完成:{self.task_list[i][0]}") + self.push_info_bar.emit("info", "任务完成", self.task_list[i][0], 5000) + + else: + + self.task_list[i][1] = "跳过" + logger.info(f"跳过任务:{self.task_list[i][0]}") + self.push_info_bar.emit("info", "跳过任务", self.task_list[i][0], 5000) + + self.accomplish.emit(self.logs) + + def search_member(self) -> dict: + """搜索所有脚本实例并固定相关配置信息""" + + member_dict = {} + + if (self.config.app_path / "config/MaaConfig").exists(): + for subdir in (self.config.app_path / "config/MaaConfig").iterdir(): + if subdir.is_dir(): + + member_dict[subdir.name] = ["Maa", subdir] + + return member_dict + + def save_log(self, name: str, log: dict): + """保存保存任务结果""" + + self.logs.append([name, log]) + + +class TaskManager(QtCore.QObject): + """业务调度器""" + + create_gui = QtCore.Signal(Task) + push_info_bar = QtCore.Signal(str, str, str, int) + + def __init__(self, config: AppConfig, notify: Notification): + super(TaskManager, self).__init__() + + self.config = config + self.notify = notify + + self.task_list: Dict[str, Task] = {} + + def add_task( + self, mode: str, name: str, info: Dict[str, Dict[str, Union[str, int, bool]]] + ): + """添加任务""" + + if ( + mode == "运行队列" + and name not in self.config.running_list + and name not in self.task_list + ): + + logger.info(f"任务开始:{name}") + MainInfoBar.push_info_bar("info", "任务开始", name, 5000) + + self.config.running_list.append(name) + self.task_list[name] = Task(self.config, self.notify, name, info) + self.task_list[name].push_info_bar.connect(MainInfoBar.push_info_bar) + self.task_list[name].accomplish.connect( + lambda logs: self.remove_task(name, logs) + ) + self.create_gui.emit(self.task_list[name]) + self.task_list[name].start() + + def stop_task(self, name: str): + """中止任务""" + + logger.info(f"中止任务:{name}") + MainInfoBar.push_info_bar("info", "中止任务", name, 5000) + + if name == "ALL": + + for name in self.task_list: + + self.task_list[name].task.requestInterruption() + self.task_list[name].requestInterruption() + self.task_list[name].quit() + self.task_list[name].wait() + + elif name in self.task_list: + + self.task_list[name].task.requestInterruption() + self.task_list[name].requestInterruption() + self.task_list[name].quit() + self.task_list[name].wait() + + def remove_task(self, name: str, logs: str): + """移除任务标记""" + + logger.info(f"任务结束:{name}") + MainInfoBar.push_info_bar("info", "任务结束", name, 5000) + + if len(logs) > 0: + time = logs[0][1]["Time"] + history = "" + for log in logs: + self.config.save_history(log[0], log[1]) + history += ( + f"任务名称:{log[0]},{log[1]["History"].replace("\n","\n ")}\n" + ) + self.config.save_history(name, {"Time": time, "History": history}) + + self.task_list.pop(name) + self.config.running_list.remove(name) diff --git a/app/core/timer.py b/app/core/timer.py new file mode 100644 index 0000000..9c38a41 --- /dev/null +++ b/app/core/timer.py @@ -0,0 +1,119 @@ +# +# 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.2 +作者:DLmaster_361 +""" + +from loguru import logger +from PySide6.QtWidgets import QWidget +from PySide6 import QtCore +import json +import datetime + +from .config import AppConfig +from .task_manager import TaskManager +from app.services import SystemHandler + + +class MainTimer(QWidget): + + def __init__( + self, + config: AppConfig, + system: SystemHandler, + task_manager: TaskManager, + parent=None, + ): + super().__init__(parent) + + self.config = config + self.system = system + self.task_manager = task_manager + + self.Timer = QtCore.QTimer() + self.Timer.timeout.connect(self.timed_start) + self.Timer.timeout.connect(self.set_silence) + self.Timer.start(1000) + + def timed_start(self): + """定时启动代理任务""" + + # 获取定时列表 + queue_list = self.search_queue() + + for i in queue_list: + + name, info = i + + if not info["QueueSet"]["Enabled"]: + continue + + history = self.config.get_history(name) + + time_set = [ + info["Time"][f"TimeSet_{_}"] + for _ in range(10) + if info["Time"][f"TimeEnabled_{_}"] + ] + # 按时间调起代理任务 + curtime = datetime.datetime.now().strftime("%Y-%m-%d %H:%M") + if ( + curtime[11:16] in time_set + and curtime != history["Time"][:16] + and name not in self.config.running_list + ): + + logger.info(f"按时间调起任务:{name}") + self.task_manager.add_task("运行队列", name, info) + + def set_silence(self): + """设置静默模式""" + # # 临时 + # windows = self.system.get_window_info() + # if any(emulator_path in _ for _ in windows): + # try: + # pyautogui.hotkey(*boss_key) + # except pyautogui.FailSafeException as e: + # 执行日志记录,暂时缺省 + logger.debug(self.config.running_list) + + def set_last_time(self): + """设置上次运行时间""" + + pass + + def search_queue(self) -> list: + """搜索所有调度队列实例""" + + queue_list = [] + + if (self.config.app_path / "config/QueueConfig").exists(): + for json_file in (self.config.app_path / "config/QueueConfig").glob( + "*.json" + ): + with json_file.open("r", encoding="utf-8") as f: + info = json.load(f) + queue_list.append([json_file.stem, info]) + + return queue_list diff --git a/app/models/MAA.py b/app/models/MAA.py index 2e7b953..76adb72 100644 --- a/app/models/MAA.py +++ b/app/models/MAA.py @@ -24,75 +24,76 @@ MAA功能组件 v4.2 作者:DLmaster_361 """ - +from loguru import logger from PySide6 import QtCore import json +import sqlite3 import datetime -import os import subprocess import shutil import time from pathlib import Path -from qfluentwidgets import ( - QConfig, - ConfigItem, - qconfig, - OptionsConfigItem, - RangeConfigItem, - OptionsValidator, - BoolValidator, - RangeValidator, - EnumSerializer, - FolderValidator, -) +from typing import List, Dict, Union -from app import AppConfig +from app.core import AppConfig +from app.services import Notification -class MaaManager(QtCore.QThread): +class MaaManager(QtCore.QObject): """MAA控制器""" - question = QtCore.Signal() - push_notification = QtCore.Signal(str, str, str, int) - send_mail = QtCore.Signal(str, str) - update_gui = QtCore.Signal(str, str, str, str, str) + question = QtCore.Signal(str, str) + question_response = QtCore.Signal(int) update_user_info = QtCore.Signal(list, list, list, list, list, list) - set_silence = QtCore.Signal(str, str, list) - accomplish = QtCore.Signal() + push_info_bar = QtCore.Signal(str, str, str, int) + create_user_list = QtCore.Signal(list) + update_user_list = QtCore.Signal(list) + update_log_text = QtCore.Signal(str) + accomplish = QtCore.Signal(dict) get_json = QtCore.Signal(list) - def __init__(self, config: AppConfig): + isInterruptionRequested = False + + def __init__( + self, + config: AppConfig, + notify: Notification, + mode: str, + config_path: Path, + ): super(MaaManager, self).__init__() self.config = config - self.mode = None - self.data = None + self.notify = notify + self.mode = mode + self.config_path = config_path + + with (self.config_path / "config.json").open("r", encoding="utf-8") as f: + self.set = json.load(f) + + db = sqlite3.connect(self.config_path / "user_data.db") + cur = db.cursor() + cur.execute("SELECT * FROM adminx WHERE True") + self.data = cur.fetchall() + self.data = [list(row) for row in self.data] + cur.close() + db.close() + self.get_json_path = [0, 0, 0] def configure(self): """提取配置信息""" - self.maa_root_path = Path(self.config.content["Default"]["MaaSet.path"]) - self.set_path = self.maa_root_path / "config/gui.json" - self.log_path = self.maa_root_path / "debug/gui.log" - self.maa_path = self.maa_root_path / "MAA.exe" - self.json_path = self.config.app_path / "data/MAAconfig" - self.routine = self.config.content["Default"]["TimeLimit.routine"] - self.annihilation = self.config.content["Default"]["TimeLimit.annihilation"] - self.num = self.config.content["Default"]["TimesLimit.run"] + self.maa_root_path = Path(self.set["MaaSet"]["Path"]) + self.maa_set_path = self.maa_root_path / "config/gui.json" + self.maa_log_path = self.maa_root_path / "debug/gui.log" + self.maa_exe_path = self.maa_root_path / "MAA.exe" self.boss_key = [ _.strip().lower() - for _ in self.config.content["Default"]["SelfSet.BossKey"].split("+") + for _ in self.config.global_config.get( + self.config.global_config.function_BossKey + ).split("+") ] - self.if_send_mail = bool( - self.config.content["Default"]["SelfSet.IfSendMail"] == "True" - ) - self.if_send_error_only = bool( - self.config.content["Default"]["SelfSet.IfSendMail.OnlyError"] == "True" - ) - self.if_silence = bool( - self.config.content["Default"]["SelfSet.IfSilence"] == "True" - ) def run(self): """主进程,运行MAA代理进程""" @@ -101,86 +102,86 @@ class MaaManager(QtCore.QThread): begin_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") self.configure() + # 检查MAA路径是否可用 + if not self.maa_exe_path.exists() or not self.maa_set_path.exists(): + + logger.error("未正确配置MAA路径,MAA代理进程中止") + self.push_info_bar.emit( + "error", "启动MAA代理进程失败", "您还未正确配置MAA路径!", -1 + ) + return None # 整理用户数据,筛选需代理的用户 self.data = sorted(self.data, key=lambda x: (-len(x[15]), x[16])) - wait_index = [] - over_index = [] - error_index = [] - all_index = [ - _ - for _ in range(len(self.data)) - if (self.data[_][3] != 0 and self.data[_][4] == "y") + user_list: List[List[str, str, int]] = [ + [_[0], "等待", index] + for index, _ in enumerate(self.data) + if (_[3] != 0 and _[4] == "y") ] + self.create_user_list.emit(user_list) - # 日常代理模式 - if self.mode == "日常代理": + # 自动代理模式 + if self.mode == "自动代理": # 执行情况预处理 - for _ in all_index: - if self.data[_][5] != curdate: - self.data[_][5] = curdate - self.data[_][14] = 0 - self.data[_][0] += f"_第{str(self.data[_][14] + 1)}次代理" + for _ in user_list: + if self.data[_[2]][5] != curdate: + self.data[_[2]][5] = curdate + self.data[_[2]][14] = 0 + _[0] += f" - 第{self.data[_[2]][14] + 1}次代理" # 开始代理 - for index in all_index: + for user in user_list: - if self.isInterruptionRequested(): + if self.isInterruptionRequested: break + user[1] = "运行" + self.update_user_list.emit(user_list) + # 初始化代理情况记录和模式替换记录 run_book = [False for _ in range(2)] - mode_book = ["日常代理_剿灭", "日常代理_日常"] + mode_book = ["自动代理_剿灭", "自动代理_日常"] - # 简洁模式用户默认开启日常代理 - if self.data[index][15] == "simple": - self.data[index][9] = "y" + # 简洁模式用户默认开启日常选项 + if self.data[user[2]][15] == "simple": + self.data[user[2]][9] = "y" # 尝试次数循环 - for i in range(self.num): + for i in range(self.set["RunSet"]["RunTimesLimit"]): - if self.isInterruptionRequested(): + if self.isInterruptionRequested: break # 剿灭-日常模式循环 for j in range(2): - if self.isInterruptionRequested(): + if self.isInterruptionRequested: break - if self.data[index][10 - j] == "n": + if self.data[user[2]][10 - j] == "n": run_book[j] = True continue if run_book[j]: continue # 配置MAA - self.set_maa(mode_book[j], index) + self.set_maa(mode_book[j], user[2]) # 记录当前时间 start_time = datetime.datetime.now() # 创建MAA任务 maa = subprocess.Popen( - [self.maa_path], + [self.maa_exe_path], shell=True, creationflags=subprocess.CREATE_NO_WINDOW, ) - # 启动静默进程 - if self.if_silence: - self.set_silence.emit( - "启用", self.get_emulator_path(), self.boss_key - ) + # 添加静默进程数量标记 + self.config.if_silence_needed += 1 # 记录是否超时的标记 self.if_time_out = False - # 更新运行信息 - wait_index = [ - _ - for _ in all_index - if (not _ in over_index + error_index + [index]) - ] # 监测MAA运行状态 - while not self.isInterruptionRequested(): + while not self.isInterruptionRequested: # 获取MAA日志 logs = self.get_maa_log(start_time) @@ -200,11 +201,17 @@ class MaaManager(QtCore.QThread): if ( j == 0 and now_time - latest_time - > datetime.timedelta(minutes=self.annihilation) + > datetime.timedelta( + minutes=self.set["RunSet"][ + "AnnihilationTimeLimit" + ] + ) ) or ( j == 1 and now_time - latest_time - > datetime.timedelta(minutes=self.routine) + > datetime.timedelta( + minutes=self.set["RunSet"]["RoutineTimeLimit"] + ) ): self.if_time_out = True @@ -213,38 +220,21 @@ class MaaManager(QtCore.QThread): # 更新MAA日志 if len(logs) > 100: - self.update_gui.emit( - f"{self.data[index][0]}_第{i + 1}次_{mode_book[j][5:7]}", - "\n".join([self.data[_][0] for _ in wait_index]), - "\n".join([self.data[_][0] for _ in over_index]), - "\n".join([self.data[_][0] for _ in error_index]), - "".join(logs[-100:]), - ) + self.update_log_text.emit("".join(logs[-100:])) else: - self.update_gui.emit( - f"{self.data[index][0]}_第{i + 1}次_{mode_book[j][5:7]}", - "\n".join([self.data[_][0] for _ in wait_index]), - "\n".join([self.data[_][0] for _ in over_index]), - "\n".join([self.data[_][0] for _ in error_index]), - "".join(logs), - ) + self.update_log_text.emit("".join(logs)) # 判断MAA程序运行状态 result = self.if_maa_success(log, mode_book[j]) if result == "Success!": run_book[j] = True - self.update_gui.emit( - f"{self.data[index][0]}_第{i + 1}次_{mode_book[j][5:7]}", - "\n".join([self.data[_][0] for _ in wait_index]), - "\n".join([self.data[_][0] for _ in over_index]), - "\n".join([self.data[_][0] for _ in error_index]), - "检测到MAA进程完成代理任务\n正在等待相关程序结束\n请等待10s", + self.update_log_text.emit( + "检测到MAA进程完成代理任务\n正在等待相关程序结束\n请等待10s" ) - # 关闭静默进程 - if self.if_silence: - self.set_silence.emit("禁用", "", []) + # 移除静默进程数量标记 + self.config.if_silence_needed -= 1 for _ in range(10): - if self.isInterruptionRequested(): + if self.isInterruptionRequested: break time.sleep(1) break @@ -254,13 +244,7 @@ class MaaManager(QtCore.QThread): else: # 打印中止信息 # 此时,log变量内存储的就是出现异常的日志信息,可以保存或发送用于问题排查 - self.update_gui.emit( - f"{self.data[index][0]}_第{i + 1}次_{mode_book[j][5:7]}", - "\n".join([self.data[_][0] for _ in wait_index]), - "\n".join([self.data[_][0] for _ in over_index]), - "\n".join([self.data[_][0] for _ in error_index]), - result, - ) + self.update_log_text.emit(result) # 无命令行中止MAA与其子程序 killprocess = subprocess.Popen( f"taskkill /F /T /PID {maa.pid}", @@ -268,39 +252,40 @@ class MaaManager(QtCore.QThread): creationflags=subprocess.CREATE_NO_WINDOW, ) killprocess.wait() - # 关闭静默进程 - if self.if_silence: - self.set_silence.emit("禁用", "", []) + # 移除静默进程数量标记 + self.config.if_silence_needed -= 1 # 推送异常通知 - self.push_notification.emit( - "用户日常代理出现异常!", - f"用户 {self.data[index][0].replace("_", " 今天的")}的{mode_book[j][5:7]}部分出现一次异常", - f"{self.data[index][0].replace("_", " ")}的{mode_book[j][5:7]}出现异常", + self.notify.push_notification( + "用户自动代理出现异常!", + f"用户 {user[0].replace("_", " 今天的")}的{mode_book[j][5:7]}部分出现一次异常", + f"{user[0].replace("_", " ")}的{mode_book[j][5:7]}出现异常", 1, ) for _ in range(10): - if self.isInterruptionRequested(): + if self.isInterruptionRequested: break time.sleep(1) break # 成功完成代理的用户修改相关参数 if run_book[0] and run_book[1]: - if self.data[index][14] == 0 and self.data[index][3] != -1: - self.data[index][3] -= 1 - self.data[index][14] += 1 - over_index.append(index) - self.push_notification.emit( - "成功完成一个日常代理任务!", - f"已完成用户 {self.data[index][0].replace("_", " 今天的")}任务", - f"已完成 {self.data[index][0].replace("_", " 的")}", + if self.data[user[2]][14] == 0 and self.data[user[2]][3] != -1: + self.data[user[2]][3] -= 1 + self.data[user[2]][14] += 1 + user[1] = "完成" + self.notify.push_notification( + "成功完成一个自动代理任务!", + f"已完成用户 {user[0].replace("_", " 今天的")}任务", + f"已完成 {user[0].replace("_", " 的")}", 3, ) break # 录入代理失败的用户 if not (run_book[0] and run_book[1]): - error_index.append(index) + user[1] = "异常" + + self.update_user_list.emit(user_list) # 人工排查模式 elif self.mode == "人工排查": @@ -308,47 +293,44 @@ class MaaManager(QtCore.QThread): # 标记是否需要启动模拟器 if_strat_app = True # 标识排查模式 - for _ in all_index: - self.data[_][0] += "_排查模式" + for _ in user_list: + _[0] += "_排查模式" # 开始排查 - for index in all_index: + for user in user_list: - if self.isInterruptionRequested(): + if self.isInterruptionRequested: break - if self.data[index][15] == "beta": + user[1] = "运行" + self.update_user_list.emit(user_list) + + if self.data[user[2]][15] == "beta": if_strat_app = True run_book = [False for _ in range(2)] # 启动重试循环 - while not self.isInterruptionRequested(): + while not self.isInterruptionRequested: # 配置MAA if if_strat_app: - self.set_maa("人工排查_启动模拟器", index) + self.set_maa("人工排查_启动模拟器", user[2]) if_strat_app = False else: - self.set_maa("人工排查_仅切换账号", index) + self.set_maa("人工排查_仅切换账号", user[2]) # 记录当前时间 start_time = datetime.datetime.now() # 创建MAA任务 maa = subprocess.Popen( - [self.maa_path], + [self.maa_exe_path], shell=True, creationflags=subprocess.CREATE_NO_WINDOW, ) - # 更新运行信息 - wait_index = [ - _ - for _ in all_index - if (not _ in over_index + error_index + [index]) - ] # 监测MAA运行状态 - while not self.isInterruptionRequested(): + while not self.isInterruptionRequested: # 获取MAA日志 logs = self.get_maa_log(start_time) @@ -357,45 +339,21 @@ class MaaManager(QtCore.QThread): # 更新MAA日志 if len(logs) > 100: - self.update_gui.emit( - self.data[index][0], - "\n".join([self.data[_][0] for _ in wait_index]), - "\n".join([self.data[_][0] for _ in over_index]), - "\n".join([self.data[_][0] for _ in error_index]), - "".join(logs[-100:]), - ) + self.update_log_text.emit("".join(logs[-100:])) else: - self.update_gui.emit( - self.data[index][0], - "\n".join([self.data[_][0] for _ in wait_index]), - "\n".join([self.data[_][0] for _ in over_index]), - "\n".join([self.data[_][0] for _ in error_index]), - "".join(logs), - ) + self.update_log_text.emit("".join(logs)) # 判断MAA程序运行状态 result = self.if_maa_success(log, "人工排查") if result == "Success!": run_book[0] = True - self.update_gui.emit( - self.data[index][0], - "\n".join([self.data[_][0] for _ in wait_index]), - "\n".join([self.data[_][0] for _ in over_index]), - "\n".join([self.data[_][0] for _ in error_index]), - "检测到MAA进程成功登录PRTS", - ) + self.update_log_text.emit("检测到MAA进程成功登录PRTS") break elif result == "Wait": # 检测时间间隔 time.sleep(1) else: - self.update_gui.emit( - self.data[index][0], - "\n".join([self.data[_][0] for _ in wait_index]), - "\n".join([self.data[_][0] for _ in over_index]), - "\n".join([self.data[_][0] for _ in error_index]), - result, - ) + self.update_log_text.emit(result) # 无命令行中止MAA与其子程序 killprocess = subprocess.Popen( f"taskkill /F /T /PID {maa.pid}", @@ -405,7 +363,7 @@ class MaaManager(QtCore.QThread): killprocess.wait() if_strat_app = True for _ in range(10): - if self.isInterruptionRequested(): + if self.isInterruptionRequested: break time.sleep(1) break @@ -414,7 +372,7 @@ class MaaManager(QtCore.QThread): if run_book[0]: break # 登录失败,询问是否结束循环 - elif not self.isInterruptionRequested(): + elif not self.isInterruptionRequested: self.question_title = "操作提示" self.question_info = "MAA未能正确登录到PRTS,是否重试?" self.question_choice = "wait" @@ -425,7 +383,7 @@ class MaaManager(QtCore.QThread): break # 登录成功,录入人工排查情况 - if run_book[0] and not self.isInterruptionRequested(): + if run_book[0] and not self.isInterruptionRequested: self.question_title = "操作提示" self.question_info = "请检查用户代理情况,如无异常请按下确认键。" self.question_choice = "wait" @@ -437,15 +395,19 @@ class MaaManager(QtCore.QThread): # 结果录入用户备注栏 if run_book[0] and run_book[1]: - if "未通过人工排查" in self.data[index][13]: - self.data[index][13] = self.data[index][13].replace( + if "未通过人工排查" in self.data[user[2]][13]: + self.data[user[2]][13] = self.data[user[2]][13].replace( "未通过人工排查|", "" ) - over_index.append(index) + user[1] = "完成" elif not (run_book[0] and run_book[1]): - if not "未通过人工排查" in self.data[index][13]: - self.data[index][13] = f"未通过人工排查|{self.data[index][13]}" - error_index.append(index) + if not "未通过人工排查" in self.data[user[2]][13]: + self.data[user[2]][ + 13 + ] = f"未通过人工排查|{self.data[user[2]][13]}" + user[1] = "异常" + + self.update_user_list.emit(user_list) # 设置MAA模式 elif "设置MAA" in self.mode: @@ -454,7 +416,7 @@ class MaaManager(QtCore.QThread): self.set_maa(self.mode, "") # 创建MAA任务 maa = subprocess.Popen( - [self.maa_path], + [self.maa_exe_path], shell=True, creationflags=subprocess.CREATE_NO_WINDOW, ) @@ -462,7 +424,7 @@ class MaaManager(QtCore.QThread): start_time = datetime.datetime.now() # 监测MAA运行状态 - while not self.isInterruptionRequested(): + while not self.isInterruptionRequested: # 获取MAA日志 logs = self.get_maa_log(start_time) @@ -483,13 +445,13 @@ class MaaManager(QtCore.QThread): elif "用户" in self.mode: self.get_json.emit(self.get_json_path) - self.accomplish.emit() + end_log = "" # 导出结果 - if self.mode in ["日常代理", "人工排查"]: + if self.mode in ["自动代理", "人工排查"]: # 关闭可能未正常退出的MAA进程 - if self.isInterruptionRequested(): + if self.isInterruptionRequested: killprocess = subprocess.Popen( f"taskkill /F /T /PID {maa.pid}", shell=True, @@ -498,14 +460,18 @@ class MaaManager(QtCore.QThread): killprocess.wait() # 更新用户数据 - modes = [self.data[_][15] for _ in all_index] - uids = [self.data[_][16] for _ in all_index] - days = [self.data[_][3] for _ in all_index] - lasts = [self.data[_][5] for _ in all_index] - notes = [self.data[_][13] for _ in all_index] - numbs = [self.data[_][14] for _ in all_index] + modes = [self.data[_[2]][15] for _ in user_list] + uids = [self.data[_[2]][16] for _ in user_list] + days = [self.data[_[2]][3] for _ in user_list] + lasts = [self.data[_[2]][5] for _ in user_list] + notes = [self.data[_[2]][13] for _ in user_list] + numbs = [self.data[_[2]][14] for _ in user_list] self.update_user_info.emit(modes, uids, days, lasts, notes, numbs) + error_index = [_[2] for _ in user_list if _[1] == "异常"] + over_index = [_[2] for _ in user_list if _[1] == "完成"] + wait_index = [_[2] for _ in user_list if _[1] == "等待"] + # 保存运行日志 end_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") end_log = ( @@ -518,46 +484,45 @@ class MaaManager(QtCore.QThread): f"{self.mode[2:4]}未成功的用户:\n" f"{"\n".join([self.data[_][0] for _ in error_index])}\n" ) - wait_index = [_ for _ in all_index if (not _ in over_index + error_index)] if len(wait_index) != 0: end_log += ( f"\n未开始{self.mode[2:4]}的用户:\n" f"{"\n".join([self.data[_][0] for _ in wait_index])}\n" ) - (self.config.app_path / "log.txt").write_text( - end_log, - encoding="utf-8", - ) - - # 恢复GUI运行面板 - self.update_gui.emit("", "", "", "", end_log) - # 推送代理结果通知 - self.push_notification.emit( + self.notify.push_notification( f"{self.mode[2:4]}任务已完成!", f"已完成用户数:{len(over_index)},未完成用户数:{len(error_index) + len(wait_index)}", f"已完成用户数:{len(over_index)},未完成用户数:{len(error_index) + len(wait_index)}", 10, ) - if self.if_send_mail and ( - not self.if_send_error_only - or (self.if_send_error_only and len(error_index) + len(wait_index) != 0) + if not self.config.global_config.get( + self.config.global_config.notify_IfSendErrorOnly + ) or ( + self.config.global_config.get( + self.config.global_config.notify_IfSendErrorOnly + ) + and len(error_index) + len(wait_index) != 0 ): - self.send_mail.emit( + self.notify.send_mail( f"{self.mode[:4]}任务报告", f"{end_log}\n\nAUTO_MAA 敬上\n\n我们根据您在 AUTO_MAA 中的设置发送了这封电子邮件,本邮件无需回复\n", ) - if not self.isInterruptionRequested(): - self.accomplish.emit() + self.accomplish.emit({"Time": begin_time, "History": end_log}) + + def requestInterruption(self) -> None: + + logger.info("申请中止本次任务") + self.isInterruptionRequested = True def get_maa_log(self, start_time): """获取MAA日志""" logs = [] if_log_start = False - with self.log_path.open(mode="r", encoding="utf-8") as f: + with self.maa_log_path.open(mode="r", encoding="utf-8") as f: for entry in f: if not if_log_start: try: @@ -576,8 +541,8 @@ class MaaManager(QtCore.QThread): def if_maa_success(self, log, mode): """判断MAA程序运行状态""" - if "日常代理" in mode: - if mode == "日常代理_日常" and "任务出错: Fight" in log: + if "自动代理" in mode: + if mode == "自动代理_日常" and "任务出错: Fight" in log: return "检测到MAA未能实际执行任务\n正在中止相关程序\n请等待10s" if "任务出错: StartUp" in log: return "检测到MAA未能正确登录PRTS\n正在中止相关程序\n请等待10s" @@ -591,7 +556,7 @@ class MaaManager(QtCore.QThread): return "检测到MAA进程异常\n正在中止相关程序\n请等待10s" elif self.if_time_out: return "检测到MAA进程超时\n正在中止相关程序\n请等待10s" - elif self.isInterruptionRequested(): + elif self.isInterruptionRequested: return "您中止了本次任务\n正在中止相关程序\n请等待" else: return "Wait" @@ -605,7 +570,7 @@ class MaaManager(QtCore.QThread): or ("MaaAssistantArknights GUI exited" in log) ): return "检测到MAA进程异常\n正在中止相关程序\n请等待10s" - elif self.isInterruptionRequested(): + elif self.isInterruptionRequested: return "您中止了本次任务\n正在中止相关程序\n请等待" else: return "Wait" @@ -623,49 +588,49 @@ class MaaManager(QtCore.QThread): if mode == "设置MAA_用户": set_book = ["simple", "beta"] if ( - self.json_path + self.config_path / f"{set_book[self.get_json_path[0]]}/{self.get_json_path[1]}/{self.get_json_path[2]}/gui.json" ).exists(): shutil.copy( - self.json_path + self.config_path / f"{set_book[self.get_json_path[0]]}/{self.get_json_path[1]}/{self.get_json_path[2]}/gui.json", - self.set_path, + self.maa_set_path, ) else: shutil.copy( - self.json_path / "Default/gui.json", - self.set_path, + self.config_path / "Default/gui.json", + self.maa_set_path, ) elif (mode == "设置MAA_全局") or ( - ("日常代理" in mode or "人工排查" in mode) + ("自动代理" in mode or "人工排查" in mode) and self.data[index][15] == "simple" ): shutil.copy( - self.json_path / "Default/gui.json", - self.set_path, + self.config_path / "Default/gui.json", + self.maa_set_path, ) - elif "日常代理" in mode and self.data[index][15] == "beta": - if mode == "日常代理_剿灭": + elif "自动代理" in mode and self.data[index][15] == "beta": + if mode == "自动代理_剿灭": shutil.copy( - self.json_path + self.config_path / f"beta/{self.data[index][16]}/annihilation/gui.json", - self.set_path, + self.maa_set_path, ) - elif mode == "日常代理_日常": + elif mode == "自动代理_日常": shutil.copy( - self.json_path / f"beta/{self.data[index][16]}/routine/gui.json", - self.set_path, + self.config_path / f"beta/{self.data[index][16]}/routine/gui.json", + self.maa_set_path, ) elif "人工排查" in mode and self.data[index][15] == "beta": shutil.copy( - self.json_path / f"beta/{self.data[index][16]}/routine/gui.json", - self.set_path, + self.config_path / f"beta/{self.data[index][16]}/routine/gui.json", + self.maa_set_path, ) - with self.set_path.open(mode="r", encoding="utf-8") as f: + with self.maa_set_path.open(mode="r", encoding="utf-8") as f: data = json.load(f) - # 日常代理配置 - if "日常代理" in mode: + # 自动代理配置 + if "自动代理" in mode: data["Current"] = "Default" # 切换配置 for i in range(1, 9): @@ -678,7 +643,7 @@ class MaaManager(QtCore.QThread): "Start.OpenEmulatorAfterLaunch" ] = "True" # 启动MAA后自动开启模拟器 - if self.if_silence: + if self.config.if_silence_needed > 0: data["Global"]["Start.MinimizeDirectly"] = "True" # 启动MAA后直接最小化 data["Global"]["GUI.UseTray"] = "True" # 显示托盘图标 data["Global"]["GUI.MinimizeToTray"] = "True" # 最小化时隐藏至托盘 @@ -869,7 +834,7 @@ class MaaManager(QtCore.QThread): ] = "False" # 自定义基建配置文件只读 data["Configurations"]["Default"][ "Infrast.CustomInfrastFile" - ] = f"{self.json_path}/simple/{self.data[index][16]}/infrastructure/infrastructure.json" # 自定义基建配置文件地址 + ] = f"{self.config_path}/simple/{self.data[index][16]}/infrastructure/infrastructure.json" # 自定义基建配置文件地址 # 人工排查配置 elif "人工排查" in mode: @@ -955,7 +920,7 @@ class MaaManager(QtCore.QThread): "Start.OpenEmulatorAfterLaunch" ] = "False" # 启动MAA后自动开启模拟器 - if self.if_silence: + if self.config.if_silence_needed > 0: data["Global"][ "Start.MinimizeDirectly" ] = "False" # 启动MAA后直接最小化 @@ -997,7 +962,7 @@ class MaaManager(QtCore.QThread): ] = "False" # 生息演算 # 覆写配置文件 - with self.set_path.open(mode="w", encoding="utf-8") as f: + with self.maa_set_path.open(mode="w", encoding="utf-8") as f: json.dump(data, f, indent=4) return True @@ -1006,7 +971,7 @@ class MaaManager(QtCore.QThread): """获取模拟器路径""" # 读取配置文件 - with self.set_path.open(mode="r", encoding="utf-8") as f: + with self.maa_set_path.open(mode="r", encoding="utf-8") as f: set = json.load(f) # 获取模拟器路径 return Path(set["Configurations"]["Default"]["Start.EmulatorPath"]) diff --git a/app/models/__pycache__/MAA.cpython-312.pyc b/app/models/__pycache__/MAA.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..19917a2c747ce0d7d799fa3a4ec48a11082de67a GIT binary patch literal 34278 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 KMxZcm=6?f$)&Iu; literal 0 HcmV?d00001 diff --git a/app/models/__pycache__/__init__.cpython-312.pyc b/app/models/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0ca3d0c791f6787032ce0c197a98345861188450 GIT binary patch literal 420 zcmX@j%ge<81e<=9r>nCtFgylvV1NnA_^bwGOlL@8h+;@#jABe-iegG(j$%$>Nny=l z$z_dVWn@TUOJ|H?t7O;YC^ZKv=5h=T@sIa)bc8dWtyuVccgxeBR<1G=JtM9sd*{4p zXnntDmWxkrVsS}oQM|F4Ay*YEP)^UFN(m+k6jZQ*aX?BO49$%7lJj%zs`%Xld~}WV z3>0!QlT-7GQ(rOy?bT$w#pRor=$n|An4Vfx#0(Vj(`3KJ9v`2QpBx{5i#tBPEVZaO zGd~Z=;fjw>EG@~%FM>!w%>iFbN@`AVOniK1US>&ryk0@&Ee;!?U};XOT@f!(H^`O6szBlc tGb1D8M=e%HmJfUk{9+B=CLeb)d0 literal 0 HcmV?d00001 diff --git a/app/services/__pycache__/__init__.cpython-312.pyc b/app/services/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6ae138a3c22a902af4be603a97ce983bd36c4cd1 GIT binary patch literal 537 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 J492A2{{dA-^ydHo literal 0 HcmV?d00001 diff --git a/app/ui/__pycache__/member_manager.cpython-312.pyc b/app/ui/__pycache__/member_manager.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e8fef47e9c6e17535ab5204259b8099809cde51e GIT binary patch literal 72264 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 literal 0 HcmV?d00001 diff --git a/app/ui/__pycache__/setting.cpython-312.pyc b/app/ui/__pycache__/setting.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8f57af6aaf55e2df5e2fa1eaa2e6eeea3c00676c GIT binary patch literal 25764 zcmeHwX?PUZwP5wC>P>1%t$l0lY9R^47Is@mYzD+4VaE!#BC8tcrnR`b+aM#^IKj5C zu@M0qFgS?V2_jBFP8=f)guJ|$_wr4a>9X3>J@uIP$c$PN^C#jV;(X5c%{S-V>Z&fa z8W2wMCf_%?z^U8k-h1v+_nv#sx#t$YGMV%ggnzqyWapp0N>Tp{e~3X7j@)@gK~cvk zhH9c11*3E++LTSoHdT|VP2HqcAWr4dv}v2PZE;O;ZFCderfbr*>6`Rzh9*OsvB}tG zYBIIOH^sLlG$oMyYL~e!u_=+nHLj$#p%~)`cB=3widU?&Nk0mSgpT>y|k(LxGhgOn4NYH zZ`@MT+39k$ws;&J?Yv>j<10J%ZfNQ1@Oo@|Uf$YrjZ0JCe@I$-BQ`^DX>upM22OX&GXy4)3 z$s0DdINH~>@90?B!a^sF^&K9^4zX{hTDGgx)3Fw+bJxR*2_SpA&Zo%BAAT?oKd#BeU>t^x>N4tF$i>C>cG( z4NM|qup5~;MzKQ;Q&-buVoV39rg#P>Y*RunwO7$(ZlG*Qd|bF$^}H6|7!HoM9Y>=J zev@(FwQe#1ty;0c@KnP;TnKmm3t-<;9H%@|;z4~k^#-tnZp{ZcBoGu-H{}$Wgn%ND zQOI&Ax~b;y(t@%|_=R& z6!UtD#n=o=C5w4IHZeAXQql-|DkG)D-a-$g(ezYD(jVAwX|z2H9-@@=4uF2HST6E( zE{ep(m=jrJRB$ejLcmX;Xq=99u9%J!`%Y$h!SruW@@jVXLQ`n;q>APjfSGa@#$do^je+J@qYZb{1I9vDJLYA5MG;w=JPs2tkKcwhBoZ#*wgGG(H2G&Jh5eA85E;o`PRUz-O#>R@0!&;>g?YU@A_>Pshdq$kyhjkBrQhMay5{CqSBu---0U{MB(O?h|6N?KbxXF74ZI%u zrxMpGfu7)|<33KxcAv=7~jqy69$VcCY%7AsFj1LYt4J9M3$G>8G^ z@{Vrr)d%UM0A0+{#r=$*o;8wTJ(bZLe9Ypv28%Au`f%28`U;?L zx{(4|2kI`aKfiuBWf5TXHPwY0cNo7()thA4`)BxtM=0w zH;~Y9dNm=DW*aCPR9`ZDXc$gg1{mXXqR_X)rh}#cUCPm=0eT@vFAUHtIC{m9=lZ_O z`vQ+Na*s6n>1{#Cr$49<(1jdb7@+5J^xOcwgrk=X&A-0%^3uT4MsBH?kI=Jmv@Jka zb98lpUd+*phl&DA>bWKLetHwqG9H96#qkKxl^k6epcioTfC^yiMg=CjXxOQ_uOZ6 z?j4v`6t89N9xvP88kX@9M5ilPM9@=#6VjqXEbTy)saZvrLPvSx#4=CZmE_3%do>ep7mSHrzzXJQfd}zO< zsYG%)B}qJjd-ytJdzm7li7;9w?yoayqS=FtS8Al?Vl0*hC5{K|*$QW-m^1QpO1e@6 z$4I&qDRsX$19PQMaVXuU^P*-j`riK0Gv5te{`l6*Z=l`d!r8IDS3(zGx%I8@)_YOp z7(M-c%=44iL%oCY)Zbq{G=A}tAP03-*JJ$aaPYEK#55E^W z@|qXLQ7Aw9qqC!@4~C5|vPM8PqsRM4fBe?Swd-TY21ZZ+VEo#}kt-hy)rVg0onC}R zJ;|0pb|aqNZSQLCZ1L>kwf4OZx5v%mh_Y({@M`;Bdn>PTpgn?Dqm6>dD7+DOL~+Mt z^_bPz+S1-?cdhh#JYcm^?{YA9-uMjpCG3H`$+@OpxJWVaKv!b6fhTY=AvP9Nx)pmnJb6QvxDZfL33`dd4*?S!66ObeI`Idh>v z&~Gjeno~tgHD|6K%=eq;2a_|7FFmsK*m59w+eRfMvp6eabIw1&MEY|%=M=lj%z3cH zVWDy1Agq?Qe(!|6^weo)BujooSbh9gk(e|jiRWRemr@YGq zw1Cd^T|(*aJ^V-uZxhP)-s62rwz|kmefV0$_X+hV9=>#s`p=r<=N`Vs@Em{b9%E7% z84EGitpNM&L$4)~pC~BV4EkH0=Y>pSkE;D!vX(yFTvw6u?4eN^g(N09YPCG1^!Zof zs(J0XvR0ZHOH?Z#u%^3JtP-TPv96S^6kFYac!O z1{|i1_V$HdJLAROLY`OXS2z)+#j&#&#xK0@T?NsIfOwC}QA|8>G1T|H(BZd7Kkl7A zM!&y$CaMF+&&BKjpk*CcP2|>F$4-u4yy(TzmnVkNk4$f%Jl9N`R&PrZ#8nm8nD{u9 zOT8XD*tbxYY;n1GmCN2vBvJNBsEutx@HGV65o|+1d42H- z#p^4;X3`(;oAbEutJ{ZDp6Xp4G$sX%d7LpXU@YQ{MSf$63{%M&D+gNq#yKDvi_+}P z)Xb5bieP$nFnvKV-4;x@g2bDf+J_QvdhYRkNA?}-i4tgkru@{l@@9JW8N*3KAbk#( zK4&oXQuc@0f$Ei9^~&MuI)D1A8~L+>+2z6Pg~4nqh_wZoCs3@-$P1*;;?idcrTpo0 zgXy^PbrHT(L0&{D*xwXS{SACYY`ete6x$d*wfzm}>>7wD%B`1tG za|=d_=LfAtLF@9MwK`}mgQ`k$PvF>DOU~>&x$ksO)X@A=`DyiIP*r~MIm1~)z`B&P zE)5oy4O9$iuNyBL1B=#ii`ES3qPfAM6_5vpvAm!khcUl2V4cTV z=LM{bIO`(6bxF`#B4TPdYt7H{{nol*q3zt#vrFG!9-OnFe_gQ1Hc1m|6~Ut2Q>Yb{ zPt7;6NXg-ho)i*MKRKWfJjXg%6e2D$woDH}x*(M#Iw zoH0xx5fes_rd#8bdKRf!Qns`Ts$HuFFO(PQQ`Ec42AR+kt2f=+FV!1ex2{{YyAByD zWAI4oNViJt*(vaOk>PbRyy;y{j~)bgJ>*G%`pslCV~D`uhL9wVqcc`|GGn=KdJ2;& zrbAt6?`j&TuJl5xnsO`lC>7L`lmh-7`r}^JlhhtXA?1;jv?4f+>48K19@--*X|WVB zP#nT0Or*xBd*WV*JM_PW=N`o#N}z1Z@XmoZC76>&hOP*P`LTn&V6hoJ^%2MgXtB9| zEOhGI!q1WGXGdSU$Sc?{G+xh+%0=guyt=Ie%qq0Ky|se@yL~-xYy&Tp=CBh9uc*3( zOX-U>yF8vw_mbJOcRD(c>S7Ui}0%d2s#F-$j!oZirIf0Q-f;T3NZm$}9AD zapJ=n#MqmIC<2jglVX-|F`?7r7e5+3@g^ql#+LT>4miF7-=B8R7b< zIzzeffQ-et%Ez(xPFG8--DVJ^7sU=fLG&vEX^9*zS>zL?S;Q)uu_AY82UzC#c(Dv? zZ|eZrN@3?!c9!LnrxXn*CQd;*zz-_w04i+CONgAE!SUygj);g9l>pv-l>0IOA|k~n z9sb(EuLVrSoT)fqD(6h)gQ}sOK2y2hwECC%H*yQkI8HhS6sKIhn?6@j@oN+#d4)HO z3CC1@&HYbvDf0sV0(fq@GGj>wEU?^xm2YC2g|a$SORu z?Buebr>qT zbE^J`{=~fF2}ctCG@$|f7jD$m2U6=6sD4fruTm)gX@RD0McgkGx>d6@ztE?xD$)F+ zL<4c&03tP++;CXk8s2ZAC`F+OkjMi6?Jr`&jFJVE50C{Ux2zr*iieT~R9|ZMR7cd_ zn0vB{iTe@~h6W5NWH6_KSPpFr{XC5L{fw4w^-hY>eMixwi5SZm{RiRQE-bfb!DNID zB_Y;v3}X;W;BIXSrdhTpW?bwP%t{-xymL2 z%^2>4^1QGLYej0YTof5Alg|_|h2m%-{b&uKPkCrk(gCF77SI6-dO*+V(MR+cr&X*g z@?@k{5!L~8FX({c5zqo4Ces3nyf`ZaEg)L>AN=O{PcDtV{VJT^jtsp%e(l=$^;4iG zu)CoI>q5{5pq}l-=(7O$gs@kYr~-Up5PX){DzK2*)WobA4OlGgMt~mI>@x_w2ymUS z&mq`@U@ri#82}2=f;1dDIRGNEaC9wGT-Ywm|2%?y2)YsUAb0`6iwO23cnQHb0C*Dt zh=R35n~!sQTR{nNlN!PTI5~c2zX|yrLk2L>6$(yN2awdu2wp+(DuP}F2NAr6;B^2z z-O|}fj#`G%V)(z@nG(l|agJE@k;p>u}1-VPh>w@r5Ag=Yfqi zF$ItNg~R^-9?m>Jkg$wPSmsYy!I#YS84JPQ_9aw-Nl*o>;3*JHnmageu-Io_1l|B( z?jmjjddieM1A}ZZAw_U52&QGtK$p0YUo7niSoo=NVbECMD_%BiTn3|HF7y>I{xo56uw>y!-M+f74u9oI-@+zeQ?vi; zt_g~22j$}qMYSkaqFV5EMJ+yRm8OxLM zt%^`tuOc+pqe`?vwG|%?svSa>o%qY4*oBW>s(q*^rF5&o{0uW7?93sW(SuoevH=>& zD+#-T2#z2@ODXwV4mMC#UVm%^kBn5~@I`kA=^hBIjy zD88ojfU%e}7WX>_bA2^cM>Y`2skFb=rn6V@GI$mN=iRETB6 zWfZ8zh!O~+#7#{IPGsj%0j$Hoqc9Lz#U#Y#@PqIVumIzE9SO0VNh0~W)HaP5^9nnb zWI~KV7YK6;fXv5jzYT4CpE`W(F{Z)&d^zE@DPm3y$-4-u3b(hyv7qh9ee+i(BR?mk3I^$_rYDHEdBDP!msh`CvUxaXynTNk;}ce zzIjb>&3l0eQ1vz~ixu5ljCcxC_;mUqd4L#2s25G@5}A7&FM5ILTyIk} z+7j_*LOWbUfSU>W=4P-kdtDeeHiMC-#U-S$c(Th{5a1C7i-SO1#v^B^?1zYZ7XYt* zrlZ5fK8n9_CXx>Frm(9zI0?F%o6jp)oQ7o5J}O8SIhYjzDj4o(0sQd*HDRXAmfNNU zn!KClj0p`qfzKu8OvGUfw)xx%9mc?oF88hhVt3jVnVO6{i=I_zawm4E3N*I<5gsM+L{grB zDeig7Sjz$QL9x}cvmbG~!#R}1`66dpvA7&MH3Kh>adsBVqVxmF{Tb?)xbKYX(lDSw z$E*wITU3}*mr+dYR>g9t1FAT8qk_0+z$o9V6pH*&K~`$!Zh10B1XqOOgeyYe<1zlt zYsBdy)OQh_N#L;I)`=^lKm5+vkFShfIWuzg$k^$AFD{3XD=&vrj{Ri(z!BjbLP&>G zqmiLEMy|dSy7pn{=o_IA4~H(lC7g7Oy>ejer5~PG^J)j&BjGh3hsR|nmuT=#39lD! z>#l>V$%5<4yC-j5IWanLHgxr{_YtTSPCP<=2S%>E2OiI3-#;EY{2n+!k9_iGsPE0t z;lc6iedA{jLG__m4~GVigf3nNKN-M-(@5y@k46s;f<99SR0y9C?s1d)O*>s3&$PIj zh1!L^4(B+FQX3eVRt?SmTZRAtLD@;?a2C)k}X!2up1t#FJX-UkwX zv$cfaa}N8SuphDxF6#)<^Mbnv@pUHc;I%@6z?-m9sQl~~_)`)5d_H^i^jlU{;%%94 zBgg(3Wc%ZO>IQ9^a#sfLll1NK(|K@HCXiarrIy3h6N7jiCV%dY#H>JK371$BOqw0E zYz5^&a8Ovpr7fD&X$tgsktKIBp30je%W4f;wnY85MrI5^rV@XOw)7&hIbzjJ65;gtET=yp|n;{;-!3e1d>%1UMAz zRRq@n$eB1{dI(O#Slq!y2Tc67I!jYNu0(>@nk}ISjmjYfV*`qF93BA@2w>gB|0&l)`_A>i3$S05? z<$w*2!NL8T-xWBamyjVTA|=QnR3zjWxdMdG%Go0O3n0nMf_H8d!2)YYmu%lJ}J!oWH`bB*raAmIUW>HlZ4qVTyL;$S;U)YH*}C&o^l2%Y-rX#cCkQ#dp< zG`jz#>4^f@!fhMeR6val9eNvBn^0W1;3lF`{CuZx{PlxYS}6vaUcHl zYiP<}MwbP>QH71h5V?MK<^(Q4#_pVDS{BNj&&02KrRzV ztL4&aBjV5m@S1`^&H^q6uKy3!U0;8B{cz4&Q~@(1x9Wk5RB;(q{; z$y6d43z5wF5p|(Q?MZ}|ksxaW?wU~n+JFWzeH0pg#xgNYF;YcX7oN0}z-S&&n{e+w zR&ALgjmYx{^atUd!x%_RamGElkAY{>bKA?6Tmz9~~ktZ^VQ@w;8dU-fZsY+-l8R}tVG(C%sIY-t6bem)+|ljIwf z!dHYq_*#wqSc3pxC$AO01;qXqF&hB5QOZF>RC77ie&bwn zJx;_`aygZLW7QPgLM~^a-}n`OE_am z|FeFh?Iv0v@Dg6X_A_ItAc^1GvhX{6Wg`IK3$rrI!Yp0cpzd=D9=8z)R7hSVWuxzH zgGDCKlAKpD7H!F>LL`F!125K{4-sOGO+ib>T?!tPRh61DU+(zQ)ObCZxiUYbP6;T+}pfIS|Igo9NZ#T|SByvX&O^Mq4VMBfRbFYXux3sk@ zBN_wv0Z5x>tj|Z_M<#xt5m`HImnfW&078W%3Wzx3_lRR16{c(}F@%L!zSZ55pEGA9w4865w7O4El`)Y5?y&(lc^N6%%zu_q;k5`-Ph! zg+NI-vHbhaC>>@xgWi{MuXehmPQF(cgPw}>SS2c@(qc9R|BlW-Dq zS%=eo7ZgI~a<79C@hqfpZZI(e^z7rgM{y1hrQk=XK*SBV9QuH7hy>87(QzOu zfY|vUojP`@7^3x*l^#PJb|Q0)3Q;1SPFU%JlMs>igtGy`7dVVw05tH}_4I&rBrMM* zihzPl2j7E|?wtv899kKs&_kvqT-=jiQuA7+eD|RUesL7sW{ct+{|s0%ab=K zB021A1fOyAdOEg|Z$3u8>?olK>*2NAHrIi36N_ifQHffahn1luqn*e3jd@aF8GIIQ}dzxeb`jR-w2z6?LNXfByCjcJ2h>) zm%PP*b)fPS6@Yc%%83e7m_Q7THrBW5qL_fV-M{?t$d$Lrb`Kwy8$10vi?h~?j7Rt_ zE=zQ#5FOE2vLHwlbo>%_^;|9-MI=p!Luz3qH_5wsX9U7k7i5wm*f(WeBnj&R9=9m~!n(k0wkkfZxtZx`1vj_E z&0P)ft-6I(Tf(1hb(7EO68}oV;rRGxcaZ;%Kv28fEbga7YKnZNSGYKU_8k^Eu;9sp z6H?%FvO2ao8o@Wt&Eg#8jL zx1kDrL7&49=tX(w@j6WOdK^$0?y$mDVXdH43ZFtjJ(oDU39f2*l*v{gs6v2pjv%Gr zkev^oGHir6PcIX^1Xr+eu>RpMd)iV3h=cC@VVXqfD*yobV^b7 zKd8)qr40W{B@&qMJA>u*rTghIYSzC~wH#IZ?-*G$seMYLNbKD?N#S$yQA3WR+?QEC zNx^gSQAHm7N-LeD;5k{Rz%)ydn6_G>DD$P4O;Q+{+^S3pmxSkJc{cpWuuW3%oLpfc MRPIvnB(vlH0$R3^y#N3J literal 0 HcmV?d00001 diff --git a/app/ui/dispatch_center.py b/app/ui/dispatch_center.py new file mode 100644 index 0000000..a955a95 --- /dev/null +++ b/app/ui/dispatch_center.py @@ -0,0 +1,359 @@ +# +# 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.2 +作者:DLmaster_361 +""" + +from loguru import logger +from PySide6.QtWidgets import ( + QWidget, + QVBoxLayout, + QStackedWidget, + QHBoxLayout, +) +from qfluentwidgets import ( + CardWidget, + IconWidget, + BodyLabel, + qconfig, + Pivot, + ScrollArea, + FluentIcon, + MessageBox, + HeaderCardWidget, + CommandBar, + FluentIcon, + TextBrowser, + ComboBox, + setTheme, + Theme, + SubtitleLabel, + PushButton, + ElevatedCardWidget, +) +from PySide6.QtUiTools import QUiLoader +from PySide6 import QtCore +from typing import List, Dict +import json +import shutil + +uiLoader = QUiLoader() + +from app.core import AppConfig, TaskManager, Task, MainInfoBar +from app.services import Notification + + +class DispatchCenter(QWidget): + + def __init__(self, config: AppConfig, task_manager: TaskManager, parent=None): + super().__init__(parent) + + self.setObjectName("调度中枢") + self.config = config + self.task_manager = task_manager + + self.pivot = Pivot(self) + self.stackedWidget = QStackedWidget(self) + self.Layout = QVBoxLayout(self) + + self.script_list: Dict[str, DispatchBox] = {} + + dispatch_box = DispatchBox(self.config, "主调度台", self) + self.script_list["主调度台"] = dispatch_box + self.stackedWidget.addWidget(self.script_list["主调度台"]) + self.pivot.addItem( + routeKey="主调度台", + text="主调度台", + onClick=self.update_top_bar, + icon=FluentIcon.CAFE, + ) + self.update_top_bar() + + self.Layout.addWidget(self.pivot, 0, QtCore.Qt.AlignHCenter) + self.Layout.addWidget(self.stackedWidget) + self.Layout.setContentsMargins(0, 0, 0, 0) + + self.pivot.currentItemChanged.connect( + lambda index: self.stackedWidget.setCurrentWidget(self.script_list[index]) + ) + + def add_board(self, task: Task) -> None: + """添加一个调度台界面""" + + dispatch_box = DispatchBox(self.config, task.name, self) + + dispatch_box.top_bar.button.clicked.connect( + lambda: self.task_manager.stop_task(task.name) + ) + + task.create_task_list.connect(dispatch_box.info.task.create_task) + task.create_user_list.connect(dispatch_box.info.user.create_user) + task.update_task_list.connect(dispatch_box.info.task.update_task) + task.update_user_list.connect(dispatch_box.info.user.update_user) + task.update_log_text.connect(dispatch_box.info.log_text.text.setText) + task.accomplish.connect(lambda: self.del_board(f"调度台_{task.name}")) + + self.script_list[f"调度台_{task.name}"] = dispatch_box + + self.stackedWidget.addWidget(self.script_list[f"调度台_{task.name}"]) + + self.pivot.addItem(routeKey=f"调度台_{task.name}", text=f"调度台 {task.name}") + + def del_board(self, name: str) -> None: + """删除指定子界面""" + + self.pivot.setCurrentItem("主调度台") + self.stackedWidget.removeWidget(self.script_list[name]) + self.script_list[name].deleteLater() + self.pivot.removeWidget(name) + + def update_top_bar(self): + """更新顶栏""" + + list = [] + + if (self.config.app_path / "config/QueueConfig").exists(): + for json_file in (self.config.app_path / "config/QueueConfig").glob( + "*.json" + ): + list.append(f"队列 - {json_file.stem}") + + if (self.config.app_path / "config/MaaConfig").exists(): + for subdir in (self.config.app_path / "config/MaaConfig").iterdir(): + if subdir.is_dir(): + list.append(f"实例 - Maa - {subdir.name}") + + self.script_list["主调度台"].top_bar.object.clear() + self.script_list["主调度台"].top_bar.object.addItems(list) + + +class DispatchBox(QWidget): + + def __init__(self, config: AppConfig, name: str, parent=None): + super().__init__(parent) + + self.setObjectName(name) + + self.config = config + + layout = QVBoxLayout() + + scrollArea = ScrollArea() + scrollArea.setWidgetResizable(True) + + content_widget = QWidget() + content_layout = QVBoxLayout(content_widget) + + self.top_bar = self.DispatchTopBar(self, name) + self.info = self.DispatchInfoCard(self) + + content_layout.addWidget(self.top_bar) + content_layout.addWidget(self.info) + + scrollArea.setWidget(content_widget) + + layout.addWidget(scrollArea) + + self.setLayout(layout) + + class DispatchTopBar(CardWidget): + + def __init__(self, parent=None, name: str = None): + super().__init__(parent) + + Layout = QHBoxLayout(self) + + if name == "主调度台": + + self.object = ComboBox() + self.object.setCurrentIndex(-1) + self.object.setPlaceholderText("请选择调度对象") + self.mode = ComboBox() + self.mode.addItems(["自动代理", "人工排查"]) + self.mode.setCurrentIndex(-1) + self.mode.setPlaceholderText("请选择调度模式") + + self.button = PushButton("开始任务") + + Layout.addWidget(self.object) + Layout.addWidget(self.mode) + Layout.addStretch(1) + Layout.addWidget(self.button) + + else: + + self.Lable = SubtitleLabel(name, self) + self.button = PushButton("中止任务") + + Layout.addWidget(self.Lable) + Layout.addStretch(1) + Layout.addWidget(self.button) + + class DispatchInfoCard(HeaderCardWidget): + + def __init__(self, parent=None): + super().__init__(parent) + + self.setTitle("调度信息") + + self.task = self.TaskInfoCard(self) + self.user = self.UserInfoCard(self) + self.log_text = self.LogCard(self) + + self.viewLayout.addWidget(self.task) + self.viewLayout.addWidget(self.user) + self.viewLayout.addWidget(self.log_text) + + self.viewLayout.setStretch(0, 1) + self.viewLayout.setStretch(1, 1) + self.viewLayout.setStretch(2, 5) + + def update_board(self, task_list: list, user_list: list, log: str): + """更新调度信息""" + + self.task.update_task(task_list) + self.user.update_user(user_list) + self.log_text.text.setText(log) + + class TaskInfoCard(HeaderCardWidget): + + def __init__(self, parent=None): + super().__init__(parent) + self.setTitle("任务队列") + + self.Layout = QVBoxLayout() + self.viewLayout.addLayout(self.Layout) + self.viewLayout.setContentsMargins(3, 0, 3, 3) + + self.task_cards: List[ItemCard] = [] + + def create_task(self, task_list: list): + """创建任务队列""" + + while self.Layout.count() > 0: + item = self.Layout.takeAt(0) + if item.spacerItem(): + self.Layout.removeItem(item.spacerItem()) + elif item.widget(): + item.widget().deleteLater() + + self.task_cards = [] + + for task in task_list: + + self.task_cards.append(ItemCard(task)) + self.Layout.addWidget(self.task_cards[-1]) + + self.Layout.addStretch(1) + + def update_task(self, task_list: list): + """更新任务队列""" + + for i in range(len(task_list)): + + self.task_cards[i].update_status(task_list[i][1]) + + class UserInfoCard(HeaderCardWidget): + + def __init__(self, parent=None): + super().__init__(parent) + self.setTitle("用户队列") + + self.Layout = QVBoxLayout() + self.viewLayout.addLayout(self.Layout) + self.viewLayout.setContentsMargins(3, 0, 3, 3) + + self.user_cards: List[ItemCard] = [] + + def create_user(self, user_list: list): + """创建用户队列""" + + while self.Layout.count() > 0: + item = self.Layout.takeAt(0) + if item.spacerItem(): + self.Layout.removeItem(item.spacerItem()) + elif item.widget(): + item.widget().deleteLater() + + self.user_cards = [] + + for user in user_list: + + self.user_cards.append(ItemCard(user)) + self.Layout.addWidget(self.user_cards[-1]) + + self.Layout.addStretch(1) + + def update_user(self, user_list: list): + """更新用户队列""" + + for i in range(len(user_list)): + + self.user_cards[i].Label.setText(user_list[i][0]) + self.user_cards[i].update_status(user_list[i][1]) + + class LogCard(HeaderCardWidget): + + def __init__(self, parent=None): + super().__init__(parent) + self.setTitle("日志") + + self.text = TextBrowser() + self.viewLayout.setContentsMargins(3, 0, 3, 3) + self.viewLayout.addWidget(self.text) + + +class ItemCard(CardWidget): + + def __init__(self, task_item: list, parent=None): + super().__init__(parent) + + self.Layout = QHBoxLayout(self) + + self.Label = BodyLabel(task_item[0], self) + self.icon = IconWidget(FluentIcon.MORE, self) + self.icon.setFixedSize(16, 16) + self.update_status(task_item[1]) + + self.Layout.addWidget(self.icon) + self.Layout.addWidget(self.Label) + self.Layout.addStretch(1) + + def update_status(self, status: str): + + if status == "完成": + self.icon.setIcon(FluentIcon.ACCEPT) + self.Label.setTextColor("#0eb840", "#0eb840") + elif status == "等待": + self.icon.setIcon(FluentIcon.MORE) + self.Label.setTextColor("#7397ab", "#7397ab") + elif status == "运行": + self.icon.setIcon(FluentIcon.PLAY) + self.Label.setTextColor("#2e4e7e", "#2e4e7e") + elif status == "跳过": + self.icon.setIcon(FluentIcon.REMOVE) + self.Label.setTextColor("#606060", "#d2d2d2") + elif status == "异常": + self.icon.setIcon(FluentIcon.CLOSE) + self.Label.setTextColor("#ff2121", "#ff2121") diff --git a/app/ui/else.py b/app/ui/else.py index 501b815..6023aeb 100644 --- a/app/ui/else.py +++ b/app/ui/else.py @@ -75,7 +75,7 @@ class Main(QWidget): # self.run_now: PushButton = self.ui.findChild(PushButton, "pushButton_runnow") # self.run_now.setIcon(FluentIcon.PLAY) - # self.run_now.clicked.connect(lambda: self.maa_starter("日常代理")) + # self.run_now.clicked.connect(lambda: self.maa_starter("自动代理")) # self.check_start: PushButton = self.ui.findChild( # PushButton, "pushButton_checkstart" @@ -182,7 +182,7 @@ class Main(QWidget): self.MaaManager.update_user_info.connect(self.change_user_info) self.MaaManager.push_notification.connect(self.notify.push_notification) self.MaaManager.send_mail.connect(self.notify.send_mail) - self.MaaManager.accomplish.connect(lambda: self.maa_ender("日常代理_结束")) + self.MaaManager.accomplish.connect(lambda: self.maa_ender("自动代理_结束")) self.MaaManager.get_json.connect(self.get_maa_config) self.MaaManager.set_silence.connect(self.switch_silence) @@ -199,7 +199,7 @@ class Main(QWidget): # 启动后直接开始代理 if self.config.content["Default"]["SelfSet.IfProxyDirectly"] == "True": - self.maa_starter("日常代理") + self.maa_starter("自动代理") @@ -275,39 +275,7 @@ class Main(QWidget): # self.start_time[i][1].setTime(time) # self.if_update_config = True - def update_board(self, run_text, wait_text, over_text, error_text, log_text): - """写入数据至GUI执行界面的调度台面板""" - self.run_text.setPlainText(run_text) - self.wait_text.setPlainText(wait_text) - self.over_text.setPlainText(over_text) - self.error_text.setPlainText(error_text) - self.log_text.setPlainText(log_text) - self.log_text.verticalScrollBar().setValue( - self.log_text.verticalScrollBar().maximum() - ) - - def change_user_info(self, modes, uids, days, lasts, notes, numbs): - """将代理完成后发生改动的用户信息同步至本地数据库""" - - for index in range(len(uids)): - self.config.cur.execute( - "UPDATE adminx SET day = ? WHERE mode = ? AND uid = ?", - (days[index], modes[index], uids[index]), - ) - self.config.cur.execute( - "UPDATE adminx SET last = ? WHERE mode = ? AND uid = ?", - (lasts[index], modes[index], uids[index]), - ) - self.config.cur.execute( - "UPDATE adminx SET notes = ? WHERE mode = ? AND uid = ?", - (notes[index], modes[index], uids[index]), - ) - self.config.cur.execute( - "UPDATE adminx SET numb = ? WHERE mode = ? AND uid = ?", - (numbs[index], modes[index], uids[index]), - ) - self.config.db.commit() # 同步用户信息更改至GUI self.update_user_info("normal") @@ -431,115 +399,7 @@ class Main(QWidget): self.user_list_simple.setStyleSheet("QTableWidget::item {}") self.user_list_beta.setStyleSheet("QTableWidget::item {}") - def read(self, operation): - """弹出对话框组件进行读入""" - - class InputMessageBox(MessageBoxBase): - """输入对话框""" - - def __init__(self, parent, title: str, content: str, mode: str): - super().__init__(parent) - self.title = SubtitleLabel(title) - - if mode == "明文": - self.input = LineEdit() - elif mode == "密码": - self.input = PasswordLineEdit() - - self.input.setPlaceholderText(content) - self.input.setClearButtonEnabled(True) - - # 将组件添加到布局中 - self.viewLayout.addWidget(self.title) - self.viewLayout.addWidget(self.input) - - # 读入PASSWORD - if operation == "key": - - choice = InputMessageBox(self.ui, "请输入管理密钥", "管理密钥", "密码") - if choice.exec() and choice.input.text() != "": - self.PASSWORD = choice.input.text() - self.update_user_info("normal") - - elif operation == "oldkey": - - choice = InputMessageBox( - self.ui, "请输入旧的管理密钥", "旧管理密钥", "密码" - ) - if choice.exec() and choice.input.text() != "": - self.PASSWORD = choice.input.text() - return True - else: - return False - - elif operation == "newkey": - - choice = InputMessageBox( - self.ui, "请输入新的管理密钥", "新管理密钥", "密码" - ) - if choice.exec() and choice.input.text() != "": - return choice.input.text() - else: - return None - - elif operation == "setkey": - - choice = InputMessageBox( - self.ui, - "未检测到管理密钥,请设置您的管理密钥", - "管理密钥", - "密码", - ) - if choice.exec() and choice.input.text() != "": - self.PASSWORD = choice.input.text() - return True - else: - return False - - # 读入选择 - elif operation == "question_runner": - choice = MessageBox( - self.MaaManager.question_title, - self.MaaManager.question_info, - None, - ) - if choice.exec(): - self.MaaManager.question_choice = "Yes" - else: - self.MaaManager.question_choice = "No" - - # 读入MAA文件目录 - elif operation == "file_path_maa": - file_path = QFileDialog.getExistingDirectory(self.ui, "选择MAA文件夹") - if file_path: - self.maa_path.setText(file_path) - - # 读入自定义基建文件目录 - elif operation == "file_path_infrastructure": - file_path, _ = QFileDialog.getOpenFileName( - self.ui, "选择自定义基建文件", "", "JSON 文件 (*.json)" - ) - return file_path - - def timed_start(self): - """定时启动代理任务""" - - # 获取定时列表 - time_set = [ - self.config.content["Default"][f"TimeSet.run{_ + 1}"] - for _ in range(10) - if self.config.content["Default"][f"TimeSet.set{_ + 1}"] == "True" - ] - # 按时间调起代理任务 - curtime = datetime.datetime.now().strftime("%Y-%m-%d %H:%M") - if ( - curtime[11:16] in time_set - and curtime != self.last_time - and not self.MaaManager.isRunning() - ): - self.last_time = curtime - self.maa_starter("日常代理") - + def switch_silence(self, mode, emulator_path, boss_key): """切换静默模式""" @@ -557,16 +417,7 @@ class Main(QWidget): self.Timer.timeout.connect(self.set_system) self.Timer.timeout.connect(self.timed_start) - def set_silence(self, emulator_path, boss_key): - """设置静默模式""" - - windows = self.get_window_info() - if any(emulator_path in _ for _ in windows): - try: - pyautogui.hotkey(*boss_key) - except pyautogui.FailSafeException as e: - # 执行日志记录,暂时缺省 - pass + def maa_starter(self, mode): """启动MaaManager线程运行任务""" @@ -620,14 +471,14 @@ class Main(QWidget): self.update_user_info("read_only") - if mode == "日常代理_开始": + if mode == "自动代理_开始": self.MaaManager.accomplish.connect( - lambda: self.maa_ender("日常代理_结束") + lambda: self.maa_ender("自动代理_结束") ) self.check_start.setEnabled(False) self.run_now.clicked.disconnect() self.run_now.setText("结束运行") - self.run_now.clicked.connect(lambda: self.maa_ender("日常代理_结束")) + self.run_now.clicked.connect(lambda: self.maa_ender("自动代理_结束")) elif mode == "人工排查_开始": self.MaaManager.accomplish.connect( @@ -660,12 +511,12 @@ class Main(QWidget): self.update_user_info("editable") - if mode == "日常代理_结束": + if mode == "自动代理_结束": self.check_start.setEnabled(True) self.run_now.clicked.disconnect() self.run_now.setText("立即执行") - self.run_now.clicked.connect(lambda: self.maa_starter("日常代理")) + self.run_now.clicked.connect(lambda: self.maa_starter("自动代理")) elif mode == "人工排查_结束": diff --git a/app/ui/main_window.py b/app/ui/main_window.py index 9b84506..8de6687 100644 --- a/app/ui/main_window.py +++ b/app/ui/main_window.py @@ -25,6 +25,7 @@ v4.2 作者:DLmaster_361 """ +from loguru import logger from PySide6.QtWidgets import ( QApplication, QSystemTrayIcon, @@ -41,18 +42,17 @@ from qfluentwidgets import ( Theme, MSFluentWindow, NavigationItemPosition, + qconfig, ) -from PySide6.QtUiTools import QUiLoader from PySide6.QtGui import QIcon, QCloseEvent from PySide6 import QtCore -uiLoader = QUiLoader() - -from app import AppConfig +from app.core import AppConfig, TaskManager, MainTimer, MainInfoBar from app.services import Notification, CryptoHandler, SystemHandler from .setting import Setting from .member_manager import MemberManager from .queue_manager import QueueManager +from .dispatch_center import DispatchCenter class AUTO_MAA(MSFluentWindow): @@ -81,10 +81,16 @@ class AUTO_MAA(MSFluentWindow): self.splashScreen = SplashScreen(self.windowIcon(), self) self.show_ui("显示主窗口", if_quick=True) + MainInfoBar.parent = self + + self.task_manager = TaskManager(self.config, self.notify) + self.main_timer = MainTimer(self.config, self.system, self.task_manager, self) + # 创建主窗口 self.setting = Setting(self.config, self.notify, self.crypto, self.system, self) self.member_manager = MemberManager(self.config, self.notify, self.crypto, self) self.queue_manager = QueueManager(self.config, self.notify, self) + self.dispatch_center = DispatchCenter(self.config, self.task_manager, self) self.addSubInterface( self.setting, @@ -107,9 +113,31 @@ class AUTO_MAA(MSFluentWindow): FluentIcon.BOOK_SHELF, NavigationItemPosition.TOP, ) + self.addSubInterface( + self.dispatch_center, + FluentIcon.IOT, + "调度中心", + FluentIcon.IOT, + NavigationItemPosition.TOP, + ) + self.stackedWidget.currentChanged.connect( + lambda index: (self.member_manager.refresh() if index == 1 else None) + ) self.stackedWidget.currentChanged.connect( lambda index: self.queue_manager.refresh() if index == 2 else None ) + self.stackedWidget.currentChanged.connect( + lambda index: ( + self.dispatch_center.pivot.setCurrentItem("主调度台") + if index == 3 + else None + ) + ) + self.stackedWidget.currentChanged.connect( + lambda index: ( + self.dispatch_center.update_top_bar() if index == 3 else None + ) + ) # 创建系统托盘及其菜单 self.tray = QSystemTrayIcon( @@ -134,8 +162,8 @@ class AUTO_MAA(MSFluentWindow): # [ # Action( # FluentIcon.PLAY, - # "运行日常代理", - # triggered=lambda: self.start_task("日常代理"), + # "运行自动代理", + # triggered=lambda: self.start_task("自动代理"), # ), # Action( # FluentIcon.PLAY, @@ -156,6 +184,7 @@ class AUTO_MAA(MSFluentWindow): self.tray.setContextMenu(self.tray_menu) self.tray.activated.connect(self.on_tray_activated) + self.task_manager.create_gui.connect(self.dispatch_center.add_board) self.setting.ui.card_IfShowTray.checkedChanged.connect( lambda: self.show_ui("配置托盘") ) @@ -166,22 +195,17 @@ class AUTO_MAA(MSFluentWindow): def start_up_task(self) -> None: """启动时任务""" + # 加载配置 + qconfig.load(self.config.config_path, self.config.global_config) + # 检查密码 self.setting.check_PASSWORD() # 检查更新 if self.config.global_config.get(self.config.global_config.update_IfAutoUpdate): - result = self.setting.check_update() + result = self.setting.get_update_info() if result == "已是最新版本~": - InfoBar.success( - title="更新检查", - content=result, - orient=QtCore.Qt.Horizontal, - isClosable=True, - position=InfoBarPosition.TOP_RIGHT, - duration=3000, - parent=self, - ) + MainInfoBar.push_info_bar("success", "更新检查", result, 3000) else: info = InfoBar.info( title="更新检查", @@ -193,9 +217,7 @@ class AUTO_MAA(MSFluentWindow): parent=self, ) Up = PushButton("更新") - Up.clicked.connect( - lambda: self.setting.check_version(if_question=False) - ) + Up.clicked.connect(lambda: self.setting.get_update(if_question=False)) Up.clicked.connect(info.close) info.addWidget(Up) info.show() @@ -234,7 +256,7 @@ class AUTO_MAA(MSFluentWindow): # """中止当前任务""" # if self.main.MaaManager.isRunning(): # if ( - # self.main.MaaManager.mode == "日常代理" + # self.main.MaaManager.mode == "自动代理" # or self.main.MaaManager.mode == "人工排查" # ): # self.main.maa_ender(f"{self.main.MaaManager.mode}_结束") diff --git a/app/ui/member_manager.py b/app/ui/member_manager.py index 1558b76..e3729b2 100644 --- a/app/ui/member_manager.py +++ b/app/ui/member_manager.py @@ -24,7 +24,7 @@ AUTO_MAA脚本管理界面 v4.2 作者:DLmaster_361 """ - +from loguru import logger from PySide6.QtWidgets import ( QWidget, QFileDialog, @@ -49,17 +49,15 @@ from qfluentwidgets import ( ExpandGroupSettingCard, PushSettingCard, ) -from PySide6.QtUiTools import QUiLoader from PySide6 import QtCore from functools import partial +from pathlib import Path from typing import List import datetime import json import shutil -uiLoader = QUiLoader() - -from app import AppConfig, MaaConfig +from app.core import AppConfig, MaaConfig, MainInfoBar from app.services import Notification, CryptoHandler from .Widget import ( InputMessageBox, @@ -315,6 +313,15 @@ class MemberManager(QWidget): with json_file.open("w", encoding="utf-8") as f: json.dump(data, f, ensure_ascii=False, indent=4) + def refresh(self): + """刷新脚本实例界面""" + + if len(self.member_manager.search_member()) == 0: + index = 0 + else: + index = int(self.member_manager.pivot.currentRouteKey()[3:]) + self.member_manager.switch_SettingBox(index) + class MemberSettingBox(QWidget): @@ -444,7 +451,7 @@ class MaaSettingBox(QWidget): content_widget = QWidget() content_layout = QVBoxLayout(content_widget) - self.app_setting = self.AppSettingCard(self, self.config.maa_config) + self.app_setting = self.AppSettingCard(self, self.config, uid) self.user_setting = self.UserSettingCard( self, self.objectName(), self.config, self.crypto ) @@ -461,12 +468,13 @@ class MaaSettingBox(QWidget): class AppSettingCard(HeaderCardWidget): - def __init__(self, parent=None, maa_config: MaaConfig = None): + def __init__(self, parent=None, config: AppConfig = None, uid: int = None): super().__init__(parent) self.setTitle("MAA实例") - self.maa_config = maa_config + self.config = config + self.uid = uid Layout = QVBoxLayout() @@ -475,13 +483,13 @@ class MaaSettingBox(QWidget): FluentIcon.EDIT, "实例名称", "用于标识MAA实例的名称", - self.maa_config.MaaSet_Name, + self.config.maa_config.MaaSet_Name, ) self.card_Path = PushSettingCard( "选择文件夹", FluentIcon.FOLDER, "MAA目录", - self.maa_config.get(self.maa_config.MaaSet_Path), + self.config.maa_config.get(self.config.maa_config.MaaSet_Path), ) self.card_Set = PushSettingCard( "设置", @@ -489,9 +497,14 @@ class MaaSettingBox(QWidget): "MAA全局配置", "简洁模式下MAA将继承全局配置", ) - self.RunSet = self.RunSetSettingCard(self, self.maa_config) + self.RunSet = self.RunSetSettingCard(self, self.config.maa_config) self.card_Path.clicked.connect(self.PathClicked) + self.config.maa_config.MaaSet_Path.valueChanged.connect( + lambda: self.card_Path.setContent( + self.config.maa_config.get(self.config.maa_config.MaaSet_Path) + ) + ) Layout.addWidget(self.card_Name) Layout.addWidget(self.card_Path) @@ -503,9 +516,35 @@ class MaaSettingBox(QWidget): def PathClicked(self): folder = QFileDialog.getExistingDirectory(self, "选择MAA目录", "./") - if not folder or self.maa_config.get(self.maa_config.MaaSet_Path) == folder: - return - self.maa_config.set(self.maa_config.MaaSet_Path, folder) + if ( + not folder + or self.config.maa_config.get(self.config.maa_config.MaaSet_Path) + == folder + ): + logger.warning("选择MAA目录时未选择文件夹或未更改文件夹") + MainInfoBar.push_info_bar( + "warning", "警告", "未选择文件夹或未更改文件夹", 5000 + ) + return None + elif ( + not (Path(folder) / "config/gui.json").exists() + or not (Path(folder) / "MAA.exe").exists() + ): + logger.warning("选择MAA目录时未找到MAA程序或配置文件") + MainInfoBar.push_info_bar( + "warning", "警告", "未找到MAA程序或配置文件", 5000 + ) + return None + + (self.config.app_path / f"config/MaaConfig/脚本_{self.uid}/Default").mkdir( + parents=True, exist_ok=True + ) + shutil.copy( + Path(folder) / "config/gui.json", + self.config.app_path + / f"config/MaaConfig/脚本_{self.uid}/Default/gui.json", + ) + self.config.maa_config.set(self.config.maa_config.MaaSet_Path, folder) self.card_Path.setContent(folder) class RunSetSettingCard(ExpandGroupSettingCard): @@ -534,7 +573,7 @@ class MaaSettingBox(QWidget): self.RoutineTimeLimit = SpinBoxSettingCard( (1, 1024), FluentIcon.PAGE_RIGHT, - "日常代理超时限制", + "自动代理超时限制", "MAA日志无变化时间超过该阈值视为超时,单位为分钟", self.maa_config.RunSet_RoutineTimeLimit, ) diff --git a/app/ui/queue_manager.py b/app/ui/queue_manager.py index 0148c6b..0ef3a4f 100644 --- a/app/ui/queue_manager.py +++ b/app/ui/queue_manager.py @@ -39,6 +39,7 @@ from qfluentwidgets import ( FluentIcon, MessageBox, HeaderCardWidget, + TextBrowser, CommandBar, setTheme, Theme, @@ -52,7 +53,7 @@ import shutil uiLoader = QUiLoader() -from app import AppConfig, QueueConfig +from app.core import AppConfig, QueueConfig from app.services import Notification from .Widget import ( LineEditSettingCard, @@ -143,9 +144,9 @@ class QueueManager(QWidget): if choice.exec(): queue_list = self.queue_manager.search_queue() - move_list = [_ for _ in queue_list if int(_[0][3:]) > int(name[3:])] + move_list = [_ for _ in queue_list if int(_[0][5:]) > int(name[5:])] - index = max(int(name[3:]) - 1, 1) + index = max(int(name[5:]) - 1, 1) self.queue_manager.clear_SettingBox() @@ -249,7 +250,7 @@ class QueueSettingBox(QWidget): self.Layout.setContentsMargins(0, 0, 0, 0) self.pivot.currentItemChanged.connect( - lambda index: self.switch_SettingBox(int(index[5:]), if_chang_pivot=False) + lambda index: self.switch_SettingBox(int(index[5:]), if_change_pivot=False) ) self.show_SettingBox(1) @@ -271,7 +272,7 @@ class QueueSettingBox(QWidget): self.switch_SettingBox(index) - def switch_SettingBox(self, index: int, if_chang_pivot: bool = True) -> None: + def switch_SettingBox(self, index: int, if_change_pivot: bool = True) -> None: """切换到指定的子界面""" queue_list = self.search_queue() @@ -288,7 +289,7 @@ class QueueSettingBox(QWidget): self.config.queue_config, ) - if if_chang_pivot: + if if_change_pivot: self.pivot.setCurrentItem(self.script_list[index - 1].objectName()) self.stackedWidget.setCurrentWidget(self.script_list[index - 1]) @@ -355,10 +356,12 @@ class QueueMemberSettingBox(QWidget): self.queue_set = self.QueueSetSettingCard(self, self.config.queue_config) self.time = self.TimeSettingCard(self, self.config.queue_config) self.task = self.TaskSettingCard(self, self.config) + self.history = self.HistoryCard(self, self.config, f"调度队列_{uid}") content_layout.addWidget(self.queue_set) content_layout.addWidget(self.time) content_layout.addWidget(self.task) + content_layout.addWidget(self.history) content_layout.addStretch(1) scrollArea.setWidget(content_widget) @@ -498,36 +501,6 @@ class QueueMemberSettingBox(QWidget): self.viewLayout.addLayout(Layout) - class QueueSetSettingCard(HeaderCardWidget): - - def __init__(self, parent=None, queue_config: QueueConfig = None): - super().__init__(parent) - - self.setTitle("队列设置") - - self.queue_config = queue_config - - Layout = QVBoxLayout() - - self.card_Name = LineEditSettingCard( - "请输入调度队列名称", - FluentIcon.EDIT, - "调度队列名称", - "用于标识调度队列的名称", - self.queue_config.queueSet_Name, - ) - self.card_Enable = SwitchSettingCard( - FluentIcon.HOME, - "状态", - "调度队列状态", - self.queue_config.queueSet_Enabled, - ) - - Layout.addWidget(self.card_Name) - Layout.addWidget(self.card_Enable) - - self.viewLayout.addLayout(Layout) - class TaskSettingCard(HeaderCardWidget): def __init__(self, parent=None, config: AppConfig = None): @@ -656,3 +629,18 @@ class QueueMemberSettingBox(QWidget): member_list_text.append(subdir.name) return [member_list_name, member_list_text] + + class HistoryCard(HeaderCardWidget): + + def __init__(self, parent=None, config: AppConfig = None, name: str = None): + super().__init__(parent) + self.setTitle("历史运行记录") + + self.config = config + + self.text = TextBrowser() + self.text.setMinimumHeight(300) + history = self.config.get_history(name) + self.text.setPlainText(history["History"]) + + self.viewLayout.addWidget(self.text) diff --git a/app/ui/setting.py b/app/ui/setting.py index f522b40..d130ec8 100644 --- a/app/ui/setting.py +++ b/app/ui/setting.py @@ -36,9 +36,8 @@ from qfluentwidgets import ( setTheme, Theme, MessageBox, + Dialog, HeaderCardWidget, - InfoBar, - InfoBarPosition, SwitchSettingCard, ExpandGroupSettingCard, PushSettingCard, @@ -52,7 +51,7 @@ import requests uiLoader = QUiLoader() -from app import AppConfig +from app.core import AppConfig, MainInfoBar from app.services import Notification, CryptoHandler, SystemHandler from app.utils import Updater, version_text from .Widget import InputMessageBox, LineEditSettingCard @@ -98,7 +97,7 @@ class Setting(QWidget): self.function.card_IfAllowSleep.checkedChanged.connect(self.system.set_Sleep) self.start.card_IfSelfStart.checkedChanged.connect(self.system.set_SelfStart) self.security.card_changePASSWORD.clicked.connect(self.change_PASSWORD) - self.updater.card_CheckUpdate.clicked.connect(self.check_version) + self.updater.card_CheckUpdate.clicked.connect(self.get_update) self.other.card_Tips.clicked.connect(self.show_tips) content_layout.addWidget(self.function) @@ -258,7 +257,7 @@ class Setting(QWidget): if choice.exec(): break - def check_update(self) -> str: + def get_update_info(self) -> str: """检查主程序版本更新,返回更新信息""" # 从本地版本信息文件获取当前版本信息 @@ -294,7 +293,7 @@ class Setting(QWidget): else: return "已是最新版本~" - def check_version(self, if_question: bool = True) -> None: + def get_update(self, if_question: bool = True) -> None: """检查版本更新,调起文件下载进程""" # 从本地版本信息文件获取当前版本信息 @@ -387,15 +386,7 @@ class Setting(QWidget): # 无版本更新 else: - InfoBar.success( - title="更新检查", - content="已是最新版本~", - orient=QtCore.Qt.Horizontal, - isClosable=True, - position=InfoBarPosition.TOP_RIGHT, - duration=3000, - parent=self, - ) + MainInfoBar.push_info_bar("success", "更新检查", "已是最新版本~", 3000) def update_main(self): """更新主程序""" @@ -411,7 +402,7 @@ class Setting(QWidget): def show_tips(self): """显示小贴士""" - choice = MessageBox("小贴士", "这里什么都没有~", self) + choice = Dialog("小贴士", "这里什么都没有~", self) choice.cancelButton.hide() choice.buttonLayout.insertStretch(1) if choice.exec(): diff --git a/app/utils/__pycache__/Updater.cpython-312.pyc b/app/utils/__pycache__/Updater.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..39855a6194a46d11eff5c2bd2ddb8d290f1b35f8 GIT binary patch literal 16996 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
    \n", + "Announcement.DoNotRemindThisAnnouncementAgain": "True", + "Announcement.DoNotShowAnnouncement": "False", + "AutoRecruit.AutoRecruitFirstList": "", + "AutoRecruit.ChooseLevel3": "True", + "AutoRecruit.ChooseLevel3.Time": "540", + "AutoRecruit.ChooseLevel4": "True", + "AutoRecruit.ChooseLevel4.Time": "540", + "AutoRecruit.ChooseLevel5": "True", + "AutoRecruit.ChooseLevel5.Time": "540", + "AutoRecruit.ForceRefresh": "True", + "AutoRecruit.IsLevel3UseShortTime": "False", + "AutoRecruit.IsLevel3UseShortTime2": "False", + "AutoRecruit.MaxTimes": "4", + "AutoRecruit.NotChooseLevel1": "False", + "AutoRecruit.RefreshLevel3": "True", + "AutoRecruit.SelectExtraTags": "0", + "Bluestacks.Config.Keyword": "", + "Bluestacks.Config.Path": "", + "Connect.AdbLiteEnabled": "False", + "Connect.AdbPath": "C:\\Program Files\\Netease\\MuMu Player 12\\shell\\adb.exe", + "Connect.AdbReplaced": "False", + "Connect.Address": "127.0.0.1:16448", + "Connect.AddressHistory": "[\"127.0.0.1:16448\",\"127.0.0.1:16416\",\"127.0.0.1:16384\"]", + "Connect.AllowADBHardRestart": "True", + "Connect.AllowADBRestart": "True", + "Connect.AlwaysAutoDetect": "False", + "Connect.AutoDetect": "False", + "Connect.ConnectConfig": "MuMuEmulator12", + "Connect.KillAdbOnExit": "True", + "Connect.LdPlayerEmulatorPath": "C:\\leidian\\LDPlayer9", + "Connect.LdPlayerExtras.Enabled": "False", + "Connect.LdPlayerIndex": "0", + "Connect.MuMu12Display": "0", + "Connect.MuMu12EmulatorPath": "C:\\Program Files\\Netease\\MuMu Player 12", + "Connect.MuMu12Extras.Enabled": "True", + "Connect.MuMu12Index": "2", + "Connect.MumuBridgeConnection": "False", + "Connect.RetryOnDisconnected": "True", + "Connect.TouchMode": "minitouch", + "Copilot.AddUserAdditional": "False", + "Copilot.CopilotTaskList": "", + "Copilot.LoopTimes": "1", + "Copilot.UserAdditional": "", + "ExternalNotification.Bark.SendKey": "", + "ExternalNotification.Bark.Server": "https://api.day.app", + "ExternalNotification.Discord.BotToken": "", + "ExternalNotification.Discord.UserId": "", + "ExternalNotification.Discord.WebhookUrl": "", + "ExternalNotification.Enabled": "Off", + "ExternalNotification.Qmsg.Bot": "", + "ExternalNotification.Qmsg.Key": "", + "ExternalNotification.Qmsg.Server": "", + "ExternalNotification.Qmsg.User": "", + "ExternalNotification.ServerChan.SendKey": "", + "ExternalNotification.Smtp.From": "", + "ExternalNotification.Smtp.Password": "", + "ExternalNotification.Smtp.Port": "", + "ExternalNotification.Smtp.RequiresAuthentication": "false", + "ExternalNotification.Smtp.Server": "", + "ExternalNotification.Smtp.To": "", + "ExternalNotification.Smtp.User": "", + "ExternalNotification.Smtp.UseSsl": "false", + "ExternalNotification.Telegram.BotToken": "", + "ExternalNotification.Telegram.ChatId": "", + "Fight.RemainingSanityStage": "", + "Fight.UseExpiringMedicine": "True", + "Fight.UseRemainingSanityStage": "False", + "Gacha.ShowDisclaimerNoMore": "False", + "GUI.AllowUseStoneSave": "False", + "GUI.CustomStageCode": "True", + "GUI.HideSeries": "False", + "GUI.HideUnavailableStage": "False", + "GUI.MinimizeToTray": "False", + "GUI.Placement": "{\"Length\":44,\"Flags\":0,\"ShowCmd\":1,\"MinPosition\":{\"X\":-1,\"Y\":-1},\"MaxPosition\":{\"X\":-1,\"Y\":-1},\"NormalPosition\":{\"Left\":680,\"Top\":314,\"Right\":1880,\"Bottom\":1214}}", + "GUI.Placement.Load": "True", + "GUI.Placement.SaveOnClosing": "True", + "GUI.UseAlternateStage": "True", + "GUI.UseLogItemDateFormat": "False", + "GUI.WindowTitlePrefix": "", + "Guide.StepIndex": "4", + "Infrast.ContinueTraining": "True", + "Infrast.Control.IsChecked": "True", + "Infrast.CustomInfrastEnabled": "True", + "Infrast.CustomInfrastFile": "D:\\AUTO\\MAA\\合成玉排班.json", + "Infrast.CustomInfrastPlanIndex": "2", + "Infrast.CustomInfrastPlanShowInFightSettings": "False", + "Infrast.DefaultInfrast": "user_defined", + "Infrast.Dorm.IsChecked": "True", + "Infrast.DormFilterNotStationedEnabled": "True", + "Infrast.DormThreshold": "30", + "Infrast.DormTrustEnabled": "False", + "Infrast.IsCustomInfrastFileReadOnly": "False", + "Infrast.Mfg.IsChecked": "True", + "Infrast.Office.IsChecked": "True", + "Infrast.Order.Control": "2", + "Infrast.Order.Dorm": "6", + "Infrast.Order.Mfg": "0", + "Infrast.Order.Office": "5", + "Infrast.Order.Power": "3", + "Infrast.Order.Processing": "7", + "Infrast.Order.Reception": "4", + "Infrast.Order.Trade": "1", + "Infrast.Order.Training": "8", + "Infrast.OriginiumShardAutoReplenishment": "True", + "Infrast.Power.IsChecked": "True", + "Infrast.Processing.IsChecked": "True", + "Infrast.Reception.IsChecked": "True", + "Infrast.Trade.IsChecked": "True", + "Infrast.Training.IsChecked": "True", + "Infrast.UsesOfDrones": "Money", + "MainFunction.ActionAfterCompleted": "ExitEmulatorAndSelf", + "MainFunction.Drops.Enable": "False", + "MainFunction.Drops.ItemId": "", + "MainFunction.Drops.ItemName": "不选择", + "MainFunction.Drops.Quantity": "5", + "MainFunction.InverseMode": "False", + "MainFunction.PostActions": "0", + "MainFunction.Series.Quantity": "6", + "MainFunction.Stage1": "SK-5", + "MainFunction.Stage2": "1-7", + "MainFunction.Stage3": "", + "MainFunction.TimesLimited": "False", + "MainFunction.TimesLimited.Quantity": "5", + "MainFunction.UseMedicine": "False", + "MainFunction.UseMedicine.Quantity": "999", + "MainFunction.UseStone.Quantity": "0", + "Mall.CreditBlackListNew": "碳;家具;加急许可", + "Mall.CreditFirstListNew": "招聘许可", + "Mall.CreditForceShoppingIfCreditFull": "False", + "Mall.CreditOnlyBuyDiscount": "False", + "Mall.CreditShopping": "True", + "Mall.CreditVisitFriends": "True", + "Mall.CreditVisitFriendsEnabled": "True", + "Mall.CreditVisitOnceADay": "True", + "Mall.CreidtReserveMaxCredit": "False", + "Mall.LastCreditVisitFriendsTime": "2024/10/23 00:00:00", + "Mission.ReceiveAward": "True", + "Mission.ReceiveFreeRecruit": "True", + "Mission.ReceiveMail": "True", + "Mission.ReceiveMining": "False", + "Mission.ReceiveOrundum": "True", + "Mission.ReceiveSpecialAccess": "False", + "OperBox.Data": "", + "Peep.TargetFps": "20", + "Penguin.EnablePenguin": "True", + "Penguin.Id": "121289881", + "Penguin.IsDrGrandet": "False", + "Performance.AllowDeprecatedGpu": "false", + "Performance.PreferredGpuDescription": "Intel(R) UHD Graphics", + "Performance.PreferredGpuInstancePath": "PCI\\VEN_8086&DEV_A788&SUBSYS_35381043&REV_04\\3&11583659&0&10", + "Performance.UseGpu": "true", + "Reclamation.Mode": "1", + "Reclamation.Reclamation2ExEnable": "False", + "Reclamation.Reclamation2ExProduct": "", + "Reclamation.ReclamationIncrementMode": "0", + "Reclamation.ReclamationMaxCraftCountPerRound": "16", + "Reclamation.Theme": "Tales", + "Reclamation.ToolToCraft": "", + "Recruit.AutoSetTime": "True", + "Recruit.ChooseLevel3": "False", + "Recruit.ChooseLevel4": "True", + "Recruit.ChooseLevel5": "True", + "Recruit.ChooseLevel6": "True", + "Recruit.IsLevel3UseShortTime": "False", + "Recruit.IsLevel3UseShortTime2": "False", + "Recruit.ShowPotential": "True", + "RemoteControl.RemoteControlDeviceIdentity": "", + "RemoteControl.RemoteControlGetTaskEndpointUri": "", + "RemoteControl.RemoteControlReportStatusUri": "", + "RemoteControl.RemoteControlUserIdentity": "", + "Roguelike.CollectibleModeShopping": "False", + "Roguelike.CollectibleModeSquad": "", + "Roguelike.CoreChar": "", + "Roguelike.DeepExplorationAutoIterate": "False", + "Roguelike.DeploymentWithPause": "False", + "Roguelike.Difficulty": "0", + "Roguelike.ExitAtFinalBoss": "False", + "Roguelike.InvestmentEnabled": "True", + "Roguelike.InvestmentEnterSecondFloor": "True", + "Roguelike.InvestsCount": "999", + "Roguelike.Mode": "0", + "Roguelike.MonthlySquadAutoIterate": "False", + "Roguelike.MonthlySquadCheckComms": "False", + "Roguelike.RefreshTraderWithDice": "False", + "Roguelike.Roguelike3FirstFloorFoldartal": "False", + "Roguelike.Roguelike3NewSquad2StartingFoldartal": "False", + "Roguelike.Roguelike3NewSquad2StartingFoldartals": "", + "Roguelike.Roguelike3StartFloorFoldartal": "", + "Roguelike.RoguelikeDelayAbortUntilCombatComplete": "False", + "Roguelike.RoguelikeEnableNonfriendSupport": "False", + "Roguelike.RoguelikeExpectedCollapsalParadigms": "", + "Roguelike.RoguelikeOnlyStartWithEliteTwo": "False", + "Roguelike.RoguelikeStartWithEliteTwo": "False", + "Roguelike.RoguelikeTheme": "Phantom", + "Roguelike.RoguelikeUseSupportUnit": "False", + "Roguelike.Roles": "", + "Roguelike.Squad": "", + "Roguelike.StartsCount": "99999", + "Roguelike.StartWithSeed": "False", + "Roguelike.StopAtMaxLevel": "False", + "Roguelike.StopWhenInvestmentFull": "False", + "Start.AccountName": "152****", + "Start.AutoRestartOnDrop": "True", + "Start.BlockSleep": "False", + "Start.BlockSleepWithScreenOn": "True", + "Start.ClientType": "Official", + "Start.CopilotWithScript": "False", + "Start.EmulatorAddCommand": "-v 2", + "Start.EmulatorPath": "C:\\Program Files\\Netease\\MuMu Player 12\\shell\\MuMuPlayer.exe", + "Start.EmulatorWaitSeconds": "30", + "Start.EndsWithScript": "", + "Start.ManualStopWithScript": "False", + "Start.MinimizeDirectly": "False", + "Start.MinimizingStartup": "True", + "Start.OpenEmulatorAfterLaunch": "False", + "Start.RunDirectly": "False", + "Start.StartEmulator": "True", + "Start.StartsWithScript": "", + "TaskQueue.AutoRoguelike.IsChecked": "False", + "TaskQueue.Base.IsChecked": "False", + "TaskQueue.Combat.IsChecked": "False", + "TaskQueue.Mall.IsChecked": "False", + "TaskQueue.Mission.IsChecked": "False", + "TaskQueue.Order.AutoRoguelike": "6", + "TaskQueue.Order.Base": "2", + "TaskQueue.Order.Combat": "3", + "TaskQueue.Order.Mall": "4", + "TaskQueue.Order.Mission": "5", + "TaskQueue.Order.Reclamation": "7", + "TaskQueue.Order.ReclamationAlgorithm2": "7", + "TaskQueue.Order.Recruiting": "1", + "TaskQueue.Order.WakeUp": "0", + "TaskQueue.Reclamation.IsChecked": "False", + "TaskQueue.ReclamationAlgorithm2.IsChecked": "False", + "TaskQueue.Recruiting.IsChecked": "False", + "TaskQueue.WakeUp.IsChecked": "False", + "VersionUpdate.AutoDownloadUpdatePackage": "True", + "VersionUpdate.AutoInstallUpdatePackage": "True", + "VersionUpdate.body": "## v5.6.0-beta.2\n\n### 新增 | New\n\n* 外部通知支持多选 (#10395) @ABA2396\n* add Qmsg notification (#10358) @octopusYan\n* 允许手动指定WPFGUI中干员名称显示语言 (#10310) @ABA2396 @Manicsteiner\n* GetLocalizedNames for Infrast and Copilot output (#10335) @Constrat\n* Reclamation for YostarJP (#10414) @Manicsteiner\n* 生息演算添加沙中之火选择项 @ABA2396\n* 适配「词祭」界面主题 (#10331) @Constrat @ManicSteiner @HX3N @SherkeyXD\n\n### 改进 | Improved\n\n* 全肉鸽招募适配娜仁图亚、艾拉 (#10385) @Daydreamer114\n* Mumu截图增强路径清空时不再检查路径是否存在 @status102\n* duplicates templates from I.S. (#10376) @Constrat\n* 优化外部通知界面显示 (#10363) @ABA2396\n* 更新 bug issue 模板 (#10357) @Rbqwow\n* 重构 OperBox 输出与显示 (#10320) @ABA2396\n* 重构定时器和重启询问 (#10078) @ABA2396\n* Win10以上系统在退出时Wpf不再清除Toast (#10307) @status102\n* 第一次启动时默认不勾选肉鸽和生息演算 @ABA2396\n* 优化动编队日志输出 @ABA2396\n* 优化生息演算 (#10411) @Alan-Charred @status102 @ABA2396\n\n### 修复 | Fix\n\n* FC rerun navigation fix EN @Constrat\n* 生息演算主题读取配置错误 @ABA2396\n* 萨卡兹肉鸽多选招募券模板错误 @ABA2396\n* 肉鸽编队检测在未触底时返回 true (#10396) @Alan-Charred\n* DoDragDrop 拖动操作已在进行中 (#10368) @ABA2396\n* insert delay after SquadConfirm @Constrat\n* 使用匹配后偏移代替每日任务 @status102\n* add ocrReplace for JP \"Reclamation2CopiousCoppice\" (#10362) @Daydreamer114\n* 勾选启动MAA后直接最小化后点击隐藏托盘图标后无法显示MAA @ABA2396\n* add delay after selecting clue @Constrat\n* SL 导航错误 @ABA2396\n* 修复调试版本判断条件 @SherkeyXD\n* 多配置下公告和更新日志显示异常 @ABA2396\n* 修复保全战斗在core干员重复时只会放1次bug (#10306) @status102\n* ProxyType 重启不生效 @ABA2396\n* EN needs templates for clue exchange the number font is different, score too low @Constrat\n* sarkaz 仓库识别错误 @ABA2396\n\n### 文档 | Docs\n\n* 贡献者头像添加 105 上限 (#10351) @MistEO\n\n### 其他 | Other\n\n* `std::ranges::views::join` with LLVM clang 16 on darwin (#10309) @Cryolitia\n* impossiblity of fetch-depth modification. reverting + generic perfs @Constrat\n* rev-list instead of rev-parse @Constrat\n* revert to simple if @Constrat\n* fetching depth 0 @Constrat\n* roi 错误 @ABA2396\n* remove \"\" in nightly fix #10308 @Constrat\n* 生息演算2刷开局清空编队干员 (#10359) @Daydreamer114\n* 重构 FightSettingsUserControl (#10407) @ABA2396\n* CopilotViewModel (#10099) @Manicsteiner\n* git blame ignore @Constrat\n* 优化界面显示 @ABA2396\n* smoking-test中肉鸽参数更新 @SherkeyXD\n* 使用变换后的图像进行技能按钮识别 (#10293) @horror-proton\n* OTA打包时对跳过的版本做删除处理 (#10020) @SherkeyXD\n* 公招错误时保存截图 @zzyyyl\n* 调用PowerManagement.Shutdown();后再次调用Bootstrapper.Shutdown(); @ABA2396\n* 关机前尝试保存配置 @ABA2396\n* 调整令牌关闭强度 @ABA2396\n* 迁移公告相关配置 (#10399) @status102\n* bump maa-cli to 0.4.12 (#10390) @wangl-cc\n* 调整 check link 提示样式 @ABA2396\n* 对comment中的未知链接进行提醒 (#10379) @IzakyL @ABA2396\n* update ignore templates @Constrat\n* 获取任务端口无效时不进行轮询 (#10321) @ABA2396\n* use CsWin32 source generator instead of random pinvoke library (#10361) @dantmnf\n* 删除子模块 @ABA2396\n* remove MaaDeps submodule (#10354) @dantmnf\n* RoguelikeRoutingTaskPlugin.h missing VS22 filter @Constrat\n* bump zzyyyl/issue-checker from 1.8 to 1.9 @zzyyyl\n* 公招识别拥有全干员时不显示未拥有干员数量 @ABA2396\n* YostarJP ocr fix @Manicsteiner\n* JP ZH-TW GPU option & reclamation translation @Manicsteiner\n* KR GpuDeprecated translation @HX3N\n* fix WPF Warning @SherkeyXD\n* 修改过时的Binding方法 @SherkeyXD\n* YostarJP FC navigation (#10316) @Manicsteiner\n* 整理 tasks.json 中记录的肉鸽插件参数 (#10290) @Alan-Charred\n* clearout git blame @Constrat\n* MuMu12EmulatorPath Placeholder 添加示例提示 @ABA2396\n* remove last checked commit @Constrat\n* auto blame ignore @github-actions[bot]\n* git blame added styling commits (#10283) @Constrat\n* smoking-test添加领取奖励的测试 @SherkeyXD\n* 移除tasks中的默认值 @SherkeyXD\n\n**Full Changelog**: [v5.6.0-beta.1 -> v5.6.0-beta.2](https://github.com/MaaAssistantArknights/MaaAssistantArknights/compare/v5.6.0-beta.1...v5.6.0-beta.2)\n", + "VersionUpdate.doNotShowUpdate": "False", + "VersionUpdate.isfirstboot": "True", + "VersionUpdate.name": "v5.6.0-beta.2", + "VersionUpdate.package": "", + "VersionUpdate.Proxy": "", + "VersionUpdate.ResourceApi": "https://s3.maa-org.net:25240/maaassistantarknights/MaaAssistantArknights/MaaAssistantArknights/", + "VersionUpdate.ScheduledUpdateCheck": "True", + "VersionUpdate.UpdateCheck": "True", + "VersionUpdate.VersionType": "Beta", + "Visit.CreditFightSelectFormation": "0", + "Visit.CreditFightTaskEnabled": "False", + "Visit.LastCreditFightTaskTime": "2024/03/27 00:00:00", + "Yituliu.EnableYituliu": "True" + } + }, + "Current": "Default", + "Global": { + "GUI.Cheers": "False", + "GUI.CustomCulture": "", + "GUI.Hangover": "False", + "GUI.HideCloseButton": "False", + "GUI.InverseClearMode": "Clear", + "GUI.LastBuyWineTime": "2024/04/15 00:00:00", + "GUI.Localization": "zh-cn", + "GUI.LogItemDateFormatString": "HH:mm:ss", + "GUI.MinimizeToTray": "False", + "GUI.OperNameLanguage": "OperNameLanguageMAA", + "GUI.Placement": "{\"Length\":44,\"Flags\":0,\"ShowCmd\":1,\"MinPosition\":{\"X\":-1,\"Y\":-1},\"MaxPosition\":{\"X\":-1,\"Y\":-1},\"NormalPosition\":{\"Left\":512,\"Top\":296,\"Right\":1712,\"Bottom\":1196}}", + "GUI.Placement.Load": "True", + "GUI.Placement.SaveOnClosing": "True", + "GUI.SoberLanguage": "zh-cn", + "GUI.UseTray": "True", + "GUI.WindowTitleScrollable": "False", + "GUI.WindowTitleSelectShowList": "3", + "HotKeys": "{\"ShowGui\":{\"Key\":56,\"Modifiers\":7}}", + "Roguelike.RoguelikeStartWithSelectList": "Roguelike@LastReward Roguelike@LastReward4 Sarkaz@Roguelike@LastReward5", + "Start.MinimizeDirectly": "False", + "Start.OpenEmulatorAfterLaunch": "False", + "Start.RunDirectly": "False", + "Timer.CustomConfig": "False", + "Timer.ForceScheduledStart": "False", + "Timer.ShowWindowBeforeForceScheduledStart": "False", + "Timer.Timer1": "False", + "Timer.Timer1.Config": "Default", + "Timer.Timer1Hour": "0", + "Timer.Timer1Min": "0", + "Timer.Timer2": "False", + "Timer.Timer2.Config": "Default", + "Timer.Timer2Hour": "3", + "Timer.Timer2Min": "0", + "Timer.Timer3": "False", + "Timer.Timer3.Config": "Default", + "Timer.Timer3Hour": "6", + "Timer.Timer3Min": "0", + "Timer.Timer4": "False", + "Timer.Timer4.Config": "Default", + "Timer.Timer4Hour": "9", + "Timer.Timer4Min": "0", + "Timer.Timer5": "False", + "Timer.Timer5.Config": "Default", + "Timer.Timer5Hour": "12", + "Timer.Timer5Min": "0", + "Timer.Timer6": "False", + "Timer.Timer6.Config": "Default", + "Timer.Timer6Hour": "15", + "Timer.Timer6Min": "0", + "Timer.Timer7": "False", + "Timer.Timer7.Config": "Default", + "Timer.Timer7Hour": "18", + "Timer.Timer7Min": "0", + "Timer.Timer8": "False", + "Timer.Timer8.Config": "Default", + "Timer.Timer8Hour": "21", + "Timer.Timer8Min": "0", + "VersionUpdate.AllowNightlyUpdates": "False", + "VersionUpdate.AutoDownloadUpdatePackage": "True", + "VersionUpdate.AutoInstallUpdatePackage": "True", + "VersionUpdate.body": "## v5.12.3\n\n### 停不下来了 | Highlight\n\n* Base navigation fixes for the overseas clients\n\n### 新增 | New\n\n* 繁中服更新活動導航\"懷黍離\" (#11592) @XuQingTW\n\n### 修复 | Fix\n\n* 繁中服-生息演算中,完成生存週期畫面、大地圖畫面卡住 (#11649) @momomochi987\n* 繁中服 生息演算讀檔畫面卡住 (#11646) @momomochi987\n* 基建修复4 识别不到缩小状态下的后两个宿舍 @ABA2396\n* 38c8dd8 68357b9 modified base tasks in Official. Global needs custom ROI to work @Constrat\n* 380bf68 modified Base Infrast Siege for all clients. Reverting for global and co. @Constrat\n\n### 文档 | Docs\n\n* README 移除 MaaX,更换前端仓库地址 (#11636) @Rbqwow\n\n### 其他 | Other\n\n* 補上繁中服的加工站、訓練室相關內容 (#11648) @momomochi987\n* 调整基建宿舍阈值 @ABA2396\n* 调整基建发电站阈值 @ABA2396\n\n**Full Changelog**: [v5.12.2 -> v5.12.3](https://github.com/MaaAssistantArknights/MaaAssistantArknights/compare/v5.12.2...v5.12.3)\n", + "VersionUpdate.doNotShowUpdate": "False", + "VersionUpdate.HasAcknowledgedNightlyWarning": "False", + "VersionUpdate.isfirstboot": "False", + "VersionUpdate.name": "v5.12.3", + "VersionUpdate.package": "MAAComponent-OTA-v5.12.2_v5.12.3-win-x64.zip", + "VersionUpdate.Proxy": "127.0.0.1:26561", + "VersionUpdate.ProxyType": "http", + "VersionUpdate.ResourceApi": "https://maa-ota.annangela.cn/MaaAssistantArknights/MaaAssistantArknights/", + "VersionUpdate.ScheduledUpdateCheck": "True", + "VersionUpdate.UpdateCheck": "True", + "VersionUpdate.VersionType": "Beta" + } +} \ No newline at end of file diff --git a/config/MaaConfig/脚本_1/config.json b/config/MaaConfig/脚本_1/config.json new file mode 100644 index 0000000..1f6c6ef --- /dev/null +++ b/config/MaaConfig/脚本_1/config.json @@ -0,0 +1,15 @@ +{ + "MaaSet": { + "Name": "12332", + "Path": "D:/AUTO/MAA_for_AUTO" + }, + "RunSet": { + "AnnihilationTimeLimit": 40, + "RoutineTimeLimit": 10, + "RunTimesLimit": 3 + }, + "QFluentWidgets": { + "ThemeColor": "#ff009faa", + "ThemeMode": "Auto" + } +} \ No newline at end of file diff --git a/config/MaaConfig/脚本_1/user_data.db b/config/MaaConfig/脚本_1/user_data.db new file mode 100644 index 0000000000000000000000000000000000000000..33602bb681c6caf5971ef53e150b7e566c69d0e6 GIT binary patch literal 12288 zcmWFz^vNtqRY=P(%1ta$FlG>7U}R))P*7lCU|Z6UWra|Nn%N9F+?mUvA9Gb zC9xz`Cp|GY6(R;=#Tz2AjUeoz{L+%lJgB0?yu8ee%$&p$pkE-;nR#hNK+}p!lS@jA zpsETIi;K(ii&7MlDuGty<(H&F?aeFAO#(Y6H$MfcwiM`Qpz}0AeRD>>$qYa=3PwX< zGz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLx7$k(3Hg}EFUk+$ge2O4+1Sb!W@zu z&!%m7K4rzTj_uDnyPwV3^|XKc^97CX_jEj6H{;oy-uHVt^_`xtp6TfV6mo(H_@||1 zCTAw*a8()^7#Qdp7y^-@uDPymUS3{#Ou*^#8<+Z}8PwBSbn@%cek8WNj>_L|aQ(qK z{au$&9=Q6*ds;3FqgdRuU8@s$8>jY%g}wf|H}65pCI1)=CG);n)1#&30)iB36f8DEiGGfTJ+F{|5sQje^k- w7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fngQ`Y>Z5zWrljj0R43*_5c6? literal 0 HcmV?d00001 diff --git a/config/MaaConfig/脚本_2/Default/gui.json b/config/MaaConfig/脚本_2/Default/gui.json new file mode 100644 index 0000000..be91433 --- /dev/null +++ b/config/MaaConfig/脚本_2/Default/gui.json @@ -0,0 +1,335 @@ +{ + "Configurations": { + "Default": { + "Announcement.AnnouncementInfo": "# 生息演算内容拓展Ⅱ\n\n生息演算内容拓展之后加了点剧情, 现在的版本制造刷点数的自己过一下这个剧情后再过三天到下个定量之日再开始任务还是能用的, 靠一直开局刷点数的会卡住, 得等修了之后更新才能用。 \n\n# 停止资源版本自动更新\n\n现停止提供资源版本自动更新,手动更新方式参考 [链接](https://github.com/MaaAssistantArknights/MaaAssistantArknights/issues/10033)\n\n仓库地址 [https://github.com/MaaAssistantArknights/MaaResource](https://github.com/MaaAssistantArknights/MaaResource)\n\n# 长期公告\n\n请不要在明日方舟及鹰角在各平台(包括不限于:森空岛、B 站、微博)的官方动态下讨论任何关于 MAA 内容。 \n\n请勿参加内鬼消息的传播,禁止将内鬼消息发送至任何 MAA 群。 \n\n
    \n", + "Announcement.DoNotRemindThisAnnouncementAgain": "True", + "Announcement.DoNotShowAnnouncement": "False", + "AutoRecruit.AutoRecruitFirstList": "", + "AutoRecruit.ChooseLevel3": "True", + "AutoRecruit.ChooseLevel3.Time": "540", + "AutoRecruit.ChooseLevel4": "True", + "AutoRecruit.ChooseLevel4.Time": "540", + "AutoRecruit.ChooseLevel5": "True", + "AutoRecruit.ChooseLevel5.Time": "540", + "AutoRecruit.ForceRefresh": "True", + "AutoRecruit.IsLevel3UseShortTime": "False", + "AutoRecruit.IsLevel3UseShortTime2": "False", + "AutoRecruit.MaxTimes": "4", + "AutoRecruit.NotChooseLevel1": "False", + "AutoRecruit.RefreshLevel3": "True", + "AutoRecruit.SelectExtraTags": "0", + "Bluestacks.Config.Keyword": "", + "Bluestacks.Config.Path": "", + "Connect.AdbLiteEnabled": "False", + "Connect.AdbPath": "C:\\Program Files\\Netease\\MuMu Player 12\\shell\\adb.exe", + "Connect.AdbReplaced": "False", + "Connect.Address": "127.0.0.1:16416", + "Connect.AddressHistory": "[\"127.0.0.1:16416\",\"127.0.0.1:16448\",\"127.0.0.1:16384\"]", + "Connect.AllowADBHardRestart": "True", + "Connect.AllowADBRestart": "True", + "Connect.AlwaysAutoDetect": "False", + "Connect.AutoDetect": "False", + "Connect.ConnectConfig": "MuMuEmulator12", + "Connect.KillAdbOnExit": "True", + "Connect.LdPlayerEmulatorPath": "C:\\leidian\\LDPlayer9", + "Connect.LdPlayerExtras.Enabled": "False", + "Connect.LdPlayerIndex": "0", + "Connect.MuMu12Display": "0", + "Connect.MuMu12EmulatorPath": "C:\\Program Files\\Netease\\MuMu Player 12", + "Connect.MuMu12Extras.Enabled": "True", + "Connect.MuMu12Index": "2", + "Connect.MumuBridgeConnection": "False", + "Connect.RetryOnDisconnected": "True", + "Connect.TouchMode": "minitouch", + "Copilot.AddUserAdditional": "False", + "Copilot.CopilotTaskList": "", + "Copilot.LoopTimes": "1", + "Copilot.UserAdditional": "", + "ExternalNotification.Bark.SendKey": "", + "ExternalNotification.Bark.Server": "https://api.day.app", + "ExternalNotification.Discord.BotToken": "", + "ExternalNotification.Discord.UserId": "", + "ExternalNotification.Discord.WebhookUrl": "", + "ExternalNotification.Enabled": "Off", + "ExternalNotification.Qmsg.Bot": "", + "ExternalNotification.Qmsg.Key": "", + "ExternalNotification.Qmsg.Server": "", + "ExternalNotification.Qmsg.User": "", + "ExternalNotification.ServerChan.SendKey": "", + "ExternalNotification.Smtp.From": "", + "ExternalNotification.Smtp.Password": "", + "ExternalNotification.Smtp.Port": "", + "ExternalNotification.Smtp.RequiresAuthentication": "false", + "ExternalNotification.Smtp.Server": "", + "ExternalNotification.Smtp.To": "", + "ExternalNotification.Smtp.User": "", + "ExternalNotification.Smtp.UseSsl": "false", + "ExternalNotification.Telegram.BotToken": "", + "ExternalNotification.Telegram.ChatId": "", + "Fight.RemainingSanityStage": "", + "Fight.UseExpiringMedicine": "True", + "Fight.UseRemainingSanityStage": "False", + "Gacha.ShowDisclaimerNoMore": "False", + "GUI.AllowUseStoneSave": "False", + "GUI.CustomStageCode": "True", + "GUI.HideSeries": "False", + "GUI.HideUnavailableStage": "False", + "GUI.MinimizeToTray": "False", + "GUI.Placement": "{\"Length\":44,\"Flags\":0,\"ShowCmd\":1,\"MinPosition\":{\"X\":-1,\"Y\":-1},\"MaxPosition\":{\"X\":-1,\"Y\":-1},\"NormalPosition\":{\"Left\":680,\"Top\":314,\"Right\":1880,\"Bottom\":1214}}", + "GUI.Placement.Load": "True", + "GUI.Placement.SaveOnClosing": "True", + "GUI.UseAlternateStage": "False", + "GUI.UseLogItemDateFormat": "False", + "GUI.UseTray": "True", + "GUI.WindowTitlePrefix": "", + "Guide.StepIndex": "4", + "Infrast.ContinueTraining": "True", + "Infrast.Control.IsChecked": "True", + "Infrast.CustomInfrastEnabled": "False", + "Infrast.CustomInfrastFile": "D:\\AUTO\\MAA\\合成玉排班.json", + "Infrast.CustomInfrastPlanIndex": "2", + "Infrast.CustomInfrastPlanShowInFightSettings": "False", + "Infrast.DefaultInfrast": "user_defined", + "Infrast.Dorm.IsChecked": "True", + "Infrast.DormFilterNotStationedEnabled": "True", + "Infrast.DormThreshold": "30", + "Infrast.DormTrustEnabled": "False", + "Infrast.IsCustomInfrastFileReadOnly": "False", + "Infrast.Mfg.IsChecked": "True", + "Infrast.Office.IsChecked": "True", + "Infrast.Order.Control": "2", + "Infrast.Order.Dorm": "6", + "Infrast.Order.Mfg": "0", + "Infrast.Order.Office": "5", + "Infrast.Order.Power": "3", + "Infrast.Order.Processing": "7", + "Infrast.Order.Reception": "4", + "Infrast.Order.Trade": "1", + "Infrast.Order.Training": "8", + "Infrast.OriginiumShardAutoReplenishment": "True", + "Infrast.Power.IsChecked": "True", + "Infrast.Processing.IsChecked": "True", + "Infrast.Reception.IsChecked": "True", + "Infrast.Trade.IsChecked": "True", + "Infrast.Training.IsChecked": "True", + "Infrast.UsesOfDrones": "Money", + "MainFunction.ActionAfterCompleted": "ExitEmulatorAndSelf", + "MainFunction.Drops.Enable": "False", + "MainFunction.Drops.ItemId": "", + "MainFunction.Drops.ItemName": "不选择", + "MainFunction.Drops.Quantity": "5", + "MainFunction.InverseMode": "False", + "MainFunction.PostActions": "0", + "MainFunction.Series.Quantity": "6", + "MainFunction.Stage1": "1-7", + "MainFunction.Stage2": "", + "MainFunction.Stage3": "", + "MainFunction.TimesLimited": "False", + "MainFunction.TimesLimited.Quantity": "5", + "MainFunction.UseMedicine": "False", + "MainFunction.UseMedicine.Quantity": "999", + "MainFunction.UseStone.Quantity": "0", + "Mall.CreditBlackListNew": "碳;家具;加急许可", + "Mall.CreditFirstListNew": "招聘许可", + "Mall.CreditForceShoppingIfCreditFull": "False", + "Mall.CreditOnlyBuyDiscount": "False", + "Mall.CreditShopping": "True", + "Mall.CreditVisitFriends": "True", + "Mall.CreditVisitFriendsEnabled": "True", + "Mall.CreditVisitOnceADay": "True", + "Mall.CreidtReserveMaxCredit": "False", + "Mall.LastCreditVisitFriendsTime": "2025/01/01 00:00:00", + "Mission.ReceiveAward": "True", + "Mission.ReceiveFreeRecruit": "True", + "Mission.ReceiveMail": "True", + "Mission.ReceiveMining": "False", + "Mission.ReceiveOrundum": "True", + "Mission.ReceiveSpecialAccess": "False", + "OperBox.Data": "", + "Peep.TargetFps": "20", + "Penguin.EnablePenguin": "True", + "Penguin.Id": "121289881", + "Penguin.IsDrGrandet": "False", + "Performance.AllowDeprecatedGpu": "false", + "Performance.PreferredGpuDescription": "Intel(R) UHD Graphics", + "Performance.PreferredGpuInstancePath": "PCI\\VEN_8086&DEV_A788&SUBSYS_35381043&REV_04\\3&11583659&0&10", + "Performance.UseGpu": "true", + "Reclamation.Mode": "1", + "Reclamation.Reclamation2ExEnable": "False", + "Reclamation.Reclamation2ExProduct": "", + "Reclamation.ReclamationIncrementMode": "0", + "Reclamation.ReclamationMaxCraftCountPerRound": "16", + "Reclamation.Theme": "Tales", + "Reclamation.ToolToCraft": "", + "Recruit.AutoSetTime": "True", + "Recruit.ChooseLevel3": "False", + "Recruit.ChooseLevel4": "True", + "Recruit.ChooseLevel5": "True", + "Recruit.ChooseLevel6": "True", + "Recruit.IsLevel3UseShortTime": "False", + "Recruit.IsLevel3UseShortTime2": "False", + "Recruit.ShowPotential": "True", + "RemoteControl.RemoteControlDeviceIdentity": "", + "RemoteControl.RemoteControlGetTaskEndpointUri": "", + "RemoteControl.RemoteControlReportStatusUri": "", + "RemoteControl.RemoteControlUserIdentity": "", + "Roguelike.CollectibleModeShopping": "False", + "Roguelike.CollectibleModeSquad": "", + "Roguelike.CoreChar": "", + "Roguelike.DeepExplorationAutoIterate": "False", + "Roguelike.DeploymentWithPause": "False", + "Roguelike.Difficulty": "2", + "Roguelike.ExitAtFinalBoss": "False", + "Roguelike.InvestmentEnabled": "True", + "Roguelike.InvestmentEnterSecondFloor": "True", + "Roguelike.InvestsCount": "999", + "Roguelike.Mode": "0", + "Roguelike.MonthlySquadAutoIterate": "False", + "Roguelike.MonthlySquadCheckComms": "False", + "Roguelike.RefreshTraderWithDice": "False", + "Roguelike.Roguelike3FirstFloorFoldartal": "False", + "Roguelike.Roguelike3NewSquad2StartingFoldartal": "False", + "Roguelike.Roguelike3NewSquad2StartingFoldartals": "", + "Roguelike.Roguelike3StartFloorFoldartal": "", + "Roguelike.RoguelikeDelayAbortUntilCombatComplete": "False", + "Roguelike.RoguelikeEnableNonfriendSupport": "False", + "Roguelike.RoguelikeExpectedCollapsalParadigms": "", + "Roguelike.RoguelikeOnlyStartWithEliteTwo": "False", + "Roguelike.RoguelikeStartWithEliteTwo": "False", + "Roguelike.RoguelikeTheme": "Sarkaz", + "Roguelike.RoguelikeUseSupportUnit": "False", + "Roguelike.Roles": "", + "Roguelike.Squad": "", + "Roguelike.StartsCount": "99999", + "Roguelike.StartWithSeed": "False", + "Roguelike.StopAtMaxLevel": "False", + "Roguelike.StopWhenInvestmentFull": "False", + "Start.AccountName": "152", + "Start.AutoRestartOnDrop": "True", + "Start.BlockSleep": "False", + "Start.BlockSleepWithScreenOn": "True", + "Start.ClientType": "Official", + "Start.CopilotWithScript": "False", + "Start.EmulatorAddCommand": "-v 1", + "Start.EmulatorPath": "C:\\Program Files\\Netease\\MuMu Player 12\\shell\\MuMuPlayer.exe", + "Start.EmulatorWaitSeconds": "30", + "Start.EndsWithScript": "", + "Start.ManualStopWithScript": "False", + "Start.MinimizeDirectly": "False", + "Start.MinimizingStartup": "True", + "Start.OpenEmulatorAfterLaunch": "False", + "Start.RunDirectly": "False", + "Start.StartEmulator": "True", + "Start.StartsWithScript": "", + "TaskQueue.AutoRoguelike.IsChecked": "True", + "TaskQueue.Base.IsChecked": "False", + "TaskQueue.Combat.IsChecked": "False", + "TaskQueue.Mall.IsChecked": "False", + "TaskQueue.Mission.IsChecked": "False", + "TaskQueue.Order.AutoRoguelike": "6", + "TaskQueue.Order.Base": "2", + "TaskQueue.Order.Combat": "3", + "TaskQueue.Order.Mall": "4", + "TaskQueue.Order.Mission": "5", + "TaskQueue.Order.Reclamation": "7", + "TaskQueue.Order.ReclamationAlgorithm2": "7", + "TaskQueue.Order.Recruiting": "1", + "TaskQueue.Order.WakeUp": "0", + "TaskQueue.Reclamation.IsChecked": "False", + "TaskQueue.ReclamationAlgorithm2.IsChecked": "False", + "TaskQueue.Recruiting.IsChecked": "False", + "TaskQueue.WakeUp.IsChecked": "True", + "VersionUpdate.AutoDownloadUpdatePackage": "True", + "VersionUpdate.AutoInstallUpdatePackage": "True", + "VersionUpdate.body": "## v5.6.0-beta.2\n\n### 新增 | New\n\n* 外部通知支持多选 (#10395) @ABA2396\n* add Qmsg notification (#10358) @octopusYan\n* 允许手动指定WPFGUI中干员名称显示语言 (#10310) @ABA2396 @Manicsteiner\n* GetLocalizedNames for Infrast and Copilot output (#10335) @Constrat\n* Reclamation for YostarJP (#10414) @Manicsteiner\n* 生息演算添加沙中之火选择项 @ABA2396\n* 适配「词祭」界面主题 (#10331) @Constrat @ManicSteiner @HX3N @SherkeyXD\n\n### 改进 | Improved\n\n* 全肉鸽招募适配娜仁图亚、艾拉 (#10385) @Daydreamer114\n* Mumu截图增强路径清空时不再检查路径是否存在 @status102\n* duplicates templates from I.S. (#10376) @Constrat\n* 优化外部通知界面显示 (#10363) @ABA2396\n* 更新 bug issue 模板 (#10357) @Rbqwow\n* 重构 OperBox 输出与显示 (#10320) @ABA2396\n* 重构定时器和重启询问 (#10078) @ABA2396\n* Win10以上系统在退出时Wpf不再清除Toast (#10307) @status102\n* 第一次启动时默认不勾选肉鸽和生息演算 @ABA2396\n* 优化动编队日志输出 @ABA2396\n* 优化生息演算 (#10411) @Alan-Charred @status102 @ABA2396\n\n### 修复 | Fix\n\n* FC rerun navigation fix EN @Constrat\n* 生息演算主题读取配置错误 @ABA2396\n* 萨卡兹肉鸽多选招募券模板错误 @ABA2396\n* 肉鸽编队检测在未触底时返回 true (#10396) @Alan-Charred\n* DoDragDrop 拖动操作已在进行中 (#10368) @ABA2396\n* insert delay after SquadConfirm @Constrat\n* 使用匹配后偏移代替每日任务 @status102\n* add ocrReplace for JP \"Reclamation2CopiousCoppice\" (#10362) @Daydreamer114\n* 勾选启动MAA后直接最小化后点击隐藏托盘图标后无法显示MAA @ABA2396\n* add delay after selecting clue @Constrat\n* SL 导航错误 @ABA2396\n* 修复调试版本判断条件 @SherkeyXD\n* 多配置下公告和更新日志显示异常 @ABA2396\n* 修复保全战斗在core干员重复时只会放1次bug (#10306) @status102\n* ProxyType 重启不生效 @ABA2396\n* EN needs templates for clue exchange the number font is different, score too low @Constrat\n* sarkaz 仓库识别错误 @ABA2396\n\n### 文档 | Docs\n\n* 贡献者头像添加 105 上限 (#10351) @MistEO\n\n### 其他 | Other\n\n* `std::ranges::views::join` with LLVM clang 16 on darwin (#10309) @Cryolitia\n* impossiblity of fetch-depth modification. reverting + generic perfs @Constrat\n* rev-list instead of rev-parse @Constrat\n* revert to simple if @Constrat\n* fetching depth 0 @Constrat\n* roi 错误 @ABA2396\n* remove \"\" in nightly fix #10308 @Constrat\n* 生息演算2刷开局清空编队干员 (#10359) @Daydreamer114\n* 重构 FightSettingsUserControl (#10407) @ABA2396\n* CopilotViewModel (#10099) @Manicsteiner\n* git blame ignore @Constrat\n* 优化界面显示 @ABA2396\n* smoking-test中肉鸽参数更新 @SherkeyXD\n* 使用变换后的图像进行技能按钮识别 (#10293) @horror-proton\n* OTA打包时对跳过的版本做删除处理 (#10020) @SherkeyXD\n* 公招错误时保存截图 @zzyyyl\n* 调用PowerManagement.Shutdown();后再次调用Bootstrapper.Shutdown(); @ABA2396\n* 关机前尝试保存配置 @ABA2396\n* 调整令牌关闭强度 @ABA2396\n* 迁移公告相关配置 (#10399) @status102\n* bump maa-cli to 0.4.12 (#10390) @wangl-cc\n* 调整 check link 提示样式 @ABA2396\n* 对comment中的未知链接进行提醒 (#10379) @IzakyL @ABA2396\n* update ignore templates @Constrat\n* 获取任务端口无效时不进行轮询 (#10321) @ABA2396\n* use CsWin32 source generator instead of random pinvoke library (#10361) @dantmnf\n* 删除子模块 @ABA2396\n* remove MaaDeps submodule (#10354) @dantmnf\n* RoguelikeRoutingTaskPlugin.h missing VS22 filter @Constrat\n* bump zzyyyl/issue-checker from 1.8 to 1.9 @zzyyyl\n* 公招识别拥有全干员时不显示未拥有干员数量 @ABA2396\n* YostarJP ocr fix @Manicsteiner\n* JP ZH-TW GPU option & reclamation translation @Manicsteiner\n* KR GpuDeprecated translation @HX3N\n* fix WPF Warning @SherkeyXD\n* 修改过时的Binding方法 @SherkeyXD\n* YostarJP FC navigation (#10316) @Manicsteiner\n* 整理 tasks.json 中记录的肉鸽插件参数 (#10290) @Alan-Charred\n* clearout git blame @Constrat\n* MuMu12EmulatorPath Placeholder 添加示例提示 @ABA2396\n* remove last checked commit @Constrat\n* auto blame ignore @github-actions[bot]\n* git blame added styling commits (#10283) @Constrat\n* smoking-test添加领取奖励的测试 @SherkeyXD\n* 移除tasks中的默认值 @SherkeyXD\n\n**Full Changelog**: [v5.6.0-beta.1 -> v5.6.0-beta.2](https://github.com/MaaAssistantArknights/MaaAssistantArknights/compare/v5.6.0-beta.1...v5.6.0-beta.2)\n", + "VersionUpdate.doNotShowUpdate": "False", + "VersionUpdate.isfirstboot": "True", + "VersionUpdate.name": "v5.6.0-beta.2", + "VersionUpdate.package": "", + "VersionUpdate.Proxy": "", + "VersionUpdate.ResourceApi": "https://s3.maa-org.net:25240/maaassistantarknights/MaaAssistantArknights/MaaAssistantArknights/", + "VersionUpdate.ScheduledUpdateCheck": "True", + "VersionUpdate.UpdateCheck": "True", + "VersionUpdate.VersionType": "Beta", + "Visit.CreditFightSelectFormation": "0", + "Visit.CreditFightTaskEnabled": "False", + "Visit.LastCreditFightTaskTime": "2024/03/27 00:00:00", + "Yituliu.EnableYituliu": "True" + } + }, + "Current": "Default", + "Global": { + "GUI.Cheers": "False", + "GUI.CustomCulture": "", + "GUI.Hangover": "False", + "GUI.HideCloseButton": "False", + "GUI.InverseClearMode": "Clear", + "GUI.LastBuyWineTime": "2024/04/15 00:00:00", + "GUI.Localization": "zh-cn", + "GUI.LogItemDateFormatString": "HH:mm:ss", + "GUI.MinimizeToTray": "True", + "GUI.OperNameLanguage": "OperNameLanguageMAA", + "GUI.Placement": "{\"Length\":44,\"Flags\":0,\"ShowCmd\":1,\"MinPosition\":{\"X\":-1,\"Y\":-1},\"MaxPosition\":{\"X\":-1,\"Y\":-1},\"NormalPosition\":{\"Left\":934,\"Top\":297,\"Right\":2134,\"Bottom\":1197}}", + "GUI.Placement.Load": "True", + "GUI.Placement.SaveOnClosing": "True", + "GUI.SoberLanguage": "zh-cn", + "GUI.UseTray": "True", + "GUI.WindowTitleScrollable": "False", + "GUI.WindowTitleSelectShowList": "3", + "HotKeys": "{\"ShowGui\":{\"Key\":56,\"Modifiers\":7}}", + "Roguelike.RoguelikeStartWithSelectList": "Roguelike@LastReward Roguelike@LastReward4 Sarkaz@Roguelike@LastReward5", + "Start.MinimizeDirectly": "False", + "Start.OpenEmulatorAfterLaunch": "False", + "Start.RunDirectly": "False", + "Timer.CustomConfig": "False", + "Timer.ForceScheduledStart": "False", + "Timer.ShowWindowBeforeForceScheduledStart": "False", + "Timer.Timer1": "False", + "Timer.Timer1.Config": "Default", + "Timer.Timer1Hour": "0", + "Timer.Timer1Min": "0", + "Timer.Timer2": "False", + "Timer.Timer2.Config": "Default", + "Timer.Timer2Hour": "3", + "Timer.Timer2Min": "0", + "Timer.Timer3": "False", + "Timer.Timer3.Config": "Default", + "Timer.Timer3Hour": "6", + "Timer.Timer3Min": "0", + "Timer.Timer4": "False", + "Timer.Timer4.Config": "Default", + "Timer.Timer4Hour": "9", + "Timer.Timer4Min": "0", + "Timer.Timer5": "False", + "Timer.Timer5.Config": "Default", + "Timer.Timer5Hour": "12", + "Timer.Timer5Min": "0", + "Timer.Timer6": "False", + "Timer.Timer6.Config": "Default", + "Timer.Timer6Hour": "15", + "Timer.Timer6Min": "0", + "Timer.Timer7": "False", + "Timer.Timer7.Config": "Default", + "Timer.Timer7Hour": "18", + "Timer.Timer7Min": "0", + "Timer.Timer8": "False", + "Timer.Timer8.Config": "Default", + "Timer.Timer8Hour": "21", + "Timer.Timer8Min": "0", + "VersionUpdate.AllowNightlyUpdates": "False", + "VersionUpdate.AutoDownloadUpdatePackage": "True", + "VersionUpdate.AutoInstallUpdatePackage": "True", + "VersionUpdate.body": "## v5.12.0-beta.1\n\n### 真的没有摸鱼吗 | Highlight\n\n* 添加了种子存钱的功能,在选择 **萨卡兹** 主题,**刷源石锭** 模式,**点刺成锭分队** or **后勤分队** 时,高级设置中会出现 **启用种子刷钱(美愿)** 选项。\n* 种子固定为存钱种,若使用后勤存钱,请确保解锁美愿。种子难度为 6 难,由于难度设置仍然生效,可设为 “当前” 或 16 难(若有需要)。\n* 公招选择 **手动确认 1/5/6 星** 后,若出现 1/5/6 星,将不会计数,继续在下一个招募格内招募。\n\n#### 其他\n\n* 【**萨卡兹的无终奇语**】 【**内容拓展·二**】的资源内容暂时没有更新,在新增关卡中会出现 “关卡识别错误” 的情况,可能会尽快修复。\n* 新增了部分导航,改进了肉鸽流程\n* 修复博朗台模式等待异常\n* 修复了一些已知问题\n\n### 新增 | New\n\n* 繁中服「源石塵行動」復刻活動導航 @momomochi987\n* 点刺、后勤种子存钱 (#11521) @Daydreamer114 @ABA2396\n* 肉鸽满级自动停止选项 (#11466) @BxFS @Constrat @momomochi987 @status102\n* 为肉鸽开始探索添加 cd 识别 (#11443) @Daydreamer114\n* 萨卡兹肉鸽冰川期作战策略 @Daydreamer114\n* 萨卡兹内容拓展II点刺进入商店获得构想 (#11509) @Daydreamer114\n* 不自动招募1/5/6星干员时,不计入最大确认招募次数 (#11380) @Roland125 @horror-proton\n* 干员识别排除当前客户端未出干员 @ABA2396\n* 肉鸽开局干员列表排除当前客户端未出干员 @ABA2396\n\n### 改进 | Improved\n\n* 新增投掷手干员组并调整优先级 @Daydreamer114\n* 优化傀影肉鸽雪山上的来客ew部署 (#11195) @Daydreamer114\n\n### 修复 | Fix\n\n* 肉鸽烧热水没烧出来会从预设难度开始,而不是返回n0 @ABA2396\n* 删除傀影肉鸽远方来客意义不明的撤退 (#11194) @Daydreamer114\n* 博朗台计算等待时间失败数据处理 @status102\n* 修正nothing to select情况下的判断逻辑 @Roland125\n* update Collect Rewards template for EN fix #11485 @Constrat\n* tw OcrReplace 肉鸽招募助战 (#11487) @Saratoga-Official\n* 繁中服作戰失敗畫面卡住 (#11479) @momomochi987\n* InitialDrop.png更新 @Constrat @BxFS\n* txwy duplicates in tasks.json @Constrat\n* 更新 \"视相\" 主题后未关闭退出基建弹窗时无法回到主界面 @ABA2396\n* `手动输入关卡名` 与 `使用剩余理智` 选项无法保存 @ABA2396\n\n### 文档 | Docs\n\n* 肉鸽辅助协议文档翻译 (#11360) @Windsland52\n* 为肉鸽参数 start_with_seed 添加文档 (#11531) @Daydreamer114\n\n### 其他 | Other\n\n* manual recursion + robocopy for smoke-testing (#11458) @Constrat\n* implement cache for smoke-test (#11457) @Constrat\n* Release 模式下,如文件夹中包含 DEBUG.txt 也会输出 DBG 日志 (#11496) @ABA2396\n* ProcessTask的Action 新增 Input (#11521) @Daydreamer114 @ABA2396\n* increase fetch depth for release nightly-ota to generate tags (might need successive increases) @Constrat\n* delay and retry downloads on resource updater (#11504) @Constrat\n* use read/write secret to delete cache on pr merge @Constrat\n* checkout depth for nightly ota @Constrat\n* 移动企鹅物流及一图流上报设置 至 运行设置 @status102\n* Translations update from MAA Weblate (#11524) @AlisaAkiron\n* ignore blame for e3d63894b28b2ef5e2405e144a32a6981de5e1b2 oxipng optimization @Constrat\n* disable link checker in issues and PRs (#11506) @Constrat\n* use API for cache-deletion @Constrat\n* 移除不再使用的代码 for 最小化启动模拟器 @status102\n* move `push tag` later in the workflow in case or errors (#11480) @Constrat\n* 上报添加 User-Agent @ABA2396\n* 修改上报抬头 @ABA2396\n* Use %B to consider header for skip changelog @Constrat\n* try setup dotnet cache @Constrat\n* EN duplicates in tasks.json + SSS Buffs @Constrat\n* YostarJP phantom roguelike game pass, SSS#6 (#11473) @Manicsteiner\n* battle_data 未实装干员添加字段提示 @ABA2396\n* 别用 1234567890ABCDEF 去连模拟器了 @ABA2396\n* Revert \"refactor: move resource copy to test script\" @Constrat\n* `启动 MAA 后直接运行` 和 `启动 MAA 后自动开启模拟器` 改为独立配置 @ABA2396\n* 只有一个配置的时候不显示 `此选项页为全局配置` @ABA2396\n* 当前配置不存在时尝试读取全局配置 @ABA2396\n* Config序列化参数不转义中文 @status102\n\n**Full Changelog**: [v5.11.1 -> v5.12.0-beta.1](https://github.com/MaaAssistantArknights/MaaAssistantArknights/compare/v5.11.1...v5.12.0-beta.1)\n", + "VersionUpdate.doNotShowUpdate": "False", + "VersionUpdate.HasAcknowledgedNightlyWarning": "False", + "VersionUpdate.isfirstboot": "False", + "VersionUpdate.name": "v5.12.0-beta.1", + "VersionUpdate.package": "", + "VersionUpdate.Proxy": "127.0.0.1:26561", + "VersionUpdate.ProxyType": "http", + "VersionUpdate.ResourceApi": "https://maa-ota.annangela.cn/MaaAssistantArknights/MaaAssistantArknights/", + "VersionUpdate.ScheduledUpdateCheck": "True", + "VersionUpdate.UpdateCheck": "True", + "VersionUpdate.VersionType": "Beta" + } +} \ No newline at end of file diff --git a/config/MaaConfig/脚本_2/config.json b/config/MaaConfig/脚本_2/config.json new file mode 100644 index 0000000..7e59546 --- /dev/null +++ b/config/MaaConfig/脚本_2/config.json @@ -0,0 +1,15 @@ +{ + "MaaSet": { + "Name": "132", + "Path": "D:/AUTO/MAA" + }, + "RunSet": { + "AnnihilationTimeLimit": 44, + "RoutineTimeLimit": 13, + "RunTimesLimit": 1 + }, + "QFluentWidgets": { + "ThemeColor": "#ff009faa", + "ThemeMode": "Auto" + } +} \ No newline at end of file diff --git a/config/MaaConfig/脚本_2/user_data.db b/config/MaaConfig/脚本_2/user_data.db new file mode 100644 index 0000000000000000000000000000000000000000..d426db89c3e1e493d91174404fe124c5af19cf9e GIT binary patch literal 12288 zcmWFz^vNtqRY=P(%1ta$FlG>7U}R))P*7lCU=RgjW*~+ECLn_a#sSidNNik8Q3k!T zZeE})6W=8Uel8#}3PwXZ6UWra|Nn%N9F+?mUvA9Gb zC9xz`Cp|GY6(R;=#Tz2AjUeoz{L+%lJgB0?yu8ee%$&p$pkE-;nR#hNK+}p!lS@jA zpsETIi;K(ii&7MlDuGty<(H&F?aeFAO#(Y6H$MfcwiM`Qpz}0AeRD>>oeX?C`F3(W z;(A1tC>S+lGz3ONU^E0qLtr!nMnhmU1V%$(Gz6d_(3H(0EFUk+$ge2O4+1Sb!W@!} z&!%m7K4rzTj_uDnyPwV3^|XKc^97CX_jEj6H{;oy-uHVt^_`xtp6TfV6mo(H_@||1 zCTAw*{I4`JFfh_YTYWKKN$w`q@3fJ1JHX&yVD2v$ZXoS*CuhvOthMWhT4qjEu9} z9)0L~@$E|Ej$`{L?(y?^duH9$i8rKjvpB?i!sp#nUMR0tapwD7!+k;*OkPL1-+y@F z?EyO#joVXxDN8&0|7B}${2eU+_Au8WiFtqeX3kpGx;R7S!;d6|6AY`JJ}r3m?pxrt zGgI$BO8dC8sIHUa>1kn^lRtAc9b=bfw?*=bd1iCe9ljBrw6eiqlF<9)r%~N!Sbxav zK4559dp6YVq<^{PO>be|CkE@2KrYQiX0dQrr8o!RBpIm^B-u9I5c*R7+3@w{8?`PJ>g;?()+dGiSbi+rH`i zOqpv^fvsM0m&JSQZg-x`{BH8}bGrJh%O8!}RTEb3oVB5|>-v#zUZpVtr+{a3Lyi8SZOQgomQ43QTRHVUm0q^a zF#O?!Ij>~bz4sL=JH24dx&MFCD%8|3DLO9pXcr54&tWT`d1acQ&o%9Lc^V40%Zu3R zCO+N$N?^+goBnq~^?{}{0iv}$9^kK?~{nj6+OmWr=6zwAtd6)EfRaBGO=~}77@PCXoEw{%fw%F)y;da9?O|{aJ^)ts^0%n>8_StVs>^49bxzF znAar>r|;>#!4&$V_O@{u+s@GU7wv^v*e^LfoypglVs-ya&a@-%Z617HuwVD2oxj)0 z>Qj*}D%|Nj3MF&ae0jPv<6GQ`drP%W2J_7{n)`KjeMiI1=kE2p?f70d2wb{-;7!>9 zL3lVexnRlGh+s4{HNux1QHzKXoUOtAfBqi~Kr{+QLtr!nMnhmU1V%$(Gz3ONU^E0q eLtr!nMnhmU1V%$(Gz5lO2(U3SiIy4a83O?E1r&Dx literal 0 HcmV?d00001 diff --git a/config/QueueConfig/调度队列_1.json b/config/QueueConfig/调度队列_1.json new file mode 100644 index 0000000..5cc7aa7 --- /dev/null +++ b/config/QueueConfig/调度队列_1.json @@ -0,0 +1,44 @@ +{ + "QueueSet": { + "Enabled": true, + "Name": "1121" + }, + "Queue": { + "Member_1": "脚本_2", + "Member_10": "禁用", + "Member_2": "脚本_1", + "Member_3": "脚本_2", + "Member_4": "禁用", + "Member_5": "禁用", + "Member_6": "禁用", + "Member_7": "禁用", + "Member_8": "禁用", + "Member_9": "禁用" + }, + "QFluentWidgets": { + "ThemeColor": "#ff009faa", + "ThemeMode": "Auto" + }, + "Time": { + "TimeEnabled_0": true, + "TimeEnabled_1": false, + "TimeEnabled_2": false, + "TimeEnabled_3": false, + "TimeEnabled_4": false, + "TimeEnabled_5": false, + "TimeEnabled_6": false, + "TimeEnabled_7": false, + "TimeEnabled_8": false, + "TimeEnabled_9": false, + "TimeSet_0": "17:54", + "TimeSet_1": "01:00", + "TimeSet_2": "00:00", + "TimeSet_3": "01:00", + "TimeSet_4": "00:00", + "TimeSet_5": "00:00", + "TimeSet_6": "00:00", + "TimeSet_7": "00:00", + "TimeSet_8": "00:00", + "TimeSet_9": "00:00" + } +} \ No newline at end of file diff --git a/config/QueueConfig/调度队列_2.json b/config/QueueConfig/调度队列_2.json new file mode 100644 index 0000000..5762b3a --- /dev/null +++ b/config/QueueConfig/调度队列_2.json @@ -0,0 +1,44 @@ +{ + "QueueSet": { + "Enabled": true, + "Name": "" + }, + "Queue": { + "Member_1": "脚本_1", + "Member_10": "禁用", + "Member_2": "禁用", + "Member_3": "禁用", + "Member_4": "禁用", + "Member_5": "禁用", + "Member_6": "禁用", + "Member_7": "禁用", + "Member_8": "禁用", + "Member_9": "禁用" + }, + "QFluentWidgets": { + "ThemeColor": "#ff009faa", + "ThemeMode": "Auto" + }, + "Time": { + "TimeEnabled_0": true, + "TimeEnabled_1": false, + "TimeEnabled_2": false, + "TimeEnabled_3": false, + "TimeEnabled_4": false, + "TimeEnabled_5": false, + "TimeEnabled_6": false, + "TimeEnabled_7": false, + "TimeEnabled_8": false, + "TimeEnabled_9": false, + "TimeSet_0": "19:48", + "TimeSet_1": "04:00", + "TimeSet_2": "01:00", + "TimeSet_3": "00:00", + "TimeSet_4": "00:00", + "TimeSet_5": "00:00", + "TimeSet_6": "00:00", + "TimeSet_7": "00:00", + "TimeSet_8": "00:00", + "TimeSet_9": "00:00" + } +} \ No newline at end of file diff --git a/config/QueueConfig/调度队列_3.json b/config/QueueConfig/调度队列_3.json new file mode 100644 index 0000000..ec81488 --- /dev/null +++ b/config/QueueConfig/调度队列_3.json @@ -0,0 +1,44 @@ +{ + "QueueSet": { + "Enabled": false, + "Name": "" + }, + "Queue": { + "Member_1": "禁用", + "Member_10": "禁用", + "Member_2": "禁用", + "Member_3": "禁用", + "Member_4": "禁用", + "Member_5": "禁用", + "Member_6": "禁用", + "Member_7": "禁用", + "Member_8": "禁用", + "Member_9": "禁用" + }, + "QFluentWidgets": { + "ThemeColor": "#ff009faa", + "ThemeMode": "Auto" + }, + "Time": { + "TimeEnabled_0": false, + "TimeEnabled_1": false, + "TimeEnabled_2": false, + "TimeEnabled_3": false, + "TimeEnabled_4": false, + "TimeEnabled_5": false, + "TimeEnabled_6": false, + "TimeEnabled_7": false, + "TimeEnabled_8": false, + "TimeEnabled_9": false, + "TimeSet_0": "02:00", + "TimeSet_1": "00:00", + "TimeSet_2": "00:00", + "TimeSet_3": "00:00", + "TimeSet_4": "00:00", + "TimeSet_5": "00:00", + "TimeSet_6": "00:00", + "TimeSet_7": "00:00", + "TimeSet_8": "00:00", + "TimeSet_9": "00:00" + } +} \ No newline at end of file diff --git a/config/config.json b/config/config.json new file mode 100644 index 0000000..6611c5e --- /dev/null +++ b/config/config.json @@ -0,0 +1,32 @@ +{ + "Function": { + "BossKey": "", + "IfAllowSleep": true, + "IfSilence": false + }, + "Notify": { + "IfPushPlyer": false, + "IfSendErrorOnly": false, + "IfSendMail": false, + "MailAddress": "" + }, + "Start": { + "IfRunDirectly": false, + "IfSelfStart": false + }, + "QFluentWidgets": { + "ThemeColor": "#ff009faa", + "ThemeMode": "Auto" + }, + "UI": { + "IfShowTray": false, + "IfToTray": false, + "MainIndex": 0, + "location": "207x195", + "maximized": false, + "size": "1200x700" + }, + "Update": { + "IfAutoUpdate": false + } +} \ No newline at end of file diff --git a/config/history.json b/config/history.json new file mode 100644 index 0000000..05f7fda --- /dev/null +++ b/config/history.json @@ -0,0 +1,18 @@ +{ + "\u811a\u672c_1": { + "History": "\u4efb\u52a1\u5f00\u59cb\u65f6\u95f4\uff1a2025-01-25 17:49:28\uff0c\u7ed3\u675f\u65f6\u95f4\uff1a2025-01-25 17:50:50\n\u5df2\u5b8c\u6210\u6570\uff1a0\uff0c\u672a\u5b8c\u6210\u6570\uff1a1\n\n\u4ee3\u7406\u672a\u6210\u529f\u7684\u7528\u6237\uff1a\n\u65b0\u7528\u6237\n", + "Time": "2025-01-25 17:49:28" + }, + "\u8c03\u5ea6\u961f\u5217_2": { + "Time": "2025-01-24 19:35:19", + "History": "\u4efb\u52a1\u540d\u79f0\uff1a\u811a\u672c_1\uff0c\u4efb\u52a1\u5f00\u59cb\u65f6\u95f4\uff1a2025-01-24 19:35:19\uff0c\u7ed3\u675f\u65f6\u95f4\uff1a2025-01-24 19:36:21\n\u5df2\u5b8c\u6210\u6570\uff1a0\uff0c\u672a\u5b8c\u6210\u6570\uff1a1\n\n\u4ee3\u7406\u672a\u6210\u529f\u7684\u7528\u6237\uff1a\n\u65b0\u7528\u6237\n\n" + }, + "\u811a\u672c_2": { + "History": "\u4efb\u52a1\u5f00\u59cb\u65f6\u95f4\uff1a2025-01-25 17:54:26\uff0c\u7ed3\u675f\u65f6\u95f4\uff1a2025-01-25 17:54:37\n\u5df2\u5b8c\u6210\u6570\uff1a0\uff0c\u672a\u5b8c\u6210\u6570\uff1a1\n\n\u4ee3\u7406\u672a\u6210\u529f\u7684\u7528\u6237\uff1a\n\u65b0\u7528\u6237\n", + "Time": "2025-01-25 17:54:26" + }, + "\u8c03\u5ea6\u961f\u5217_1": { + "Time": "2025-01-25 17:54:26", + "History": "\u4efb\u52a1\u540d\u79f0\uff1a\u811a\u672c_2\uff0c\u4efb\u52a1\u5f00\u59cb\u65f6\u95f4\uff1a2025-01-25 17:54:26\uff0c\u7ed3\u675f\u65f6\u95f4\uff1a2025-01-25 17:54:37\n \u5df2\u5b8c\u6210\u6570\uff1a0\uff0c\u672a\u5b8c\u6210\u6570\uff1a1\n \n \u4ee3\u7406\u672a\u6210\u529f\u7684\u7528\u6237\uff1a\n \u65b0\u7528\u6237\n \n" + } +} \ No newline at end of file diff --git a/data/gameid.txt b/data/gameid.txt new file mode 100644 index 0000000..6c05329 --- /dev/null +++ b/data/gameid.txt @@ -0,0 +1,5 @@ +龙门币:CE-6 +技能:CA-5 +红票:AP-5 +经验:LS-6 +剿灭模式:Annihilation \ No newline at end of file diff --git a/data/key/AES_password_verify.bin b/data/key/AES_password_verify.bin new file mode 100644 index 0000000..559f670 --- /dev/null +++ b/data/key/AES_password_verify.bin @@ -0,0 +1 @@ +8hKOՎAH~KEUXDbH-, \ No newline at end of file diff --git a/data/key/PASSWORDsalt.txt b/data/key/PASSWORDsalt.txt new file mode 100644 index 0000000..1e0a4b0 --- /dev/null +++ b/data/key/PASSWORDsalt.txt @@ -0,0 +1 @@ +356125d2ad32e482fcc4fe7ad4a6027fc4c5dc1616664837960bd7faeafddf71450d3eb875ff76a5729c200d2365d899149cca47cc42e9910f356a019e366c2537597131ff398cb728c17459a8e08ef716d2824cc76d6a668e6dede654265bf226c9b6a20cb7ace2a4b0a7369284f1deb4cdcd8503085797ce612002d9bbe9b4230cd1288c20d0866cd36fc4bcde1da1dccfff579c31e735c6cb575f7e763a2e38f0a06bd493ed9ec2ae5156f01e2b8d0bd3b79d78e248c9d87480f1d8a1a5fd0b4313096d7879f805a2560e81a1918e85beb777fe01a30af532c76e93eea8cfdbbd3281d0cceea5025da6291492f6ea83ba51 \ No newline at end of file diff --git a/data/key/private_key.bin b/data/key/private_key.bin new file mode 100644 index 0000000000000000000000000000000000000000..c2175aef9b227c0d1bad8c6e8fc5c2fab19ecd0b GIT binary patch literal 1696 zcmV;R24DGuvuK6mcDeI-vLwN2c1*F@u2+P0;Li6x1#7_6MK~R;zMdC^2mu3#U)i^5R%v0SjFWWbJvy$|aNXG()RoXjbf- zvIanqV|i8hN$0lRk=V%cbF$%#zH06-DWoV1mA!{fB?+?0VU&e4$wt&!*2m((aN)TN zQoEygIR|g^pI~b}?tAzen$e2ipilK$_4!4c43`vZ6tLWOsLp?<|GOEyz?@2l$(lgY z&p+aZQ*}ea!&RJ_$yW#Pg14DXoca8Bg3`0s9UXBMw<=v|Xq8Hx5!q1^zBtHz&^847 zXs;c3;{Lm>2`<_73_{Fao6(^&m|ND`lWJiuj)(($X*i@Wojp!J#^xKSvq~>nVz>Q7mlF@w@Rn!XLOS&jl`}GBeKe!SV$7Yi>kkA+pY*@py&+XVv zwm*rNho@+3kF)=kdns!j> zWwwa^gI#^M?W0Fc`7e>X{2Utc7X~5n<7Z4Xr2Y#!m}!(RhZ;dsAMt0T9UWka_R+x~ z|KP*v9-V*^!X=POmwpu*Z??F?!l<-kLj}NTwL^V65fD7>*)P{!EN)4QhJ071nozHD z^Ib>SZ=io0RspaiaNBu-C4`%96?hr4uj;z&0<5Q!=lg6!;u1|J1ku8u4cQdGTgFd^ z>KW2O!mv9Odl0tyzqUN%1KL2A1=C16Mez;5`P5bum=1A$WaJhA{}iZrZ^x(oK8jV* zE}@n($?e0=mIalK^m+q-Ar64!qgp&FF)URQ>L_2W-5JtLTv;jU@2LGBSkG3ZYD7r! zxq$`>)LHM;HCf2WtxP{W2bM7VPumkt$iupBWl1CyS1-R4qQg6)Vy_#5&PJi*dP&7O z6+ldU0k9UgGq(q5reThmLxW(bz}stM^r2I4R6A?l0%xYQ$=CsMvCHoendO+ux(4z} zio_KcIvQ$F!{jT{dcwc>xv0e; zcgp7X=_Gn%Hlzu)MHj6x99CGtF{hrKH)%Q=cemnHgZLtD@Y+qml0dL}09xU{*EGcW z_jr6X9oP1!0WGha%U{j7Xlo?_8@&uD0iwL8&L=llq&=RjYHhK(9e3?GWWyf4w9wNf_w?{_7e!oC1SerWJnL}fWR z{>gtp~KukJOWGOii=)F>^Qb=|V}fCO=B1zihkty{ZDlFHo#TGEyp$#$-e~ zMXQp(2cE$HAGrmC`P7|zXGx{TVbZWEzwZ*zU--vx%y@H4ADk{5GN*yu*7f|SRk`cF zb7$nIIY`!G=|`(-2~8tlBDyXTrCB#xkai-z)u`sC?H?eGSW5)nJX4!#mADbLeCS|ht~pogMebf&?ZNx?JCAb1!xek zcGPlbP8b1-Tb!+Hffox{yDiZ?^8! zyVE@ATiQfRs>M#nOZ^={V&kZ>q<0W0Hm$xp!$e}XSsfB?*6#kF8>{bQtxim} z<|AzIX^*v5o+CPxX0~&K$$R16cefkV1d~74qgB&bPk7Z^aZj1Ult$+8tUQf50k#+N qFB;YuaqLvCLGjp;1Es literal 0 HcmV?d00001 diff --git a/data/key/public_key.pem b/data/key/public_key.pem new file mode 100644 index 0000000..c589fdb --- /dev/null +++ b/data/key/public_key.pem @@ -0,0 +1,9 @@ +-----BEGIN PUBLIC KEY----- +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAszLXtgtcSrV7gZ5I2Vu0 +aeTG41PE5A6XrrFp8xSA1Wvqaap9WSqr/pkUQr/jzkT27EKMHEc+hP15eh6xG3Oc +o7hC0up2CMC2vb00Lvy2FQ4wkKqjpgLQdLD8+RHz8ms6WvcJ5ipw39DI342BPAja +xpsqquU0PTqJ+1cZtLOx6pGL5IgvxFjgLYwlLzR/3htasH4z3zMhK1yNiew6ve+J +/BosWH42p5Tab9AL0xirnamHGJB1Djful+PUHjMRms8jt0t+0dDvPhphZsbnv2N+ +aTpa9EymC1tMowB++cfCmIO0QqWgp+ekr4tymLhpAkL/yBDOeNXNNbJWd4MqAVUE +ZQIDAQAB +-----END PUBLIC KEY----- \ No newline at end of file diff --git a/data/key/verifysalt.txt b/data/key/verifysalt.txt new file mode 100644 index 0000000..87c8e1f --- /dev/null +++ b/data/key/verifysalt.txt @@ -0,0 +1 @@ +12b6b63c4519307f4fb5868e171dbf0afd8d55a742a01e2eb251586073ecfb7b46836463 \ No newline at end of file diff --git a/debug/AUTO_MAA.log b/debug/AUTO_MAA.log new file mode 100644 index 0000000..c326022 --- /dev/null +++ b/debug/AUTO_MAA.log @@ -0,0 +1,3682 @@ +2025-01-21 11:49:20.329 | INFO | 日志记录器初始化完成 +2025-01-21 11:49:20.329 | DEBUG | A debug message. +2025-01-21 11:49:20.329 | INFO | An info message. +2025-01-21 11:49:20.329 | SUCCESS | A success message. +2025-01-21 11:49:20.329 | WARNING | A warning message. +2025-01-21 11:49:20.329 | ERROR | An error message. +2025-01-21 11:49:20.329 | CRITICAL | A critical message. +2025-01-21 11:54:49.797 | INFO | 日志记录器初始化完成 +2025-01-21 11:54:49.798 | INFO | 配置类初始化完成 +2025-01-21 12:12:30.514 | INFO | 日志记录器初始化完成 +2025-01-21 12:12:30.514 | INFO | 配置类初始化完成 +2025-01-21 12:12:41.007 | INFO | 用户数据库初始化完成 +2025-01-21 12:19:53.857 | INFO | 日志记录器初始化完成 +2025-01-21 12:19:53.858 | INFO | 配置类初始化完成 +2025-01-21 12:22:43.982 | INFO | 日志记录器初始化完成 +2025-01-21 12:22:43.983 | INFO | 配置类初始化完成 +2025-01-21 12:22:43.983 | INFO | 程序配置管理模块初始化完成 +2025-01-21 13:24:28.010 | INFO | 日志记录器初始化完成 +2025-01-21 13:24:28.011 | INFO | 配置类初始化完成 +2025-01-21 13:24:28.011 | INFO | 程序配置管理模块初始化完成 +2025-01-21 13:25:04.303 | INFO | 日志记录器初始化完成 +2025-01-21 13:25:04.303 | INFO | 配置类初始化完成 +2025-01-21 13:25:04.304 | INFO | 程序配置管理模块初始化完成 +2025-01-21 14:49:51.709 | INFO | 日志记录器初始化完成 +2025-01-21 14:49:51.710 | INFO | 配置类初始化完成 +2025-01-21 14:49:51.710 | INFO | 程序配置管理模块初始化完成 +2025-01-21 14:52:35.123 | INFO | 日志记录器初始化完成 +2025-01-21 14:52:35.124 | INFO | 配置类初始化完成 +2025-01-21 14:52:35.124 | INFO | 程序配置管理模块初始化完成 +2025-01-21 14:52:52.358 | INFO | 日志记录器初始化完成 +2025-01-21 14:52:52.359 | INFO | 配置类初始化完成 +2025-01-21 14:52:52.359 | INFO | 程序配置管理模块初始化完成 +2025-01-21 14:58:52.777 | INFO | 日志记录器初始化完成 +2025-01-21 14:58:52.778 | INFO | 配置类初始化完成 +2025-01-21 14:58:52.778 | INFO | 程序配置管理模块初始化完成 +2025-01-21 15:05:01.363 | INFO | 日志记录器初始化完成 +2025-01-21 15:05:01.365 | INFO | 配置类初始化完成 +2025-01-21 15:05:01.365 | INFO | 程序配置管理模块初始化完成 +2025-01-21 15:05:19.642 | INFO | 日志记录器初始化完成 +2025-01-21 15:05:19.643 | INFO | 配置类初始化完成 +2025-01-21 15:05:19.643 | INFO | 程序配置管理模块初始化完成 +2025-01-21 15:05:34.931 | INFO | 日志记录器初始化完成 +2025-01-21 15:05:34.932 | INFO | 配置类初始化完成 +2025-01-21 15:05:34.932 | INFO | 程序配置管理模块初始化完成 +2025-01-21 15:06:03.160 | INFO | 日志记录器初始化完成 +2025-01-21 15:06:03.161 | INFO | 配置类初始化完成 +2025-01-21 15:06:03.161 | INFO | 程序配置管理模块初始化完成 +2025-01-21 15:06:21.896 | INFO | 日志记录器初始化完成 +2025-01-21 15:06:21.897 | INFO | 配置类初始化完成 +2025-01-21 15:06:21.897 | INFO | 程序配置管理模块初始化完成 +2025-01-21 15:06:50.940 | INFO | 日志记录器初始化完成 +2025-01-21 15:06:50.942 | INFO | 配置类初始化完成 +2025-01-21 15:06:50.942 | INFO | 程序配置管理模块初始化完成 +2025-01-21 15:07:29.196 | INFO | 日志记录器初始化完成 +2025-01-21 15:07:29.197 | INFO | 配置类初始化完成 +2025-01-21 15:07:29.197 | INFO | 程序配置管理模块初始化完成 +2025-01-21 15:07:57.433 | INFO | 日志记录器初始化完成 +2025-01-21 15:07:57.434 | INFO | 配置类初始化完成 +2025-01-21 15:07:57.434 | INFO | 程序配置管理模块初始化完成 +2025-01-21 20:20:26.545 | INFO | 日志记录器初始化完成 +2025-01-21 20:20:26.546 | INFO | 配置类初始化完成 +2025-01-21 20:20:26.546 | INFO | 程序配置管理模块初始化完成 +2025-01-21 20:22:14.313 | INFO | 日志记录器初始化完成 +2025-01-21 20:22:14.314 | INFO | 配置类初始化完成 +2025-01-21 20:22:14.314 | INFO | 程序配置管理模块初始化完成 +2025-01-21 20:26:00.174 | INFO | 日志记录器初始化完成 +2025-01-21 20:26:00.177 | INFO | 配置类初始化完成 +2025-01-21 20:26:00.178 | INFO | 程序配置管理模块初始化完成 +2025-01-21 20:28:02.800 | INFO | 日志记录器初始化完成 +2025-01-21 20:28:02.802 | INFO | 配置类初始化完成 +2025-01-21 20:28:02.803 | INFO | 程序配置管理模块初始化完成 +2025-01-21 20:34:17.721 | INFO | 日志记录器初始化完成 +2025-01-21 20:34:17.721 | INFO | 配置类初始化完成 +2025-01-21 20:34:17.722 | INFO | 程序配置管理模块初始化完成 +2025-01-21 20:36:19.371 | INFO | 日志记录器初始化完成 +2025-01-21 20:36:19.371 | INFO | 配置类初始化完成 +2025-01-21 20:36:19.371 | INFO | 程序配置管理模块初始化完成 +2025-01-21 20:37:07.264 | INFO | 日志记录器初始化完成 +2025-01-21 20:37:07.265 | INFO | 配置类初始化完成 +2025-01-21 20:37:07.265 | INFO | 程序配置管理模块初始化完成 +2025-01-21 20:40:35.054 | INFO | 日志记录器初始化完成 +2025-01-21 20:40:35.055 | INFO | 配置类初始化完成 +2025-01-21 20:40:35.056 | INFO | 程序配置管理模块初始化完成 +2025-01-21 20:40:36.470 | INFO | 初始化信息通知栏 +2025-01-21 20:43:04.430 | INFO | 日志记录器初始化完成 +2025-01-21 20:43:04.431 | INFO | 配置类初始化完成 +2025-01-21 20:43:04.431 | INFO | 程序配置管理模块初始化完成 +2025-01-21 20:43:05.708 | INFO | 初始化信息通知栏 +2025-01-21 20:43:05.708 | DEBUG | +2025-01-21 20:44:23.996 | INFO | 日志记录器初始化完成 +2025-01-21 20:44:23.997 | INFO | 配置类初始化完成 +2025-01-21 20:44:23.998 | INFO | 程序配置管理模块初始化完成 +2025-01-21 20:44:25.117 | INFO | 初始化信息通知栏 +2025-01-21 20:44:25.117 | DEBUG | +2025-01-21 20:44:25.117 | DEBUG | +2025-01-21 20:47:40.358 | INFO | 日志记录器初始化完成 +2025-01-21 20:47:40.360 | INFO | 配置类初始化完成 +2025-01-21 20:47:40.360 | INFO | 程序配置管理模块初始化完成 +2025-01-21 20:47:40.988 | INFO | 初始化信息通知栏 +2025-01-21 20:47:40.988 | DEBUG | +2025-01-21 20:47:40.988 | DEBUG | +2025-01-21 20:47:40.988 | DEBUG | None初始化完成 +2025-01-21 20:53:51.035 | INFO | 日志记录器初始化完成 +2025-01-21 20:53:51.036 | INFO | 配置类初始化完成 +2025-01-21 20:53:51.036 | INFO | 程序配置管理模块初始化完成 +2025-01-21 20:53:51.793 | INFO | 初始化信息通知栏 +2025-01-21 20:53:51.793 | DEBUG | +2025-01-21 20:53:51.793 | DEBUG | +2025-01-21 21:22:25.169 | INFO | 日志记录器初始化完成 +2025-01-21 21:22:25.170 | INFO | 配置类初始化完成 +2025-01-21 21:22:25.170 | INFO | 程序配置管理模块初始化完成 +2025-01-21 21:22:51.905 | INFO | 日志记录器初始化完成 +2025-01-21 21:22:51.908 | INFO | 配置类初始化完成 +2025-01-21 21:22:51.908 | INFO | 程序配置管理模块初始化完成 +2025-01-21 21:24:43.789 | INFO | 日志记录器初始化完成 +2025-01-21 21:24:43.790 | INFO | 配置类初始化完成 +2025-01-21 21:24:43.790 | INFO | 程序配置管理模块初始化完成 +2025-01-21 21:25:03.329 | INFO | 日志记录器初始化完成 +2025-01-21 21:25:03.330 | INFO | 配置类初始化完成 +2025-01-21 21:25:03.330 | INFO | 程序配置管理模块初始化完成 +2025-01-21 21:25:04.779 | ERROR | 信息通知栏未找到父窗口 +2025-01-21 21:26:58.211 | INFO | 日志记录器初始化完成 +2025-01-21 21:26:58.212 | INFO | 配置类初始化完成 +2025-01-21 21:26:58.212 | INFO | 程序配置管理模块初始化完成 +2025-01-21 21:29:00.310 | INFO | 日志记录器初始化完成 +2025-01-21 21:29:00.311 | INFO | 配置类初始化完成 +2025-01-21 21:29:00.311 | INFO | 程序配置管理模块初始化完成 +2025-01-21 21:30:41.977 | INFO | 日志记录器初始化完成 +2025-01-21 21:30:41.977 | INFO | 配置类初始化完成 +2025-01-21 21:30:41.978 | INFO | 程序配置管理模块初始化完成 +2025-01-21 21:38:59.888 | INFO | 日志记录器初始化完成 +2025-01-21 21:38:59.889 | INFO | 配置类初始化完成 +2025-01-21 21:38:59.889 | INFO | 程序配置管理模块初始化完成 +2025-01-21 21:39:12.584 | INFO | 按时间调起任务:调度队列_1 +2025-01-21 21:39:12.584 | INFO | 添加任务:调度队列_1 +2025-01-21 21:39:12.601 | INFO | 开始任务:调度队列_1 +2025-01-21 21:39:54.293 | INFO | 日志记录器初始化完成 +2025-01-21 21:39:54.294 | INFO | 配置类初始化完成 +2025-01-21 21:39:54.295 | INFO | 程序配置管理模块初始化完成 +2025-01-21 21:40:00.965 | INFO | 按时间调起任务:调度队列_1 +2025-01-21 21:40:00.965 | INFO | 添加任务:调度队列_1 +2025-01-21 21:40:00.984 | INFO | 开始任务:调度队列_1 +2025-01-21 21:40:48.500 | INFO | 日志记录器初始化完成 +2025-01-21 21:40:48.501 | INFO | 配置类初始化完成 +2025-01-21 21:40:48.501 | INFO | 程序配置管理模块初始化完成 +2025-01-21 21:40:50.403 | INFO | 按时间调起任务:调度队列_1 +2025-01-21 21:40:50.403 | INFO | 添加任务:调度队列_1 +2025-01-21 21:40:50.428 | INFO | 开始任务:调度队列_1 +2025-01-21 21:41:23.344 | INFO | 日志记录器初始化完成 +2025-01-21 21:41:23.345 | INFO | 配置类初始化完成 +2025-01-21 21:41:23.345 | INFO | 程序配置管理模块初始化完成 +2025-01-21 21:41:34.943 | INFO | 按时间调起任务:调度队列_1 +2025-01-21 21:41:34.943 | INFO | 添加任务:调度队列_1 +2025-01-21 21:41:34.960 | INFO | 开始任务:调度队列_1 +2025-01-21 21:42:20.136 | INFO | 日志记录器初始化完成 +2025-01-21 21:42:20.137 | INFO | 配置类初始化完成 +2025-01-21 21:42:20.137 | INFO | 程序配置管理模块初始化完成 +2025-01-21 21:42:30.708 | INFO | 按时间调起任务:调度队列_1 +2025-01-21 21:42:30.708 | INFO | 添加任务:调度队列_1 +2025-01-21 21:42:30.725 | INFO | 开始任务:调度队列_1 +2025-01-21 21:42:30.728 | ERROR | 未正确配置MAA路径,MAA代理进程中止 +2025-01-21 21:43:11.135 | INFO | 日志记录器初始化完成 +2025-01-21 21:43:11.135 | INFO | 配置类初始化完成 +2025-01-21 21:43:11.135 | INFO | 程序配置管理模块初始化完成 +2025-01-21 21:43:17.728 | INFO | 按时间调起任务:调度队列_1 +2025-01-21 21:43:17.728 | INFO | 添加任务:调度队列_1 +2025-01-21 21:43:17.761 | INFO | 开始任务:调度队列_1 +2025-01-21 21:43:17.767 | ERROR | 未正确配置MAA路径,MAA代理进程中止 +2025-01-21 22:42:08.717 | INFO | 日志记录器初始化完成 +2025-01-21 22:42:08.718 | INFO | 配置类初始化完成 +2025-01-21 22:42:08.718 | INFO | 程序配置管理模块初始化完成 +2025-01-21 22:42:22.255 | INFO | 按时间调起任务:调度队列_1 +2025-01-21 22:42:22.256 | INFO | 添加任务:调度队列_1 +2025-01-21 22:42:22.277 | INFO | 开始任务:调度队列_1 +2025-01-21 22:42:22.281 | ERROR | 未正确配置MAA路径,MAA代理进程中止 +2025-01-21 22:44:26.098 | INFO | 日志记录器初始化完成 +2025-01-21 22:44:26.100 | INFO | 配置类初始化完成 +2025-01-21 22:44:26.101 | INFO | 程序配置管理模块初始化完成 +2025-01-21 22:44:27.633 | INFO | success: str, 更新检查: str, 已是最新版本~: str, 3000: int +2025-01-21 22:44:34.679 | INFO | 按时间调起任务:调度队列_1 +2025-01-21 22:44:34.680 | INFO | 添加任务:调度队列_1 +2025-01-21 22:44:34.701 | INFO | 开始任务:调度队列_1 +2025-01-21 22:44:34.705 | ERROR | 未正确配置MAA路径,MAA代理进程中止 +2025-01-21 22:47:00.836 | INFO | 日志记录器初始化完成 +2025-01-21 22:47:00.837 | INFO | 配置类初始化完成 +2025-01-21 22:47:00.837 | INFO | 程序配置管理模块初始化完成 +2025-01-21 22:47:02.376 | INFO | success: str, 更新检查: str, 已是最新版本~: str, 3000: int +2025-01-21 22:47:10.428 | INFO | 按时间调起任务:调度队列_1 +2025-01-21 22:47:10.428 | INFO | 添加任务:调度队列_1 +2025-01-21 22:47:10.447 | INFO | 开始任务:调度队列_1 +2025-01-21 22:47:10.451 | ERROR | 未正确配置MAA路径,MAA代理进程中止 +2025-01-21 22:49:09.406 | INFO | 日志记录器初始化完成 +2025-01-21 22:49:09.407 | INFO | 配置类初始化完成 +2025-01-21 22:49:09.407 | INFO | 程序配置管理模块初始化完成 +2025-01-21 22:49:10.915 | INFO | success: str, 更新检查: str, 已是最新版本~: str, 3000: int +2025-01-21 22:49:17.957 | INFO | 按时间调起任务:调度队列_1 +2025-01-21 22:49:17.957 | INFO | 添加任务:调度队列_1 +2025-01-21 22:49:17.980 | INFO | 开始任务:调度队列_1 +2025-01-21 22:49:17.983 | ERROR | 未正确配置MAA路径,MAA代理进程中止 +2025-01-21 22:51:14.257 | INFO | 日志记录器初始化完成 +2025-01-21 22:51:14.258 | INFO | 配置类初始化完成 +2025-01-21 22:51:14.258 | INFO | 程序配置管理模块初始化完成 +2025-01-21 22:51:15.743 | INFO | success: str, 更新检查: str, 已是最新版本~: str, 3000: int +2025-01-21 22:51:21.771 | INFO | 按时间调起任务:调度队列_1 +2025-01-21 22:51:21.771 | INFO | 添加任务:调度队列_1 +2025-01-21 22:51:21.792 | INFO | 开始任务:调度队列_1 +2025-01-21 22:51:21.796 | ERROR | 未正确配置MAA路径,MAA代理进程中止 +2025-01-21 23:00:44.967 | INFO | 日志记录器初始化完成 +2025-01-21 23:00:44.968 | INFO | 配置类初始化完成 +2025-01-21 23:00:44.968 | INFO | 程序配置管理模块初始化完成 +2025-01-21 23:00:46.525 | INFO | success: str, 更新检查: str, 已是最新版本~: str, 3000: int +2025-01-21 23:00:57.536 | INFO | 按时间调起任务:调度队列_1 +2025-01-21 23:00:57.538 | INFO | 添加任务:调度队列_1 +2025-01-21 23:00:57.561 | INFO | 开始任务:调度队列_1 +2025-01-21 23:00:57.565 | ERROR | 未正确配置MAA路径,MAA代理进程中止 +2025-01-21 23:01:27.108 | INFO | 日志记录器初始化完成 +2025-01-21 23:01:27.108 | INFO | 配置类初始化完成 +2025-01-21 23:01:27.110 | INFO | 程序配置管理模块初始化完成 +2025-01-21 23:01:28.556 | INFO | success: str, 更新检查: str, 已是最新版本~: str, 3000: int +2025-01-21 23:01:34.676 | INFO | 按时间调起任务:调度队列_1 +2025-01-21 23:01:34.676 | INFO | 添加任务:调度队列_1 +2025-01-21 23:01:34.694 | INFO | 开始任务:调度队列_1 +2025-01-21 23:01:34.699 | ERROR | 未正确配置MAA路径,MAA代理进程中止 +2025-01-21 23:02:57.092 | INFO | 日志记录器初始化完成 +2025-01-21 23:02:57.093 | INFO | 配置类初始化完成 +2025-01-21 23:02:57.093 | INFO | 程序配置管理模块初始化完成 +2025-01-21 23:02:58.668 | INFO | success: str, 更新检查: str, 已是最新版本~: str, 3000: int +2025-01-21 23:03:05.677 | INFO | 按时间调起任务:调度队列_1 +2025-01-21 23:03:05.678 | INFO | 添加任务:调度队列_1 +2025-01-21 23:03:05.701 | INFO | 开始任务:调度队列_1 +2025-01-21 23:03:05.704 | ERROR | 未正确配置MAA路径,MAA代理进程中止 +2025-01-21 23:04:36.314 | INFO | 日志记录器初始化完成 +2025-01-21 23:04:36.315 | INFO | 配置类初始化完成 +2025-01-21 23:04:36.315 | INFO | 程序配置管理模块初始化完成 +2025-01-21 23:04:37.792 | INFO | success: str, 更新检查: str, 已是最新版本~: str, 3000: int +2025-01-21 23:04:44.832 | INFO | 按时间调起任务:调度队列_1 +2025-01-21 23:04:44.832 | INFO | 添加任务:调度队列_1 +2025-01-21 23:04:44.848 | INFO | 开始任务:调度队列_1 +2025-01-21 23:04:44.852 | ERROR | 未正确配置MAA路径,MAA代理进程中止 +2025-01-21 23:08:19.216 | INFO | 日志记录器初始化完成 +2025-01-21 23:08:19.218 | INFO | 配置类初始化完成 +2025-01-21 23:08:19.218 | INFO | 程序配置管理模块初始化完成 +2025-01-21 23:08:20.835 | INFO | success: str, 更新检查: str, 已是最新版本~: str, 3000: int +2025-01-21 23:08:26.850 | INFO | 按时间调起任务:调度队列_1 +2025-01-21 23:08:26.851 | INFO | 添加任务:调度队列_1 +2025-01-21 23:08:26.872 | INFO | 开始任务:调度队列_1 +2025-01-21 23:08:26.876 | ERROR | 未正确配置MAA路径,MAA代理进程中止 +2025-01-21 23:10:30.786 | INFO | 日志记录器初始化完成 +2025-01-21 23:10:30.786 | INFO | 配置类初始化完成 +2025-01-21 23:10:30.787 | INFO | 程序配置管理模块初始化完成 +2025-01-21 23:10:32.373 | INFO | success: str, 更新检查: str, 已是最新版本~: str, 3000: int +2025-01-21 23:10:39.368 | INFO | 按时间调起任务:调度队列_1 +2025-01-21 23:10:39.368 | INFO | 添加任务:调度队列_1 +2025-01-21 23:11:07.648 | INFO | 日志记录器初始化完成 +2025-01-21 23:11:07.649 | INFO | 配置类初始化完成 +2025-01-21 23:11:07.649 | INFO | 程序配置管理模块初始化完成 +2025-01-21 23:11:09.115 | INFO | success: str, 更新检查: str, 已是最新版本~: str, 3000: int +2025-01-21 23:11:14.240 | INFO | 按时间调起任务:调度队列_1 +2025-01-21 23:11:14.240 | INFO | 添加任务:调度队列_1 +2025-01-21 23:11:14.258 | INFO | 开始任务:调度队列_1 +2025-01-21 23:11:14.260 | ERROR | 未正确配置MAA路径,MAA代理进程中止 +2025-01-21 23:11:57.232 | INFO | 日志记录器初始化完成 +2025-01-21 23:11:57.233 | INFO | 配置类初始化完成 +2025-01-21 23:11:57.233 | INFO | 程序配置管理模块初始化完成 +2025-01-21 23:11:58.722 | INFO | success: str, 更新检查: str, 已是最新版本~: str, 3000: int +2025-01-21 23:11:58.754 | INFO | 按时间调起任务:调度队列_1 +2025-01-21 23:11:58.754 | INFO | 添加任务:调度队列_1 +2025-01-21 23:11:58.770 | INFO | 开始任务:调度队列_1 +2025-01-21 23:11:58.772 | ERROR | 未正确配置MAA路径,MAA代理进程中止 +2025-01-21 23:15:37.689 | INFO | 日志记录器初始化完成 +2025-01-21 23:15:37.690 | INFO | 配置类初始化完成 +2025-01-21 23:15:37.690 | INFO | 程序配置管理模块初始化完成 +2025-01-21 23:15:39.243 | INFO | success: str, 更新检查: str, 已是最新版本~: str, 3000: int +2025-01-21 23:15:47.259 | INFO | 按时间调起任务:调度队列_1 +2025-01-21 23:15:47.260 | INFO | 添加任务:调度队列_1 +2025-01-21 23:15:47.275 | INFO | 开始任务:调度队列_1 +2025-01-21 23:15:47.279 | ERROR | 未正确配置MAA路径,MAA代理进程中止 +2025-01-22 11:01:17.938 | INFO | 日志记录器初始化完成 +2025-01-22 11:01:17.941 | INFO | 配置类初始化完成 +2025-01-22 11:01:17.941 | INFO | 程序配置管理模块初始化完成 +2025-01-22 11:01:20.351 | INFO | success: str, 更新检查: str, 已是最新版本~: str, 3000: int +2025-01-22 11:01:38.693 | INFO | 按时间调起任务:调度队列_1 +2025-01-22 11:01:38.694 | INFO | 添加任务:调度队列_1 +2025-01-22 11:01:38.715 | INFO | 开始任务:调度队列_1 +2025-01-22 11:01:38.720 | ERROR | 未正确配置MAA路径,MAA代理进程中止 +2025-01-22 11:02:58.919 | INFO | 日志记录器初始化完成 +2025-01-22 11:02:58.920 | INFO | 配置类初始化完成 +2025-01-22 11:02:58.920 | INFO | 程序配置管理模块初始化完成 +2025-01-22 11:03:00.740 | INFO | success: str, 更新检查: str, 已是最新版本~: str, 3000: int +2025-01-22 11:03:06.552 | INFO | 按时间调起任务:调度队列_1 +2025-01-22 11:03:06.554 | INFO | 添加任务:调度队列_1 +2025-01-22 11:03:06.572 | INFO | 开始任务:调度队列_1 +2025-01-22 11:03:06.575 | INFO | info: str, 开始任务: str, 脚本_1: str, 5000: int +2025-01-22 11:03:06.577 | INFO | self.task_list[name].push_info_bar +2025-01-22 11:03:06.577 | ERROR | 未正确配置MAA路径,MAA代理进程中止 +2025-01-22 12:20:56.979 | INFO | 日志记录器初始化完成 +2025-01-22 12:20:56.980 | INFO | 配置类初始化完成 +2025-01-22 12:20:56.980 | INFO | 程序配置管理模块初始化完成 +2025-01-22 12:20:59.014 | INFO | success: str, 更新检查: str, 已是最新版本~: str, 3000: int +2025-01-22 12:21:09.601 | INFO | 按时间调起任务:调度队列_1 +2025-01-22 12:21:09.602 | INFO | 添加任务:调度队列_1 +2025-01-22 12:21:09.621 | INFO | 开始任务:调度队列_1 +2025-01-22 12:21:09.624 | INFO | self.task.s +2025-01-22 12:21:09.624 | ERROR | 未正确配置MAA路径,MAA代理进程中止 +2025-01-22 12:21:09.625 | INFO | self.task.push_info_bar +2025-01-22 12:21:09.626 | INFO | info: str, 开始任务: str, 脚本_1: str, 5000: int +2025-01-22 12:21:09.628 | INFO | self.task_list[name].push_info_bar +2025-01-22 12:21:34.007 | INFO | 日志记录器初始化完成 +2025-01-22 12:21:34.009 | INFO | 配置类初始化完成 +2025-01-22 12:21:34.009 | INFO | 程序配置管理模块初始化完成 +2025-01-22 12:21:35.674 | INFO | success: str, 更新检查: str, 已是最新版本~: str, 3000: int +2025-01-22 12:21:35.703 | INFO | 按时间调起任务:调度队列_1 +2025-01-22 12:21:35.705 | INFO | 添加任务:调度队列_1 +2025-01-22 12:21:35.724 | INFO | 开始任务:调度队列_1 +2025-01-22 12:21:35.727 | INFO | self.task.s +2025-01-22 12:21:35.727 | ERROR | 未正确配置MAA路径,MAA代理进程中止 +2025-01-22 12:21:35.727 | INFO | self.task.push_info_bar +2025-01-22 12:21:35.730 | INFO | info: str, 开始任务: str, 脚本_1: str, 5000: int +2025-01-22 12:21:35.733 | INFO | self.task_list[name].push_info_bar +2025-01-22 12:23:27.598 | INFO | 日志记录器初始化完成 +2025-01-22 12:23:27.599 | INFO | 配置类初始化完成 +2025-01-22 12:23:27.599 | INFO | 程序配置管理模块初始化完成 +2025-01-22 12:23:29.401 | INFO | success: str, 更新检查: str, 已是最新版本~: str, 3000: int +2025-01-22 12:23:35.206 | INFO | 按时间调起任务:调度队列_1 +2025-01-22 12:23:35.207 | INFO | 添加任务:调度队列_1 +2025-01-22 12:23:35.223 | INFO | 开始任务:调度队列_1 +2025-01-22 12:23:35.226 | ERROR | 未正确配置MAA路径,MAA代理进程中止 +2025-01-22 12:23:35.228 | INFO | info: str, 开始任务: str, 脚本_1: str, 5000: int +2025-01-22 12:23:35.229 | INFO | self.task_list[name].push_info_bar +2025-01-22 12:23:35.231 | INFO | error: str, 启动MAA代理进程失败: str, 您还未正确配置MAA路径!: str, -1: int +2025-01-22 12:23:35.233 | INFO | self.task_list[name].push_info_bar +2025-01-22 12:24:52.168 | INFO | 日志记录器初始化完成 +2025-01-22 12:24:52.168 | INFO | 配置类初始化完成 +2025-01-22 12:24:52.169 | INFO | 程序配置管理模块初始化完成 +2025-01-22 12:24:54.004 | INFO | success: str, 更新检查: str, 已是最新版本~: str, 3000: int +2025-01-22 12:25:02.787 | INFO | 按时间调起任务:调度队列_1 +2025-01-22 12:25:02.788 | INFO | 添加任务:调度队列_1 +2025-01-22 12:25:02.806 | INFO | 开始任务:调度队列_1 +2025-01-22 12:25:02.809 | ERROR | 未正确配置MAA路径,MAA代理进程中止 +2025-01-22 12:25:02.809 | INFO | info: str, 开始任务: str, 脚本_1: str, 5000: int +2025-01-22 12:25:02.813 | INFO | self.task_list[name].push_info_bar +2025-01-22 12:25:02.813 | INFO | error: str, 启动MAA代理进程失败: str, 您还未正确配置MAA路径!: str, -1: int +2025-01-22 12:25:02.815 | INFO | self.task_list[name].push_info_bar +2025-01-22 12:27:34.433 | INFO | 日志记录器初始化完成 +2025-01-22 12:27:34.435 | INFO | 配置类初始化完成 +2025-01-22 12:27:34.435 | INFO | 程序配置管理模块初始化完成 +2025-01-22 12:28:58.036 | INFO | 按时间调起任务:调度队列_1 +2025-01-22 12:28:58.037 | INFO | 添加任务:调度队列_1 +2025-01-22 12:28:58.056 | INFO | 开始任务:调度队列_1 +2025-01-22 13:03:55.260 | INFO | 日志记录器初始化完成 +2025-01-22 13:03:55.261 | INFO | 配置类初始化完成 +2025-01-22 13:03:55.262 | INFO | 程序配置管理模块初始化完成 +2025-01-22 13:04:08.861 | INFO | 按时间调起任务:调度队列_1 +2025-01-22 13:04:08.861 | INFO | 添加任务:调度队列_1 +2025-01-22 13:04:08.881 | INFO | 开始任务:调度队列_1 +2025-01-22 13:05:08.162 | INFO | 日志记录器初始化完成 +2025-01-22 13:05:08.163 | INFO | 配置类初始化完成 +2025-01-22 13:05:08.163 | INFO | 程序配置管理模块初始化完成 +2025-01-22 13:05:14.815 | INFO | 按时间调起任务:调度队列_1 +2025-01-22 13:05:14.815 | INFO | 添加任务:调度队列_1 +2025-01-22 13:05:14.832 | INFO | 开始任务:调度队列_1 +2025-01-22 13:05:14.834 | DEBUG | 用户数据:[['新用户', '等待', 0]] +2025-01-22 13:06:42.031 | INFO | 日志记录器初始化完成 +2025-01-22 13:06:42.032 | INFO | 配置类初始化完成 +2025-01-22 13:06:42.032 | INFO | 程序配置管理模块初始化完成 +2025-01-22 13:06:49.646 | INFO | 按时间调起任务:调度队列_1 +2025-01-22 13:06:49.646 | INFO | 添加任务:调度队列_1 +2025-01-22 13:06:49.667 | INFO | 开始任务:调度队列_1 +2025-01-22 13:06:49.670 | DEBUG | 用户数据:[['新用户', '等待', 0]] +[('新用户', '123', 'Official', -1, 'y', '2000-01-01', '1-7', '-', '-', 'n', 'n', 'n', b'\x01i}Q\xc5\xfb\xf1zD\xb2\xe5\xcc\xbd-\x10\xa4*\x1c\x18\xc7\x8e\xef"\xbe\x00\xce\xa0\x8d\xd4\x82\x86\t\r\x81\x85[d\x98k\xc9X\x04\xd3\xbd8\x03\xd2\x10Fb8+\x86\xbe\xceR\x8e\xa0\xa4H\x9a\x96\x9cR\xd1G|\x9c-\xfa0\x1a\xa5\xf5;\x9a\xc4\x05\x9bhkq\xa5\xd6gNEv\xb3\x82\x16D\xd4T\nG\xf6\x91f^\xe0\xa12s\xfd\xeb\xde\x06\xea\xe7\xd8B\xae\xc5\xd3\x9dK\xc2\x9b\xcec\xb4x\x1e\'1\xcdv\xb7\x9e\x0f\xe5\x92\x98\xa0\x86I*\xde\xfbj~\xf1[\x04+\xc5\x15\x8a\xef\xee\xb5\xdf\t\xbd\x80y\xc15Y\xb7\x11\x13\xdb\xa0?\xdbh\xe9\xe7\x1f\x11\x06^\xd0]\xb8\xa1\xf0\x16h\xa0\xf5AP.OR\xfeLD\x1aC\n\x92+ZY\x9c\x13>\x8c\x96\xdeeiS\x84\xdd\xe2\xfb&\xean\xa9"=\x9aH\xb3t\x0b\x02\x8aX\x199|\xe6\x07\x18\xc0\x03q]\xcel\xd3\xdaV\xe2\xe2\xb0Hb\x88\xea\x8b\xe2\xcf)\xd7\x0c\xa2\xc5\x08', '无', 0, 'simple', 0)] +2025-01-22 16:54:23.442 | INFO | 日志记录器初始化完成 +2025-01-22 16:54:23.444 | INFO | 配置类初始化完成 +2025-01-22 16:54:23.444 | INFO | 程序配置管理模块初始化完成 +2025-01-22 16:55:30.947 | INFO | 日志记录器初始化完成 +2025-01-22 16:55:30.949 | INFO | 配置类初始化完成 +2025-01-22 16:55:30.949 | INFO | 程序配置管理模块初始化完成 +2025-01-22 16:55:45.523 | INFO | 按时间调起任务:调度队列_1 +2025-01-22 16:55:45.523 | INFO | 添加任务:调度队列_1 +2025-01-22 16:55:45.539 | INFO | 开始任务:调度队列_1 +2025-01-22 16:55:45.542 | DEBUG | 用户数据:[['新用户', '等待', 0]] +[['新用户', '123', 'Official', -1, 'y', '2000-01-01', '1-7', '-', '-', 'n', 'n', 'n', b'\x01i}Q\xc5\xfb\xf1zD\xb2\xe5\xcc\xbd-\x10\xa4*\x1c\x18\xc7\x8e\xef"\xbe\x00\xce\xa0\x8d\xd4\x82\x86\t\r\x81\x85[d\x98k\xc9X\x04\xd3\xbd8\x03\xd2\x10Fb8+\x86\xbe\xceR\x8e\xa0\xa4H\x9a\x96\x9cR\xd1G|\x9c-\xfa0\x1a\xa5\xf5;\x9a\xc4\x05\x9bhkq\xa5\xd6gNEv\xb3\x82\x16D\xd4T\nG\xf6\x91f^\xe0\xa12s\xfd\xeb\xde\x06\xea\xe7\xd8B\xae\xc5\xd3\x9dK\xc2\x9b\xcec\xb4x\x1e\'1\xcdv\xb7\x9e\x0f\xe5\x92\x98\xa0\x86I*\xde\xfbj~\xf1[\x04+\xc5\x15\x8a\xef\xee\xb5\xdf\t\xbd\x80y\xc15Y\xb7\x11\x13\xdb\xa0?\xdbh\xe9\xe7\x1f\x11\x06^\xd0]\xb8\xa1\xf0\x16h\xa0\xf5AP.OR\xfeLD\x1aC\n\x92+ZY\x9c\x13>\x8c\x96\xdeeiS\x84\xdd\xe2\xfb&\xean\xa9"=\x9aH\xb3t\x0b\x02\x8aX\x199|\xe6\x07\x18\xc0\x03q]\xcel\xd3\xdaV\xe2\xe2\xb0Hb\x88\xea\x8b\xe2\xcf)\xd7\x0c\xa2\xc5\x08', '无', 0, 'simple', 0]] +2025-01-22 17:30:16.661 | INFO | 日志记录器初始化完成 +2025-01-22 17:30:16.662 | INFO | 配置类初始化完成 +2025-01-22 17:30:16.663 | INFO | 程序配置管理模块初始化完成 +2025-01-22 17:30:25.733 | WARNING | 选择MAA目录时未找到MAA程序或配置文件 +2025-01-22 17:30:31.126 | WARNING | 选择MAA目录时未选择文件夹或未更改文件夹 +2025-01-22 17:30:51.245 | WARNING | 选择MAA目录时未选择文件夹或未更改文件夹 +2025-01-22 17:31:04.200 | WARNING | 选择MAA目录时未选择文件夹或未更改文件夹 +2025-01-22 17:43:38.687 | INFO | 日志记录器初始化完成 +2025-01-22 17:43:38.688 | INFO | 配置类初始化完成 +2025-01-22 17:43:38.688 | INFO | 程序配置管理模块初始化完成 +2025-01-22 17:43:54.876 | DEBUG | D:\程序开发\AUTO_MAA\config\gui.json +2025-01-22 17:43:54.876 | DEBUG | D:\程序开发\AUTO_MAA\MAA.exe +2025-01-22 17:43:54.876 | WARNING | 选择MAA目录时未找到MAA程序或配置文件 +2025-01-22 17:44:06.492 | WARNING | 选择MAA目录时未选择文件夹或未更改文件夹 +2025-01-22 17:44:15.893 | WARNING | 选择MAA目录时未选择文件夹或未更改文件夹 +2025-01-22 17:44:33.005 | DEBUG | D:\程序开发\AUTO_MAA\config\gui.json +2025-01-22 17:44:33.005 | DEBUG | D:\程序开发\AUTO_MAA\MAA.exe +2025-01-22 17:44:33.005 | WARNING | 选择MAA目录时未找到MAA程序或配置文件 +2025-01-22 17:44:51.667 | INFO | 日志记录器初始化完成 +2025-01-22 17:44:51.668 | INFO | 配置类初始化完成 +2025-01-22 17:44:51.669 | INFO | 程序配置管理模块初始化完成 +2025-01-22 17:45:01.352 | WARNING | 选择MAA目录时未选择文件夹或未更改文件夹 +2025-01-22 17:46:06.889 | INFO | 日志记录器初始化完成 +2025-01-22 17:46:06.890 | INFO | 配置类初始化完成 +2025-01-22 17:46:06.890 | INFO | 程序配置管理模块初始化完成 +2025-01-22 17:47:43.139 | INFO | 日志记录器初始化完成 +2025-01-22 17:47:43.140 | INFO | 配置类初始化完成 +2025-01-22 17:47:43.140 | INFO | 程序配置管理模块初始化完成 +2025-01-22 17:47:59.121 | WARNING | 选择MAA目录时未选择文件夹或未更改文件夹 +2025-01-22 17:48:12.205 | INFO | 用户数据库初始化完成 +2025-01-22 17:50:38.393 | INFO | 日志记录器初始化完成 +2025-01-22 17:50:38.394 | INFO | 配置类初始化完成 +2025-01-22 17:50:38.394 | INFO | 程序配置管理模块初始化完成 +2025-01-22 17:50:40.310 | DEBUG | D:/AUTO/MAA +2025-01-22 17:50:41.071 | DEBUG | D:/AUTO/MAA +2025-01-22 17:50:42.066 | DEBUG | D:/AUTO/MAA +2025-01-22 17:50:43.068 | DEBUG | D:/AUTO/MAA +2025-01-22 17:50:44.068 | DEBUG | D:/AUTO/MAA +2025-01-22 17:50:45.069 | DEBUG | D:/AUTO/MAA +2025-01-22 17:50:46.064 | DEBUG | D:/AUTO/MAA +2025-01-22 17:50:47.070 | DEBUG | D:/AUTO/MAA +2025-01-22 17:50:48.071 | DEBUG | D:/AUTO/MAA +2025-01-22 17:50:49.068 | DEBUG | D:/AUTO/MAA +2025-01-22 17:50:50.072 | DEBUG | D:/AUTO/MAA +2025-01-22 17:54:44.088 | INFO | 日志记录器初始化完成 +2025-01-22 17:54:44.089 | INFO | 配置类初始化完成 +2025-01-22 17:54:44.090 | INFO | 程序配置管理模块初始化完成 +2025-01-22 17:54:46.072 | DEBUG | D:/AUTO/MAA +2025-01-22 17:54:46.805 | DEBUG | D:/AUTO/MAA +2025-01-22 17:54:47.804 | DEBUG | D:/AUTO/MAA +2025-01-22 17:54:48.806 | DEBUG | D:/AUTO/MAA +2025-01-22 17:54:49.804 | DEBUG | D:/AUTO/MAA +2025-01-22 17:54:50.804 | DEBUG | D:/AUTO/MAA +2025-01-22 17:54:51.800 | DEBUG | D:/AUTO/MAA +2025-01-22 17:54:52.808 | DEBUG | D:/AUTO/MAA +2025-01-22 17:54:53.804 | DEBUG | D:/AUTO/MAA +2025-01-22 17:54:54.799 | DEBUG | D:/AUTO/MAA +2025-01-22 17:54:55.805 | DEBUG | D:/程序开发/AUTO_MAA +2025-01-22 17:54:56.805 | DEBUG | D:/程序开发/AUTO_MAA +2025-01-22 17:54:57.806 | DEBUG | D:/AUTO/MAA +2025-01-22 17:54:58.808 | DEBUG | D:/程序开发/AUTO_MAA +2025-01-22 17:54:59.806 | DEBUG | D:/程序开发/AUTO_MAA +2025-01-22 17:55:01.189 | DEBUG | D:/程序开发/AUTO_MAA +2025-01-22 17:55:01.804 | DEBUG | D:/程序开发/AUTO_MAA +2025-01-22 17:55:02.807 | DEBUG | D:/程序开发/AUTO_MAA +2025-01-22 17:55:03.803 | DEBUG | D:/程序开发/AUTO_MAA +2025-01-22 17:55:04.805 | DEBUG | D:/程序开发/AUTO_MAA +2025-01-22 17:55:05.096 | WARNING | 选择MAA目录时未选择文件夹或未更改文件夹 +2025-01-22 17:55:05.804 | DEBUG | D:/程序开发/AUTO_MAA +2025-01-22 17:55:06.806 | DEBUG | D:/程序开发/AUTO_MAA +2025-01-22 17:55:07.806 | DEBUG | D:/程序开发/AUTO_MAA +2025-01-22 17:55:08.803 | DEBUG | D:/程序开发/AUTO_MAA +2025-01-22 17:55:09.806 | DEBUG | D:/程序开发/AUTO_MAA +2025-01-22 17:55:10.809 | DEBUG | D:/程序开发/AUTO_MAA +2025-01-22 17:55:11.810 | DEBUG | D:/程序开发/AUTO_MAA +2025-01-22 17:55:12.799 | DEBUG | D:/程序开发/AUTO_MAA +2025-01-22 17:55:13.806 | DEBUG | D:/程序开发/AUTO_MAA +2025-01-22 17:55:14.805 | DEBUG | D:/程序开发/AUTO_MAA +2025-01-22 17:55:15.805 | DEBUG | D:/程序开发/AUTO_MAA +2025-01-22 17:55:16.805 | DEBUG | D:/程序开发/AUTO_MAA +2025-01-22 17:55:17.809 | DEBUG | D:/程序开发/AUTO_MAA +2025-01-22 17:55:18.805 | DEBUG | D:/程序开发/AUTO_MAA +2025-01-22 17:55:19.808 | DEBUG | D:/程序开发/AUTO_MAA +2025-01-22 17:55:20.803 | DEBUG | D:/AUTO/MAA +2025-01-22 17:55:21.805 | DEBUG | D:/AUTO/MAA +2025-01-22 17:55:22.801 | DEBUG | D:/AUTO/MAA +2025-01-22 17:55:23.806 | DEBUG | D:/AUTO/MAA +2025-01-22 17:55:24.799 | DEBUG | D:/AUTO/MAA +2025-01-22 17:55:25.800 | DEBUG | D:/AUTO/MAA +2025-01-22 17:55:26.806 | DEBUG | D:/AUTO/MAA +2025-01-22 17:55:27.804 | DEBUG | D:/AUTO/MAA +2025-01-22 17:55:28.805 | DEBUG | D:/AUTO/MAA +2025-01-22 17:55:29.801 | DEBUG | D:/AUTO/MAA +2025-01-22 17:55:30.813 | DEBUG | D:/AUTO/MAA +2025-01-22 17:55:31.808 | DEBUG | D:/AUTO/MAA +2025-01-22 17:55:32.802 | DEBUG | D:/AUTO/MAA +2025-01-22 17:55:33.805 | DEBUG | D:/AUTO/MAA +2025-01-22 17:55:34.805 | DEBUG | D:/AUTO/MAA +2025-01-22 17:55:35.807 | DEBUG | D:/AUTO/MAA_for_AUTO +2025-01-22 17:55:36.800 | DEBUG | D:/AUTO/MAA_for_AUTO +2025-01-22 17:55:37.802 | DEBUG | D:/AUTO/MAA_for_AUTO +2025-01-22 17:55:38.804 | DEBUG | D:/AUTO/MAA_for_AUTO +2025-01-22 17:55:39.806 | DEBUG | D:/AUTO/MAA_for_AUTO +2025-01-22 17:55:40.802 | DEBUG | D:/AUTO/MAA_for_AUTO +2025-01-22 17:55:41.805 | DEBUG | D:/AUTO/MAA_for_AUTO +2025-01-22 17:55:42.804 | DEBUG | D:/AUTO/MAA_for_AUTO +2025-01-22 17:55:43.799 | DEBUG | D:/AUTO/MAA_for_AUTO +2025-01-22 17:55:44.806 | DEBUG | D:/AUTO/MAA_for_AUTO +2025-01-22 17:55:45.799 | DEBUG | D:/AUTO/MAA_for_AUTO +2025-01-22 17:55:46.805 | DEBUG | D:/AUTO/MAA_for_AUTO +2025-01-22 17:55:47.803 | DEBUG | D:/AUTO/MAA_for_AUTO +2025-01-22 17:55:48.805 | DEBUG | D:/AUTO/MAA_for_AUTO +2025-01-22 17:55:49.804 | DEBUG | D:/AUTO/MAA_for_AUTO +2025-01-22 17:55:50.804 | DEBUG | D:/AUTO/MAA_for_AUTO +2025-01-22 17:55:51.800 | DEBUG | D:/AUTO/MAA +2025-01-22 17:55:52.804 | DEBUG | D:/AUTO/MAA +2025-01-22 17:55:53.804 | DEBUG | D:/AUTO/MAA +2025-01-22 17:56:45.300 | INFO | 日志记录器初始化完成 +2025-01-22 17:56:45.301 | INFO | 配置类初始化完成 +2025-01-22 17:56:45.301 | INFO | 程序配置管理模块初始化完成 +2025-01-22 17:57:09.003 | INFO | 按时间调起任务:调度队列_1 +2025-01-22 17:57:09.004 | INFO | 添加任务:调度队列_1 +2025-01-22 17:57:09.020 | INFO | 开始任务:调度队列_1 +2025-01-22 17:57:09.022 | DEBUG | 用户数据:[['新用户', '等待', 0]] +[['新用户', '123', 'Official', -1, 'y', '2000-01-01', '1-7', '-', '-', 'n', 'n', 'n', b'\x01i}Q\xc5\xfb\xf1zD\xb2\xe5\xcc\xbd-\x10\xa4*\x1c\x18\xc7\x8e\xef"\xbe\x00\xce\xa0\x8d\xd4\x82\x86\t\r\x81\x85[d\x98k\xc9X\x04\xd3\xbd8\x03\xd2\x10Fb8+\x86\xbe\xceR\x8e\xa0\xa4H\x9a\x96\x9cR\xd1G|\x9c-\xfa0\x1a\xa5\xf5;\x9a\xc4\x05\x9bhkq\xa5\xd6gNEv\xb3\x82\x16D\xd4T\nG\xf6\x91f^\xe0\xa12s\xfd\xeb\xde\x06\xea\xe7\xd8B\xae\xc5\xd3\x9dK\xc2\x9b\xcec\xb4x\x1e\'1\xcdv\xb7\x9e\x0f\xe5\x92\x98\xa0\x86I*\xde\xfbj~\xf1[\x04+\xc5\x15\x8a\xef\xee\xb5\xdf\t\xbd\x80y\xc15Y\xb7\x11\x13\xdb\xa0?\xdbh\xe9\xe7\x1f\x11\x06^\xd0]\xb8\xa1\xf0\x16h\xa0\xf5AP.OR\xfeLD\x1aC\n\x92+ZY\x9c\x13>\x8c\x96\xdeeiS\x84\xdd\xe2\xfb&\xean\xa9"=\x9aH\xb3t\x0b\x02\x8aX\x199|\xe6\x07\x18\xc0\x03q]\xcel\xd3\xdaV\xe2\xe2\xb0Hb\x88\xea\x8b\xe2\xcf)\xd7\x0c\xa2\xc5\x08', '无', 0, 'simple', 0]] +2025-01-22 18:08:56.162 | INFO | 日志记录器初始化完成 +2025-01-22 18:08:56.163 | INFO | 配置类初始化完成 +2025-01-22 18:08:56.163 | INFO | 程序配置管理模块初始化完成 +2025-01-22 18:09:08.129 | WARNING | 选择MAA目录时未选择文件夹或未更改文件夹 +2025-01-22 18:10:53.264 | INFO | 日志记录器初始化完成 +2025-01-22 18:10:53.266 | INFO | 配置类初始化完成 +2025-01-22 18:10:53.266 | INFO | 程序配置管理模块初始化完成 +2025-01-22 19:02:57.544 | INFO | 日志记录器初始化完成 +2025-01-22 19:02:57.545 | INFO | 配置类初始化完成 +2025-01-22 19:02:57.545 | INFO | 程序配置管理模块初始化完成 +2025-01-22 19:03:10.241 | INFO | 按时间调起任务:调度队列_1 +2025-01-22 19:03:10.241 | INFO | 添加任务:调度队列_1 +2025-01-22 19:03:10.259 | INFO | 开始任务:调度队列_1 +2025-01-22 19:03:10.266 | DEBUG | 用户数据:[['新用户', '等待', 0]] +[['新用户', '123', 'Official', -1, 'y', '2000-01-01', '1-7', '-', '-', 'n', 'n', 'n', b'\x01i}Q\xc5\xfb\xf1zD\xb2\xe5\xcc\xbd-\x10\xa4*\x1c\x18\xc7\x8e\xef"\xbe\x00\xce\xa0\x8d\xd4\x82\x86\t\r\x81\x85[d\x98k\xc9X\x04\xd3\xbd8\x03\xd2\x10Fb8+\x86\xbe\xceR\x8e\xa0\xa4H\x9a\x96\x9cR\xd1G|\x9c-\xfa0\x1a\xa5\xf5;\x9a\xc4\x05\x9bhkq\xa5\xd6gNEv\xb3\x82\x16D\xd4T\nG\xf6\x91f^\xe0\xa12s\xfd\xeb\xde\x06\xea\xe7\xd8B\xae\xc5\xd3\x9dK\xc2\x9b\xcec\xb4x\x1e\'1\xcdv\xb7\x9e\x0f\xe5\x92\x98\xa0\x86I*\xde\xfbj~\xf1[\x04+\xc5\x15\x8a\xef\xee\xb5\xdf\t\xbd\x80y\xc15Y\xb7\x11\x13\xdb\xa0?\xdbh\xe9\xe7\x1f\x11\x06^\xd0]\xb8\xa1\xf0\x16h\xa0\xf5AP.OR\xfeLD\x1aC\n\x92+ZY\x9c\x13>\x8c\x96\xdeeiS\x84\xdd\xe2\xfb&\xean\xa9"=\x9aH\xb3t\x0b\x02\x8aX\x199|\xe6\x07\x18\xc0\x03q]\xcel\xd3\xdaV\xe2\xe2\xb0Hb\x88\xea\x8b\xe2\xcf)\xd7\x0c\xa2\xc5\x08', '无', 0, 'simple', 0]] +2025-01-22 22:10:23.119 | INFO | 日志记录器初始化完成 +2025-01-22 22:10:23.120 | INFO | 配置类初始化完成 +2025-01-22 22:10:23.120 | INFO | 程序配置管理模块初始化完成 +2025-01-22 22:10:43.975 | INFO | 日志记录器初始化完成 +2025-01-22 22:10:43.976 | INFO | 配置类初始化完成 +2025-01-22 22:10:43.976 | INFO | 程序配置管理模块初始化完成 +2025-01-22 22:15:17.678 | INFO | 日志记录器初始化完成 +2025-01-22 22:15:17.679 | INFO | 配置类初始化完成 +2025-01-22 22:15:17.679 | INFO | 程序配置管理模块初始化完成 +2025-01-22 22:15:57.887 | INFO | 日志记录器初始化完成 +2025-01-22 22:15:57.888 | INFO | 配置类初始化完成 +2025-01-22 22:15:57.888 | INFO | 程序配置管理模块初始化完成 +2025-01-22 22:17:20.781 | INFO | 日志记录器初始化完成 +2025-01-22 22:17:20.782 | INFO | 配置类初始化完成 +2025-01-22 22:17:20.782 | INFO | 程序配置管理模块初始化完成 +2025-01-22 22:18:11.381 | INFO | 日志记录器初始化完成 +2025-01-22 22:18:11.382 | INFO | 配置类初始化完成 +2025-01-22 22:18:11.382 | INFO | 程序配置管理模块初始化完成 +2025-01-22 22:18:54.438 | INFO | 日志记录器初始化完成 +2025-01-22 22:18:54.439 | INFO | 配置类初始化完成 +2025-01-22 22:18:54.439 | INFO | 程序配置管理模块初始化完成 +2025-01-22 22:19:20.261 | INFO | 日志记录器初始化完成 +2025-01-22 22:19:20.264 | INFO | 配置类初始化完成 +2025-01-22 22:19:20.264 | INFO | 程序配置管理模块初始化完成 +2025-01-22 22:19:42.044 | INFO | 日志记录器初始化完成 +2025-01-22 22:19:42.045 | INFO | 配置类初始化完成 +2025-01-22 22:19:42.046 | INFO | 程序配置管理模块初始化完成 +2025-01-22 22:20:10.651 | INFO | 日志记录器初始化完成 +2025-01-22 22:20:10.652 | INFO | 配置类初始化完成 +2025-01-22 22:20:10.652 | INFO | 程序配置管理模块初始化完成 +2025-01-22 22:21:27.056 | INFO | 日志记录器初始化完成 +2025-01-22 22:21:27.057 | INFO | 配置类初始化完成 +2025-01-22 22:21:27.058 | INFO | 程序配置管理模块初始化完成 +2025-01-23 08:54:48.904 | INFO | 日志记录器初始化完成 +2025-01-23 08:54:48.905 | INFO | 配置类初始化完成 +2025-01-23 08:54:48.906 | INFO | 程序配置管理模块初始化完成 +2025-01-23 08:55:05.651 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 08:55:05.651 | INFO | 添加任务:调度队列_1 +2025-01-23 08:55:05.672 | INFO | 开始任务:调度队列_1 +2025-01-23 08:55:05.675 | DEBUG | 用户数据:[['新用户', '等待', 0]] +[['新用户', '123', 'Official', -1, 'y', '2000-01-01', '1-7', '-', '-', 'n', 'n', 'n', b'\x01i}Q\xc5\xfb\xf1zD\xb2\xe5\xcc\xbd-\x10\xa4*\x1c\x18\xc7\x8e\xef"\xbe\x00\xce\xa0\x8d\xd4\x82\x86\t\r\x81\x85[d\x98k\xc9X\x04\xd3\xbd8\x03\xd2\x10Fb8+\x86\xbe\xceR\x8e\xa0\xa4H\x9a\x96\x9cR\xd1G|\x9c-\xfa0\x1a\xa5\xf5;\x9a\xc4\x05\x9bhkq\xa5\xd6gNEv\xb3\x82\x16D\xd4T\nG\xf6\x91f^\xe0\xa12s\xfd\xeb\xde\x06\xea\xe7\xd8B\xae\xc5\xd3\x9dK\xc2\x9b\xcec\xb4x\x1e\'1\xcdv\xb7\x9e\x0f\xe5\x92\x98\xa0\x86I*\xde\xfbj~\xf1[\x04+\xc5\x15\x8a\xef\xee\xb5\xdf\t\xbd\x80y\xc15Y\xb7\x11\x13\xdb\xa0?\xdbh\xe9\xe7\x1f\x11\x06^\xd0]\xb8\xa1\xf0\x16h\xa0\xf5AP.OR\xfeLD\x1aC\n\x92+ZY\x9c\x13>\x8c\x96\xdeeiS\x84\xdd\xe2\xfb&\xean\xa9"=\x9aH\xb3t\x0b\x02\x8aX\x199|\xe6\x07\x18\xc0\x03q]\xcel\xd3\xdaV\xe2\xe2\xb0Hb\x88\xea\x8b\xe2\xcf)\xd7\x0c\xa2\xc5\x08', '无', 0, 'simple', 0]] +2025-01-23 09:42:08.716 | INFO | 日志记录器初始化完成 +2025-01-23 09:42:08.717 | INFO | 配置类初始化完成 +2025-01-23 09:42:08.717 | INFO | 程序配置管理模块初始化完成 +2025-01-23 09:42:31.553 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 09:42:31.553 | INFO | 添加任务:调度队列_1 +2025-01-23 09:42:31.570 | INFO | 开始任务:调度队列_1 +2025-01-23 09:43:49.601 | INFO | 日志记录器初始化完成 +2025-01-23 09:43:49.603 | INFO | 配置类初始化完成 +2025-01-23 09:43:49.603 | INFO | 程序配置管理模块初始化完成 +2025-01-23 09:43:58.254 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 09:43:58.256 | INFO | 添加任务:调度队列_1 +2025-01-23 09:43:58.274 | INFO | 开始任务:调度队列_1 +2025-01-23 10:27:29.663 | INFO | 日志记录器初始化完成 +2025-01-23 10:27:29.665 | INFO | 配置类初始化完成 +2025-01-23 10:27:29.666 | INFO | 程序配置管理模块初始化完成 +2025-01-23 10:27:41.334 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 10:27:41.334 | INFO | 添加任务:调度队列_1 +2025-01-23 10:27:41.350 | INFO | 开始任务:调度队列_1 +2025-01-23 10:30:26.124 | INFO | 日志记录器初始化完成 +2025-01-23 10:30:26.126 | INFO | 配置类初始化完成 +2025-01-23 10:30:26.127 | INFO | 程序配置管理模块初始化完成 +2025-01-23 10:30:34.789 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 10:30:34.789 | INFO | 添加任务:调度队列_1 +2025-01-23 10:30:34.809 | INFO | 开始任务:调度队列_1 +2025-01-23 10:31:55.789 | INFO | 日志记录器初始化完成 +2025-01-23 10:31:55.791 | INFO | 配置类初始化完成 +2025-01-23 10:31:55.791 | INFO | 程序配置管理模块初始化完成 +2025-01-23 10:32:03.447 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 10:32:03.447 | INFO | 添加任务:调度队列_1 +2025-01-23 10:32:03.465 | INFO | 开始任务:调度队列_1 +2025-01-23 10:32:54.721 | INFO | 日志记录器初始化完成 +2025-01-23 10:32:54.722 | INFO | 配置类初始化完成 +2025-01-23 10:32:54.722 | INFO | 程序配置管理模块初始化完成 +2025-01-23 10:32:56.365 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 10:32:56.365 | INFO | 添加任务:调度队列_1 +2025-01-23 10:32:56.383 | INFO | 开始任务:调度队列_1 +2025-01-23 10:33:45.152 | INFO | 日志记录器初始化完成 +2025-01-23 10:33:45.153 | INFO | 配置类初始化完成 +2025-01-23 10:33:45.153 | INFO | 程序配置管理模块初始化完成 +2025-01-23 10:36:51.821 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 10:36:51.821 | INFO | 添加任务:调度队列_1 +2025-01-23 10:36:51.844 | INFO | 开始任务:调度队列_1 +2025-01-23 10:37:36.223 | INFO | 日志记录器初始化完成 +2025-01-23 10:37:36.225 | INFO | 配置类初始化完成 +2025-01-23 10:37:36.225 | INFO | 程序配置管理模块初始化完成 +2025-01-23 10:38:49.974 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 10:38:49.974 | INFO | 添加任务:调度队列_1 +2025-01-23 10:38:50.000 | INFO | 开始任务:调度队列_1 +2025-01-23 10:43:12.539 | INFO | 日志记录器初始化完成 +2025-01-23 10:43:12.539 | INFO | 配置类初始化完成 +2025-01-23 10:43:12.539 | INFO | 程序配置管理模块初始化完成 +2025-01-23 10:43:22.241 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 10:43:22.241 | INFO | 添加任务:调度队列_1 +2025-01-23 10:43:22.265 | INFO | 开始任务:调度队列_1 +2025-01-23 10:43:38.602 | INFO | 日志记录器初始化完成 +2025-01-23 10:43:38.603 | INFO | 配置类初始化完成 +2025-01-23 10:43:38.603 | INFO | 程序配置管理模块初始化完成 +2025-01-23 10:43:40.262 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 10:43:40.262 | INFO | 添加任务:调度队列_1 +2025-01-23 10:43:40.299 | INFO | 开始任务:调度队列_1 +2025-01-23 10:44:21.242 | INFO | 日志记录器初始化完成 +2025-01-23 10:44:21.243 | INFO | 配置类初始化完成 +2025-01-23 10:44:21.244 | INFO | 程序配置管理模块初始化完成 +2025-01-23 10:47:43.823 | INFO | 日志记录器初始化完成 +2025-01-23 10:47:43.823 | INFO | 配置类初始化完成 +2025-01-23 10:47:43.824 | INFO | 程序配置管理模块初始化完成 +2025-01-23 10:49:13.781 | INFO | 日志记录器初始化完成 +2025-01-23 10:49:13.782 | INFO | 配置类初始化完成 +2025-01-23 10:49:13.782 | INFO | 程序配置管理模块初始化完成 +2025-01-23 11:01:46.678 | INFO | 日志记录器初始化完成 +2025-01-23 11:01:46.680 | INFO | 配置类初始化完成 +2025-01-23 11:01:46.680 | INFO | 程序配置管理模块初始化完成 +2025-01-23 11:05:20.961 | INFO | 日志记录器初始化完成 +2025-01-23 11:05:20.962 | INFO | 配置类初始化完成 +2025-01-23 11:05:20.963 | INFO | 程序配置管理模块初始化完成 +2025-01-23 11:06:16.593 | INFO | 日志记录器初始化完成 +2025-01-23 11:06:16.594 | INFO | 配置类初始化完成 +2025-01-23 11:06:16.594 | INFO | 程序配置管理模块初始化完成 +2025-01-23 11:08:24.590 | INFO | 日志记录器初始化完成 +2025-01-23 11:08:24.591 | INFO | 配置类初始化完成 +2025-01-23 11:08:24.591 | INFO | 程序配置管理模块初始化完成 +2025-01-23 11:23:55.424 | INFO | 日志记录器初始化完成 +2025-01-23 11:23:55.424 | INFO | 配置类初始化完成 +2025-01-23 11:23:55.424 | INFO | 程序配置管理模块初始化完成 +2025-01-23 11:24:18.892 | INFO | 日志记录器初始化完成 +2025-01-23 11:24:18.892 | INFO | 配置类初始化完成 +2025-01-23 11:24:18.893 | INFO | 程序配置管理模块初始化完成 +2025-01-23 11:24:33.521 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 11:24:33.522 | INFO | 添加任务:调度队列_1 +2025-01-23 11:24:33.542 | INFO | 开始任务:调度队列_1 +2025-01-23 11:24:57.294 | INFO | 日志记录器初始化完成 +2025-01-23 11:24:57.294 | INFO | 配置类初始化完成 +2025-01-23 11:24:57.294 | INFO | 程序配置管理模块初始化完成 +2025-01-23 11:24:58.897 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 11:24:58.897 | INFO | 添加任务:调度队列_1 +2025-01-23 11:24:58.915 | INFO | 开始任务:调度队列_1 +2025-01-23 11:26:51.602 | INFO | 日志记录器初始化完成 +2025-01-23 11:26:51.603 | INFO | 配置类初始化完成 +2025-01-23 11:26:51.603 | INFO | 程序配置管理模块初始化完成 +2025-01-23 11:27:09.209 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 11:27:09.209 | INFO | 添加任务:调度队列_1 +2025-01-23 11:27:09.226 | INFO | 开始任务:调度队列_1 +2025-01-23 11:37:01.970 | INFO | 日志记录器初始化完成 +2025-01-23 11:37:01.970 | INFO | 配置类初始化完成 +2025-01-23 11:37:01.970 | INFO | 程序配置管理模块初始化完成 +2025-01-23 11:39:13.210 | INFO | 日志记录器初始化完成 +2025-01-23 11:39:13.211 | INFO | 配置类初始化完成 +2025-01-23 11:39:13.212 | INFO | 程序配置管理模块初始化完成 +2025-01-23 11:48:46.980 | INFO | 日志记录器初始化完成 +2025-01-23 11:48:46.980 | INFO | 配置类初始化完成 +2025-01-23 11:48:46.981 | INFO | 程序配置管理模块初始化完成 +2025-01-23 11:48:55.695 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 11:48:55.696 | INFO | 添加任务:调度队列_1 +2025-01-23 11:48:55.721 | INFO | 开始任务:调度队列_1 +2025-01-23 12:11:28.117 | INFO | 日志记录器初始化完成 +2025-01-23 12:11:28.117 | INFO | 配置类初始化完成 +2025-01-23 12:11:28.117 | INFO | 程序配置管理模块初始化完成 +2025-01-23 12:11:56.760 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 12:11:56.760 | INFO | 添加任务:调度队列_1 +2025-01-23 12:11:56.780 | INFO | 开始任务:调度队列_1 +2025-01-23 12:13:28.531 | INFO | 日志记录器初始化完成 +2025-01-23 12:13:28.531 | INFO | 配置类初始化完成 +2025-01-23 12:13:28.531 | INFO | 程序配置管理模块初始化完成 +2025-01-23 12:20:58.160 | INFO | 日志记录器初始化完成 +2025-01-23 12:20:58.160 | INFO | 配置类初始化完成 +2025-01-23 12:20:58.160 | INFO | 程序配置管理模块初始化完成 +2025-01-23 12:20:59.934 | DEBUG | [] +2025-01-23 12:21:00.929 | DEBUG | [] +2025-01-23 12:21:01.927 | DEBUG | [] +2025-01-23 12:21:02.929 | DEBUG | [] +2025-01-23 12:21:03.929 | DEBUG | [] +2025-01-23 12:21:04.929 | DEBUG | [] +2025-01-23 12:21:05.929 | DEBUG | [] +2025-01-23 12:21:06.934 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 12:21:06.934 | INFO | 添加任务:调度队列_1 +2025-01-23 12:21:06.953 | DEBUG | ['调度队列_1'] +2025-01-23 12:21:06.954 | INFO | 开始任务:调度队列_1 +2025-01-23 12:21:07.929 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 12:21:08.938 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 12:21:09.949 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 12:21:10.928 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 12:21:11.929 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 12:21:12.959 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 12:21:13.928 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 12:21:14.928 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 12:21:15.928 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 12:21:16.928 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 12:21:17.926 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 12:21:18.927 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 12:21:19.930 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 12:21:20.927 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 12:33:23.304 | INFO | 日志记录器初始化完成 +2025-01-23 12:33:23.304 | INFO | 配置类初始化完成 +2025-01-23 12:33:23.304 | INFO | 程序配置管理模块初始化完成 +2025-01-23 12:33:24.991 | DEBUG | [] +2025-01-23 12:33:25.989 | DEBUG | [] +2025-01-23 12:33:26.990 | DEBUG | [] +2025-01-23 12:33:27.993 | DEBUG | [] +2025-01-23 12:33:28.996 | DEBUG | [] +2025-01-23 12:33:29.989 | DEBUG | [] +2025-01-23 12:33:30.996 | DEBUG | [] +2025-01-23 12:33:31.993 | DEBUG | [] +2025-01-23 12:33:32.997 | DEBUG | [] +2025-01-23 12:33:33.993 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 12:33:33.993 | INFO | 添加任务:调度队列_1 +2025-01-23 12:33:34.018 | DEBUG | ['调度队列_1'] +2025-01-23 12:33:34.019 | INFO | 开始任务:调度队列_1 +2025-01-23 12:33:34.994 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 12:33:36.015 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 12:33:36.990 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 12:33:37.996 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 12:33:38.991 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 12:33:40.019 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 12:33:40.993 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 12:33:41.708 | INFO | 移除任务:调度队列_1 +2025-01-23 12:37:02.491 | INFO | 日志记录器初始化完成 +2025-01-23 12:37:02.492 | INFO | 配置类初始化完成 +2025-01-23 12:37:02.492 | INFO | 程序配置管理模块初始化完成 +2025-01-23 12:37:04.279 | DEBUG | [] +2025-01-23 12:37:05.272 | DEBUG | [] +2025-01-23 12:37:06.270 | DEBUG | [] +2025-01-23 12:37:07.279 | DEBUG | [] +2025-01-23 12:37:08.271 | DEBUG | [] +2025-01-23 12:37:09.271 | DEBUG | [] +2025-01-23 12:37:10.271 | DEBUG | [] +2025-01-23 12:37:11.270 | DEBUG | [] +2025-01-23 12:37:12.270 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 12:37:12.270 | INFO | 添加任务:调度队列_1 +2025-01-23 12:37:12.290 | DEBUG | ['调度队列_1'] +2025-01-23 12:37:12.294 | INFO | 开始任务:调度队列_1 +2025-01-23 12:37:13.270 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 12:37:14.329 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 12:37:15.183 | INFO | 移除任务:调度队列_1 +2025-01-23 12:43:33.299 | INFO | 日志记录器初始化完成 +2025-01-23 12:43:33.300 | INFO | 配置类初始化完成 +2025-01-23 12:43:33.300 | INFO | 程序配置管理模块初始化完成 +2025-01-23 12:43:34.993 | DEBUG | [] +2025-01-23 12:43:35.995 | DEBUG | [] +2025-01-23 12:43:36.990 | DEBUG | [] +2025-01-23 12:43:37.995 | DEBUG | [] +2025-01-23 12:43:38.997 | DEBUG | [] +2025-01-23 12:43:39.991 | DEBUG | [] +2025-01-23 12:43:40.999 | DEBUG | [] +2025-01-23 12:43:41.993 | DEBUG | [] +2025-01-23 12:43:42.993 | DEBUG | [] +2025-01-23 12:43:43.990 | DEBUG | [] +2025-01-23 12:43:44.991 | DEBUG | [] +2025-01-23 12:43:45.991 | DEBUG | [] +2025-01-23 12:43:46.990 | DEBUG | [] +2025-01-23 12:43:47.991 | DEBUG | [] +2025-01-23 12:43:48.993 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 12:43:48.993 | INFO | 添加任务:调度队列_1 +2025-01-23 12:43:49.024 | DEBUG | ['调度队列_1'] +2025-01-23 12:43:49.027 | INFO | 开始任务:调度队列_1 +2025-01-23 12:43:49.994 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 12:43:51.051 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 12:43:51.990 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 12:43:52.998 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 12:43:53.995 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 12:43:55.038 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 12:43:55.945 | INFO | 移除任务:调度队列_1 +2025-01-23 13:20:16.750 | INFO | 日志记录器初始化完成 +2025-01-23 13:20:16.750 | INFO | 配置类初始化完成 +2025-01-23 13:20:16.750 | INFO | 程序配置管理模块初始化完成 +2025-01-23 13:20:18.490 | DEBUG | [] +2025-01-23 13:20:19.490 | DEBUG | [] +2025-01-23 13:20:20.491 | DEBUG | [] +2025-01-23 13:20:21.490 | DEBUG | [] +2025-01-23 13:20:22.491 | DEBUG | [] +2025-01-23 13:20:23.490 | DEBUG | [] +2025-01-23 13:20:24.491 | DEBUG | [] +2025-01-23 13:20:25.489 | DEBUG | [] +2025-01-23 13:20:26.489 | DEBUG | [] +2025-01-23 13:20:27.491 | DEBUG | [] +2025-01-23 13:20:28.489 | DEBUG | [] +2025-01-23 13:20:29.492 | DEBUG | [] +2025-01-23 13:20:30.489 | DEBUG | [] +2025-01-23 13:20:31.490 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 13:20:31.490 | INFO | 添加任务:调度队列_1 +2025-01-23 13:20:31.522 | DEBUG | ['调度队列_1'] +2025-01-23 13:20:31.524 | INFO | 开始任务:调度队列_1 +2025-01-23 13:20:32.490 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 13:20:33.549 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 13:20:34.497 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 13:20:35.489 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 13:20:36.492 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 13:20:37.490 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 13:20:38.489 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 13:20:39.490 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 13:20:40.518 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 13:20:40.525 | INFO | 添加任务:调度队列_1 +2025-01-23 13:20:40.824 | INFO | 开始任务:调度队列_1 +2025-01-23 13:20:40.827 | DEBUG | ['脚本_2', '调度队列_1'] +2025-01-23 13:20:41.491 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 13:20:41.491 | INFO | 添加任务:调度队列_1 +2025-01-23 13:20:41.516 | DEBUG | ['脚本_2', '调度队列_1'] +2025-01-23 13:20:41.517 | INFO | 开始任务:调度队列_1 +2025-01-23 13:20:42.492 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 13:20:42.492 | INFO | 添加任务:调度队列_1 +2025-01-23 13:20:42.517 | DEBUG | ['脚本_2', '调度队列_1'] +2025-01-23 13:20:42.518 | INFO | 开始任务:调度队列_1 +2025-01-23 13:20:43.655 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 13:20:43.659 | INFO | 添加任务:调度队列_1 +2025-01-23 13:20:43.908 | DEBUG | ['脚本_2', '调度队列_1'] +2025-01-23 13:20:43.910 | INFO | 开始任务:调度队列_1 +2025-01-23 13:20:44.492 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 13:20:44.492 | INFO | 添加任务:调度队列_1 +2025-01-23 13:20:44.515 | DEBUG | ['脚本_2', '调度队列_1'] +2025-01-23 13:20:44.515 | INFO | 开始任务:调度队列_1 +2025-01-23 13:20:45.491 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 13:20:45.493 | INFO | 添加任务:调度队列_1 +2025-01-23 13:20:45.513 | DEBUG | ['脚本_2', '调度队列_1'] +2025-01-23 13:20:45.513 | INFO | 开始任务:调度队列_1 +2025-01-23 13:20:46.532 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 13:20:46.535 | INFO | 添加任务:调度队列_1 +2025-01-23 13:20:46.829 | DEBUG | ['脚本_2', '调度队列_1'] +2025-01-23 13:20:46.830 | INFO | 开始任务:调度队列_1 +2025-01-23 13:20:47.490 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 13:20:47.490 | INFO | 添加任务:调度队列_1 +2025-01-23 13:20:47.516 | DEBUG | ['脚本_2', '调度队列_1'] +2025-01-23 13:20:47.517 | INFO | 开始任务:调度队列_1 +2025-01-23 13:20:48.500 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 13:20:48.500 | INFO | 添加任务:调度队列_1 +2025-01-23 13:20:48.525 | DEBUG | ['脚本_2', '调度队列_1'] +2025-01-23 13:20:48.526 | INFO | 开始任务:调度队列_1 +2025-01-23 13:20:49.521 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 13:20:49.521 | INFO | 添加任务:调度队列_1 +2025-01-23 13:20:49.780 | DEBUG | ['脚本_2', '调度队列_1'] +2025-01-23 13:20:49.781 | INFO | 开始任务:调度队列_1 +2025-01-23 13:20:50.493 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 13:20:50.494 | INFO | 添加任务:调度队列_1 +2025-01-23 13:20:50.515 | DEBUG | ['脚本_2', '调度队列_1'] +2025-01-23 13:20:50.515 | INFO | 开始任务:调度队列_1 +2025-01-23 13:20:51.490 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 13:20:51.492 | INFO | 添加任务:调度队列_1 +2025-01-23 13:20:51.517 | DEBUG | ['脚本_2', '调度队列_1'] +2025-01-23 13:20:51.519 | INFO | 开始任务:调度队列_1 +2025-01-23 13:20:52.542 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 13:20:52.544 | INFO | 添加任务:调度队列_1 +2025-01-23 13:20:52.724 | DEBUG | ['脚本_2', '调度队列_1'] +2025-01-23 13:20:52.725 | INFO | 开始任务:调度队列_1 +2025-01-23 13:20:53.494 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 13:20:53.494 | INFO | 添加任务:调度队列_1 +2025-01-23 13:20:53.519 | DEBUG | ['脚本_2', '调度队列_1'] +2025-01-23 13:20:53.521 | INFO | 开始任务:调度队列_1 +2025-01-23 13:20:54.492 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 13:20:54.492 | INFO | 添加任务:调度队列_1 +2025-01-23 13:20:54.514 | DEBUG | ['脚本_2', '调度队列_1'] +2025-01-23 13:20:54.515 | INFO | 开始任务:调度队列_1 +2025-01-23 13:20:55.529 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 13:20:55.531 | INFO | 添加任务:调度队列_1 +2025-01-23 13:20:55.670 | DEBUG | ['脚本_2', '调度队列_1'] +2025-01-23 13:20:55.670 | INFO | 开始任务:调度队列_1 +2025-01-23 13:20:56.493 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 13:20:56.493 | INFO | 添加任务:调度队列_1 +2025-01-23 13:20:56.515 | DEBUG | ['脚本_2', '调度队列_1'] +2025-01-23 13:20:56.517 | INFO | 开始任务:调度队列_1 +2025-01-23 13:20:57.492 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 13:20:57.492 | INFO | 添加任务:调度队列_1 +2025-01-23 13:20:57.515 | DEBUG | ['脚本_2', '调度队列_1'] +2025-01-23 13:20:57.515 | INFO | 开始任务:调度队列_1 +2025-01-23 13:20:58.527 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 13:20:58.531 | INFO | 添加任务:调度队列_1 +2025-01-23 13:20:58.613 | DEBUG | ['脚本_2', '调度队列_1'] +2025-01-23 13:20:58.614 | INFO | 开始任务:调度队列_1 +2025-01-23 13:20:59.492 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 13:20:59.492 | INFO | 添加任务:调度队列_1 +2025-01-23 13:20:59.512 | DEBUG | ['脚本_2', '调度队列_1'] +2025-01-23 13:20:59.513 | INFO | 开始任务:调度队列_1 +2025-01-23 13:21:00.493 | DEBUG | ['脚本_2'] +2025-01-23 13:21:01.519 | DEBUG | ['脚本_2'] +2025-01-23 13:21:03.235 | DEBUG | ['脚本_2'] +2025-01-23 13:21:03.492 | DEBUG | ['脚本_2'] +2025-01-23 13:21:04.518 | DEBUG | ['脚本_2'] +2025-01-23 13:21:05.490 | DEBUG | ['脚本_2'] +2025-01-23 13:21:06.490 | DEBUG | ['脚本_2'] +2025-01-23 13:52:30.879 | INFO | 日志记录器初始化完成 +2025-01-23 13:52:30.879 | INFO | 配置类初始化完成 +2025-01-23 13:52:30.879 | INFO | 程序配置管理模块初始化完成 +2025-01-23 13:52:32.584 | DEBUG | [] +2025-01-23 13:52:33.588 | DEBUG | [] +2025-01-23 13:52:34.585 | DEBUG | [] +2025-01-23 13:52:35.588 | DEBUG | [] +2025-01-23 13:52:36.588 | DEBUG | [] +2025-01-23 13:52:37.585 | DEBUG | [] +2025-01-23 13:52:38.584 | DEBUG | [] +2025-01-23 13:52:39.592 | DEBUG | [] +2025-01-23 13:52:40.587 | DEBUG | [] +2025-01-23 13:52:41.583 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 13:52:41.584 | INFO | 添加任务:调度队列_1 +2025-01-23 13:52:41.607 | DEBUG | ['调度队列_1'] +2025-01-23 13:52:41.608 | INFO | 开始任务:调度队列_1 +2025-01-23 13:52:42.584 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 13:52:43.609 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 13:52:44.584 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 13:52:45.588 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 13:52:46.589 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 13:52:47.792 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 13:52:48.584 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 13:52:49.589 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 13:52:50.609 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 13:52:51.589 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 13:52:52.591 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 13:52:53.636 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 13:52:54.588 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 13:52:55.587 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 13:52:56.618 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 13:52:57.588 | DEBUG | ['脚本_2'] +2025-01-23 13:52:58.588 | DEBUG | ['脚本_2'] +2025-01-23 13:52:59.618 | DEBUG | ['脚本_2'] +2025-01-23 13:53:00.587 | DEBUG | ['脚本_2'] +2025-01-23 13:53:01.587 | DEBUG | ['脚本_2'] +2025-01-23 13:53:02.591 | DEBUG | ['脚本_2'] +2025-01-23 13:53:03.614 | DEBUG | ['脚本_2'] +2025-01-23 13:53:04.587 | DEBUG | ['脚本_2'] +2025-01-23 13:53:05.586 | DEBUG | ['脚本_2'] +2025-01-23 13:53:06.603 | DEBUG | ['脚本_2'] +2025-01-23 13:53:07.587 | DEBUG | ['脚本_2'] +2025-01-23 13:53:08.594 | DEBUG | ['脚本_2'] +2025-01-23 13:53:09.586 | DEBUG | ['脚本_2'] +2025-01-23 13:53:10.595 | DEBUG | ['脚本_2'] +2025-01-23 13:53:11.586 | DEBUG | ['脚本_2'] +2025-01-23 13:53:12.597 | DEBUG | ['脚本_2'] +2025-01-23 13:53:13.585 | DEBUG | ['脚本_2'] +2025-01-23 13:53:14.612 | DEBUG | ['脚本_2'] +2025-01-23 13:53:15.585 | DEBUG | ['脚本_2'] +2025-01-23 13:53:16.619 | DEBUG | ['脚本_2'] +2025-01-23 13:53:17.590 | DEBUG | ['脚本_2'] +2025-01-23 13:53:18.612 | DEBUG | ['脚本_2'] +2025-01-23 13:53:19.592 | DEBUG | ['脚本_2'] +2025-01-23 13:53:20.592 | DEBUG | ['脚本_2'] +2025-01-23 13:53:21.592 | DEBUG | ['脚本_2'] +2025-01-23 13:53:22.676 | DEBUG | ['脚本_2'] +2025-01-23 13:53:23.587 | DEBUG | ['脚本_2'] +2025-01-23 13:53:24.636 | DEBUG | ['脚本_2'] +2025-01-23 13:53:25.586 | DEBUG | ['脚本_2'] +2025-01-23 13:53:26.611 | DEBUG | ['脚本_2'] +2025-01-23 13:53:27.585 | DEBUG | ['脚本_2'] +2025-01-23 13:53:28.652 | DEBUG | ['脚本_2'] +2025-01-23 13:53:29.587 | DEBUG | ['脚本_2'] +2025-01-23 13:53:30.590 | DEBUG | ['脚本_2'] +2025-01-23 13:53:31.584 | DEBUG | ['脚本_2'] +2025-01-23 13:53:32.610 | DEBUG | ['脚本_2'] +2025-01-23 13:53:33.585 | DEBUG | ['脚本_2'] +2025-01-23 13:53:34.599 | DEBUG | ['脚本_2'] +2025-01-23 13:53:35.584 | DEBUG | ['脚本_2'] +2025-01-23 13:53:36.612 | DEBUG | ['脚本_2'] +2025-01-23 13:53:37.585 | DEBUG | ['脚本_2'] +2025-01-23 13:53:38.624 | DEBUG | ['脚本_2'] +2025-01-23 13:53:39.584 | DEBUG | ['脚本_2'] +2025-01-23 13:53:40.604 | DEBUG | ['脚本_2'] +2025-01-23 13:53:41.602 | DEBUG | ['脚本_2'] +2025-01-23 13:53:42.585 | DEBUG | ['脚本_2'] +2025-01-23 13:53:43.622 | DEBUG | ['脚本_2'] +2025-01-23 13:53:44.589 | DEBUG | ['脚本_2'] +2025-01-23 13:53:45.621 | DEBUG | ['脚本_2'] +2025-01-23 13:53:46.586 | DEBUG | ['脚本_2'] +2025-01-23 13:53:47.620 | DEBUG | ['脚本_2'] +2025-01-23 13:53:48.589 | DEBUG | ['脚本_2'] +2025-01-23 13:53:49.597 | DEBUG | ['脚本_2'] +2025-01-23 13:53:50.584 | DEBUG | ['脚本_2'] +2025-01-23 13:53:51.590 | DEBUG | ['脚本_2'] +2025-01-23 13:53:52.588 | DEBUG | ['脚本_2'] +2025-01-23 13:53:53.630 | DEBUG | ['脚本_2'] +2025-01-23 13:53:54.586 | DEBUG | ['脚本_2'] +2025-01-23 13:53:55.594 | DEBUG | ['脚本_2'] +2025-01-23 13:53:56.584 | DEBUG | ['脚本_2'] +2025-01-23 13:53:57.589 | DEBUG | ['脚本_2'] +2025-01-23 13:53:58.590 | DEBUG | ['脚本_2'] +2025-01-23 13:53:59.588 | DEBUG | ['脚本_2'] +2025-01-23 13:54:00.587 | DEBUG | ['脚本_2'] +2025-01-23 13:54:01.592 | DEBUG | ['脚本_2'] +2025-01-23 13:54:02.584 | DEBUG | ['脚本_2'] +2025-01-23 13:54:03.593 | DEBUG | ['脚本_2'] +2025-01-23 13:54:04.586 | DEBUG | ['脚本_2'] +2025-01-23 13:54:05.595 | DEBUG | ['脚本_2'] +2025-01-23 13:54:06.584 | DEBUG | ['脚本_2'] +2025-01-23 13:54:07.650 | DEBUG | ['脚本_2'] +2025-01-23 13:54:08.588 | DEBUG | ['脚本_2'] +2025-01-23 13:54:09.621 | DEBUG | ['脚本_2'] +2025-01-23 13:54:10.589 | DEBUG | ['脚本_2'] +2025-01-23 13:54:11.609 | DEBUG | ['脚本_2'] +2025-01-23 13:54:12.584 | DEBUG | ['脚本_2'] +2025-01-23 13:54:13.596 | DEBUG | ['脚本_2'] +2025-01-23 13:54:14.594 | DEBUG | ['脚本_2'] +2025-01-23 13:54:15.584 | DEBUG | ['脚本_2'] +2025-01-23 13:54:16.631 | DEBUG | ['脚本_2'] +2025-01-23 13:54:17.589 | DEBUG | ['脚本_2'] +2025-01-23 13:54:18.587 | DEBUG | ['脚本_2'] +2025-01-23 13:54:19.647 | DEBUG | ['脚本_2'] +2025-01-23 13:54:20.588 | DEBUG | ['脚本_2'] +2025-01-23 13:54:21.584 | DEBUG | ['脚本_2'] +2025-01-23 13:54:22.598 | DEBUG | ['脚本_2'] +2025-01-23 13:54:23.590 | DEBUG | ['脚本_2'] +2025-01-23 13:54:24.592 | DEBUG | ['脚本_2'] +2025-01-23 13:54:25.588 | DEBUG | ['脚本_2'] +2025-01-23 13:54:26.594 | DEBUG | ['脚本_2'] +2025-01-23 13:54:27.586 | DEBUG | ['脚本_2'] +2025-01-23 13:54:28.590 | DEBUG | ['脚本_2'] +2025-01-23 13:54:29.587 | DEBUG | ['脚本_2'] +2025-01-23 13:54:30.595 | DEBUG | ['脚本_2'] +2025-01-23 13:54:31.588 | DEBUG | ['脚本_2'] +2025-01-23 13:54:32.614 | DEBUG | ['脚本_2'] +2025-01-23 13:54:33.588 | DEBUG | ['脚本_2'] +2025-01-23 13:54:34.600 | DEBUG | ['脚本_2'] +2025-01-23 13:54:35.586 | DEBUG | ['脚本_2'] +2025-01-23 13:54:36.592 | DEBUG | ['脚本_2'] +2025-01-23 13:54:37.588 | DEBUG | ['脚本_2'] +2025-01-23 13:54:38.589 | DEBUG | ['脚本_2'] +2025-01-23 13:54:39.586 | DEBUG | ['脚本_2'] +2025-01-23 13:54:40.587 | DEBUG | ['脚本_2'] +2025-01-23 13:54:41.584 | DEBUG | ['脚本_2'] +2025-01-23 13:54:42.593 | DEBUG | ['脚本_2'] +2025-01-23 13:54:43.584 | DEBUG | ['脚本_2'] +2025-01-23 13:54:44.603 | DEBUG | ['脚本_2'] +2025-01-23 13:54:45.584 | DEBUG | ['脚本_2'] +2025-01-23 13:54:46.593 | DEBUG | ['脚本_2'] +2025-01-23 13:54:47.587 | DEBUG | ['脚本_2'] +2025-01-23 13:54:48.621 | DEBUG | ['脚本_2'] +2025-01-23 13:54:49.586 | DEBUG | ['脚本_2'] +2025-01-23 13:54:50.591 | DEBUG | ['脚本_2'] +2025-01-23 13:54:51.590 | DEBUG | ['脚本_2'] +2025-01-23 13:54:52.593 | DEBUG | ['脚本_2'] +2025-01-23 13:54:53.588 | DEBUG | ['脚本_2'] +2025-01-23 13:54:54.587 | DEBUG | ['脚本_2'] +2025-01-23 13:54:55.590 | DEBUG | ['脚本_2'] +2025-01-23 13:54:56.586 | DEBUG | ['脚本_2'] +2025-01-23 13:54:57.596 | DEBUG | ['脚本_2'] +2025-01-23 13:54:58.598 | DEBUG | ['脚本_2'] +2025-01-23 13:54:59.590 | DEBUG | ['脚本_2'] +2025-01-23 13:55:00.596 | DEBUG | ['脚本_2'] +2025-01-23 13:55:01.597 | DEBUG | ['脚本_2'] +2025-01-23 13:55:02.586 | DEBUG | ['脚本_2'] +2025-01-23 13:55:03.589 | DEBUG | ['脚本_2'] +2025-01-23 13:55:04.595 | DEBUG | ['脚本_2'] +2025-01-23 13:55:05.585 | DEBUG | ['脚本_2'] +2025-01-23 13:55:06.604 | DEBUG | ['脚本_2'] +2025-01-23 13:55:07.611 | DEBUG | ['脚本_2'] +2025-01-23 13:55:08.591 | DEBUG | ['脚本_2'] +2025-01-23 13:55:09.602 | DEBUG | ['脚本_2'] +2025-01-23 13:55:10.587 | DEBUG | ['脚本_2'] +2025-01-23 13:55:11.601 | DEBUG | ['脚本_2'] +2025-01-23 13:55:12.588 | DEBUG | ['脚本_2'] +2025-01-23 13:55:13.609 | DEBUG | ['脚本_2'] +2025-01-23 15:52:23.200 | INFO | 日志记录器初始化完成 +2025-01-23 15:52:23.200 | INFO | 配置类初始化完成 +2025-01-23 15:52:23.200 | INFO | 程序配置管理模块初始化完成 +2025-01-23 15:52:25.154 | DEBUG | [] +2025-01-23 15:52:26.136 | DEBUG | [] +2025-01-23 15:52:27.131 | DEBUG | [] +2025-01-23 15:52:28.131 | DEBUG | [] +2025-01-23 15:52:29.131 | DEBUG | [] +2025-01-23 15:52:30.131 | DEBUG | [] +2025-01-23 15:52:31.133 | DEBUG | [] +2025-01-23 15:52:32.134 | DEBUG | [] +2025-01-23 15:52:33.133 | DEBUG | [] +2025-01-23 15:52:34.131 | DEBUG | [] +2025-01-23 15:52:35.134 | DEBUG | [] +2025-01-23 15:52:36.135 | DEBUG | [] +2025-01-23 15:52:37.136 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 15:52:37.136 | INFO | 添加任务:调度队列_1 +2025-01-23 15:52:37.163 | DEBUG | ['调度队列_1'] +2025-01-23 15:52:37.165 | INFO | 开始任务:调度队列_1 +2025-01-23 15:52:38.133 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 15:52:39.166 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 15:52:40.137 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 15:52:41.133 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 15:52:42.135 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 15:52:43.160 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 15:52:44.134 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 15:52:45.130 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 15:52:46.179 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 15:52:47.131 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 15:52:47.131 | INFO | 添加任务:调度队列_1 +2025-01-23 15:52:47.151 | DEBUG | ['脚本_2', '调度队列_1'] +2025-01-23 15:52:47.153 | INFO | 开始任务:调度队列_1 +2025-01-23 15:52:48.131 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 15:52:48.131 | INFO | 添加任务:调度队列_1 +2025-01-23 15:52:48.153 | DEBUG | ['脚本_2', '调度队列_1'] +2025-01-23 15:52:48.154 | INFO | 开始任务:调度队列_1 +2025-01-23 15:52:49.155 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 15:52:49.161 | INFO | 添加任务:调度队列_1 +2025-01-23 15:52:49.383 | DEBUG | ['脚本_2', '调度队列_1'] +2025-01-23 15:52:49.384 | INFO | 开始任务:调度队列_1 +2025-01-23 15:52:50.131 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 15:52:50.131 | INFO | 添加任务:调度队列_1 +2025-01-23 15:52:50.154 | DEBUG | ['脚本_2', '调度队列_1'] +2025-01-23 15:52:50.155 | INFO | 开始任务:调度队列_1 +2025-01-23 15:52:51.134 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 15:52:51.134 | INFO | 添加任务:调度队列_1 +2025-01-23 15:52:51.157 | DEBUG | ['脚本_2', '调度队列_1'] +2025-01-23 15:52:51.158 | INFO | 开始任务:调度队列_1 +2025-01-23 15:52:52.185 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 15:52:52.191 | INFO | 添加任务:调度队列_1 +2025-01-23 15:52:52.299 | DEBUG | ['脚本_2', '调度队列_1'] +2025-01-23 15:52:52.299 | INFO | 开始任务:调度队列_1 +2025-01-23 15:52:53.134 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 15:52:53.134 | INFO | 添加任务:调度队列_1 +2025-01-23 15:52:53.156 | DEBUG | ['脚本_2', '调度队列_1'] +2025-01-23 15:52:53.159 | INFO | 开始任务:调度队列_1 +2025-01-23 15:52:54.133 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 15:52:54.133 | INFO | 添加任务:调度队列_1 +2025-01-23 15:52:54.154 | DEBUG | ['脚本_2', '调度队列_1'] +2025-01-23 15:52:54.156 | INFO | 开始任务:调度队列_1 +2025-01-23 15:53:04.253 | INFO | 日志记录器初始化完成 +2025-01-23 15:53:04.253 | INFO | 配置类初始化完成 +2025-01-23 15:53:04.253 | INFO | 程序配置管理模块初始化完成 +2025-01-23 15:53:05.929 | DEBUG | [] +2025-01-23 15:53:06.929 | DEBUG | [] +2025-01-23 15:53:07.928 | DEBUG | [] +2025-01-23 15:53:08.929 | DEBUG | [] +2025-01-23 15:53:09.929 | DEBUG | [] +2025-01-23 15:53:10.928 | DEBUG | [] +2025-01-23 15:53:11.929 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 15:53:11.929 | INFO | 添加任务:调度队列_1 +2025-01-23 15:53:11.953 | DEBUG | ['调度队列_1'] +2025-01-23 15:53:11.954 | INFO | 开始任务:调度队列_1 +2025-01-23 15:53:12.928 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 15:53:14.020 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 15:53:14.928 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 15:53:15.928 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 15:53:16.929 | DEBUG | ['脚本_2'] +2025-01-23 15:53:17.965 | DEBUG | ['脚本_2'] +2025-01-23 15:53:18.929 | DEBUG | ['脚本_2'] +2025-01-23 15:53:19.928 | DEBUG | ['脚本_2'] +2025-01-23 15:53:20.954 | DEBUG | ['脚本_2'] +2025-01-23 15:53:21.927 | DEBUG | ['脚本_2'] +2025-01-23 15:53:22.935 | DEBUG | ['脚本_2'] +2025-01-23 15:55:42.345 | INFO | 日志记录器初始化完成 +2025-01-23 15:55:42.346 | INFO | 配置类初始化完成 +2025-01-23 15:55:42.346 | INFO | 程序配置管理模块初始化完成 +2025-01-23 15:55:44.054 | DEBUG | [] +2025-01-23 15:55:45.057 | DEBUG | [] +2025-01-23 15:55:46.054 | DEBUG | [] +2025-01-23 15:55:47.257 | DEBUG | [] +2025-01-23 15:55:48.055 | DEBUG | [] +2025-01-23 15:55:49.054 | DEBUG | [] +2025-01-23 15:55:50.053 | DEBUG | [] +2025-01-23 15:55:51.055 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 15:55:51.055 | INFO | 添加任务:调度队列_1 +2025-01-23 15:55:51.081 | DEBUG | ['调度队列_1'] +2025-01-23 15:55:51.086 | INFO | 开始任务:调度队列_1 +2025-01-23 15:55:52.058 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 15:55:53.086 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 15:55:54.060 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 15:55:55.054 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 15:55:56.053 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 15:55:57.119 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 15:55:58.059 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 15:55:59.052 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 15:56:00.079 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 15:56:00.558 | INFO | 移除任务:调度队列_1 +2025-01-23 15:56:08.509 | DEBUG | [] +2025-01-23 15:56:09.051 | DEBUG | [] +2025-01-23 15:56:10.056 | DEBUG | [] +2025-01-23 15:56:11.051 | DEBUG | [] +2025-01-23 15:56:12.054 | DEBUG | [] +2025-01-23 15:56:13.056 | DEBUG | [] +2025-01-23 15:56:14.057 | DEBUG | [] +2025-01-23 15:56:15.058 | DEBUG | [] +2025-01-23 15:56:16.055 | DEBUG | [] +2025-01-23 15:56:17.053 | DEBUG | [] +2025-01-23 15:56:18.054 | DEBUG | [] +2025-01-23 15:56:19.057 | DEBUG | [] +2025-01-23 15:56:20.055 | DEBUG | [] +2025-01-23 16:13:23.260 | INFO | 日志记录器初始化完成 +2025-01-23 16:13:23.261 | INFO | 配置类初始化完成 +2025-01-23 16:13:23.261 | INFO | 程序配置管理模块初始化完成 +2025-01-23 16:13:24.921 | DEBUG | [] +2025-01-23 16:13:25.912 | DEBUG | [] +2025-01-23 16:13:26.910 | DEBUG | [] +2025-01-23 16:13:27.912 | DEBUG | [] +2025-01-23 16:13:28.911 | DEBUG | [] +2025-01-23 16:13:29.911 | DEBUG | [] +2025-01-23 16:13:30.911 | DEBUG | [] +2025-01-23 16:13:31.913 | DEBUG | [] +2025-01-23 16:13:32.912 | DEBUG | [] +2025-01-23 16:13:33.913 | DEBUG | [] +2025-01-23 16:13:34.914 | DEBUG | [] +2025-01-23 16:13:35.910 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 16:13:35.911 | INFO | 添加任务:调度队列_1 +2025-01-23 16:13:35.932 | DEBUG | ['调度队列_1'] +2025-01-23 16:13:35.933 | INFO | 开始任务:调度队列_1 +2025-01-23 16:13:36.911 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 16:13:37.910 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 16:13:38.977 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 16:13:39.913 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 16:13:40.912 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 16:13:41.943 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 16:13:42.910 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 16:13:43.911 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 16:13:44.222 | INFO | 移除任务:调度队列_1 +2025-01-23 16:13:51.809 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 16:13:51.809 | INFO | 添加任务:调度队列_1 +2025-01-23 16:13:51.832 | DEBUG | ['调度队列_1'] +2025-01-23 16:13:51.834 | INFO | 开始任务:调度队列_1 +2025-01-23 16:13:52.039 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 16:13:52.043 | INFO | 添加任务:调度队列_1 +2025-01-23 16:13:52.311 | DEBUG | ['脚本_2', '调度队列_1'] +2025-01-23 16:13:52.311 | INFO | 开始任务:调度队列_1 +2025-01-23 16:13:52.914 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 16:13:52.914 | INFO | 添加任务:调度队列_1 +2025-01-23 16:13:52.936 | DEBUG | ['脚本_2', '调度队列_1'] +2025-01-23 16:13:52.937 | INFO | 开始任务:调度队列_1 +2025-01-23 16:13:53.911 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 16:13:53.911 | INFO | 添加任务:调度队列_1 +2025-01-23 16:13:53.932 | DEBUG | ['脚本_2', '调度队列_1'] +2025-01-23 16:13:53.932 | INFO | 开始任务:调度队列_1 +2025-01-23 16:13:54.936 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 16:13:54.938 | INFO | 添加任务:调度队列_1 +2025-01-23 16:13:55.176 | DEBUG | ['脚本_2', '调度队列_1'] +2025-01-23 16:13:55.179 | INFO | 开始任务:调度队列_1 +2025-01-23 16:13:55.913 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 16:13:55.913 | INFO | 添加任务:调度队列_1 +2025-01-23 16:13:55.935 | DEBUG | ['脚本_2', '调度队列_1'] +2025-01-23 16:13:55.935 | INFO | 开始任务:调度队列_1 +2025-01-23 16:13:56.916 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 16:13:56.916 | INFO | 添加任务:调度队列_1 +2025-01-23 16:13:56.939 | DEBUG | ['脚本_2', '调度队列_1'] +2025-01-23 16:13:56.940 | INFO | 开始任务:调度队列_1 +2025-01-23 16:13:58.308 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 16:13:58.308 | INFO | 添加任务:调度队列_1 +2025-01-23 16:13:58.332 | DEBUG | ['脚本_2', '调度队列_1'] +2025-01-23 16:13:58.334 | INFO | 开始任务:调度队列_1 +2025-01-23 16:13:58.915 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 16:13:58.915 | INFO | 添加任务:调度队列_1 +2025-01-23 16:13:58.937 | DEBUG | ['脚本_2', '调度队列_1'] +2025-01-23 16:13:58.938 | INFO | 开始任务:调度队列_1 +2025-01-23 16:13:59.918 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 16:13:59.918 | INFO | 添加任务:调度队列_1 +2025-01-23 16:13:59.938 | DEBUG | ['脚本_2', '调度队列_1'] +2025-01-23 16:13:59.941 | INFO | 开始任务:调度队列_1 +2025-01-23 16:14:00.911 | DEBUG | ['脚本_2'] +2025-01-23 16:14:01.928 | DEBUG | ['脚本_2'] +2025-01-23 16:14:02.911 | DEBUG | ['脚本_2'] +2025-01-23 16:14:03.913 | DEBUG | ['脚本_2'] +2025-01-23 16:14:04.950 | DEBUG | ['脚本_2'] +2025-01-23 16:14:15.714 | INFO | 日志记录器初始化完成 +2025-01-23 16:14:15.714 | INFO | 配置类初始化完成 +2025-01-23 16:14:15.714 | INFO | 程序配置管理模块初始化完成 +2025-01-23 16:14:17.363 | DEBUG | [] +2025-01-23 16:14:18.365 | DEBUG | [] +2025-01-23 16:14:19.366 | DEBUG | [] +2025-01-23 16:14:20.368 | DEBUG | [] +2025-01-23 16:14:21.366 | DEBUG | [] +2025-01-23 16:14:22.369 | DEBUG | [] +2025-01-23 16:14:23.368 | DEBUG | [] +2025-01-23 16:14:24.368 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 16:14:24.368 | INFO | 添加任务:调度队列_1 +2025-01-23 16:14:24.390 | DEBUG | ['调度队列_1'] +2025-01-23 16:14:24.392 | INFO | 开始任务:调度队列_1 +2025-01-23 16:14:25.365 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 16:14:26.371 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 16:14:27.406 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 16:14:28.365 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 16:14:28.810 | INFO | 移除任务:调度队列_1 +2025-01-23 16:14:42.004 | DEBUG | [] +2025-01-23 16:14:42.365 | DEBUG | [] +2025-01-23 16:14:43.364 | DEBUG | [] +2025-01-23 16:14:44.365 | DEBUG | [] +2025-01-23 16:14:45.365 | DEBUG | [] +2025-01-23 16:14:46.365 | DEBUG | [] +2025-01-23 16:14:47.365 | DEBUG | [] +2025-01-23 16:14:48.364 | DEBUG | [] +2025-01-23 16:14:49.366 | DEBUG | [] +2025-01-23 16:14:50.369 | DEBUG | [] +2025-01-23 16:16:38.077 | INFO | 日志记录器初始化完成 +2025-01-23 16:16:38.078 | INFO | 配置类初始化完成 +2025-01-23 16:16:38.078 | INFO | 程序配置管理模块初始化完成 +2025-01-23 16:16:39.708 | DEBUG | [] +2025-01-23 16:16:40.707 | DEBUG | [] +2025-01-23 16:16:41.708 | DEBUG | [] +2025-01-23 16:16:42.707 | DEBUG | [] +2025-01-23 16:16:43.708 | DEBUG | [] +2025-01-23 16:16:44.710 | DEBUG | [] +2025-01-23 16:16:45.708 | DEBUG | [] +2025-01-23 16:16:46.709 | DEBUG | [] +2025-01-23 16:16:47.710 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 16:16:47.711 | INFO | 添加任务:调度队列_1 +2025-01-23 16:16:47.736 | DEBUG | ['调度队列_1'] +2025-01-23 16:16:47.737 | INFO | 开始任务:调度队列_1 +2025-01-23 16:16:48.710 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 16:16:49.710 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 16:16:50.758 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 16:16:51.709 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 16:16:52.708 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 16:16:53.555 | INFO | 移除任务:调度队列_1 +2025-01-23 16:17:06.786 | INFO | {'调度队列_1': } +2025-01-23 16:17:06.808 | DEBUG | [] +2025-01-23 16:17:06.811 | INFO | {'调度队列_1': } +2025-01-23 16:17:07.710 | DEBUG | [] +2025-01-23 16:17:08.710 | DEBUG | [] +2025-01-23 16:17:09.709 | DEBUG | [] +2025-01-23 16:17:10.708 | DEBUG | [] +2025-01-23 16:17:11.709 | DEBUG | [] +2025-01-23 16:17:12.707 | DEBUG | [] +2025-01-23 16:34:38.206 | INFO | 日志记录器初始化完成 +2025-01-23 16:34:38.207 | INFO | 配置类初始化完成 +2025-01-23 16:34:38.207 | INFO | 程序配置管理模块初始化完成 +2025-01-23 16:34:39.858 | DEBUG | [] +2025-01-23 16:34:40.849 | DEBUG | [] +2025-01-23 16:34:41.849 | DEBUG | [] +2025-01-23 16:34:42.850 | DEBUG | [] +2025-01-23 16:34:43.848 | DEBUG | [] +2025-01-23 16:34:44.850 | DEBUG | [] +2025-01-23 16:34:45.853 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 16:34:45.853 | INFO | 添加任务:调度队列_1 +2025-01-23 16:34:45.881 | DEBUG | ['调度队列_1'] +2025-01-23 16:34:45.883 | INFO | 开始任务:调度队列_1 +2025-01-23 16:34:46.849 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 16:34:47.877 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 16:34:49.013 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 16:34:49.849 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 16:34:50.851 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 16:34:51.892 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 16:34:52.850 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 16:34:52.948 | INFO | 移除任务:调度队列_1 +2025-01-23 16:35:00.795 | INFO | {'调度队列_1': } +2025-01-23 16:35:00.852 | DEBUG | [] +2025-01-23 16:35:00.853 | INFO | {'调度队列_1': } +2025-01-23 16:35:01.849 | DEBUG | [] +2025-01-23 16:35:02.849 | DEBUG | [] +2025-01-23 16:35:03.849 | DEBUG | [] +2025-01-23 16:37:10.627 | INFO | 日志记录器初始化完成 +2025-01-23 16:37:10.627 | INFO | 配置类初始化完成 +2025-01-23 16:37:10.628 | INFO | 程序配置管理模块初始化完成 +2025-01-23 16:37:12.257 | DEBUG | [] +2025-01-23 16:37:13.259 | DEBUG | [] +2025-01-23 16:37:14.257 | DEBUG | [] +2025-01-23 16:37:15.257 | DEBUG | [] +2025-01-23 16:37:16.255 | DEBUG | [] +2025-01-23 16:37:17.257 | DEBUG | [] +2025-01-23 16:37:18.257 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 16:37:18.257 | INFO | 添加任务:调度队列_1 +2025-01-23 16:37:18.284 | DEBUG | ['调度队列_1'] +2025-01-23 16:37:18.285 | INFO | 开始任务:调度队列_1 +2025-01-23 16:37:19.256 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 16:37:20.261 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 16:37:21.302 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 16:37:22.121 | INFO | 移除任务:调度队列_1 +2025-01-23 16:37:27.973 | DEBUG | ['调度队列_1'] +2025-01-23 16:37:28.256 | DEBUG | [] +2025-01-23 16:37:29.261 | DEBUG | [] +2025-01-23 16:37:30.256 | DEBUG | [] +2025-01-23 16:37:31.259 | DEBUG | [] +2025-01-23 16:37:32.260 | DEBUG | [] +2025-01-23 16:37:33.256 | DEBUG | [] +2025-01-23 16:37:34.257 | DEBUG | [] +2025-01-23 16:37:35.261 | DEBUG | [] +2025-01-23 16:37:36.259 | DEBUG | [] +2025-01-23 16:37:37.260 | DEBUG | [] +2025-01-23 16:37:38.259 | DEBUG | [] +2025-01-23 16:38:58.079 | INFO | 日志记录器初始化完成 +2025-01-23 16:38:58.079 | INFO | 配置类初始化完成 +2025-01-23 16:38:58.080 | INFO | 程序配置管理模块初始化完成 +2025-01-23 16:38:59.746 | DEBUG | [] +2025-01-23 16:39:00.742 | DEBUG | [] +2025-01-23 16:39:01.750 | DEBUG | [] +2025-01-23 16:39:02.741 | DEBUG | [] +2025-01-23 16:39:03.741 | DEBUG | [] +2025-01-23 16:39:04.741 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 16:39:04.743 | INFO | 添加任务:调度队列_1 +2025-01-23 16:39:04.767 | DEBUG | ['调度队列_1'] +2025-01-23 16:39:04.768 | INFO | 开始任务:调度队列_1 +2025-01-23 16:39:05.740 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 16:39:06.741 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 16:39:07.771 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 16:39:08.144 | INFO | 移除任务:调度队列_1 +2025-01-23 16:39:12.957 | DEBUG | ['调度队列_1'] +2025-01-23 16:39:13.740 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 16:39:13.740 | INFO | 添加任务:调度队列_1 +2025-01-23 16:39:13.761 | DEBUG | ['调度队列_1'] +2025-01-23 16:39:13.762 | INFO | 开始任务:调度队列_1 +2025-01-23 16:39:14.739 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 16:39:15.739 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 16:39:16.775 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 16:39:17.739 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 16:39:18.740 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 16:39:19.770 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 16:39:20.739 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 16:39:21.740 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 16:39:22.739 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 16:39:23.767 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 16:39:24.739 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 16:39:25.739 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 16:39:26.763 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 16:39:27.739 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 18:29:17.183 | INFO | 日志记录器初始化完成 +2025-01-23 18:29:17.183 | INFO | 配置类初始化完成 +2025-01-23 18:29:17.184 | INFO | 程序配置管理模块初始化完成 +2025-01-23 18:29:31.185 | INFO | 日志记录器初始化完成 +2025-01-23 18:29:31.185 | INFO | 配置类初始化完成 +2025-01-23 18:29:31.185 | INFO | 程序配置管理模块初始化完成 +2025-01-23 18:30:37.349 | INFO | 日志记录器初始化完成 +2025-01-23 18:30:37.349 | INFO | 配置类初始化完成 +2025-01-23 18:30:37.350 | INFO | 程序配置管理模块初始化完成 +2025-01-23 18:30:39.000 | DEBUG | [] +2025-01-23 18:30:39.899 | DEBUG | [] +2025-01-23 18:30:40.901 | DEBUG | [] +2025-01-23 18:30:41.906 | DEBUG | [] +2025-01-23 18:30:42.902 | DEBUG | [] +2025-01-23 18:30:43.902 | DEBUG | [] +2025-01-23 18:30:44.903 | DEBUG | [] +2025-01-23 18:30:45.899 | DEBUG | [] +2025-01-23 18:30:46.899 | DEBUG | [] +2025-01-23 18:30:47.917 | DEBUG | [] +2025-01-23 18:30:48.908 | DEBUG | [] +2025-01-23 18:30:49.900 | DEBUG | [] +2025-01-23 18:30:50.902 | DEBUG | [] +2025-01-23 18:30:51.902 | DEBUG | [] +2025-01-23 18:30:52.903 | DEBUG | [] +2025-01-23 18:30:53.900 | DEBUG | [] +2025-01-23 18:30:54.901 | DEBUG | [] +2025-01-23 18:30:55.908 | DEBUG | [] +2025-01-23 18:30:56.899 | DEBUG | [] +2025-01-23 18:30:57.898 | DEBUG | [] +2025-01-23 18:30:58.898 | DEBUG | [] +2025-01-23 18:30:59.901 | DEBUG | [] +2025-01-23 18:31:00.905 | DEBUG | [] +2025-01-23 18:31:01.900 | DEBUG | [] +2025-01-23 18:31:02.901 | DEBUG | [] +2025-01-23 18:31:03.905 | DEBUG | [] +2025-01-23 18:31:04.899 | DEBUG | [] +2025-01-23 18:31:05.901 | DEBUG | [] +2025-01-23 18:31:06.899 | DEBUG | [] +2025-01-23 18:31:07.908 | DEBUG | [] +2025-01-23 18:31:08.900 | DEBUG | [] +2025-01-23 18:31:22.432 | INFO | 日志记录器初始化完成 +2025-01-23 18:31:22.432 | INFO | 配置类初始化完成 +2025-01-23 18:31:22.433 | INFO | 程序配置管理模块初始化完成 +2025-01-23 18:31:24.270 | DEBUG | [] +2025-01-23 18:31:25.103 | DEBUG | [] +2025-01-23 18:31:26.105 | DEBUG | [] +2025-01-23 18:31:27.104 | DEBUG | [] +2025-01-23 18:31:28.144 | DEBUG | [] +2025-01-23 18:31:29.102 | DEBUG | [] +2025-01-23 18:31:30.103 | DEBUG | [] +2025-01-23 18:31:31.102 | DEBUG | [] +2025-01-23 18:31:32.102 | DEBUG | [] +2025-01-23 18:31:33.108 | DEBUG | [] +2025-01-23 18:31:34.102 | DEBUG | [] +2025-01-23 18:31:35.106 | DEBUG | [] +2025-01-23 18:31:36.107 | DEBUG | [] +2025-01-23 18:31:37.102 | DEBUG | [] +2025-01-23 18:31:38.105 | DEBUG | [] +2025-01-23 18:31:39.107 | DEBUG | [] +2025-01-23 18:31:40.108 | DEBUG | [] +2025-01-23 18:31:41.107 | DEBUG | [] +2025-01-23 18:33:24.010 | INFO | 日志记录器初始化完成 +2025-01-23 18:33:24.010 | INFO | 配置类初始化完成 +2025-01-23 18:33:24.010 | INFO | 程序配置管理模块初始化完成 +2025-01-23 18:33:25.798 | DEBUG | [] +2025-01-23 18:33:26.665 | DEBUG | [] +2025-01-23 18:33:27.665 | DEBUG | [] +2025-01-23 18:33:28.666 | DEBUG | [] +2025-01-23 18:45:24.202 | INFO | 日志记录器初始化完成 +2025-01-23 18:45:24.204 | INFO | 配置类初始化完成 +2025-01-23 18:45:24.204 | INFO | 程序配置管理模块初始化完成 +2025-01-23 18:45:26.313 | DEBUG | [] +2025-01-23 18:45:27.119 | DEBUG | [] +2025-01-23 18:45:28.125 | DEBUG | [] +2025-01-23 18:45:29.118 | DEBUG | [] +2025-01-23 18:45:30.160 | DEBUG | [] +2025-01-23 18:45:31.122 | DEBUG | [] +2025-01-23 18:45:32.116 | DEBUG | [] +2025-01-23 18:45:33.118 | DEBUG | [] +2025-01-23 18:45:34.117 | DEBUG | [] +2025-01-23 18:45:35.124 | DEBUG | [] +2025-01-23 18:45:36.123 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 18:45:36.124 | INFO | 添加任务:调度队列_1 +2025-01-23 18:45:36.148 | DEBUG | ['调度队列_1'] +2025-01-23 18:45:36.150 | INFO | 开始任务:调度队列_1 +2025-01-23 18:45:37.117 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 18:45:38.164 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 18:45:39.119 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 18:45:40.121 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 18:45:41.213 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 18:45:41.933 | INFO | 移除任务:调度队列_1 +2025-01-23 18:45:41.938 | INFO | 申请中止本次任务 +2025-01-23 18:45:48.784 | DEBUG | ['调度队列_1'] +2025-01-23 18:45:49.119 | DEBUG | ['调度队列_1'] +2025-01-23 18:45:50.120 | DEBUG | ['调度队列_1'] +2025-01-23 18:45:51.118 | DEBUG | ['调度队列_1'] +2025-01-23 18:45:52.119 | DEBUG | ['调度队列_1'] +2025-01-23 18:45:53.120 | DEBUG | ['调度队列_1'] +2025-01-23 18:45:54.120 | DEBUG | ['调度队列_1'] +2025-01-23 18:45:55.123 | DEBUG | ['调度队列_1'] +2025-01-23 18:45:56.119 | DEBUG | ['调度队列_1'] +2025-01-23 18:46:33.392 | INFO | 日志记录器初始化完成 +2025-01-23 18:46:33.394 | INFO | 配置类初始化完成 +2025-01-23 18:46:33.394 | INFO | 程序配置管理模块初始化完成 +2025-01-23 18:46:35.319 | DEBUG | [] +2025-01-23 18:46:36.089 | DEBUG | [] +2025-01-23 18:46:37.090 | DEBUG | [] +2025-01-23 18:46:38.087 | DEBUG | [] +2025-01-23 18:46:39.090 | DEBUG | [] +2025-01-23 18:46:40.088 | DEBUG | [] +2025-01-23 18:46:41.089 | DEBUG | [] +2025-01-23 18:46:42.090 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 18:46:42.091 | INFO | 添加任务:调度队列_1 +2025-01-23 18:46:42.118 | DEBUG | ['调度队列_1'] +2025-01-23 18:46:42.122 | INFO | 开始任务:调度队列_1 +2025-01-23 18:46:43.089 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 18:46:44.115 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 18:46:45.086 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 18:46:45.640 | INFO | 移除任务:调度队列_1 +2025-01-23 18:46:45.662 | INFO | 申请中止本次任务 +2025-01-23 18:46:56.055 | DEBUG | ['调度队列_1'] +2025-01-23 18:46:56.089 | DEBUG | ['调度队列_1'] +2025-01-23 18:46:57.088 | DEBUG | ['调度队列_1'] +2025-01-23 18:46:58.086 | DEBUG | ['调度队列_1'] +2025-01-23 18:46:59.087 | DEBUG | ['调度队列_1'] +2025-01-23 18:47:00.090 | DEBUG | ['调度队列_1'] +2025-01-23 18:47:01.088 | DEBUG | ['调度队列_1'] +2025-01-23 18:47:02.088 | DEBUG | ['调度队列_1'] +2025-01-23 18:56:03.206 | INFO | 日志记录器初始化完成 +2025-01-23 18:56:03.206 | INFO | 配置类初始化完成 +2025-01-23 18:56:03.206 | INFO | 程序配置管理模块初始化完成 +2025-01-23 18:56:05.157 | DEBUG | [] +2025-01-23 18:56:05.932 | DEBUG | [] +2025-01-23 18:56:06.933 | DEBUG | [] +2025-01-23 18:56:07.935 | DEBUG | [] +2025-01-23 18:56:08.935 | DEBUG | [] +2025-01-23 18:56:09.931 | DEBUG | [] +2025-01-23 18:56:10.935 | DEBUG | [] +2025-01-23 18:56:11.936 | DEBUG | [] +2025-01-23 18:56:12.936 | DEBUG | [] +2025-01-23 18:56:13.930 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 18:56:13.931 | INFO | 添加任务:调度队列_1 +2025-01-23 18:56:13.954 | DEBUG | ['调度队列_1'] +2025-01-23 18:56:13.957 | INFO | 开始任务:调度队列_1 +2025-01-23 18:56:14.933 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 18:56:16.023 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 18:56:16.931 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 18:56:17.936 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 18:56:18.995 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 18:56:19.937 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 18:56:20.931 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 18:56:21.632 | INFO | 移除任务:调度队列_1 +2025-01-23 18:56:21.653 | INFO | 申请中止本次任务 +2025-01-23 18:56:33.734 | DEBUG | ['调度队列_1'] +2025-01-23 18:56:33.933 | DEBUG | ['调度队列_1'] +2025-01-23 18:56:34.929 | DEBUG | ['调度队列_1'] +2025-01-23 18:56:35.933 | DEBUG | ['调度队列_1'] +2025-01-23 18:56:36.932 | DEBUG | ['调度队列_1'] +2025-01-23 18:56:37.930 | DEBUG | ['调度队列_1'] +2025-01-23 18:56:38.932 | DEBUG | ['调度队列_1'] +2025-01-23 18:56:39.929 | DEBUG | ['调度队列_1'] +2025-01-23 18:56:40.930 | DEBUG | ['调度队列_1'] +2025-01-23 18:56:41.931 | DEBUG | ['调度队列_1'] +2025-01-23 18:57:34.358 | INFO | 日志记录器初始化完成 +2025-01-23 18:57:34.359 | INFO | 配置类初始化完成 +2025-01-23 18:57:34.359 | INFO | 程序配置管理模块初始化完成 +2025-01-23 18:57:36.241 | DEBUG | [] +2025-01-23 18:57:37.040 | DEBUG | [] +2025-01-23 18:57:38.043 | DEBUG | [] +2025-01-23 18:57:39.039 | DEBUG | [] +2025-01-23 18:57:40.041 | DEBUG | [] +2025-01-23 18:57:41.045 | INFO | 按时间调起任务:调度队列_1 +2025-01-23 18:57:41.046 | INFO | 添加任务:调度队列_1 +2025-01-23 18:57:41.072 | DEBUG | ['调度队列_1'] +2025-01-23 18:57:41.076 | INFO | 开始任务:调度队列_1 +2025-01-23 18:57:42.040 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 18:57:43.083 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 18:57:44.044 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-23 18:57:44.594 | INFO | 移除任务:调度队列_1 +2025-01-23 18:57:44.615 | INFO | 申请中止本次任务 +2025-01-23 18:57:50.559 | DEBUG | ['调度队列_1'] +2025-01-23 18:57:51.041 | DEBUG | ['调度队列_1'] +2025-01-23 18:57:52.040 | DEBUG | ['调度队列_1'] +2025-01-23 18:57:53.042 | DEBUG | ['调度队列_1'] +2025-01-23 18:57:54.044 | DEBUG | ['调度队列_1'] +2025-01-23 18:57:55.041 | DEBUG | ['调度队列_1'] +2025-01-23 18:57:56.050 | DEBUG | ['调度队列_1'] +2025-01-24 15:10:24.079 | INFO | 日志记录器初始化完成 +2025-01-24 15:10:24.081 | INFO | 配置类初始化完成 +2025-01-24 15:10:24.081 | INFO | 程序配置管理模块初始化完成 +2025-01-24 15:10:25.931 | DEBUG | [] +2025-01-24 15:10:26.840 | DEBUG | [] +2025-01-24 15:10:27.841 | DEBUG | [] +2025-01-24 15:10:28.839 | DEBUG | [] +2025-01-24 15:10:29.840 | DEBUG | [] +2025-01-24 15:10:30.837 | DEBUG | [] +2025-01-24 15:10:31.839 | DEBUG | [] +2025-01-24 15:10:33.046 | DEBUG | [] +2025-01-24 15:10:33.839 | DEBUG | [] +2025-01-24 15:10:34.840 | DEBUG | [] +2025-01-24 15:10:35.839 | DEBUG | [] +2025-01-24 15:10:36.839 | DEBUG | [] +2025-01-24 15:10:37.837 | DEBUG | [] +2025-01-24 15:10:38.836 | DEBUG | [] +2025-01-24 15:10:39.839 | DEBUG | [] +2025-01-24 15:10:40.837 | DEBUG | [] +2025-01-24 15:10:41.837 | DEBUG | [] +2025-01-24 15:10:42.838 | DEBUG | [] +2025-01-24 15:10:43.837 | DEBUG | [] +2025-01-24 15:10:44.836 | DEBUG | [] +2025-01-24 15:10:45.837 | DEBUG | [] +2025-01-24 15:10:46.837 | DEBUG | [] +2025-01-24 15:10:47.836 | DEBUG | [] +2025-01-24 15:10:48.844 | DEBUG | [] +2025-01-24 15:10:49.836 | DEBUG | [] +2025-01-24 15:10:50.836 | DEBUG | [] +2025-01-24 15:10:51.836 | DEBUG | [] +2025-01-24 15:10:52.837 | DEBUG | [] +2025-01-24 15:10:53.837 | DEBUG | [] +2025-01-24 15:10:54.838 | DEBUG | [] +2025-01-24 15:10:55.836 | DEBUG | [] +2025-01-24 15:10:56.837 | DEBUG | [] +2025-01-24 15:10:57.836 | DEBUG | [] +2025-01-24 15:10:58.837 | DEBUG | [] +2025-01-24 15:10:59.836 | DEBUG | [] +2025-01-24 15:11:00.837 | DEBUG | [] +2025-01-24 15:11:01.838 | DEBUG | [] +2025-01-24 15:11:02.837 | DEBUG | [] +2025-01-24 15:11:03.838 | DEBUG | [] +2025-01-24 15:11:04.842 | DEBUG | [] +2025-01-24 15:11:05.837 | DEBUG | [] +2025-01-24 15:11:06.838 | DEBUG | [] +2025-01-24 15:11:07.840 | DEBUG | [] +2025-01-24 15:11:08.844 | DEBUG | [] +2025-01-24 15:11:09.837 | DEBUG | [] +2025-01-24 15:11:10.838 | DEBUG | [] +2025-01-24 15:11:11.837 | DEBUG | [] +2025-01-24 15:11:12.838 | DEBUG | [] +2025-01-24 15:11:13.838 | DEBUG | [] +2025-01-24 15:11:14.844 | DEBUG | [] +2025-01-24 15:11:15.838 | DEBUG | [] +2025-01-24 15:11:16.839 | DEBUG | [] +2025-01-24 15:11:17.840 | DEBUG | [] +2025-01-24 15:11:18.838 | DEBUG | [] +2025-01-24 15:11:19.837 | DEBUG | [] +2025-01-24 15:11:20.836 | DEBUG | [] +2025-01-24 15:11:21.836 | DEBUG | [] +2025-01-24 15:11:22.837 | DEBUG | [] +2025-01-24 15:11:23.837 | DEBUG | [] +2025-01-24 15:11:24.850 | DEBUG | [] +2025-01-24 15:11:25.838 | DEBUG | [] +2025-01-24 15:11:26.836 | DEBUG | [] +2025-01-24 15:11:27.836 | DEBUG | [] +2025-01-24 15:11:28.838 | DEBUG | [] +2025-01-24 15:11:29.836 | DEBUG | [] +2025-01-24 15:11:30.837 | DEBUG | [] +2025-01-24 15:11:31.839 | DEBUG | [] +2025-01-24 15:11:32.837 | DEBUG | [] +2025-01-24 15:11:33.836 | DEBUG | [] +2025-01-24 15:11:34.839 | DEBUG | [] +2025-01-24 15:11:35.836 | DEBUG | [] +2025-01-24 15:11:36.840 | DEBUG | [] +2025-01-24 15:11:37.839 | DEBUG | [] +2025-01-24 15:11:38.839 | DEBUG | [] +2025-01-24 15:11:39.840 | DEBUG | [] +2025-01-24 15:11:40.842 | DEBUG | [] +2025-01-24 15:11:41.840 | DEBUG | [] +2025-01-24 15:11:42.838 | DEBUG | [] +2025-01-24 15:11:43.838 | DEBUG | [] +2025-01-24 15:11:44.839 | DEBUG | [] +2025-01-24 15:11:45.839 | DEBUG | [] +2025-01-24 15:11:46.839 | DEBUG | [] +2025-01-24 15:11:47.837 | DEBUG | [] +2025-01-24 15:11:48.839 | DEBUG | [] +2025-01-24 15:11:49.839 | DEBUG | [] +2025-01-24 15:11:50.838 | DEBUG | [] +2025-01-24 15:11:51.839 | DEBUG | [] +2025-01-24 15:11:52.838 | DEBUG | [] +2025-01-24 15:11:53.838 | DEBUG | [] +2025-01-24 15:11:54.836 | DEBUG | [] +2025-01-24 15:11:55.838 | DEBUG | [] +2025-01-24 15:11:56.838 | DEBUG | [] +2025-01-24 15:11:57.836 | DEBUG | [] +2025-01-24 15:11:58.844 | DEBUG | [] +2025-01-24 15:11:59.836 | DEBUG | [] +2025-01-24 15:12:00.836 | INFO | 按时间调起任务:调度队列_2 +2025-01-24 15:12:00.837 | INFO | 添加任务:调度队列_2 +2025-01-24 15:12:00.860 | DEBUG | ['调度队列_2'] +2025-01-24 15:12:00.862 | INFO | 开始任务:调度队列_2 +2025-01-24 15:12:01.843 | DEBUG | ['调度队列_2'] +2025-01-24 15:12:02.837 | DEBUG | ['调度队列_2'] +2025-01-24 15:12:03.843 | DEBUG | ['调度队列_2'] +2025-01-24 15:12:04.837 | DEBUG | ['调度队列_2'] +2025-01-24 15:12:05.838 | DEBUG | ['调度队列_2'] +2025-01-24 15:12:06.843 | DEBUG | ['调度队列_2'] +2025-01-24 15:12:07.842 | DEBUG | ['调度队列_2'] +2025-01-24 15:12:08.842 | DEBUG | ['调度队列_2'] +2025-01-24 15:12:09.842 | DEBUG | ['调度队列_2'] +2025-01-24 15:12:10.842 | DEBUG | ['调度队列_2'] +2025-01-24 15:12:11.837 | DEBUG | ['调度队列_2'] +2025-01-24 15:12:12.842 | DEBUG | ['调度队列_2'] +2025-01-24 15:12:13.841 | DEBUG | ['调度队列_2'] +2025-01-24 15:12:14.841 | DEBUG | ['调度队列_2'] +2025-01-24 15:12:15.842 | DEBUG | ['调度队列_2'] +2025-01-24 15:12:16.843 | DEBUG | ['调度队列_2'] +2025-01-24 15:12:17.842 | DEBUG | ['调度队列_2'] +2025-01-24 15:12:18.840 | DEBUG | ['调度队列_2'] +2025-01-24 15:12:19.841 | DEBUG | ['调度队列_2'] +2025-01-24 15:12:20.841 | DEBUG | ['调度队列_2'] +2025-01-24 15:12:21.841 | DEBUG | ['调度队列_2'] +2025-01-24 15:12:22.837 | DEBUG | ['调度队列_2'] +2025-01-24 15:12:23.838 | DEBUG | ['调度队列_2'] +2025-01-24 15:12:24.836 | DEBUG | ['调度队列_2'] +2025-01-24 15:12:25.836 | DEBUG | ['调度队列_2'] +2025-01-24 15:12:26.838 | DEBUG | ['调度队列_2'] +2025-01-24 15:12:27.838 | DEBUG | ['调度队列_2'] +2025-01-24 15:12:28.837 | DEBUG | ['调度队列_2'] +2025-01-24 15:12:29.837 | DEBUG | ['调度队列_2'] +2025-01-24 15:12:30.839 | DEBUG | ['调度队列_2'] +2025-01-24 15:12:31.839 | DEBUG | ['调度队列_2'] +2025-01-24 15:12:32.837 | DEBUG | ['调度队列_2'] +2025-01-24 15:12:33.837 | DEBUG | ['调度队列_2'] +2025-01-24 15:12:34.837 | DEBUG | ['调度队列_2'] +2025-01-24 15:12:35.837 | DEBUG | ['调度队列_2'] +2025-01-24 15:12:36.837 | DEBUG | ['调度队列_2'] +2025-01-24 15:12:37.837 | DEBUG | ['调度队列_2'] +2025-01-24 15:12:38.838 | DEBUG | ['调度队列_2'] +2025-01-24 15:12:39.837 | DEBUG | ['调度队列_2'] +2025-01-24 15:12:40.838 | DEBUG | ['调度队列_2'] +2025-01-24 15:12:41.840 | DEBUG | ['调度队列_2'] +2025-01-24 17:18:49.491 | INFO | 日志记录器初始化完成 +2025-01-24 17:18:49.492 | INFO | 配置类初始化完成 +2025-01-24 17:18:49.492 | INFO | 程序配置管理模块初始化完成 +2025-01-24 17:18:51.233 | DEBUG | [] +2025-01-24 17:18:52.182 | DEBUG | [] +2025-01-24 17:18:53.282 | DEBUG | [] +2025-01-24 17:18:54.182 | DEBUG | [] +2025-01-24 17:18:55.179 | DEBUG | [] +2025-01-24 17:18:56.182 | DEBUG | [] +2025-01-24 17:18:57.180 | DEBUG | [] +2025-01-24 17:18:58.182 | DEBUG | [] +2025-01-24 17:18:59.182 | DEBUG | [] +2025-01-24 17:19:00.181 | DEBUG | [] +2025-01-24 17:19:01.182 | DEBUG | [] +2025-01-24 17:19:02.181 | DEBUG | [] +2025-01-24 17:19:03.181 | DEBUG | [] +2025-01-24 17:19:04.180 | INFO | 按时间调起任务:调度队列_1 +2025-01-24 17:19:04.180 | INFO | 任务开始:调度队列_1 +2025-01-24 17:19:04.201 | DEBUG | ['调度队列_1'] +2025-01-24 17:19:04.203 | INFO | 任务开始:脚本_2 +2025-01-24 17:19:05.182 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 17:19:06.181 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 17:19:07.226 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 17:19:08.181 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 17:19:09.181 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 17:19:10.271 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 17:19:11.187 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 17:19:12.182 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 17:19:13.180 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 17:19:14.254 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 17:19:15.181 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 17:19:16.186 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 17:19:17.246 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 17:19:18.182 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 17:19:19.184 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 17:19:20.184 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 17:19:21.239 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 17:19:22.184 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 17:19:23.185 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 17:19:24.275 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 17:19:25.184 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 17:19:26.184 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 17:19:27.183 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 17:19:28.216 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 17:19:29.183 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 17:19:30.183 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 17:19:31.218 | INFO | 按时间调起任务:调度队列_2 +2025-01-24 17:19:31.220 | INFO | 任务开始:调度队列_2 +2025-01-24 17:19:31.305 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2'] +2025-01-24 17:19:31.306 | INFO | 任务开始:脚本_1 +2025-01-24 17:19:31.308 | INFO | 任务完成:脚本_1 +2025-01-24 17:19:31.316 | INFO | 任务结束:调度队列_2 +2025-01-24 17:19:32.183 | INFO | 按时间调起任务:调度队列_2 +2025-01-24 17:19:32.184 | INFO | 任务开始:调度队列_2 +2025-01-24 17:19:32.204 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2'] +2025-01-24 17:19:32.206 | INFO | 任务开始:脚本_1 +2025-01-24 17:19:32.207 | INFO | 任务完成:脚本_1 +2025-01-24 17:19:32.213 | INFO | 任务结束:调度队列_2 +2025-01-24 17:19:33.180 | INFO | 按时间调起任务:调度队列_2 +2025-01-24 17:19:33.181 | INFO | 任务开始:调度队列_2 +2025-01-24 17:19:33.202 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2'] +2025-01-24 17:19:33.203 | INFO | 任务开始:脚本_1 +2025-01-24 17:19:33.204 | INFO | 任务完成:脚本_1 +2025-01-24 17:19:33.211 | INFO | 任务结束:调度队列_2 +2025-01-24 17:19:34.191 | INFO | 按时间调起任务:调度队列_2 +2025-01-24 17:19:34.191 | INFO | 任务开始:调度队列_2 +2025-01-24 17:19:34.210 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2'] +2025-01-24 17:19:34.211 | INFO | 任务开始:脚本_1 +2025-01-24 17:19:34.213 | INFO | 任务完成:脚本_1 +2025-01-24 17:19:34.231 | INFO | 任务结束:调度队列_2 +2025-01-24 17:19:35.213 | INFO | 按时间调起任务:调度队列_2 +2025-01-24 17:19:35.214 | INFO | 任务开始:调度队列_2 +2025-01-24 17:19:35.505 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2'] +2025-01-24 17:19:35.506 | INFO | 任务开始:脚本_1 +2025-01-24 17:19:35.508 | INFO | 任务完成:脚本_1 +2025-01-24 17:19:35.515 | INFO | 任务结束:调度队列_2 +2025-01-24 17:19:36.183 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 17:19:37.183 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 17:19:38.310 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 17:19:39.182 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 17:19:40.182 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 17:19:41.179 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 17:19:42.229 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 17:19:43.015 | INFO | 中止任务:调度队列_1 +2025-01-24 17:19:43.018 | INFO | 申请中止本次任务 +2025-01-24 17:19:45.715 | INFO | 任务完成:脚本_2 +2025-01-24 17:19:45.720 | DEBUG | ['调度队列_1'] +2025-01-24 17:19:45.724 | INFO | 任务结束:调度队列_1 +2025-01-24 17:19:46.181 | INFO | 按时间调起任务:调度队列_1 +2025-01-24 17:19:46.182 | INFO | 任务开始:调度队列_1 +2025-01-24 17:19:46.202 | DEBUG | ['调度队列_1'] +2025-01-24 17:19:46.203 | INFO | 任务开始:脚本_2 +2025-01-24 17:19:47.181 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 17:19:48.502 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 17:19:49.211 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 17:19:50.180 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 17:19:51.181 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 17:19:52.210 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 17:19:53.180 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 17:19:54.180 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 17:19:55.181 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 17:19:56.225 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 17:19:57.181 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 17:19:58.181 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 17:19:59.219 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 17:20:00.181 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 17:20:00.358 | INFO | 中止任务:调度队列_1 +2025-01-24 17:20:00.362 | INFO | 申请中止本次任务 +2025-01-24 17:20:02.567 | INFO | 任务完成:脚本_2 +2025-01-24 17:20:02.569 | DEBUG | ['调度队列_1'] +2025-01-24 17:20:02.574 | INFO | 任务结束:调度队列_1 +2025-01-24 17:20:03.183 | DEBUG | [] +2025-01-24 17:20:04.182 | DEBUG | [] +2025-01-24 17:20:05.180 | DEBUG | [] +2025-01-24 17:20:06.180 | DEBUG | [] +2025-01-24 17:20:07.181 | DEBUG | [] +2025-01-24 17:20:08.181 | DEBUG | [] +2025-01-24 17:20:09.180 | DEBUG | [] +2025-01-24 17:20:10.181 | DEBUG | [] +2025-01-24 17:20:11.181 | DEBUG | [] +2025-01-24 17:20:12.180 | DEBUG | [] +2025-01-24 17:20:13.180 | DEBUG | [] +2025-01-24 17:20:14.182 | DEBUG | [] +2025-01-24 17:20:15.179 | DEBUG | [] +2025-01-24 17:20:16.181 | DEBUG | [] +2025-01-24 17:20:17.183 | DEBUG | [] +2025-01-24 17:20:18.180 | DEBUG | [] +2025-01-24 17:20:19.181 | DEBUG | [] +2025-01-24 17:20:20.181 | DEBUG | [] +2025-01-24 17:20:21.180 | DEBUG | [] +2025-01-24 17:20:22.183 | DEBUG | [] +2025-01-24 17:20:23.182 | DEBUG | [] +2025-01-24 17:20:24.181 | DEBUG | [] +2025-01-24 17:20:25.183 | INFO | 按时间调起任务:调度队列_2 +2025-01-24 17:20:25.183 | INFO | 任务开始:调度队列_2 +2025-01-24 17:20:25.203 | DEBUG | ['调度队列_2'] +2025-01-24 17:20:25.204 | INFO | 任务开始:脚本_1 +2025-01-24 17:20:25.205 | INFO | 任务完成:脚本_1 +2025-01-24 17:20:25.211 | INFO | 任务结束:调度队列_2 +2025-01-24 17:20:26.182 | INFO | 按时间调起任务:调度队列_2 +2025-01-24 17:20:26.183 | INFO | 任务开始:调度队列_2 +2025-01-24 17:20:26.203 | DEBUG | ['调度队列_2'] +2025-01-24 17:20:26.204 | INFO | 任务开始:脚本_1 +2025-01-24 17:20:26.206 | INFO | 任务完成:脚本_1 +2025-01-24 17:20:26.212 | INFO | 任务结束:调度队列_2 +2025-01-24 17:20:27.182 | INFO | 按时间调起任务:调度队列_2 +2025-01-24 17:20:27.182 | INFO | 任务开始:调度队列_2 +2025-01-24 17:20:27.201 | DEBUG | ['调度队列_2'] +2025-01-24 17:20:27.202 | INFO | 任务开始:脚本_1 +2025-01-24 17:20:27.204 | INFO | 任务完成:脚本_1 +2025-01-24 17:20:27.224 | INFO | 任务结束:调度队列_2 +2025-01-24 17:20:28.181 | INFO | 按时间调起任务:调度队列_2 +2025-01-24 17:20:28.181 | INFO | 任务开始:调度队列_2 +2025-01-24 17:20:28.202 | DEBUG | ['调度队列_2'] +2025-01-24 17:20:28.203 | INFO | 任务开始:脚本_1 +2025-01-24 17:20:28.204 | INFO | 任务完成:脚本_1 +2025-01-24 17:20:28.209 | INFO | 任务结束:调度队列_2 +2025-01-24 17:20:29.181 | INFO | 按时间调起任务:调度队列_2 +2025-01-24 17:20:29.182 | INFO | 任务开始:调度队列_2 +2025-01-24 17:20:29.202 | DEBUG | ['调度队列_2'] +2025-01-24 17:20:29.203 | INFO | 任务开始:脚本_1 +2025-01-24 17:20:29.205 | INFO | 任务完成:脚本_1 +2025-01-24 17:20:29.211 | INFO | 任务结束:调度队列_2 +2025-01-24 17:20:30.182 | INFO | 按时间调起任务:调度队列_2 +2025-01-24 17:20:30.183 | INFO | 任务开始:调度队列_2 +2025-01-24 17:20:30.205 | DEBUG | ['调度队列_2'] +2025-01-24 17:20:30.206 | INFO | 任务开始:脚本_1 +2025-01-24 17:20:30.208 | INFO | 任务完成:脚本_1 +2025-01-24 17:20:30.213 | INFO | 任务结束:调度队列_2 +2025-01-24 17:20:31.181 | DEBUG | [] +2025-01-24 17:20:32.182 | DEBUG | [] +2025-01-24 17:26:13.182 | INFO | 日志记录器初始化完成 +2025-01-24 17:26:13.182 | INFO | 配置类初始化完成 +2025-01-24 17:26:13.182 | INFO | 程序配置管理模块初始化完成 +2025-01-24 17:26:14.985 | DEBUG | [] +2025-01-24 17:26:15.963 | DEBUG | [] +2025-01-24 17:26:16.967 | DEBUG | [] +2025-01-24 17:26:17.963 | DEBUG | [] +2025-01-24 17:26:18.962 | DEBUG | [] +2025-01-24 17:26:19.966 | DEBUG | [] +2025-01-24 17:26:20.966 | DEBUG | [] +2025-01-24 17:26:21.964 | DEBUG | [] +2025-01-24 17:26:22.963 | DEBUG | [] +2025-01-24 17:26:23.963 | DEBUG | [] +2025-01-24 17:26:24.962 | DEBUG | [] +2025-01-24 17:26:25.962 | DEBUG | [] +2025-01-24 17:26:26.962 | INFO | 按时间调起任务:调度队列_2 +2025-01-24 17:26:26.962 | INFO | 任务开始:调度队列_2 +2025-01-24 17:26:26.983 | DEBUG | ['调度队列_2'] +2025-01-24 17:26:26.984 | INFO | 任务开始:脚本_1 +2025-01-24 17:26:26.988 | INFO | 任务完成:脚本_1 +2025-01-24 17:26:26.992 | INFO | 任务结束:调度队列_2 +2025-01-24 17:26:27.963 | INFO | 按时间调起任务:调度队列_2 +2025-01-24 17:26:27.963 | INFO | 任务开始:调度队列_2 +2025-01-24 17:26:27.981 | DEBUG | ['调度队列_2'] +2025-01-24 17:26:27.983 | INFO | 任务开始:脚本_1 +2025-01-24 17:26:27.984 | INFO | 任务完成:脚本_1 +2025-01-24 17:26:27.990 | INFO | 任务结束:调度队列_2 +2025-01-24 17:26:28.962 | INFO | 按时间调起任务:调度队列_2 +2025-01-24 17:26:28.963 | INFO | 任务开始:调度队列_2 +2025-01-24 17:26:28.986 | DEBUG | ['调度队列_2'] +2025-01-24 17:26:28.987 | INFO | 任务开始:脚本_1 +2025-01-24 17:26:28.989 | INFO | 任务完成:脚本_1 +2025-01-24 17:26:28.994 | INFO | 任务结束:调度队列_2 +2025-01-24 17:26:29.963 | INFO | 按时间调起任务:调度队列_2 +2025-01-24 17:26:29.963 | INFO | 任务开始:调度队列_2 +2025-01-24 17:26:29.984 | DEBUG | ['调度队列_2'] +2025-01-24 17:26:29.985 | INFO | 任务开始:脚本_1 +2025-01-24 17:26:29.988 | INFO | 任务完成:脚本_1 +2025-01-24 17:26:29.992 | INFO | 任务结束:调度队列_2 +2025-01-24 17:26:30.963 | INFO | 按时间调起任务:调度队列_2 +2025-01-24 17:26:30.964 | INFO | 任务开始:调度队列_2 +2025-01-24 17:26:30.984 | DEBUG | ['调度队列_2'] +2025-01-24 17:26:30.986 | INFO | 任务开始:脚本_1 +2025-01-24 17:26:30.987 | INFO | 任务完成:脚本_1 +2025-01-24 17:26:31.015 | INFO | 任务结束:调度队列_2 +2025-01-24 17:26:31.963 | INFO | 按时间调起任务:调度队列_2 +2025-01-24 17:26:31.964 | INFO | 任务开始:调度队列_2 +2025-01-24 17:26:31.985 | DEBUG | ['调度队列_2'] +2025-01-24 17:26:31.986 | INFO | 任务开始:脚本_1 +2025-01-24 17:26:31.988 | INFO | 任务完成:脚本_1 +2025-01-24 17:26:31.994 | INFO | 任务结束:调度队列_2 +2025-01-24 17:26:32.963 | INFO | 按时间调起任务:调度队列_2 +2025-01-24 17:26:32.963 | INFO | 任务开始:调度队列_2 +2025-01-24 17:26:32.987 | DEBUG | ['调度队列_2'] +2025-01-24 17:26:32.989 | INFO | 任务开始:脚本_1 +2025-01-24 17:26:32.991 | INFO | 任务完成:脚本_1 +2025-01-24 17:26:32.998 | INFO | 任务结束:调度队列_2 +2025-01-24 17:26:33.962 | INFO | 按时间调起任务:调度队列_2 +2025-01-24 17:26:33.963 | INFO | 任务开始:调度队列_2 +2025-01-24 17:26:33.983 | DEBUG | ['调度队列_2'] +2025-01-24 17:26:33.985 | INFO | 任务开始:脚本_1 +2025-01-24 17:26:33.987 | INFO | 任务完成:脚本_1 +2025-01-24 17:26:33.992 | INFO | 任务结束:调度队列_2 +2025-01-24 17:26:34.968 | INFO | 按时间调起任务:调度队列_2 +2025-01-24 17:26:34.969 | INFO | 任务开始:调度队列_2 +2025-01-24 17:26:34.989 | DEBUG | ['调度队列_2'] +2025-01-24 17:26:34.990 | INFO | 任务开始:脚本_1 +2025-01-24 17:26:34.992 | INFO | 任务完成:脚本_1 +2025-01-24 17:26:35.000 | INFO | 任务结束:调度队列_2 +2025-01-24 17:26:35.965 | INFO | 按时间调起任务:调度队列_2 +2025-01-24 17:26:35.965 | INFO | 任务开始:调度队列_2 +2025-01-24 17:26:35.984 | DEBUG | ['调度队列_2'] +2025-01-24 17:26:35.986 | INFO | 任务开始:脚本_1 +2025-01-24 17:26:35.988 | INFO | 任务完成:脚本_1 +2025-01-24 17:26:36.013 | INFO | 任务结束:调度队列_2 +2025-01-24 17:26:36.963 | INFO | 按时间调起任务:调度队列_2 +2025-01-24 17:26:36.963 | INFO | 任务开始:调度队列_2 +2025-01-24 17:26:36.991 | DEBUG | ['调度队列_2'] +2025-01-24 17:26:36.993 | INFO | 任务开始:脚本_1 +2025-01-24 17:26:36.994 | INFO | 任务完成:脚本_1 +2025-01-24 17:26:37.006 | INFO | 任务结束:调度队列_2 +2025-01-24 17:26:37.968 | INFO | 按时间调起任务:调度队列_2 +2025-01-24 17:26:37.969 | INFO | 任务开始:调度队列_2 +2025-01-24 17:26:37.991 | DEBUG | ['调度队列_2'] +2025-01-24 17:26:37.993 | INFO | 任务开始:脚本_1 +2025-01-24 17:26:37.998 | INFO | 任务完成:脚本_1 +2025-01-24 17:26:38.005 | INFO | 任务结束:调度队列_2 +2025-01-24 17:26:38.964 | INFO | 按时间调起任务:调度队列_2 +2025-01-24 17:26:38.964 | INFO | 任务开始:调度队列_2 +2025-01-24 17:26:38.983 | DEBUG | ['调度队列_2'] +2025-01-24 17:26:38.985 | INFO | 任务开始:脚本_1 +2025-01-24 17:26:38.988 | INFO | 任务完成:脚本_1 +2025-01-24 17:26:39.018 | INFO | 任务结束:调度队列_2 +2025-01-24 17:26:39.963 | INFO | 按时间调起任务:调度队列_2 +2025-01-24 17:26:39.963 | INFO | 任务开始:调度队列_2 +2025-01-24 17:26:39.988 | DEBUG | ['调度队列_2'] +2025-01-24 17:26:39.989 | INFO | 任务开始:脚本_1 +2025-01-24 17:26:39.991 | INFO | 任务完成:脚本_1 +2025-01-24 17:26:40.011 | INFO | 任务结束:调度队列_2 +2025-01-24 17:26:40.967 | INFO | 按时间调起任务:调度队列_2 +2025-01-24 17:26:40.968 | INFO | 任务开始:调度队列_2 +2025-01-24 17:26:40.990 | DEBUG | ['调度队列_2'] +2025-01-24 17:26:40.992 | INFO | 任务开始:脚本_1 +2025-01-24 17:26:40.993 | INFO | 任务完成:脚本_1 +2025-01-24 17:26:41.003 | INFO | 任务结束:调度队列_2 +2025-01-24 17:26:41.967 | DEBUG | [] +2025-01-24 17:26:42.967 | DEBUG | [] +2025-01-24 17:26:43.964 | DEBUG | [] +2025-01-24 17:26:44.962 | DEBUG | [] +2025-01-24 17:26:45.961 | DEBUG | [] +2025-01-24 17:26:46.966 | DEBUG | [] +2025-01-24 17:27:42.978 | INFO | 日志记录器初始化完成 +2025-01-24 17:27:42.979 | INFO | 配置类初始化完成 +2025-01-24 17:27:42.979 | INFO | 程序配置管理模块初始化完成 +2025-01-24 17:27:44.715 | DEBUG | [] +2025-01-24 17:27:45.713 | DEBUG | [] +2025-01-24 17:27:46.711 | DEBUG | [] +2025-01-24 17:27:47.711 | DEBUG | [] +2025-01-24 17:27:48.711 | DEBUG | [] +2025-01-24 17:27:49.713 | DEBUG | [] +2025-01-24 17:27:50.712 | DEBUG | [] +2025-01-24 17:27:51.713 | INFO | 按时间调起任务:调度队列_2 +2025-01-24 17:27:51.713 | DEBUG | 当前时间:2025-01-24 17:27, 历史时间:2025-01-24 17:26:40 +2025-01-24 17:27:51.713 | INFO | 任务开始:调度队列_2 +2025-01-24 17:27:51.739 | DEBUG | ['调度队列_2'] +2025-01-24 17:27:51.741 | INFO | 任务开始:脚本_1 +2025-01-24 17:27:51.743 | INFO | 任务完成:脚本_1 +2025-01-24 17:27:51.751 | INFO | 任务结束:调度队列_2 +2025-01-24 17:27:52.712 | INFO | 按时间调起任务:调度队列_2 +2025-01-24 17:27:52.713 | DEBUG | 当前时间:2025-01-24 17:27, 历史时间:2025-01-24 17:27:51 +2025-01-24 17:27:52.713 | INFO | 任务开始:调度队列_2 +2025-01-24 17:27:52.732 | DEBUG | ['调度队列_2'] +2025-01-24 17:27:52.733 | INFO | 任务开始:脚本_1 +2025-01-24 17:27:52.734 | INFO | 任务完成:脚本_1 +2025-01-24 17:27:52.741 | INFO | 任务结束:调度队列_2 +2025-01-24 17:27:53.713 | INFO | 按时间调起任务:调度队列_2 +2025-01-24 17:27:53.713 | DEBUG | 当前时间:2025-01-24 17:27, 历史时间:2025-01-24 17:27:52 +2025-01-24 17:27:53.713 | INFO | 任务开始:调度队列_2 +2025-01-24 17:27:53.733 | DEBUG | ['调度队列_2'] +2025-01-24 17:27:53.736 | INFO | 任务开始:脚本_1 +2025-01-24 17:27:53.737 | INFO | 任务完成:脚本_1 +2025-01-24 17:27:53.742 | INFO | 任务结束:调度队列_2 +2025-01-24 17:27:54.711 | DEBUG | [] +2025-01-24 17:27:55.712 | DEBUG | [] +2025-01-24 17:27:56.712 | DEBUG | [] +2025-01-24 17:27:57.717 | DEBUG | [] +2025-01-24 17:27:58.714 | DEBUG | [] +2025-01-24 17:27:59.713 | DEBUG | [] +2025-01-24 17:28:00.713 | DEBUG | [] +2025-01-24 17:28:01.713 | DEBUG | [] +2025-01-24 17:28:02.713 | DEBUG | [] +2025-01-24 17:28:03.712 | DEBUG | [] +2025-01-24 17:28:04.713 | DEBUG | [] +2025-01-24 17:28:05.713 | DEBUG | [] +2025-01-24 17:31:12.067 | INFO | 日志记录器初始化完成 +2025-01-24 17:31:12.067 | INFO | 配置类初始化完成 +2025-01-24 17:31:12.067 | INFO | 程序配置管理模块初始化完成 +2025-01-24 17:31:13.697 | DEBUG | [] +2025-01-24 17:31:14.697 | DEBUG | [] +2025-01-24 17:31:15.696 | DEBUG | [] +2025-01-24 17:31:17.094 | DEBUG | [] +2025-01-24 17:31:17.697 | DEBUG | [] +2025-01-24 17:31:18.696 | DEBUG | [] +2025-01-24 17:31:19.696 | DEBUG | [] +2025-01-24 17:31:20.700 | DEBUG | [] +2025-01-24 17:31:21.702 | DEBUG | [] +2025-01-24 17:31:22.701 | DEBUG | [] +2025-01-24 17:31:23.702 | DEBUG | [] +2025-01-24 17:31:24.698 | INFO | 按时间调起任务:调度队列_2 +2025-01-24 17:31:24.698 | DEBUG | 当前时间:2025-01-24 17:31, 历史时间:2025-01-24 17:27:53 +2025-01-24 17:31:24.698 | INFO | 任务开始:调度队列_2 +2025-01-24 17:31:24.721 | DEBUG | ['调度队列_2'] +2025-01-24 17:31:24.722 | INFO | 任务开始:脚本_1 +2025-01-24 17:31:24.723 | INFO | 任务完成:脚本_1 +2025-01-24 17:31:24.729 | INFO | 任务结束:调度队列_2 +2025-01-24 17:31:25.700 | DEBUG | [] +2025-01-24 17:31:26.702 | DEBUG | [] +2025-01-24 17:31:27.699 | DEBUG | [] +2025-01-24 17:31:28.700 | DEBUG | [] +2025-01-24 17:31:29.701 | DEBUG | [] +2025-01-24 17:31:30.701 | DEBUG | [] +2025-01-24 17:31:31.700 | DEBUG | [] +2025-01-24 17:31:32.700 | DEBUG | [] +2025-01-24 17:31:33.699 | DEBUG | [] +2025-01-24 17:31:34.701 | DEBUG | [] +2025-01-24 17:31:35.699 | DEBUG | [] +2025-01-24 17:31:36.700 | DEBUG | [] +2025-01-24 17:31:37.700 | DEBUG | [] +2025-01-24 17:31:38.699 | DEBUG | [] +2025-01-24 17:31:39.699 | DEBUG | [] +2025-01-24 17:31:40.699 | DEBUG | [] +2025-01-24 17:31:41.699 | DEBUG | [] +2025-01-24 17:31:42.699 | DEBUG | [] +2025-01-24 17:31:43.699 | DEBUG | [] +2025-01-24 17:31:44.698 | DEBUG | [] +2025-01-24 17:31:45.699 | DEBUG | [] +2025-01-24 17:31:46.697 | DEBUG | [] +2025-01-24 17:31:47.697 | DEBUG | [] +2025-01-24 17:31:48.696 | DEBUG | [] +2025-01-24 17:31:49.697 | DEBUG | [] +2025-01-24 17:34:16.301 | INFO | 日志记录器初始化完成 +2025-01-24 17:34:16.301 | INFO | 配置类初始化完成 +2025-01-24 17:34:16.301 | INFO | 程序配置管理模块初始化完成 +2025-01-24 17:34:18.097 | DEBUG | [] +2025-01-24 17:34:18.962 | DEBUG | [] +2025-01-24 17:34:19.961 | DEBUG | [] +2025-01-24 17:34:20.962 | DEBUG | [] +2025-01-24 17:34:21.962 | DEBUG | [] +2025-01-24 17:34:22.963 | DEBUG | [] +2025-01-24 17:34:23.962 | DEBUG | [] +2025-01-24 17:34:24.976 | DEBUG | [] +2025-01-24 17:34:25.962 | DEBUG | [] +2025-01-24 17:34:26.961 | DEBUG | [] +2025-01-24 17:34:27.962 | DEBUG | [] +2025-01-24 17:34:28.963 | DEBUG | [] +2025-01-24 17:34:29.962 | DEBUG | [] +2025-01-24 17:34:30.962 | DEBUG | [] +2025-01-24 17:34:31.962 | DEBUG | [] +2025-01-24 17:34:32.961 | DEBUG | [] +2025-01-24 17:34:33.961 | DEBUG | [] +2025-01-24 17:34:34.962 | DEBUG | [] +2025-01-24 17:34:35.962 | DEBUG | [] +2025-01-24 17:34:36.962 | DEBUG | [] +2025-01-24 17:34:37.963 | DEBUG | [] +2025-01-24 17:34:38.964 | DEBUG | [] +2025-01-24 17:34:39.964 | DEBUG | [] +2025-01-24 17:34:40.962 | DEBUG | [] +2025-01-24 17:34:41.972 | DEBUG | [] +2025-01-24 17:34:42.961 | DEBUG | [] +2025-01-24 17:34:43.961 | DEBUG | [] +2025-01-24 17:34:44.962 | DEBUG | [] +2025-01-24 17:34:45.962 | DEBUG | [] +2025-01-24 17:34:46.963 | DEBUG | [] +2025-01-24 17:34:47.962 | DEBUG | [] +2025-01-24 17:34:48.963 | DEBUG | [] +2025-01-24 17:34:49.962 | DEBUG | [] +2025-01-24 17:34:50.964 | DEBUG | [] +2025-01-24 17:34:51.963 | DEBUG | [] +2025-01-24 17:34:52.963 | DEBUG | [] +2025-01-24 17:34:53.963 | DEBUG | [] +2025-01-24 17:34:54.962 | DEBUG | [] +2025-01-24 17:34:55.963 | DEBUG | [] +2025-01-24 17:34:56.961 | DEBUG | [] +2025-01-24 17:34:57.963 | DEBUG | [] +2025-01-24 17:34:58.963 | DEBUG | [] +2025-01-24 17:34:59.963 | DEBUG | [] +2025-01-24 17:35:00.962 | DEBUG | [] +2025-01-24 17:35:01.962 | DEBUG | [] +2025-01-24 17:35:02.962 | DEBUG | [] +2025-01-24 17:35:03.962 | DEBUG | [] +2025-01-24 17:35:04.962 | DEBUG | [] +2025-01-24 17:35:05.963 | DEBUG | [] +2025-01-24 17:35:06.962 | DEBUG | [] +2025-01-24 17:35:07.962 | DEBUG | [] +2025-01-24 17:35:08.963 | DEBUG | [] +2025-01-24 17:35:09.961 | DEBUG | [] +2025-01-24 17:35:10.964 | DEBUG | [] +2025-01-24 17:35:11.961 | DEBUG | [] +2025-01-24 17:35:12.963 | DEBUG | [] +2025-01-24 17:35:13.962 | DEBUG | [] +2025-01-24 17:35:14.962 | DEBUG | [] +2025-01-24 17:35:16.252 | DEBUG | [] +2025-01-24 17:35:16.961 | DEBUG | [] +2025-01-24 17:35:17.961 | DEBUG | [] +2025-01-24 17:35:18.962 | DEBUG | [] +2025-01-24 17:35:19.970 | DEBUG | [] +2025-01-24 17:35:20.963 | DEBUG | [] +2025-01-24 17:35:21.962 | DEBUG | [] +2025-01-24 17:35:22.962 | DEBUG | [] +2025-01-24 17:35:23.961 | DEBUG | [] +2025-01-24 17:35:24.962 | DEBUG | [] +2025-01-24 17:35:25.961 | DEBUG | [] +2025-01-24 17:35:26.962 | DEBUG | [] +2025-01-24 17:35:27.962 | DEBUG | [] +2025-01-24 17:35:28.962 | DEBUG | [] +2025-01-24 17:35:29.961 | DEBUG | [] +2025-01-24 17:35:30.962 | DEBUG | [] +2025-01-24 17:35:31.961 | DEBUG | [] +2025-01-24 17:35:32.962 | DEBUG | [] +2025-01-24 17:35:33.961 | DEBUG | [] +2025-01-24 17:35:34.963 | DEBUG | [] +2025-01-24 17:35:35.964 | DEBUG | [] +2025-01-24 17:35:36.962 | DEBUG | [] +2025-01-24 17:35:37.961 | DEBUG | [] +2025-01-24 17:35:38.963 | DEBUG | [] +2025-01-24 17:35:39.964 | INFO | 按时间调起任务:调度队列_2 +2025-01-24 17:35:39.964 | INFO | 任务开始:调度队列_2 +2025-01-24 17:35:39.983 | DEBUG | ['调度队列_2'] +2025-01-24 17:35:39.985 | INFO | 任务开始:脚本_1 +2025-01-24 19:29:43.140 | INFO | 日志记录器初始化完成 +2025-01-24 19:29:43.141 | INFO | 配置类初始化完成 +2025-01-24 19:29:43.141 | INFO | 程序配置管理模块初始化完成 +2025-01-24 19:29:44.824 | DEBUG | [] +2025-01-24 19:29:45.825 | DEBUG | [] +2025-01-24 19:29:46.823 | DEBUG | [] +2025-01-24 19:29:47.823 | DEBUG | [] +2025-01-24 19:29:48.829 | DEBUG | [] +2025-01-24 19:29:49.826 | DEBUG | [] +2025-01-24 19:29:50.825 | DEBUG | [] +2025-01-24 19:29:51.823 | DEBUG | [] +2025-01-24 19:29:52.825 | DEBUG | [] +2025-01-24 19:29:53.823 | DEBUG | [] +2025-01-24 19:29:54.823 | DEBUG | [] +2025-01-24 19:29:55.823 | DEBUG | [] +2025-01-24 19:29:56.823 | DEBUG | [] +2025-01-24 19:29:57.823 | DEBUG | [] +2025-01-24 19:29:58.823 | DEBUG | [] +2025-01-24 19:29:59.823 | DEBUG | [] +2025-01-24 19:30:00.822 | DEBUG | [] +2025-01-24 19:30:01.827 | DEBUG | [] +2025-01-24 19:30:02.824 | DEBUG | [] +2025-01-24 19:30:03.823 | DEBUG | [] +2025-01-24 19:30:04.823 | DEBUG | [] +2025-01-24 19:30:05.821 | DEBUG | [] +2025-01-24 19:30:06.822 | DEBUG | [] +2025-01-24 19:30:07.829 | DEBUG | [] +2025-01-24 19:30:08.821 | DEBUG | [] +2025-01-24 19:30:09.822 | DEBUG | [] +2025-01-24 19:30:10.821 | DEBUG | [] +2025-01-24 19:30:12.156 | DEBUG | [] +2025-01-24 19:30:12.827 | DEBUG | [] +2025-01-24 19:30:13.826 | DEBUG | [] +2025-01-24 19:30:14.826 | DEBUG | [] +2025-01-24 19:30:15.823 | DEBUG | [] +2025-01-24 19:30:16.827 | DEBUG | [] +2025-01-24 19:30:17.827 | DEBUG | [] +2025-01-24 19:30:18.822 | DEBUG | [] +2025-01-24 19:30:19.824 | INFO | 按时间调起任务:调度队列_2 +2025-01-24 19:30:19.825 | INFO | 任务开始:调度队列_2 +2025-01-24 19:30:19.849 | DEBUG | ['调度队列_2'] +2025-01-24 19:30:19.850 | INFO | 任务开始:脚本_1 +2025-01-24 19:30:31.167 | DEBUG | ['调度队列_2', '脚本_1'] +2025-01-24 19:30:31.824 | DEBUG | ['调度队列_2', '脚本_1'] +2025-01-24 19:30:32.823 | DEBUG | ['调度队列_2', '脚本_1'] +2025-01-24 19:30:33.823 | DEBUG | ['调度队列_2', '脚本_1'] +2025-01-24 19:30:34.823 | DEBUG | ['调度队列_2', '脚本_1'] +2025-01-24 19:30:49.200 | INFO | 日志记录器初始化完成 +2025-01-24 19:30:49.200 | INFO | 配置类初始化完成 +2025-01-24 19:30:49.200 | INFO | 程序配置管理模块初始化完成 +2025-01-24 19:30:50.821 | INFO | 按时间调起任务:调度队列_2 +2025-01-24 19:30:50.822 | INFO | 任务开始:调度队列_2 +2025-01-24 19:30:50.842 | DEBUG | ['调度队列_2'] +2025-01-24 19:30:50.843 | INFO | 任务开始:脚本_1 +2025-01-24 19:34:42.818 | INFO | 日志记录器初始化完成 +2025-01-24 19:34:42.819 | INFO | 配置类初始化完成 +2025-01-24 19:34:42.819 | INFO | 程序配置管理模块初始化完成 +2025-01-24 19:34:44.402 | DEBUG | [] +2025-01-24 19:34:45.402 | DEBUG | [] +2025-01-24 19:34:46.526 | DEBUG | [] +2025-01-24 19:34:47.402 | DEBUG | [] +2025-01-24 19:34:48.403 | DEBUG | [] +2025-01-24 19:34:49.402 | DEBUG | [] +2025-01-24 19:34:50.404 | DEBUG | [] +2025-01-24 19:34:51.062 | WARNING | 选择MAA目录时未选择文件夹或未更改文件夹 +2025-01-24 19:34:51.400 | DEBUG | [] +2025-01-24 19:34:52.402 | DEBUG | [] +2025-01-24 19:34:53.401 | DEBUG | [] +2025-01-24 19:34:54.403 | DEBUG | [] +2025-01-24 19:34:55.401 | DEBUG | [] +2025-01-24 19:34:56.400 | DEBUG | [] +2025-01-24 19:34:57.402 | DEBUG | [] +2025-01-24 19:34:58.400 | DEBUG | [] +2025-01-24 19:34:59.399 | DEBUG | [] +2025-01-24 19:35:00.402 | DEBUG | [] +2025-01-24 19:35:01.400 | DEBUG | [] +2025-01-24 19:35:02.611 | DEBUG | [] +2025-01-24 19:35:03.400 | DEBUG | [] +2025-01-24 19:35:04.400 | DEBUG | [] +2025-01-24 19:35:05.400 | DEBUG | [] +2025-01-24 19:35:06.400 | DEBUG | [] +2025-01-24 19:35:07.407 | DEBUG | [] +2025-01-24 19:35:08.400 | DEBUG | [] +2025-01-24 19:35:09.402 | DEBUG | [] +2025-01-24 19:35:10.406 | DEBUG | [] +2025-01-24 19:35:11.473 | DEBUG | [] +2025-01-24 19:35:12.400 | DEBUG | [] +2025-01-24 19:35:13.400 | DEBUG | [] +2025-01-24 19:35:14.399 | DEBUG | [] +2025-01-24 19:35:15.402 | DEBUG | [] +2025-01-24 19:35:16.402 | DEBUG | [] +2025-01-24 19:35:17.406 | DEBUG | [] +2025-01-24 19:35:18.402 | DEBUG | [] +2025-01-24 19:35:19.401 | INFO | 按时间调起任务:调度队列_2 +2025-01-24 19:35:19.401 | INFO | 任务开始:调度队列_2 +2025-01-24 19:35:19.422 | DEBUG | ['调度队列_2'] +2025-01-24 19:35:19.423 | INFO | 任务开始:脚本_1 +2025-01-24 19:35:20.412 | DEBUG | ['调度队列_2', '脚本_1'] +2025-01-24 19:35:21.400 | DEBUG | ['调度队列_2', '脚本_1'] +2025-01-24 19:35:22.404 | INFO | 按时间调起任务:调度队列_1 +2025-01-24 19:35:22.404 | INFO | 任务开始:调度队列_1 +2025-01-24 19:35:22.426 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1'] +2025-01-24 19:35:22.428 | INFO | 任务开始:脚本_2 +2025-01-24 19:35:23.403 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:35:24.400 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:35:25.530 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:35:26.400 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:35:27.399 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:35:28.464 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:35:29.403 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:35:30.401 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:35:31.543 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:35:32.399 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:35:33.398 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:35:34.450 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:35:35.401 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:35:36.399 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:35:37.515 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:35:38.447 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:35:39.401 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:35:40.402 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:35:41.471 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:35:42.400 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:35:43.406 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:35:44.511 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:35:45.407 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:35:46.401 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:35:47.466 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:35:48.400 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:35:49.400 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:35:50.509 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:35:51.490 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:35:52.400 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:35:53.400 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:35:54.460 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:35:55.401 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:35:56.399 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:35:57.545 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:35:58.400 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:35:59.399 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:36:00.406 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:36:01.488 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:36:02.405 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:36:03.405 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:36:04.536 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:36:05.405 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:36:06.404 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:36:07.421 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:36:08.404 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:36:09.401 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:36:10.480 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:36:11.478 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:36:12.402 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:36:13.405 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:36:14.196 | INFO | 中止任务:调度队列_1 +2025-01-24 19:36:14.200 | INFO | 申请中止本次任务 +2025-01-24 19:36:16.870 | INFO | 任务完成:脚本_2 +2025-01-24 19:36:16.874 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1'] +2025-01-24 19:36:16.879 | INFO | 任务结束:调度队列_1 +2025-01-24 19:36:17.402 | DEBUG | ['调度队列_2', '脚本_1'] +2025-01-24 19:36:18.190 | INFO | 中止任务:调度队列_2 +2025-01-24 19:36:18.194 | INFO | 申请中止本次任务 +2025-01-24 19:36:21.068 | INFO | 任务完成:脚本_1 +2025-01-24 19:36:21.070 | DEBUG | ['调度队列_2'] +2025-01-24 19:36:21.075 | INFO | 任务结束:调度队列_2 +2025-01-24 19:36:21.402 | DEBUG | [] +2025-01-24 19:36:22.402 | DEBUG | [] +2025-01-24 19:36:23.400 | DEBUG | [] +2025-01-24 19:36:24.401 | DEBUG | [] +2025-01-24 19:36:25.400 | DEBUG | [] +2025-01-24 19:36:26.403 | DEBUG | [] +2025-01-24 19:36:27.402 | DEBUG | [] +2025-01-24 19:36:28.400 | DEBUG | [] +2025-01-24 19:36:29.401 | DEBUG | [] +2025-01-24 19:36:30.402 | DEBUG | [] +2025-01-24 19:36:31.402 | DEBUG | [] +2025-01-24 19:36:32.400 | DEBUG | [] +2025-01-24 19:36:33.805 | DEBUG | [] +2025-01-24 19:36:34.400 | DEBUG | [] +2025-01-24 19:36:35.413 | DEBUG | [] +2025-01-24 19:36:36.401 | DEBUG | [] +2025-01-24 19:36:37.400 | DEBUG | [] +2025-01-24 19:36:38.410 | DEBUG | [] +2025-01-24 19:36:39.401 | DEBUG | [] +2025-01-24 19:36:40.400 | DEBUG | [] +2025-01-24 19:36:41.399 | DEBUG | [] +2025-01-24 19:36:42.399 | DEBUG | [] +2025-01-24 19:36:43.403 | DEBUG | [] +2025-01-24 19:36:44.399 | DEBUG | [] +2025-01-24 19:36:45.401 | DEBUG | [] +2025-01-24 19:36:46.405 | DEBUG | [] +2025-01-24 19:36:47.399 | DEBUG | [] +2025-01-24 19:36:48.403 | DEBUG | [] +2025-01-24 19:36:49.406 | DEBUG | [] +2025-01-24 19:36:50.405 | INFO | 按时间调起任务:调度队列_1 +2025-01-24 19:36:50.406 | INFO | 任务开始:调度队列_1 +2025-01-24 19:36:50.429 | DEBUG | ['调度队列_1'] +2025-01-24 19:36:50.430 | INFO | 任务开始:脚本_2 +2025-01-24 19:36:51.407 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 19:36:52.403 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 19:36:53.427 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 19:36:54.401 | INFO | 按时间调起任务:调度队列_2 +2025-01-24 19:36:54.401 | INFO | 任务开始:调度队列_2 +2025-01-24 19:36:54.420 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2'] +2025-01-24 19:36:54.422 | INFO | 任务开始:脚本_1 +2025-01-24 19:36:55.403 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:36:56.445 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:36:57.400 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:36:58.398 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:36:59.707 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:37:00.405 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:37:01.400 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:37:02.399 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:37:03.495 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:37:04.401 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:37:05.405 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:37:06.719 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:37:07.400 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:37:08.400 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:37:09.463 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:37:10.398 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:37:11.400 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:37:12.416 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:37:13.823 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:37:14.399 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:37:15.401 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:37:16.503 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:37:17.400 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:37:18.400 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:37:19.541 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:37:20.400 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:37:21.400 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:37:22.452 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:37:23.400 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:37:24.400 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:37:25.413 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:37:26.574 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:37:27.400 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:37:28.400 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:37:29.462 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:37:30.403 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:37:31.400 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:37:32.400 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:37:33.429 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:37:34.398 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:37:35.399 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:37:36.498 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:37:37.400 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:37:38.400 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:37:39.403 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:37:40.457 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:37:41.405 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:37:42.404 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:37:43.404 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:37:44.398 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:37:45.400 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:37:46.400 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:37:47.400 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:37:48.400 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:37:49.512 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:37:50.401 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:37:51.401 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:37:52.399 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:37:53.054 | INFO | 任务完成:脚本_2 +2025-01-24 19:37:53.055 | INFO | 跳过任务:脚本_1 +2025-01-24 19:37:53.064 | INFO | 任务结束:调度队列_1 +2025-01-24 19:37:53.400 | DEBUG | ['调度队列_2', '脚本_1'] +2025-01-24 19:37:54.399 | DEBUG | ['调度队列_2', '脚本_1'] +2025-01-24 19:37:55.400 | DEBUG | ['调度队列_2', '脚本_1'] +2025-01-24 19:37:56.430 | DEBUG | ['调度队列_2', '脚本_1'] +2025-01-24 19:37:57.401 | DEBUG | ['调度队列_2', '脚本_1'] +2025-01-24 19:37:58.400 | DEBUG | ['调度队列_2', '脚本_1'] +2025-01-24 19:37:59.400 | DEBUG | ['调度队列_2', '脚本_1'] +2025-01-24 19:38:00.399 | DEBUG | ['调度队列_2', '脚本_1'] +2025-01-24 19:38:01.401 | DEBUG | ['调度队列_2', '脚本_1'] +2025-01-24 19:38:02.399 | DEBUG | ['调度队列_2', '脚本_1'] +2025-01-24 19:38:03.399 | DEBUG | ['调度队列_2', '脚本_1'] +2025-01-24 19:38:04.513 | DEBUG | ['调度队列_2', '脚本_1'] +2025-01-24 19:38:05.400 | DEBUG | ['调度队列_2', '脚本_1'] +2025-01-24 19:38:06.399 | DEBUG | ['调度队列_2', '脚本_1'] +2025-01-24 19:38:07.401 | DEBUG | ['调度队列_2', '脚本_1'] +2025-01-24 19:38:08.452 | DEBUG | ['调度队列_2', '脚本_1'] +2025-01-24 19:38:09.399 | DEBUG | ['调度队列_2', '脚本_1'] +2025-01-24 19:38:10.407 | DEBUG | ['调度队列_2', '脚本_1'] +2025-01-24 19:38:11.453 | DEBUG | ['调度队列_2', '脚本_1'] +2025-01-24 19:38:12.401 | DEBUG | ['调度队列_2', '脚本_1'] +2025-01-24 19:38:13.399 | DEBUG | ['调度队列_2', '脚本_1'] +2025-01-24 19:38:14.400 | DEBUG | ['调度队列_2', '脚本_1'] +2025-01-24 19:38:15.400 | DEBUG | ['调度队列_2', '脚本_1'] +2025-01-24 19:38:16.399 | DEBUG | ['调度队列_2', '脚本_1'] +2025-01-24 19:38:17.399 | DEBUG | ['调度队列_2', '脚本_1'] +2025-01-24 19:38:18.398 | INFO | 按时间调起任务:调度队列_1 +2025-01-24 19:38:18.399 | INFO | 任务开始:调度队列_1 +2025-01-24 19:38:18.423 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1'] +2025-01-24 19:38:18.423 | INFO | 任务开始:脚本_2 +2025-01-24 19:38:19.507 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:38:20.398 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:38:21.484 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:38:22.401 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:38:23.401 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:38:24.499 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:38:25.466 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:38:26.401 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:38:27.456 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:38:28.405 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:38:29.402 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:38:30.438 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:38:31.401 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:38:32.403 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:38:33.402 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:38:34.402 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:38:35.402 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:38:36.403 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:38:37.403 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:38:38.496 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:38:39.402 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:38:40.402 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:38:41.401 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:38:42.402 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:38:43.401 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:38:44.307 | INFO | 任务完成:脚本_2 +2025-01-24 19:38:44.308 | INFO | 跳过任务:脚本_1 +2025-01-24 19:38:44.308 | INFO | 任务开始:脚本_2 +2025-01-24 19:38:44.526 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:38:45.437 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:38:46.402 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:38:47.483 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:38:48.401 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:38:49.400 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:38:50.482 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:38:51.400 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:38:52.513 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:38:53.401 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:38:54.439 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:38:55.405 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:38:56.401 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:38:57.488 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:38:58.428 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:38:59.405 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:39:00.403 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:39:01.440 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:39:02.400 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:39:03.399 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:39:04.458 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:39:05.490 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:39:06.401 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:39:07.455 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:39:08.399 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:39:09.400 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:39:10.468 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:39:11.454 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:39:12.399 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:39:13.401 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:39:14.460 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:39:15.400 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:45:24.775 | INFO | 日志记录器初始化完成 +2025-01-24 19:45:24.775 | INFO | 配置类初始化完成 +2025-01-24 19:45:24.775 | INFO | 程序配置管理模块初始化完成 +2025-01-24 19:45:26.388 | DEBUG | [] +2025-01-24 19:45:27.386 | DEBUG | [] +2025-01-24 19:45:28.392 | DEBUG | [] +2025-01-24 19:45:29.387 | DEBUG | [] +2025-01-24 19:45:30.384 | DEBUG | [] +2025-01-24 19:45:31.389 | DEBUG | [] +2025-01-24 19:45:32.393 | DEBUG | [] +2025-01-24 19:45:33.388 | INFO | 按时间调起任务:调度队列_1 +2025-01-24 19:45:33.388 | INFO | 任务开始:调度队列_1 +2025-01-24 19:45:33.413 | DEBUG | ['调度队列_1'] +2025-01-24 19:45:33.415 | INFO | 任务开始:脚本_2 +2025-01-24 19:45:33.422 | DEBUG | [] +2025-01-24 19:45:33.422 | DEBUG | [] +2025-01-24 19:45:34.385 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 19:45:35.385 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 19:45:36.418 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 19:45:37.387 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 19:45:38.387 | INFO | 按时间调起任务:调度队列_2 +2025-01-24 19:45:38.389 | INFO | 任务开始:调度队列_2 +2025-01-24 19:45:38.409 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2'] +2025-01-24 19:45:38.410 | INFO | 任务开始:脚本_1 +2025-01-24 19:45:38.417 | DEBUG | [] +2025-01-24 19:45:38.417 | DEBUG | [] +2025-01-24 19:45:39.416 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:45:40.386 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:45:41.386 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:45:42.386 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:45:43.442 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:45:44.383 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:45:45.387 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:45:46.437 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:45:47.386 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:45:48.388 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:45:49.533 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:45:50.395 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:45:51.383 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:45:52.385 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:45:53.445 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:45:54.385 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:45:55.385 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:45:56.385 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:45:57.384 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:45:58.385 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:45:59.385 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:46:00.385 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:46:01.386 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:46:02.383 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:46:03.383 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:46:04.384 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:46:05.390 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] +2025-01-24 19:46:06.185 | INFO | 任务完成:脚本_2 +2025-01-24 19:46:06.198 | INFO | 跳过任务:脚本_1 +2025-01-24 19:46:06.207 | INFO | 任务开始:脚本_2 +2025-01-24 19:46:06.233 | DEBUG | [] +2025-01-24 19:46:06.235 | DEBUG | [] +2025-01-24 19:46:06.463 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:46:07.384 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:46:08.535 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:46:09.420 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:46:10.383 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:46:11.387 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:46:12.463 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:46:13.386 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:46:14.383 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:46:15.383 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:46:16.445 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:46:17.385 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:46:18.389 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:46:19.450 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:46:20.471 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:46:21.388 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:46:22.393 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:46:23.536 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:46:24.385 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:46:25.511 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:46:26.388 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:46:27.403 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:46:28.459 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:46:29.387 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:46:30.478 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:46:31.385 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:46:32.411 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:46:33.398 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:46:34.384 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:46:35.404 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:46:36.387 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:46:37.393 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:46:38.388 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:46:39.388 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:46:40.390 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:46:41.385 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:46:42.394 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:46:43.399 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:46:44.399 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:46:45.387 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:46:46.387 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:46:47.387 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:46:48.389 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:46:49.384 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:46:50.391 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:46:51.385 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:46:52.394 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:46:53.388 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:46:54.386 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:46:55.402 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:46:56.383 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:46:57.422 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:46:58.393 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:46:59.405 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:47:00.407 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:47:01.397 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:47:02.386 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:47:03.388 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:47:04.424 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:47:05.389 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:47:06.388 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:47:07.397 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:47:08.391 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:47:09.393 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:47:10.397 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:47:11.387 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:47:12.393 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:47:13.393 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:47:14.385 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:47:15.406 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:47:16.406 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:47:17.387 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:47:18.547 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:47:19.389 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:47:20.385 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:47:21.423 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:47:22.385 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:47:23.429 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:47:24.390 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:47:25.397 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:47:26.406 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:47:27.439 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:47:28.384 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] +2025-01-24 19:47:53.400 | INFO | 日志记录器初始化完成 +2025-01-24 19:47:53.400 | INFO | 配置类初始化完成 +2025-01-24 19:47:53.401 | INFO | 程序配置管理模块初始化完成 +2025-01-24 19:47:54.962 | DEBUG | [] +2025-01-24 19:47:55.961 | DEBUG | [] +2025-01-24 19:47:56.962 | DEBUG | [] +2025-01-24 19:47:57.963 | DEBUG | [] +2025-01-24 19:47:58.965 | DEBUG | [] +2025-01-24 19:47:59.963 | DEBUG | [] +2025-01-24 19:48:00.961 | DEBUG | [] +2025-01-24 19:48:01.967 | DEBUG | [] +2025-01-24 19:48:02.969 | DEBUG | [] +2025-01-24 19:48:03.963 | INFO | 按时间调起任务:调度队列_2 +2025-01-24 19:48:03.963 | INFO | 任务开始:调度队列_2 +2025-01-24 19:48:03.986 | DEBUG | ['调度队列_2'] +2025-01-24 19:48:03.987 | INFO | 任务开始:脚本_1 +2025-01-24 19:48:03.992 | DEBUG | [] +2025-01-24 19:48:03.992 | DEBUG | [] +2025-01-24 19:48:04.963 | DEBUG | ['调度队列_2', '脚本_1'] +2025-01-24 19:48:05.963 | DEBUG | ['调度队列_2', '脚本_1'] +2025-01-24 19:48:06.966 | DEBUG | ['调度队列_2', '脚本_1'] +2025-01-24 19:48:07.965 | DEBUG | ['调度队列_2', '脚本_1'] +2025-01-24 19:48:08.965 | DEBUG | ['调度队列_2', '脚本_1'] +2025-01-24 19:48:09.963 | DEBUG | ['调度队列_2', '脚本_1'] +2025-01-24 19:48:10.967 | DEBUG | ['调度队列_2', '脚本_1'] +2025-01-24 19:48:11.967 | DEBUG | ['调度队列_2', '脚本_1'] +2025-01-24 19:48:12.967 | DEBUG | ['调度队列_2', '脚本_1'] +2025-01-24 19:48:13.963 | DEBUG | ['调度队列_2', '脚本_1'] +2025-01-24 19:48:14.963 | DEBUG | ['调度队列_2', '脚本_1'] +2025-01-24 19:48:16.026 | DEBUG | ['调度队列_2', '脚本_1'] +2025-01-24 19:48:16.967 | DEBUG | ['调度队列_2', '脚本_1'] +2025-01-24 19:48:17.965 | DEBUG | ['调度队列_2', '脚本_1'] +2025-01-24 19:48:18.966 | DEBUG | ['调度队列_2', '脚本_1'] +2025-01-24 19:48:19.965 | INFO | 按时间调起任务:调度队列_1 +2025-01-24 19:48:19.967 | INFO | 任务开始:调度队列_1 +2025-01-24 19:48:19.988 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1'] +2025-01-24 19:48:19.990 | INFO | 任务开始:脚本_2 +2025-01-24 19:48:19.998 | DEBUG | [] +2025-01-24 19:48:19.998 | DEBUG | [] +2025-01-24 19:48:20.965 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:48:21.964 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:48:23.032 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:48:23.963 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:48:24.966 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:48:26.069 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:48:26.965 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:48:27.962 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:48:28.965 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:48:29.963 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:48:30.963 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:48:31.965 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:48:32.971 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:48:33.964 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:48:34.964 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:48:35.966 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:48:36.965 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:48:37.963 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:48:38.965 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:48:39.874 | INFO | 任务完成:脚本_2 +2025-01-24 19:48:39.877 | INFO | 跳过任务:脚本_1 +2025-01-24 19:48:39.877 | INFO | 任务开始:脚本_2 +2025-01-24 19:48:39.902 | DEBUG | [] +2025-01-24 19:48:39.902 | DEBUG | [] +2025-01-24 19:48:40.042 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:48:41.047 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:48:41.962 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:48:43.019 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:48:43.966 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:48:44.963 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:48:46.022 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] +2025-01-24 19:49:00.228 | INFO | 日志记录器初始化完成 +2025-01-24 19:49:00.228 | INFO | 配置类初始化完成 +2025-01-24 19:49:00.228 | INFO | 程序配置管理模块初始化完成 +2025-01-24 19:49:01.806 | DEBUG | [] +2025-01-24 19:49:02.808 | DEBUG | [] +2025-01-24 19:49:03.806 | DEBUG | [] +2025-01-24 19:49:04.807 | DEBUG | [] +2025-01-24 19:49:05.810 | DEBUG | [] +2025-01-24 19:49:06.808 | DEBUG | [] +2025-01-24 19:49:07.806 | DEBUG | [] +2025-01-24 19:49:08.807 | DEBUG | [] +2025-01-24 19:49:09.807 | DEBUG | [] +2025-01-24 19:49:10.806 | DEBUG | [] +2025-01-24 19:49:11.807 | INFO | 按时间调起任务:调度队列_1 +2025-01-24 19:49:11.808 | INFO | 任务开始:调度队列_1 +2025-01-24 19:49:11.832 | DEBUG | ['调度队列_1'] +2025-01-24 19:49:11.833 | INFO | 任务开始:脚本_2 +2025-01-24 19:49:11.841 | DEBUG | [] +2025-01-24 19:49:11.841 | DEBUG | [] +2025-01-24 19:49:12.808 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 19:49:13.811 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 19:49:14.933 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 19:49:15.807 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 19:49:16.808 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 19:49:17.806 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 19:49:18.807 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 19:49:19.808 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 19:49:20.808 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 19:49:21.807 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 19:49:22.808 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 19:49:23.806 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 19:49:24.806 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 19:49:25.806 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 19:49:26.807 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 19:49:27.434 | INFO | 任务完成:脚本_2 +2025-01-24 19:49:27.435 | INFO | 任务开始:脚本_1 +2025-01-24 19:49:27.448 | DEBUG | [] +2025-01-24 19:49:27.449 | DEBUG | [] +2025-01-24 19:49:27.805 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:49:28.807 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:49:29.922 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:49:30.806 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:49:31.807 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:49:32.807 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:49:33.808 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:49:34.807 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:49:35.806 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:49:36.863 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:49:37.806 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:49:38.809 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:49:39.808 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:49:40.810 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:49:41.808 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:49:42.807 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:49:43.807 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:49:44.871 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:49:45.807 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:49:46.807 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:49:47.807 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:49:48.807 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:49:49.807 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:49:50.808 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:49:51.835 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:49:52.808 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:49:53.808 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:49:54.809 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:49:55.806 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:51:23.102 | INFO | 日志记录器初始化完成 +2025-01-24 19:51:23.102 | INFO | 配置类初始化完成 +2025-01-24 19:51:23.102 | INFO | 程序配置管理模块初始化完成 +2025-01-24 19:51:24.717 | DEBUG | [] +2025-01-24 19:51:25.714 | DEBUG | [] +2025-01-24 19:51:26.712 | DEBUG | [] +2025-01-24 19:51:27.893 | DEBUG | [] +2025-01-24 19:51:28.714 | DEBUG | [] +2025-01-24 19:51:29.714 | DEBUG | [] +2025-01-24 19:51:30.713 | DEBUG | [] +2025-01-24 19:51:31.713 | INFO | 按时间调起任务:调度队列_1 +2025-01-24 19:51:31.714 | INFO | 任务开始:调度队列_1 +2025-01-24 19:51:31.735 | DEBUG | ['调度队列_1'] +2025-01-24 19:51:31.735 | INFO | 任务开始:脚本_2 +2025-01-24 19:51:32.712 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 19:51:33.713 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 19:51:34.774 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 19:51:35.715 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 19:51:36.715 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 19:51:37.716 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 19:51:38.712 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 19:51:39.716 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 19:51:40.715 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 19:51:41.716 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 19:51:42.713 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 19:51:43.715 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 19:51:44.714 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 19:51:45.715 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 19:51:46.715 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-24 19:51:47.382 | INFO | 任务完成:脚本_2 +2025-01-24 19:51:47.383 | INFO | 任务开始:脚本_1 +2025-01-24 19:51:47.713 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:51:48.718 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:51:49.712 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:51:50.713 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:51:51.713 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:51:52.713 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:51:53.713 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:51:54.713 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:51:55.712 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:51:56.796 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:51:57.716 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:51:58.716 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:51:59.712 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:52:00.712 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:52:01.716 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:52:02.715 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:52:03.742 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:52:04.713 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:52:05.712 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:52:06.714 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:52:07.713 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:52:08.712 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:52:09.715 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:52:10.716 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:52:11.715 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:52:12.713 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:52:13.713 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:52:14.712 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:52:15.715 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:52:16.713 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:52:17.715 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:52:18.715 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:52:19.714 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:52:20.711 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:52:21.772 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:52:22.715 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:52:23.713 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:52:24.715 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:52:25.715 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:52:26.712 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:52:27.714 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:52:28.721 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:52:29.808 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:52:30.715 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:52:31.714 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:52:32.714 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:52:33.715 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:52:34.714 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:52:35.713 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:52:36.713 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:52:37.714 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-24 19:52:38.544 | INFO | 中止任务:调度队列_1 +2025-01-24 19:52:38.547 | INFO | 申请中止本次任务 +2025-01-24 19:52:41.592 | INFO | 任务完成:脚本_1 +2025-01-24 19:52:41.594 | DEBUG | ['调度队列_1'] +2025-01-24 19:52:41.597 | INFO | 任务结束:调度队列_1 +2025-01-24 19:52:41.715 | DEBUG | [] +2025-01-24 19:52:42.713 | DEBUG | [] +2025-01-24 19:52:43.718 | DEBUG | [] +2025-01-24 19:52:44.712 | DEBUG | [] +2025-01-24 19:52:45.713 | DEBUG | [] +2025-01-24 19:52:46.716 | DEBUG | [] +2025-01-24 19:52:47.713 | DEBUG | [] +2025-01-24 19:52:48.715 | DEBUG | [] +2025-01-24 19:52:49.712 | DEBUG | [] +2025-01-24 19:52:50.714 | DEBUG | [] +2025-01-24 19:52:51.715 | DEBUG | [] +2025-01-24 19:52:52.713 | DEBUG | [] +2025-01-24 19:52:53.717 | DEBUG | [] +2025-01-24 19:52:54.715 | DEBUG | [] +2025-01-24 19:52:55.715 | DEBUG | [] +2025-01-24 19:52:56.715 | DEBUG | [] +2025-01-24 19:52:57.712 | DEBUG | [] +2025-01-24 19:52:58.714 | DEBUG | [] +2025-01-24 19:52:59.715 | DEBUG | [] +2025-01-24 19:53:00.712 | DEBUG | [] +2025-01-24 19:53:01.715 | DEBUG | [] +2025-01-24 19:53:02.712 | DEBUG | [] +2025-01-24 19:53:03.714 | DEBUG | [] +2025-01-24 19:53:04.716 | DEBUG | [] +2025-01-24 19:53:05.715 | DEBUG | [] +2025-01-24 19:53:06.716 | DEBUG | [] +2025-01-24 19:53:07.715 | DEBUG | [] +2025-01-24 19:53:08.716 | DEBUG | [] +2025-01-24 19:53:09.715 | DEBUG | [] +2025-01-24 19:53:10.713 | DEBUG | [] +2025-01-24 19:53:11.713 | DEBUG | [] +2025-01-24 19:53:12.714 | DEBUG | [] +2025-01-24 19:53:13.713 | DEBUG | [] +2025-01-24 19:53:14.715 | DEBUG | [] +2025-01-24 19:53:15.713 | DEBUG | [] +2025-01-24 19:53:16.715 | DEBUG | [] +2025-01-24 19:53:17.715 | DEBUG | [] +2025-01-24 19:53:18.715 | DEBUG | [] +2025-01-24 19:53:19.715 | DEBUG | [] +2025-01-24 19:53:20.715 | DEBUG | [] +2025-01-24 19:53:21.716 | DEBUG | [] +2025-01-24 19:53:22.712 | DEBUG | [] +2025-01-24 19:53:23.714 | DEBUG | [] +2025-01-24 19:53:24.712 | DEBUG | [] +2025-01-24 19:53:25.713 | DEBUG | [] +2025-01-24 19:53:26.713 | DEBUG | [] +2025-01-24 19:53:27.713 | DEBUG | [] +2025-01-24 19:53:28.719 | DEBUG | [] +2025-01-24 19:53:29.712 | DEBUG | [] +2025-01-24 19:57:18.926 | INFO | 日志记录器初始化完成 +2025-01-24 19:57:18.926 | INFO | 配置类初始化完成 +2025-01-24 19:57:18.927 | INFO | 程序配置管理模块初始化完成 +2025-01-24 19:57:20.525 | DEBUG | [] +2025-01-24 19:57:21.525 | DEBUG | [] +2025-01-24 19:57:22.671 | DEBUG | [] +2025-01-24 19:57:23.523 | DEBUG | [] +2025-01-24 19:57:24.525 | DEBUG | [] +2025-01-24 19:57:25.525 | DEBUG | [] +2025-01-24 19:57:26.527 | DEBUG | [] +2025-01-24 19:57:27.527 | DEBUG | [] +2025-01-24 19:57:28.523 | DEBUG | [] +2025-01-24 19:57:29.526 | DEBUG | [] +2025-01-24 19:57:30.523 | DEBUG | [] +2025-01-24 19:57:31.526 | DEBUG | [] +2025-01-24 19:57:32.526 | DEBUG | [] +2025-01-24 19:57:33.532 | DEBUG | [] +2025-01-24 19:57:34.526 | DEBUG | [] +2025-01-24 19:57:35.527 | DEBUG | [] +2025-01-24 19:57:36.523 | DEBUG | [] +2025-01-24 19:57:37.525 | DEBUG | [] +2025-01-24 19:57:38.525 | DEBUG | [] +2025-01-24 19:57:39.526 | DEBUG | [] +2025-01-24 19:57:40.523 | DEBUG | [] +2025-01-24 19:57:41.525 | DEBUG | [] +2025-01-24 19:57:42.525 | DEBUG | [] +2025-01-24 19:57:43.527 | DEBUG | [] +2025-01-24 19:57:44.526 | DEBUG | [] +2025-01-24 19:57:45.526 | DEBUG | [] +2025-01-24 19:57:46.523 | DEBUG | [] +2025-01-24 19:57:47.527 | DEBUG | [] +2025-01-24 19:57:48.525 | DEBUG | [] +2025-01-24 19:57:49.526 | DEBUG | [] +2025-01-24 19:57:50.525 | DEBUG | [] +2025-01-24 19:57:51.526 | DEBUG | [] +2025-01-24 19:57:52.527 | DEBUG | [] +2025-01-24 19:57:53.526 | DEBUG | [] +2025-01-24 19:57:54.526 | DEBUG | [] +2025-01-24 19:57:55.526 | DEBUG | [] +2025-01-24 19:57:56.525 | DEBUG | [] +2025-01-24 19:57:57.523 | DEBUG | [] +2025-01-24 19:57:58.525 | DEBUG | [] +2025-01-24 19:57:59.526 | DEBUG | [] +2025-01-24 19:58:00.524 | DEBUG | [] +2025-01-24 19:58:01.523 | DEBUG | [] +2025-01-24 19:58:02.525 | DEBUG | [] +2025-01-24 19:58:03.525 | DEBUG | [] +2025-01-24 19:58:04.525 | DEBUG | [] +2025-01-24 19:58:05.523 | DEBUG | [] +2025-01-24 19:58:06.526 | DEBUG | [] +2025-01-24 19:58:07.526 | DEBUG | [] +2025-01-24 19:58:08.527 | DEBUG | [] +2025-01-24 19:58:09.527 | DEBUG | [] +2025-01-24 19:58:10.527 | DEBUG | [] +2025-01-24 19:58:11.524 | DEBUG | [] +2025-01-24 19:58:12.527 | DEBUG | [] +2025-01-24 19:58:13.527 | DEBUG | [] +2025-01-24 19:58:14.526 | DEBUG | [] +2025-01-24 19:58:15.527 | DEBUG | [] +2025-01-24 19:58:16.526 | DEBUG | [] +2025-01-24 19:58:17.527 | DEBUG | [] +2025-01-24 19:58:18.526 | DEBUG | [] +2025-01-24 19:58:19.526 | DEBUG | [] +2025-01-24 19:58:20.527 | DEBUG | [] +2025-01-24 19:58:21.526 | DEBUG | [] +2025-01-24 19:58:22.526 | DEBUG | [] +2025-01-24 19:58:23.527 | DEBUG | [] +2025-01-24 19:58:24.527 | DEBUG | [] +2025-01-24 19:58:25.525 | DEBUG | [] +2025-01-24 19:58:26.526 | DEBUG | [] +2025-01-24 19:58:27.526 | DEBUG | [] +2025-01-24 19:58:28.528 | DEBUG | [] +2025-01-24 19:58:29.526 | DEBUG | [] +2025-01-24 19:58:30.524 | DEBUG | [] +2025-01-24 19:58:31.527 | DEBUG | [] +2025-01-24 19:58:32.527 | DEBUG | [] +2025-01-24 19:58:33.527 | DEBUG | [] +2025-01-25 08:21:33.215 | INFO | 日志记录器初始化完成 +2025-01-25 08:21:33.215 | INFO | 配置类初始化完成 +2025-01-25 08:21:33.215 | INFO | 程序配置管理模块初始化完成 +2025-01-25 08:21:35.327 | DEBUG | [] +2025-01-25 08:21:36.165 | DEBUG | [] +2025-01-25 08:21:37.165 | DEBUG | [] +2025-01-25 08:21:38.165 | DEBUG | [] +2025-01-25 08:21:39.165 | DEBUG | [] +2025-01-25 08:21:40.165 | DEBUG | [] +2025-01-25 08:21:41.167 | DEBUG | [] +2025-01-25 08:21:42.165 | DEBUG | [] +2025-01-25 08:21:43.166 | DEBUG | [] +2025-01-25 08:21:44.164 | DEBUG | [] +2025-01-25 08:21:45.165 | DEBUG | [] +2025-01-25 08:21:46.165 | DEBUG | [] +2025-01-25 08:21:47.167 | DEBUG | [] +2025-01-25 08:21:48.164 | DEBUG | [] +2025-01-25 08:21:49.165 | DEBUG | [] +2025-01-25 08:21:50.164 | DEBUG | [] +2025-01-25 08:21:51.165 | DEBUG | [] +2025-01-25 08:21:52.168 | DEBUG | [] +2025-01-25 08:21:53.165 | DEBUG | [] +2025-01-25 08:21:54.164 | DEBUG | [] +2025-01-25 08:21:55.170 | DEBUG | [] +2025-01-25 08:21:56.164 | DEBUG | [] +2025-01-25 08:21:57.165 | DEBUG | [] +2025-01-25 08:21:58.169 | DEBUG | [] +2025-01-25 08:21:59.164 | DEBUG | [] +2025-01-25 08:22:00.164 | DEBUG | [] +2025-01-25 08:22:01.165 | DEBUG | [] +2025-01-25 08:22:02.168 | DEBUG | [] +2025-01-25 08:22:03.167 | DEBUG | [] +2025-01-25 08:22:04.167 | DEBUG | [] +2025-01-25 08:22:05.167 | DEBUG | [] +2025-01-25 08:22:06.167 | DEBUG | [] +2025-01-25 08:22:07.565 | DEBUG | [] +2025-01-25 08:22:08.173 | DEBUG | [] +2025-01-25 08:22:09.165 | DEBUG | [] +2025-01-25 08:22:10.164 | DEBUG | [] +2025-01-25 08:22:11.164 | DEBUG | [] +2025-01-25 08:22:12.166 | DEBUG | [] +2025-01-25 08:22:13.166 | DEBUG | [] +2025-01-25 08:22:14.165 | DEBUG | [] +2025-01-25 08:22:15.164 | DEBUG | [] +2025-01-25 17:43:27.532 | INFO | 日志记录器初始化完成 +2025-01-25 17:43:27.533 | INFO | 配置类初始化完成 +2025-01-25 17:43:27.533 | INFO | 程序配置管理模块初始化完成 +2025-01-25 17:43:29.275 | DEBUG | [] +2025-01-25 17:43:30.275 | DEBUG | [] +2025-01-25 17:43:31.277 | DEBUG | [] +2025-01-25 17:43:32.276 | DEBUG | [] +2025-01-25 17:43:33.279 | DEBUG | [] +2025-01-25 17:43:34.275 | DEBUG | [] +2025-01-25 17:43:35.278 | DEBUG | [] +2025-01-25 17:43:36.277 | DEBUG | [] +2025-01-25 17:43:37.277 | DEBUG | [] +2025-01-25 17:43:38.276 | DEBUG | [] +2025-01-25 17:43:39.276 | DEBUG | [] +2025-01-25 17:43:40.275 | DEBUG | [] +2025-01-25 17:43:41.276 | DEBUG | [] +2025-01-25 17:43:42.276 | DEBUG | [] +2025-01-25 17:43:43.278 | DEBUG | [] +2025-01-25 17:43:44.276 | DEBUG | [] +2025-01-25 17:43:45.277 | DEBUG | [] +2025-01-25 17:43:46.275 | DEBUG | [] +2025-01-25 17:43:47.275 | DEBUG | [] +2025-01-25 17:43:48.277 | DEBUG | [] +2025-01-25 17:43:49.276 | DEBUG | [] +2025-01-25 17:43:50.276 | DEBUG | [] +2025-01-25 17:43:51.275 | DEBUG | [] +2025-01-25 17:43:52.276 | DEBUG | [] +2025-01-25 17:43:53.274 | DEBUG | [] +2025-01-25 17:43:54.275 | DEBUG | [] +2025-01-25 17:43:55.275 | DEBUG | [] +2025-01-25 17:43:56.277 | DEBUG | [] +2025-01-25 17:43:57.276 | DEBUG | [] +2025-01-25 17:43:58.274 | DEBUG | [] +2025-01-25 17:43:59.274 | DEBUG | [] +2025-01-25 17:44:00.275 | DEBUG | [] +2025-01-25 17:44:01.276 | DEBUG | [] +2025-01-25 17:44:02.276 | DEBUG | [] +2025-01-25 17:44:03.276 | DEBUG | [] +2025-01-25 17:44:04.275 | DEBUG | [] +2025-01-25 17:44:05.275 | DEBUG | [] +2025-01-25 17:44:06.277 | DEBUG | [] +2025-01-25 17:44:07.275 | DEBUG | [] +2025-01-25 17:44:08.274 | DEBUG | [] +2025-01-25 17:44:09.277 | DEBUG | [] +2025-01-25 17:44:10.276 | DEBUG | [] +2025-01-25 17:44:11.274 | DEBUG | [] +2025-01-25 17:44:12.274 | DEBUG | [] +2025-01-25 17:44:13.275 | DEBUG | [] +2025-01-25 17:44:14.276 | DEBUG | [] +2025-01-25 17:44:15.277 | DEBUG | [] +2025-01-25 17:44:16.276 | DEBUG | [] +2025-01-25 17:44:17.274 | DEBUG | [] +2025-01-25 17:44:18.278 | DEBUG | [] +2025-01-25 17:44:19.277 | DEBUG | [] +2025-01-25 17:44:20.276 | DEBUG | [] +2025-01-25 17:44:21.276 | DEBUG | [] +2025-01-25 17:44:22.277 | DEBUG | [] +2025-01-25 17:44:23.277 | DEBUG | [] +2025-01-25 17:44:24.275 | DEBUG | [] +2025-01-25 17:44:25.275 | DEBUG | [] +2025-01-25 17:44:26.275 | DEBUG | [] +2025-01-25 17:44:27.278 | DEBUG | [] +2025-01-25 17:44:28.277 | DEBUG | [] +2025-01-25 17:44:29.277 | DEBUG | [] +2025-01-25 17:44:30.275 | DEBUG | [] +2025-01-25 17:44:31.278 | DEBUG | [] +2025-01-25 17:44:32.275 | DEBUG | [] +2025-01-25 17:44:33.275 | DEBUG | [] +2025-01-25 17:44:34.276 | DEBUG | [] +2025-01-25 17:44:35.276 | DEBUG | [] +2025-01-25 17:44:36.276 | DEBUG | [] +2025-01-25 17:44:37.275 | DEBUG | [] +2025-01-25 17:44:38.276 | DEBUG | [] +2025-01-25 17:44:39.275 | DEBUG | [] +2025-01-25 17:44:40.275 | DEBUG | [] +2025-01-25 17:44:41.275 | DEBUG | [] +2025-01-25 17:44:42.276 | DEBUG | [] +2025-01-25 17:44:43.277 | DEBUG | [] +2025-01-25 17:44:44.277 | DEBUG | [] +2025-01-25 17:44:45.275 | DEBUG | [] +2025-01-25 17:44:46.277 | DEBUG | [] +2025-01-25 17:44:47.276 | DEBUG | [] +2025-01-25 17:44:48.276 | DEBUG | [] +2025-01-25 17:44:49.275 | DEBUG | [] +2025-01-25 17:44:50.275 | DEBUG | [] +2025-01-25 17:44:51.275 | DEBUG | [] +2025-01-25 17:44:52.275 | DEBUG | [] +2025-01-25 17:44:53.278 | DEBUG | [] +2025-01-25 17:44:54.277 | DEBUG | [] +2025-01-25 17:44:55.275 | DEBUG | [] +2025-01-25 17:44:56.276 | DEBUG | [] +2025-01-25 17:44:57.275 | DEBUG | [] +2025-01-25 17:44:58.274 | DEBUG | [] +2025-01-25 17:44:59.275 | DEBUG | [] +2025-01-25 17:45:00.275 | DEBUG | [] +2025-01-25 17:45:01.277 | DEBUG | [] +2025-01-25 17:45:02.276 | DEBUG | [] +2025-01-25 17:45:03.274 | DEBUG | [] +2025-01-25 17:45:04.278 | DEBUG | [] +2025-01-25 17:45:05.277 | DEBUG | [] +2025-01-25 17:45:06.276 | DEBUG | [] +2025-01-25 17:45:07.276 | DEBUG | [] +2025-01-25 17:45:08.276 | DEBUG | [] +2025-01-25 17:45:09.282 | DEBUG | [] +2025-01-25 17:45:10.275 | DEBUG | [] +2025-01-25 17:45:11.277 | DEBUG | [] +2025-01-25 17:45:12.278 | DEBUG | [] +2025-01-25 17:45:13.277 | DEBUG | [] +2025-01-25 17:45:14.276 | DEBUG | [] +2025-01-25 17:45:15.277 | DEBUG | [] +2025-01-25 17:45:16.277 | DEBUG | [] +2025-01-25 17:45:17.276 | DEBUG | [] +2025-01-25 17:45:18.277 | DEBUG | [] +2025-01-25 17:45:19.276 | DEBUG | [] +2025-01-25 17:45:20.275 | DEBUG | [] +2025-01-25 17:45:21.277 | DEBUG | [] +2025-01-25 17:45:22.278 | DEBUG | [] +2025-01-25 17:45:23.278 | DEBUG | [] +2025-01-25 17:45:24.275 | DEBUG | [] +2025-01-25 17:45:25.277 | DEBUG | [] +2025-01-25 17:45:26.277 | DEBUG | [] +2025-01-25 17:45:27.275 | DEBUG | [] +2025-01-25 17:45:28.275 | DEBUG | [] +2025-01-25 17:45:29.277 | DEBUG | [] +2025-01-25 17:45:30.276 | DEBUG | [] +2025-01-25 17:45:31.276 | DEBUG | [] +2025-01-25 17:45:32.274 | DEBUG | [] +2025-01-25 17:45:33.276 | DEBUG | [] +2025-01-25 17:45:34.275 | DEBUG | [] +2025-01-25 17:45:35.275 | DEBUG | [] +2025-01-25 17:45:36.276 | DEBUG | [] +2025-01-25 17:45:37.274 | DEBUG | [] +2025-01-25 17:45:38.278 | DEBUG | [] +2025-01-25 17:45:39.275 | DEBUG | [] +2025-01-25 17:45:40.275 | DEBUG | [] +2025-01-25 17:45:41.275 | DEBUG | [] +2025-01-25 17:45:42.275 | DEBUG | [] +2025-01-25 17:45:43.277 | DEBUG | [] +2025-01-25 17:45:44.276 | DEBUG | [] +2025-01-25 17:45:45.275 | DEBUG | [] +2025-01-25 17:45:46.277 | DEBUG | [] +2025-01-25 17:45:47.275 | DEBUG | [] +2025-01-25 17:45:48.276 | DEBUG | [] +2025-01-25 17:45:49.277 | DEBUG | [] +2025-01-25 17:45:50.279 | DEBUG | [] +2025-01-25 17:45:51.278 | DEBUG | [] +2025-01-25 17:45:52.279 | DEBUG | [] +2025-01-25 17:45:53.276 | DEBUG | [] +2025-01-25 17:45:54.275 | DEBUG | [] +2025-01-25 17:45:55.277 | DEBUG | [] +2025-01-25 17:45:56.277 | DEBUG | [] +2025-01-25 17:45:57.274 | DEBUG | [] +2025-01-25 17:45:58.274 | DEBUG | [] +2025-01-25 17:45:59.277 | DEBUG | [] +2025-01-25 17:46:00.276 | DEBUG | [] +2025-01-25 17:46:01.277 | DEBUG | [] +2025-01-25 17:46:02.277 | DEBUG | [] +2025-01-25 17:46:03.276 | DEBUG | [] +2025-01-25 17:46:04.277 | DEBUG | [] +2025-01-25 17:46:05.278 | DEBUG | [] +2025-01-25 17:46:06.276 | DEBUG | [] +2025-01-25 17:46:07.277 | DEBUG | [] +2025-01-25 17:46:08.275 | DEBUG | [] +2025-01-25 17:46:09.275 | DEBUG | [] +2025-01-25 17:46:10.275 | DEBUG | [] +2025-01-25 17:46:11.275 | DEBUG | [] +2025-01-25 17:46:12.278 | DEBUG | [] +2025-01-25 17:46:13.276 | DEBUG | [] +2025-01-25 17:46:14.277 | DEBUG | [] +2025-01-25 17:46:15.276 | DEBUG | [] +2025-01-25 17:46:16.275 | DEBUG | [] +2025-01-25 17:46:17.277 | DEBUG | [] +2025-01-25 17:46:18.275 | DEBUG | [] +2025-01-25 17:46:19.275 | DEBUG | [] +2025-01-25 17:46:20.274 | DEBUG | [] +2025-01-25 17:46:21.274 | DEBUG | [] +2025-01-25 17:46:22.274 | DEBUG | [] +2025-01-25 17:46:23.276 | DEBUG | [] +2025-01-25 17:46:24.275 | DEBUG | [] +2025-01-25 17:46:25.275 | DEBUG | [] +2025-01-25 17:46:26.276 | DEBUG | [] +2025-01-25 17:46:27.275 | DEBUG | [] +2025-01-25 17:46:28.275 | DEBUG | [] +2025-01-25 17:46:29.275 | DEBUG | [] +2025-01-25 17:46:30.275 | DEBUG | [] +2025-01-25 17:46:31.277 | DEBUG | [] +2025-01-25 17:46:32.277 | DEBUG | [] +2025-01-25 17:46:33.275 | DEBUG | [] +2025-01-25 17:46:34.278 | DEBUG | [] +2025-01-25 17:46:35.277 | DEBUG | [] +2025-01-25 17:46:36.279 | DEBUG | [] +2025-01-25 17:46:37.275 | DEBUG | [] +2025-01-25 17:46:38.275 | DEBUG | [] +2025-01-25 17:46:39.276 | DEBUG | [] +2025-01-25 17:46:40.275 | DEBUG | [] +2025-01-25 17:46:41.275 | DEBUG | [] +2025-01-25 17:46:42.275 | DEBUG | [] +2025-01-25 17:46:43.275 | DEBUG | [] +2025-01-25 17:46:44.276 | DEBUG | [] +2025-01-25 17:46:45.276 | DEBUG | [] +2025-01-25 17:46:46.275 | DEBUG | [] +2025-01-25 17:46:47.278 | DEBUG | [] +2025-01-25 17:46:48.276 | DEBUG | [] +2025-01-25 17:46:49.275 | DEBUG | [] +2025-01-25 17:46:50.276 | DEBUG | [] +2025-01-25 17:46:51.275 | DEBUG | [] +2025-01-25 17:46:52.277 | DEBUG | [] +2025-01-25 17:46:53.277 | DEBUG | [] +2025-01-25 17:46:54.275 | DEBUG | [] +2025-01-25 17:46:55.278 | DEBUG | [] +2025-01-25 17:46:56.275 | DEBUG | [] +2025-01-25 17:46:57.274 | DEBUG | [] +2025-01-25 17:46:58.277 | DEBUG | [] +2025-01-25 17:46:59.276 | DEBUG | [] +2025-01-25 17:47:00.276 | DEBUG | [] +2025-01-25 17:47:01.277 | DEBUG | [] +2025-01-25 17:47:02.275 | DEBUG | [] +2025-01-25 17:47:03.274 | DEBUG | [] +2025-01-25 17:47:04.275 | DEBUG | [] +2025-01-25 17:47:05.276 | DEBUG | [] +2025-01-25 17:47:06.275 | DEBUG | [] +2025-01-25 17:47:07.276 | DEBUG | [] +2025-01-25 17:47:08.274 | DEBUG | [] +2025-01-25 17:47:09.276 | DEBUG | [] +2025-01-25 17:47:10.276 | DEBUG | [] +2025-01-25 17:47:11.276 | DEBUG | [] +2025-01-25 17:47:12.277 | DEBUG | [] +2025-01-25 17:47:13.275 | DEBUG | [] +2025-01-25 17:47:14.274 | DEBUG | [] +2025-01-25 17:47:15.276 | DEBUG | [] +2025-01-25 17:47:16.275 | DEBUG | [] +2025-01-25 17:47:17.276 | DEBUG | [] +2025-01-25 17:47:18.276 | DEBUG | [] +2025-01-25 17:47:19.275 | DEBUG | [] +2025-01-25 17:47:20.277 | DEBUG | [] +2025-01-25 17:47:21.273 | DEBUG | [] +2025-01-25 17:47:22.276 | DEBUG | [] +2025-01-25 17:47:23.277 | DEBUG | [] +2025-01-25 17:47:24.277 | DEBUG | [] +2025-01-25 17:47:25.281 | DEBUG | [] +2025-01-25 17:47:26.275 | DEBUG | [] +2025-01-25 17:49:00.586 | INFO | 日志记录器初始化完成 +2025-01-25 17:49:00.587 | INFO | 配置类初始化完成 +2025-01-25 17:49:00.587 | INFO | 程序配置管理模块初始化完成 +2025-01-25 17:49:02.151 | DEBUG | [] +2025-01-25 17:49:03.150 | DEBUG | [] +2025-01-25 17:49:04.150 | DEBUG | [] +2025-01-25 17:49:05.150 | DEBUG | [] +2025-01-25 17:49:06.151 | DEBUG | [] +2025-01-25 17:49:07.150 | DEBUG | [] +2025-01-25 17:49:08.148 | DEBUG | [] +2025-01-25 17:49:09.152 | DEBUG | [] +2025-01-25 17:49:10.150 | DEBUG | [] +2025-01-25 17:49:11.149 | INFO | 按时间调起任务:调度队列_1 +2025-01-25 17:49:11.149 | INFO | 任务开始:调度队列_1 +2025-01-25 17:49:11.172 | DEBUG | ['调度队列_1'] +2025-01-25 17:49:11.173 | INFO | 任务开始:脚本_2 +2025-01-25 17:49:12.150 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 17:49:13.150 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 17:49:14.204 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 17:49:15.150 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 17:49:16.150 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 17:49:17.149 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 17:49:18.150 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 17:49:19.152 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 17:49:20.150 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 17:49:21.149 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 17:49:22.151 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 17:49:23.150 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 17:49:24.153 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 17:49:25.150 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 17:49:26.151 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 17:49:27.150 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 17:49:28.105 | INFO | 任务完成:脚本_2 +2025-01-25 17:49:28.106 | INFO | 任务开始:脚本_1 +2025-01-25 17:49:28.225 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:49:29.149 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:49:30.150 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:49:31.150 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:49:32.150 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:49:33.152 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:49:34.151 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:49:35.149 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:49:36.151 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:49:37.151 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:49:38.150 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:49:39.152 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:49:40.154 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:49:41.150 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:49:42.149 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:49:43.152 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:49:44.153 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:49:45.152 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:49:46.150 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:49:47.149 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:49:48.152 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:49:49.151 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:49:50.212 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:49:51.151 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:49:52.150 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:49:53.150 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:49:54.149 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:49:55.150 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:49:56.151 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:49:57.252 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:49:58.150 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:49:59.150 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:50:00.152 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:50:01.149 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:50:02.150 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:50:03.150 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:50:04.311 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:50:05.149 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:50:06.151 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:50:07.150 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:50:08.150 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:50:09.150 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:50:10.191 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:50:11.150 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:50:12.152 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:50:13.151 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:50:14.153 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:50:15.151 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:50:16.152 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:50:17.233 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:50:18.149 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:50:19.152 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:50:20.152 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:50:21.153 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:50:22.151 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:50:23.152 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:50:24.150 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:50:25.150 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:50:26.152 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:50:27.151 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:50:28.152 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:50:29.153 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:50:30.150 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:50:31.158 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:50:32.152 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:50:33.151 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:50:34.151 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:50:35.151 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:50:36.151 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:50:37.151 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:50:38.188 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:50:39.150 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:50:40.150 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:50:41.151 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:50:42.148 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:50:43.150 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:50:44.150 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:50:45.152 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:50:46.151 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:50:47.152 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:50:48.151 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:50:49.150 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:50:50.150 | DEBUG | ['调度队列_1', '脚本_1'] +2025-01-25 17:50:50.447 | INFO | 任务完成:脚本_1 +2025-01-25 17:50:50.448 | INFO | 任务开始:脚本_2 +2025-01-25 17:50:51.150 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 17:50:52.218 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 17:50:53.150 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 17:50:54.150 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 17:50:55.152 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 17:50:56.243 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 17:50:57.155 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 17:50:58.152 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 17:50:59.151 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 17:51:00.152 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 17:51:01.150 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 17:51:02.150 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 17:51:03.150 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 17:51:04.153 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 17:51:05.150 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 17:51:06.150 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 17:51:07.149 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 17:51:08.151 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 17:51:08.893 | INFO | 任务完成:脚本_2 +2025-01-25 17:51:08.896 | INFO | 任务结束:调度队列_1 +2025-01-25 17:51:09.151 | DEBUG | [] +2025-01-25 17:51:10.151 | DEBUG | [] +2025-01-25 17:51:11.152 | DEBUG | [] +2025-01-25 17:51:12.151 | DEBUG | [] +2025-01-25 17:51:13.151 | DEBUG | [] +2025-01-25 17:51:14.151 | DEBUG | [] +2025-01-25 17:51:15.151 | DEBUG | [] +2025-01-25 17:51:16.152 | DEBUG | [] +2025-01-25 17:51:17.152 | DEBUG | [] +2025-01-25 17:51:18.152 | DEBUG | [] +2025-01-25 17:51:19.151 | DEBUG | [] +2025-01-25 17:51:20.152 | DEBUG | [] +2025-01-25 17:51:21.151 | DEBUG | [] +2025-01-25 17:51:22.150 | DEBUG | [] +2025-01-25 17:51:23.150 | DEBUG | [] +2025-01-25 17:51:24.151 | DEBUG | [] +2025-01-25 17:51:25.149 | DEBUG | [] +2025-01-25 17:51:26.151 | DEBUG | [] +2025-01-25 17:51:27.148 | DEBUG | [] +2025-01-25 17:51:28.151 | DEBUG | [] +2025-01-25 17:51:29.151 | DEBUG | [] +2025-01-25 17:51:30.150 | DEBUG | [] +2025-01-25 17:51:31.150 | DEBUG | [] +2025-01-25 17:51:32.150 | DEBUG | [] +2025-01-25 17:51:33.149 | DEBUG | [] +2025-01-25 17:51:34.149 | DEBUG | [] +2025-01-25 17:51:35.149 | DEBUG | [] +2025-01-25 17:51:36.149 | DEBUG | [] +2025-01-25 17:51:37.149 | DEBUG | [] +2025-01-25 17:51:38.152 | DEBUG | [] +2025-01-25 17:51:39.150 | DEBUG | [] +2025-01-25 17:51:40.152 | DEBUG | [] +2025-01-25 17:51:41.151 | DEBUG | [] +2025-01-25 17:51:42.149 | DEBUG | [] +2025-01-25 17:51:43.152 | DEBUG | [] +2025-01-25 17:51:44.151 | DEBUG | [] +2025-01-25 17:51:45.152 | DEBUG | [] +2025-01-25 17:51:46.150 | DEBUG | [] +2025-01-25 17:51:47.151 | DEBUG | [] +2025-01-25 17:51:48.153 | DEBUG | [] +2025-01-25 17:51:49.151 | DEBUG | [] +2025-01-25 17:51:50.151 | DEBUG | [] +2025-01-25 17:51:51.151 | DEBUG | [] +2025-01-25 17:51:52.151 | DEBUG | [] +2025-01-25 17:51:53.149 | DEBUG | [] +2025-01-25 17:51:54.151 | DEBUG | [] +2025-01-25 17:51:55.149 | DEBUG | [] +2025-01-25 17:52:21.111 | INFO | 日志记录器初始化完成 +2025-01-25 17:52:21.111 | INFO | 配置类初始化完成 +2025-01-25 17:52:21.111 | INFO | 程序配置管理模块初始化完成 +2025-01-25 17:52:22.716 | DEBUG | [] +2025-01-25 17:52:23.712 | DEBUG | [] +2025-01-25 17:52:24.713 | DEBUG | [] +2025-01-25 17:52:25.716 | DEBUG | [] +2025-01-25 17:52:26.716 | DEBUG | [] +2025-01-25 17:52:27.712 | DEBUG | [] +2025-01-25 17:52:28.712 | DEBUG | [] +2025-01-25 17:52:29.713 | DEBUG | [] +2025-01-25 17:52:30.714 | DEBUG | [] +2025-01-25 17:52:31.716 | DEBUG | [] +2025-01-25 17:52:32.715 | DEBUG | [] +2025-01-25 17:52:33.716 | DEBUG | [] +2025-01-25 17:52:34.716 | DEBUG | [] +2025-01-25 17:52:35.715 | DEBUG | [] +2025-01-25 17:52:36.716 | DEBUG | [] +2025-01-25 17:52:37.715 | DEBUG | [] +2025-01-25 17:52:38.715 | DEBUG | [] +2025-01-25 17:52:39.714 | DEBUG | [] +2025-01-25 17:52:40.715 | DEBUG | [] +2025-01-25 17:52:41.716 | DEBUG | [] +2025-01-25 17:52:42.714 | DEBUG | [] +2025-01-25 17:52:43.716 | DEBUG | [] +2025-01-25 17:52:44.714 | DEBUG | [] +2025-01-25 17:52:45.715 | DEBUG | [] +2025-01-25 17:52:46.713 | DEBUG | [] +2025-01-25 17:52:47.715 | DEBUG | [] +2025-01-25 17:52:48.716 | DEBUG | [] +2025-01-25 17:52:49.715 | DEBUG | [] +2025-01-25 17:52:50.716 | DEBUG | [] +2025-01-25 17:52:51.715 | DEBUG | [] +2025-01-25 17:52:52.714 | DEBUG | [] +2025-01-25 17:52:53.715 | DEBUG | [] +2025-01-25 17:52:54.715 | DEBUG | [] +2025-01-25 17:52:55.714 | DEBUG | [] +2025-01-25 17:52:56.714 | DEBUG | [] +2025-01-25 17:52:57.714 | DEBUG | [] +2025-01-25 17:52:58.714 | DEBUG | [] +2025-01-25 17:52:59.713 | DEBUG | [] +2025-01-25 17:53:00.713 | DEBUG | [] +2025-01-25 17:53:01.713 | DEBUG | [] +2025-01-25 17:53:02.714 | DEBUG | [] +2025-01-25 17:53:03.714 | DEBUG | [] +2025-01-25 17:53:04.714 | DEBUG | [] +2025-01-25 17:53:05.714 | DEBUG | [] +2025-01-25 17:53:06.713 | DEBUG | [] +2025-01-25 17:53:07.715 | DEBUG | [] +2025-01-25 17:53:08.712 | DEBUG | [] +2025-01-25 17:53:09.713 | DEBUG | [] +2025-01-25 17:53:10.714 | DEBUG | [] +2025-01-25 17:53:11.713 | DEBUG | [] +2025-01-25 17:53:12.716 | DEBUG | [] +2025-01-25 17:53:13.712 | DEBUG | [] +2025-01-25 17:53:14.712 | DEBUG | [] +2025-01-25 17:53:15.712 | DEBUG | [] +2025-01-25 17:53:16.713 | DEBUG | [] +2025-01-25 17:53:17.712 | DEBUG | [] +2025-01-25 17:53:18.713 | DEBUG | [] +2025-01-25 17:53:19.714 | DEBUG | [] +2025-01-25 17:53:20.717 | DEBUG | [] +2025-01-25 17:53:21.714 | DEBUG | [] +2025-01-25 17:53:22.714 | DEBUG | [] +2025-01-25 17:53:23.715 | DEBUG | [] +2025-01-25 17:53:24.715 | DEBUG | [] +2025-01-25 17:53:25.714 | DEBUG | [] +2025-01-25 17:53:26.716 | DEBUG | [] +2025-01-25 17:53:27.714 | DEBUG | [] +2025-01-25 17:53:28.714 | DEBUG | [] +2025-01-25 17:53:29.713 | DEBUG | [] +2025-01-25 17:53:30.714 | DEBUG | [] +2025-01-25 17:53:31.714 | DEBUG | [] +2025-01-25 17:53:32.716 | DEBUG | [] +2025-01-25 17:53:33.715 | DEBUG | [] +2025-01-25 17:53:34.714 | DEBUG | [] +2025-01-25 17:53:35.714 | DEBUG | [] +2025-01-25 17:53:36.715 | DEBUG | [] +2025-01-25 17:53:37.713 | DEBUG | [] +2025-01-25 17:53:38.716 | DEBUG | [] +2025-01-25 17:53:39.713 | DEBUG | [] +2025-01-25 17:53:40.715 | DEBUG | [] +2025-01-25 17:53:41.715 | DEBUG | [] +2025-01-25 17:53:42.715 | DEBUG | [] +2025-01-25 17:53:43.712 | DEBUG | [] +2025-01-25 17:53:44.714 | DEBUG | [] +2025-01-25 17:53:45.714 | DEBUG | [] +2025-01-25 17:53:46.714 | DEBUG | [] +2025-01-25 17:53:47.713 | DEBUG | [] +2025-01-25 17:53:48.713 | DEBUG | [] +2025-01-25 17:53:49.712 | DEBUG | [] +2025-01-25 17:53:50.712 | DEBUG | [] +2025-01-25 17:53:51.712 | DEBUG | [] +2025-01-25 17:53:52.716 | DEBUG | [] +2025-01-25 17:53:53.712 | DEBUG | [] +2025-01-25 17:53:54.712 | DEBUG | [] +2025-01-25 17:53:55.714 | DEBUG | [] +2025-01-25 17:53:56.712 | DEBUG | [] +2025-01-25 17:53:57.715 | DEBUG | [] +2025-01-25 17:53:58.713 | DEBUG | [] +2025-01-25 17:53:59.713 | DEBUG | [] +2025-01-25 17:54:00.713 | DEBUG | [] +2025-01-25 17:54:01.713 | DEBUG | [] +2025-01-25 17:54:02.713 | DEBUG | [] +2025-01-25 17:54:03.716 | DEBUG | [] +2025-01-25 17:54:04.716 | DEBUG | [] +2025-01-25 17:54:05.715 | DEBUG | [] +2025-01-25 17:54:06.716 | DEBUG | [] +2025-01-25 17:54:07.715 | DEBUG | [] +2025-01-25 17:54:08.712 | DEBUG | [] +2025-01-25 17:54:09.712 | DEBUG | [] +2025-01-25 17:54:10.716 | DEBUG | [] +2025-01-25 17:54:11.714 | DEBUG | [] +2025-01-25 17:54:12.714 | DEBUG | [] +2025-01-25 17:54:13.713 | DEBUG | [] +2025-01-25 17:54:14.716 | DEBUG | [] +2025-01-25 17:54:15.714 | DEBUG | [] +2025-01-25 17:54:16.714 | DEBUG | [] +2025-01-25 17:54:17.714 | DEBUG | [] +2025-01-25 17:54:18.715 | DEBUG | [] +2025-01-25 17:54:19.713 | DEBUG | [] +2025-01-25 17:54:20.714 | DEBUG | [] +2025-01-25 17:54:21.714 | DEBUG | [] +2025-01-25 17:54:22.822 | DEBUG | [] +2025-01-25 17:54:23.714 | DEBUG | [] +2025-01-25 17:54:24.714 | DEBUG | [] +2025-01-25 17:54:25.711 | DEBUG | [] +2025-01-25 17:54:26.714 | INFO | 按时间调起任务:调度队列_1 +2025-01-25 17:54:26.715 | INFO | 任务开始:调度队列_1 +2025-01-25 17:54:26.740 | DEBUG | ['调度队列_1'] +2025-01-25 17:54:26.741 | INFO | 任务开始:脚本_2 +2025-01-25 17:54:27.714 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 17:54:28.713 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 17:54:29.791 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 17:54:30.712 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 17:54:31.713 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 17:54:32.724 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 17:54:33.713 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 17:54:34.080 | INFO | 中止任务:调度队列_1 +2025-01-25 17:54:34.083 | INFO | 申请中止本次任务 +2025-01-25 17:54:37.360 | INFO | 任务完成:脚本_2 +2025-01-25 17:54:37.362 | DEBUG | ['调度队列_1'] +2025-01-25 17:54:37.364 | INFO | 任务结束:调度队列_1 +2025-01-25 17:54:37.713 | DEBUG | [] +2025-01-25 17:54:38.712 | DEBUG | [] +2025-01-25 17:54:39.714 | DEBUG | [] +2025-01-25 17:54:40.721 | DEBUG | [] +2025-01-25 17:54:41.713 | DEBUG | [] +2025-01-25 17:54:42.712 | DEBUG | [] +2025-01-25 17:54:43.713 | DEBUG | [] +2025-01-25 17:54:44.713 | DEBUG | [] +2025-01-25 17:54:45.713 | DEBUG | [] +2025-01-25 17:54:46.716 | DEBUG | [] +2025-01-25 17:54:47.716 | DEBUG | [] +2025-01-25 17:54:48.711 | DEBUG | [] +2025-01-25 17:54:49.716 | DEBUG | [] +2025-01-25 17:54:50.715 | DEBUG | [] +2025-01-25 17:54:51.714 | DEBUG | [] +2025-01-25 17:54:52.713 | DEBUG | [] +2025-01-25 17:54:53.715 | DEBUG | [] +2025-01-25 17:54:54.716 | DEBUG | [] +2025-01-25 17:54:55.715 | DEBUG | [] +2025-01-25 17:54:56.716 | DEBUG | [] +2025-01-25 17:54:57.712 | DEBUG | [] +2025-01-25 17:54:58.714 | DEBUG | [] +2025-01-25 17:54:59.714 | DEBUG | [] diff --git a/log.txt b/log.txt new file mode 100644 index 0000000..b9635d9 --- /dev/null +++ b/log.txt @@ -0,0 +1,10 @@ +任务开始时间:2025-01-23 16:39:04,结束时间:2025-01-23 16:39:12 +已完成数:0,未完成数:4 + +代理未成功的用户: +新用户 + +未开始代理的用户: +新用户 +新用户 +新用户 diff --git a/main.py b/main.py index 6a44d3b..19654f2 100644 --- a/main.py +++ b/main.py @@ -25,11 +25,13 @@ v4.2 作者:DLmaster_361 """ +from loguru import logger from PySide6.QtWidgets import QApplication +from PySide6.QtCore import Qt from qfluentwidgets import FluentTranslator import sys -from app.config import AppConfig +from app.core import AppConfig from app.services.notification import Notification from app.services.security import CryptoHandler from app.services.system import SystemHandler @@ -42,12 +44,18 @@ if __name__ == "__main__": crypto = CryptoHandler(config) system = SystemHandler(config) + QApplication.setAttribute(Qt.AA_DontCreateNativeWidgetSiblings) application = QApplication(sys.argv) translator = FluentTranslator() application.installTranslator(translator) - window = AUTO_MAA(config=config, notify=notify, crypto=crypto, system=system) + window = AUTO_MAA( + config=config, + notify=notify, + crypto=crypto, + system=system, + ) window.show_ui("显示主窗口") window.start_up_task() sys.exit(application.exec()) diff --git a/requirements.txt b/requirements.txt index b66d50a..7d543dd 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,4 @@ +loguru plyer PySide6 PySide6-Fluent-Widgets[full] From c625354dece60599dfd0ddba61f2da0f3e5cd368 Mon Sep 17 00:00:00 2001 From: DLmaster Date: Sun, 26 Jan 2025 07:58:33 +0800 Subject: [PATCH 10/12] =?UTF-8?q?feat(core):=E5=88=9D=E6=AD=A5=E5=AE=8C?= =?UTF-8?q?=E6=88=90=E4=B8=BB=E8=B0=83=E5=BA=A6=E8=87=AA=E5=8A=A8=E4=BB=A3?= =?UTF-8?q?=E7=90=86=E5=8A=9F=E8=83=BD=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/__init__.py | 14 +- app/__pycache__/__init__.cpython-312.pyc | Bin 818 -> 800 bytes app/core/__init__.py | 11 +- app/core/__pycache__/__init__.cpython-312.pyc | Bin 659 -> 683 bytes app/core/__pycache__/config.cpython-312.pyc | Bin 21589 -> 21648 bytes .../__pycache__/task_manager.cpython-312.pyc | Bin 11605 -> 11435 bytes app/core/__pycache__/timer.cpython-312.pyc | Bin 4078 -> 3823 bytes app/core/config.py | 7 +- app/core/task_manager.py | 75 +- app/core/timer.py | 32 +- app/models/MAA.py | 46 +- app/models/__pycache__/MAA.cpython-312.pyc | Bin 34278 -> 34075 bytes app/services/__init__.py | 8 +- .../__pycache__/__init__.cpython-312.pyc | Bin 537 -> 517 bytes .../__pycache__/notification.cpython-312.pyc | Bin 3534 -> 3216 bytes .../__pycache__/security.cpython-312.pyc | Bin 6933 -> 6545 bytes .../__pycache__/system.cpython-312.pyc | Bin 4953 -> 4795 bytes app/services/notification.py | 24 +- app/services/security.py | 40 +- app/services/system.py | 23 +- app/ui/__pycache__/Widget.cpython-312.pyc | Bin 14323 -> 14323 bytes .../dispatch_center.cpython-312.pyc | Bin 20114 -> 25075 bytes .../__pycache__/main_window.cpython-312.pyc | Bin 14633 -> 13735 bytes .../member_manager.cpython-312.pyc | Bin 72264 -> 68905 bytes .../__pycache__/queue_manager.cpython-312.pyc | Bin 29172 -> 28044 bytes app/ui/__pycache__/setting.cpython-312.pyc | Bin 25764 -> 24652 bytes app/ui/dispatch_center.py | 100 +- app/ui/else.py | 138 +-- app/ui/main_window.py | 83 +- app/ui/member_manager.py | 325 +++--- app/ui/queue_manager.py | 189 ++- app/ui/setting.py | 105 +- app/utils/Updater.py | 2 +- app/utils/__pycache__/Updater.cpython-312.pyc | Bin 16996 -> 17015 bytes config/MaaConfig/脚本_1/Default/gui.json | 49 +- config/MaaConfig/脚本_1/config.json | 2 +- config/QueueConfig/调度队列_1.json | 2 +- config/config.json | 4 +- config/history.json | 20 +- debug/AUTO_MAA.log | 1019 +++++++++++++++++ main.py | 21 +- 41 files changed, 1645 insertions(+), 694 deletions(-) diff --git a/app/__init__.py b/app/__init__.py index a07fab1..348605b 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -29,9 +29,9 @@ __version__ = "4.2.0" __author__ = "DLmaster361 " __license__ = "GPL-3.0 license" -from .core import AppConfig, QueueConfig, MaaConfig, Task, TaskManager, MainTimer +from .core import AppConfig, QueueConfig, MaaConfig, Task, Task_manager, Main_timer from .models import MaaManager -from .services import Notification, CryptoHandler, SystemHandler +from .services import Notify, Crypto, System from .ui import AUTO_MAA from .utils import Updater, version_text @@ -40,12 +40,12 @@ __all__ = [ "QueueConfig", "MaaConfig", "Task", - "TaskManager", - "MainTimer", + "Task_manager", + "Main_timer", "MaaManager", - "Notification", - "CryptoHandler", - "SystemHandler", + "Notify", + "Crypto", + "System", "AUTO_MAA", "Updater", "version_text", diff --git a/app/__pycache__/__init__.cpython-312.pyc b/app/__pycache__/__init__.cpython-312.pyc index 6f92029f5b8f592bef2c7cc96c0e45ddaf58e208..e8ee89856e6283e22c1d1334231f06485b094b40 100644 GIT binary patch delta 125 zcmdnQwt$WIG%qg~0}$w3nv#BYBd;@~BTq#=r)FMqr z5HHaeBBRNCi_I^;Br~n@7MpWXWkE^)Ew_yT*`v7~QDbfG{ delta 143 zcmZ3$wuz1RG%qg~0}%L6=uiK+k=L0qm^&n~INLWdFEKr}=oY7MVrE`QW^QVcCgUwG z-^4_ygeLPX9>4sO%(Tqp#FEVXyj#4^MU@35`5uXRDLFuWyup>lC8@bk?&gV%1&s26 i*BJuuGRWO$aJb0eaF;>iK7+<57CvsKM)o3UpbG%&Y%ufy diff --git a/app/core/__init__.py b/app/core/__init__.py index ae97862..8990b48 100644 --- a/app/core/__init__.py +++ b/app/core/__init__.py @@ -29,17 +29,18 @@ __version__ = "4.2.0" __author__ = "DLmaster361 " __license__ = "GPL-3.0 license" -from .config import AppConfig, QueueConfig, MaaConfig +from .config import AppConfig, QueueConfig, MaaConfig, Config from .main_info_bar import MainInfoBar -from .task_manager import Task, TaskManager -from .timer import MainTimer +from .task_manager import Task, Task_manager +from .timer import Main_timer __all__ = [ "AppConfig", + "Config", "QueueConfig", "MaaConfig", "MainInfoBar", "Task", - "TaskManager", - "MainTimer", + "Task_manager", + "Main_timer", ] diff --git a/app/core/__pycache__/__init__.cpython-312.pyc b/app/core/__pycache__/__init__.cpython-312.pyc index b73b8f0b491fb274c3c5901bdc5215f916f94d23..45dc4c8bdb85f15c9839fb34695d70acc9a1ec73 100644 GIT binary patch delta 268 zcmbQtx|)^uG%qg~0}!Min3C=_kyny2W}>>fSuRHu2O~oYOA1>KXD(M17nseS!=1|$ z#goe$#S7+hyziJ5uvC7HQE9!C)~(Apw45WxZ>SV06kh~NMboFD?^G(Szj$*qiTR$!&K zcymEUWag#i$0sEgfz{vQDM7LZq5Bpq*rp<`NlXEZ;*$fJG$m~>GuYl`P`l5dbC*H( P6ALFdQzLtkD9{oBIz&H9 delta 270 zcmZ3@I+>OCG%qg~0}%Ah?@!mC$ScVhF;QLJh>;6Gu}G8Y7E4HC zarP~45b2wkmzbVf1XRNbQWKJy3*@jDF#}yt!~!B%K?EC!U$h%#YpUDt`(nr*DdzE5}?l@cpsy*KU)bRhP)juc6hST>C|KShy7V zd*c}sPSyMHFUuu};Sbi`0o6I@DoGS72q36#x=W@zZJf5P!q2St;gqe(yh63jd2rsQ zhgX*1PQ*TUy$})du*U?#AkP58(uUz!B<9E(yZN6BOc)rOT+h}ZaeGAZm^B%?6vf{-hSq(8`(c=-J z!?@yo!s6M%Gqat9U4)d;x<)j)$GBGDmNXGr7h!v`$3F=TJ}SVy{t3aa1cP(p`n7s9NW#U5ez+ zlgw}=6bpOG$UbOt%Y$Tl%b0lVZ+TNY=@_AgFhY2V@G{{rM_E$!bb(D%`whbTgfDO| z8h}Z>5Pj0u3Ll7n3N~{q%&JS@Gld(Kw()4YVuF4g?pS~f2IEgV&Qs?v311nL@y&40 zH>4X03ZcIO<5FiEK)+GDZG#8{xV>uwypFGQ1>i%R?Ya#oakhK7_O4Xa>1TqKaEjo< zb%`%1#ufi(FrWKQYBh8i7txTGt z%W``zJED&+OIo&W9?z-8jMl=|^25O&A)m$H`qJK;f*a)Pb%Nb{WX%h5W!L@z^Zz*a delta 1276 zcmZ{jTTC2f6vyYxb!T^HSwdUNrR#+*yW?WZDv1$GvCE~U1sb48*QgYjEv)6D-!34v z)Iejm=k>MR&P8irfoAL9^qUzs%W;QPtY%2)SpsraR+i~S-l7UiSry6LI1RQ_nw z;wa#vD;E{Lu5iISFVSK_0KqconHM)~oY8Y}#Z`!(=_QKK(igJux}FUA=V2pb#3&M? zLJEdO5aPT72opnZNO55p%xpa7p3-j1JarCix2GJyk2T&a%52lBe>bjqU)S@hBhs~q zQe9@hYWx6DjlcT0K+Havb$;Ezx~#3XJNupp)wZ_fpyq#>S7Wab+6l+(jsi*ab#raP zpYl+2SCkDS+YyJ8_|uLURA5#hpmtKKg--{%#Q|SRV!fNqWaRpq&C9?rv3+Q1Ch`GHpFs9){naZ~m&k|#JCO^v;1PdzF6)T8A4 z$ew=gZ}n)5bQK|wkRZH6c$YBFk&&%rSDJl5_7ve$!ZOF4z#^ngf`0?MxJaGB-(zjt zN@k=rL03ve25;2=1E1rKhR&T2 z^q^|L5L|>W2nOLYwlwyrbZyx;xYQWkyp1-BwAtRnK9Tn?Xu1w@{H-b9f0z6@1iD!4 zJZ@_)QZJC~!OG@>x9AKqM)P1l?JQNF>`SKCkHldAyRDCDy_ay2;34=3pAe=Amk66i z6(=9zEdSG|=+=zk&&_W?LN0T=^V%7;cc6Qa4Kj&xoy%5RNvF!gl{2nA eeFN5DZ(=VC@Y4J%q!O5aq|5z>-~-h;t$zXe2r+R0 diff --git a/app/core/__pycache__/task_manager.cpython-312.pyc b/app/core/__pycache__/task_manager.cpython-312.pyc index 5e15c723cb004f14e063da2f2d309a2975d6e539..0594510f98123c7ab633bf0e3c4369193c2d7410 100644 GIT binary patch delta 3789 zcmai1YfxLq72cJuq$}x42qX|lfDmti4So{Walxq{!3mGJ*lD7SqsY1!B1cGMuOKCp z49*NmjN^`>o5rr|Hn{x}Y&TOxATr8h*mf{bm8k#!?En&-`7#1;- zO|m&*9khjQoVO(GgHl*xJeI|TW6&9Pa^9LK7<7eQ7#YyRNVbh5*{%qOs_A>hZm$tO zfKa%I>m;UgFkL<9{I_%-15!NabA~8fJn9S;OntGh&b&9hBSn;uQ5SZ`V`<&AKN(LY zb)hS+ra#BbJcM;KeHGVNntM{|c>icDKLu~>`OeMnUHA>&jmONgQ7Kf+{4HXwMRE5V z%a~EW;Vvp1LH$@3#-*@FHjOi9WV2GzZ;&nHLf9)C6tgU{z93s!zw`+DIu4ihp^!}% z_C?j_h9x%L^4zJFqi3%F^cUA>-q3|)bWqWSc(Na-=&Syx4-BA}P{fpX4UM9+xF=-R zP3rKFLWq;ebuki&C*$czgcPtYae+)oqz2TGpbM&!=)X&DjYMLJsH#RHs=(~%DdE9Z z4`W_*fIBU>X4=3+Y6Bx*97d})WOW{sCwFRM^@3QtM2k%IUJKK~Vch&oMCf(&y72^> zK!-3pB;SR&$$_o!vLG=sk(-J979&QJ#^fn_#yn|Am(UJN(0Danav^2u!^Wv}klqlx z?FKd-dnQn%kp51rqyyGsTt_vrn10i`30Kn_CO59t+I;vYed3(W@x2Ih; zkVS2K@-{!`eVFsJ+cxX$U~|zP%70@$eZHm~yi8dt=&IdKd!_&2-L%(n#WE|vDqENn zA-o9!lDh0xnsRQ%B0cA3NNqyVOyrTU2AT?T+qJkD#^HNG*?Z=)ug$aW;Xq({cQVO zP;1^cw^wWKSa5Bp?-jj3+uSualQCE_x%16ESsRVHe_!|iM=mwA(vLj{=&w9c%YKZC z)?}Zct;J=|I2L?16~cDTy|;xvUL3G5vd#$urC5>D6Z#IgGMq&Aw&9zID+be7ob@9rJ5DG=E3N*QxnBf9rdMKJN{dJc_e6WIc$51j8uu0AooA$R;2yKsEzu1F{7O>?tubq6-I8sRV)S z+Du+O7vAs;KUehyWOII6li zs@fqHx}(YH09E`Y-dNrx?gFGFyf?Sd)BfgNaR656^Jf&1BF3GtvMom!^s0n7Y0+ZatDfI z`Hf-25Q6jMuC*}A;MBn2)ByQWVID!MbHYF?D@zMuTje zFv!BKy~b$NblVOcf>XZlkhOsJqoSo@OPo^xSm4#+% zXN85b&HOlrtxWgnTeH{Come^k1KwMnyOisNTm-bF6$r!+fwLu#1A*%k&-k2cfGj)% z$wuHH!*yGXC=W%`N@QR-PMSbskEN1HC6)#WEB)yxN$0Br*$2b;N}!_TtHU!4BDCLy2fi;W4Wlhf+hi5Z=m6 zS$V#_SORO(g>;|$)8(B^l75+Bn!5x#rp&B zs@TX=Gvpz=*vH6jAP)oS1Oj+V_5k5!FAUsMKpp||C=gbO_vB&!c9|vJpg8~}1_YKw zdVxH~$lcYH*9;&>L2;VC((LOf3QX3YSUa_LTDVeFclgn3p5Wx}6WvqY(>2p7Tetg) zXY=9iRl#Ulo3;5(b=N%JtP$EkHE-#)=GrmV&u;aY8c)VJ2wdeHAOcwkm-*Py^{&x-z3Wb9y+aM;pq(V?LhsA36~z>g(e0)eWKk$6l|3H+APEqnJpOO&Xb`)Oj? z+k5a311?@qbqR`dWDu&eLe8R`*HA}waT}X?s|ffT{RVc) Md*kI-B>vU^0xF-wc>n+a delta 3966 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 bmL(45r9Sgco^P3|JJoWc`^5hMjT+?E diff --git a/app/core/__pycache__/timer.cpython-312.pyc b/app/core/__pycache__/timer.cpython-312.pyc index 98994b9c349098da6f1975c1019ef8f075ef793c..c448c0a70497575ec3b5a905dcefa67751d98a7d 100644 GIT binary patch delta 1462 zcmZ8hUrbw77(b`I_xAp4=}LQHU0b>g7=?)wmboFr1xQ9n95JxP)VQ0b_ZADK;JLR< zNeL_=0WuB4P~FVi#A9(+&lH?Qp~Y z@eEP*;<6B;6S~)k2b?uN(PE9sbEN&u!^sH$Ks+!Cs z3`127nwPhk_I3{$r+oj#)Vgy%MtEb4z}76-bQSs9%gP!b#d&5@{Dnle0*Dik zM#E3TJnRLptluzFB6Ez_SMxQ0t;hQ+`G#&U1w-;_LiU-^W}j+Fp#dfA4SK_(3nZdd_bsLk{9K7 zPL~2r#X!?7K8AuAi@ow;sVeROUGAfF+C=<5@LDoUvdEwNSIP>!VaE&exOWl=3*&PZp6r zTjM+d+YP05LA)>fmIf9F3X!&=+*Xo0ic-g#)OjaT|Ka$%w zcp7HtE3g{@(e$FD1T2Pj45A)e?(KJz)H4}XjX_jPSUZQuD{)Em6ovhCqlv)Q94Pa^ z>wm}!Y~6+uW}n~a64>Sq#mTzMqQnL-YmWdKP>?9Q?6a|5I8t?NrkfCm+OfE#{nH^@ z8%w4=z4O^2yVd2y#6+v1qseqqHxPXxwjE2P307$zBXoqa^bXrmi|-s8*K!%X3!Ney z?E<5dK-mc)TyJI}^AO*x^3@0Lg2ua`Zj(C!Veo=$6VP#e$N@Yx=U+Z2+6MmxFlBg* delta 1658 zcmZ`(U2GIp6ux(MW_Etpp=oD-*xhamr7YO;Qxy;>fBsMjKLO-nNfv%qs?MY%+KAd*? z_NMdc9?J$(J@lGWu=;nW^JdPnyJ>>j@K=?)`#^aMm5_x}*hDEtM5bh7%V#ncYx*oM z!w;hjHrXLH#hcs^O8HG5P%!;~qIp`dqzq$}M8C za4}%g6y7NMz+!7wL9S`NN=;joSF0+l@RNN^oaxobG_!&&qTYIvVj3F)i?KCrF+~60 zkTCg~Nj9l2=L`-&BLu_9=CcLEuxSmpN`Yo3t-jssc$amoT;@M6mmf&mR=(hhhS8l% zJC0#EJS<5h6676UN7oY2Pt`r_b$jg(Ntk!u1bA=;%?FSe81a{d(0P4INX+QbVRlrW zu8Qc&VRlLglX>4shGj^OP2wNPdu*Z}Hvh1-kjNY4lBAOZvP`~bZzRtag(7FNVekNB z#0cu!06)c}7ijArT}!^;n((J&hFcq=9j)eiMDzwplwXE#lkNNm&9pbSuaDinJo?l5 zi$4sPl8UQ1R@&}<**Gz14O+HB{^DPFoHouC(xz!pIweJ$*5OKCh>^=W1s7*sHlGFt zwv!Y7bt|Iaw{?J14U7FM07Ff~DWvVfW^g%S^0mLCZbpxk`o{YzdRtj!i7yVAN^ElE5 zzK^lDH;3{*VSC#MlDEZ3ONv$;0e~~EL*irSlo4g@aOvpy(Mm&GxuNZ*&~C@bSK>3u zCK_2?PjqQ@okb_;6L1F2@<>!6?vT_J%s@;D^`JN4X7z%%I>>~yoO~!n1F!#U`m+h? zC5#o)taP@~?%QhtT(Q?Vo;NbtoaN$--40U@z2m^xM78=>a#mS-gywhN2k=VJL&MUH zqMh3_vZtaX%1UB#*@m*Rp(1Z9%iE^p9nM8D;E~1KhWDTx3&fV&l+X)HC}&(@OaF0mFlTkzFM>(Q e;H)QC1BpoN7HYYLR?PDUFpiA*?;$F^h5rDjI)w57 diff --git a/app/core/config.py b/app/core/config.py index 123356a..5e699a9 100644 --- a/app/core/config.py +++ b/app/core/config.py @@ -84,7 +84,7 @@ class AppConfig: "updater_version": "0.0.0.0", } with self.version_path.open(mode="w", encoding="utf-8") as f: - json.dump(version, f, indent=4) + json.dump(version, f, ensure_ascii=False, indent=4) # 生成预设gameid替换方案文件 if not self.gameid_path.exists(): @@ -253,7 +253,7 @@ class AppConfig: history = json.load(f) history[key] = content with self.history_path.open(mode="w", encoding="utf-8") as f: - json.dump(history, f, indent=4) + json.dump(history, f, ensure_ascii=False, indent=4) def get_history(self, key: str) -> dict: """获取历史记录""" @@ -409,3 +409,6 @@ class MaaConfig(QConfig): RunSet_RunTimesLimit = RangeConfigItem( "RunSet", "RunTimesLimit", 3, RangeValidator(1, 1024) ) + + +Config = AppConfig() diff --git a/app/core/task_manager.py b/app/core/task_manager.py index 452df8c..57c979d 100644 --- a/app/core/task_manager.py +++ b/app/core/task_manager.py @@ -26,15 +26,13 @@ v4.2 """ from loguru import logger -from PySide6.QtWidgets import QApplication from PySide6 import QtCore -import json from typing import Dict, Union, List -from .config import AppConfig +from .config import Config from .main_info_bar import MainInfoBar from app.models import MaaManager -from app.services import Notification +from app.services import Notify class Task(QtCore.QThread): @@ -51,15 +49,11 @@ class Task(QtCore.QThread): def __init__( self, - config: AppConfig, - notify: Notification, name: str, info: Dict[str, Dict[str, Union[str, int, bool]]], ): super(Task, self).__init__() - self.config = config - self.notify = notify self.name = name self.info = info @@ -84,17 +78,15 @@ class Task(QtCore.QThread): self.task_list[i][1] = "运行" self.update_task_list.emit(self.task_list) - if self.task_list[i][0] not in self.config.running_list: + if self.task_list[i][0] not in Config.running_list: - self.config.running_list.append(self.task_list[i][0]) + Config.running_list.append(self.task_list[i][0]) logger.info(f"任务开始:{self.task_list[i][0]}") self.push_info_bar.emit("info", "任务开始", self.task_list[i][0], 5000) if self.member_dict[self.task_list[i][0]][0] == "Maa": self.task = MaaManager( - self.config, - self.notify, "自动代理", self.member_dict[self.task_list[i][0]][1], ) @@ -110,7 +102,7 @@ class Task(QtCore.QThread): self.task.run() - self.config.running_list.remove(self.task_list[i][0]) + Config.running_list.remove(self.task_list[i][0]) self.task_list[i][1] = "完成" logger.info(f"任务完成:{self.task_list[i][0]}") @@ -129,8 +121,8 @@ class Task(QtCore.QThread): member_dict = {} - if (self.config.app_path / "config/MaaConfig").exists(): - for subdir in (self.config.app_path / "config/MaaConfig").iterdir(): + if (Config.app_path / "config/MaaConfig").exists(): + for subdir in (Config.app_path / "config/MaaConfig").iterdir(): if subdir.is_dir(): member_dict[subdir.name] = ["Maa", subdir] @@ -147,14 +139,12 @@ class TaskManager(QtCore.QObject): """业务调度器""" create_gui = QtCore.Signal(Task) + connect_gui = QtCore.Signal(Task) push_info_bar = QtCore.Signal(str, str, str, int) - def __init__(self, config: AppConfig, notify: Notification): + def __init__(self): super(TaskManager, self).__init__() - self.config = config - self.notify = notify - self.task_list: Dict[str, Task] = {} def add_task( @@ -162,29 +152,35 @@ class TaskManager(QtCore.QObject): ): """添加任务""" - if ( - mode == "运行队列" - and name not in self.config.running_list - and name not in self.task_list - ): + if name in Config.running_list or name in self.task_list: - logger.info(f"任务开始:{name}") - MainInfoBar.push_info_bar("info", "任务开始", name, 5000) + logger.warning(f"任务已存在:{name}") + MainInfoBar.push_info_bar("warning", "任务已存在", name, 5000) + return None - self.config.running_list.append(name) - self.task_list[name] = Task(self.config, self.notify, name, info) - self.task_list[name].push_info_bar.connect(MainInfoBar.push_info_bar) - self.task_list[name].accomplish.connect( - lambda logs: self.remove_task(name, logs) - ) + logger.info(f"任务开始:{name}") + MainInfoBar.push_info_bar("info", "任务开始", name, 3000) + + Config.running_list.append(name) + self.task_list[name] = Task(name, info) + self.task_list[name].push_info_bar.connect(MainInfoBar.push_info_bar) + self.task_list[name].accomplish.connect( + lambda logs: self.remove_task(name, logs) + ) + + if mode == "新窗口": self.create_gui.emit(self.task_list[name]) - self.task_list[name].start() + + elif mode == "主窗口": + self.connect_gui.emit(self.task_list[name]) + + self.task_list[name].start() def stop_task(self, name: str): """中止任务""" logger.info(f"中止任务:{name}") - MainInfoBar.push_info_bar("info", "中止任务", name, 5000) + MainInfoBar.push_info_bar("info", "中止任务", name, 3000) if name == "ALL": @@ -206,17 +202,20 @@ class TaskManager(QtCore.QObject): """移除任务标记""" logger.info(f"任务结束:{name}") - MainInfoBar.push_info_bar("info", "任务结束", name, 5000) + MainInfoBar.push_info_bar("info", "任务结束", name, 3000) if len(logs) > 0: time = logs[0][1]["Time"] history = "" for log in logs: - self.config.save_history(log[0], log[1]) + Config.save_history(log[0], log[1]) history += ( f"任务名称:{log[0]},{log[1]["History"].replace("\n","\n ")}\n" ) - self.config.save_history(name, {"Time": time, "History": history}) + Config.save_history(name, {"Time": time, "History": history}) self.task_list.pop(name) - self.config.running_list.remove(name) + Config.running_list.remove(name) + + +Task_manager = TaskManager() diff --git a/app/core/timer.py b/app/core/timer.py index 9c38a41..9f9c459 100644 --- a/app/core/timer.py +++ b/app/core/timer.py @@ -31,26 +31,19 @@ from PySide6 import QtCore import json import datetime -from .config import AppConfig -from .task_manager import TaskManager -from app.services import SystemHandler +from .config import Config +from .task_manager import Task_manager +from app.services import System class MainTimer(QWidget): def __init__( self, - config: AppConfig, - system: SystemHandler, - task_manager: TaskManager, parent=None, ): super().__init__(parent) - self.config = config - self.system = system - self.task_manager = task_manager - self.Timer = QtCore.QTimer() self.Timer.timeout.connect(self.timed_start) self.Timer.timeout.connect(self.set_silence) @@ -69,7 +62,7 @@ class MainTimer(QWidget): if not info["QueueSet"]["Enabled"]: continue - history = self.config.get_history(name) + history = Config.get_history(name) time_set = [ info["Time"][f"TimeSet_{_}"] @@ -81,22 +74,22 @@ class MainTimer(QWidget): if ( curtime[11:16] in time_set and curtime != history["Time"][:16] - and name not in self.config.running_list + and name not in Config.running_list ): logger.info(f"按时间调起任务:{name}") - self.task_manager.add_task("运行队列", name, info) + Task_manager.add_task("新窗口", name, info) def set_silence(self): """设置静默模式""" # # 临时 - # windows = self.system.get_window_info() + # windows = System.get_window_info() # if any(emulator_path in _ for _ in windows): # try: # pyautogui.hotkey(*boss_key) # except pyautogui.FailSafeException as e: # 执行日志记录,暂时缺省 - logger.debug(self.config.running_list) + logger.debug(Config.running_list) def set_last_time(self): """设置上次运行时间""" @@ -108,12 +101,13 @@ class MainTimer(QWidget): queue_list = [] - if (self.config.app_path / "config/QueueConfig").exists(): - for json_file in (self.config.app_path / "config/QueueConfig").glob( - "*.json" - ): + if (Config.app_path / "config/QueueConfig").exists(): + for json_file in (Config.app_path / "config/QueueConfig").glob("*.json"): with json_file.open("r", encoding="utf-8") as f: info = json.load(f) queue_list.append([json_file.stem, info]) return queue_list + + +Main_timer = MainTimer() diff --git a/app/models/MAA.py b/app/models/MAA.py index 76adb72..c860282 100644 --- a/app/models/MAA.py +++ b/app/models/MAA.py @@ -35,8 +35,8 @@ import time from pathlib import Path from typing import List, Dict, Union -from app.core import AppConfig -from app.services import Notification +from app.core import Config +from app.services import Notify class MaaManager(QtCore.QObject): @@ -56,15 +56,11 @@ class MaaManager(QtCore.QObject): def __init__( self, - config: AppConfig, - notify: Notification, mode: str, config_path: Path, ): super(MaaManager, self).__init__() - self.config = config - self.notify = notify self.mode = mode self.config_path = config_path @@ -90,8 +86,8 @@ class MaaManager(QtCore.QObject): self.maa_exe_path = self.maa_root_path / "MAA.exe" self.boss_key = [ _.strip().lower() - for _ in self.config.global_config.get( - self.config.global_config.function_BossKey + for _ in Config.global_config.get( + Config.global_config.function_BossKey ).split("+") ] @@ -109,6 +105,12 @@ class MaaManager(QtCore.QObject): self.push_info_bar.emit( "error", "启动MAA代理进程失败", "您还未正确配置MAA路径!", -1 ) + self.accomplish.emit( + { + "Time": begin_time, + "History": "由于未正确配置MAA路径,MAA代理进程中止", + } + ) return None # 整理用户数据,筛选需代理的用户 @@ -176,7 +178,7 @@ class MaaManager(QtCore.QObject): creationflags=subprocess.CREATE_NO_WINDOW, ) # 添加静默进程数量标记 - self.config.if_silence_needed += 1 + Config.if_silence_needed += 1 # 记录是否超时的标记 self.if_time_out = False @@ -232,7 +234,7 @@ class MaaManager(QtCore.QObject): "检测到MAA进程完成代理任务\n正在等待相关程序结束\n请等待10s" ) # 移除静默进程数量标记 - self.config.if_silence_needed -= 1 + Config.if_silence_needed -= 1 for _ in range(10): if self.isInterruptionRequested: break @@ -253,9 +255,9 @@ class MaaManager(QtCore.QObject): ) killprocess.wait() # 移除静默进程数量标记 - self.config.if_silence_needed -= 1 + Config.if_silence_needed -= 1 # 推送异常通知 - self.notify.push_notification( + Notify.push_notification( "用户自动代理出现异常!", f"用户 {user[0].replace("_", " 今天的")}的{mode_book[j][5:7]}部分出现一次异常", f"{user[0].replace("_", " ")}的{mode_book[j][5:7]}出现异常", @@ -273,7 +275,7 @@ class MaaManager(QtCore.QObject): self.data[user[2]][3] -= 1 self.data[user[2]][14] += 1 user[1] = "完成" - self.notify.push_notification( + Notify.push_notification( "成功完成一个自动代理任务!", f"已完成用户 {user[0].replace("_", " 今天的")}任务", f"已完成 {user[0].replace("_", " 的")}", @@ -491,21 +493,19 @@ class MaaManager(QtCore.QObject): ) # 推送代理结果通知 - self.notify.push_notification( + Notify.push_notification( f"{self.mode[2:4]}任务已完成!", f"已完成用户数:{len(over_index)},未完成用户数:{len(error_index) + len(wait_index)}", f"已完成用户数:{len(over_index)},未完成用户数:{len(error_index) + len(wait_index)}", 10, ) - if not self.config.global_config.get( - self.config.global_config.notify_IfSendErrorOnly + if not Config.global_config.get( + Config.global_config.notify_IfSendErrorOnly ) or ( - self.config.global_config.get( - self.config.global_config.notify_IfSendErrorOnly - ) + Config.global_config.get(Config.global_config.notify_IfSendErrorOnly) and len(error_index) + len(wait_index) != 0 ): - self.notify.send_mail( + Notify.send_mail( f"{self.mode[:4]}任务报告", f"{end_log}\n\nAUTO_MAA 敬上\n\n我们根据您在 AUTO_MAA 中的设置发送了这封电子邮件,本邮件无需回复\n", ) @@ -643,7 +643,7 @@ class MaaManager(QtCore.QObject): "Start.OpenEmulatorAfterLaunch" ] = "True" # 启动MAA后自动开启模拟器 - if self.config.if_silence_needed > 0: + if Config.if_silence_needed > 0: data["Global"]["Start.MinimizeDirectly"] = "True" # 启动MAA后直接最小化 data["Global"]["GUI.UseTray"] = "True" # 显示托盘图标 data["Global"]["GUI.MinimizeToTray"] = "True" # 最小化时隐藏至托盘 @@ -920,7 +920,7 @@ class MaaManager(QtCore.QObject): "Start.OpenEmulatorAfterLaunch" ] = "False" # 启动MAA后自动开启模拟器 - if self.config.if_silence_needed > 0: + if Config.if_silence_needed > 0: data["Global"][ "Start.MinimizeDirectly" ] = "False" # 启动MAA后直接最小化 @@ -963,7 +963,7 @@ class MaaManager(QtCore.QObject): # 覆写配置文件 with self.maa_set_path.open(mode="w", encoding="utf-8") as f: - json.dump(data, f, indent=4) + json.dump(data, f, ensure_ascii=False, indent=4) return True diff --git a/app/models/__pycache__/MAA.cpython-312.pyc b/app/models/__pycache__/MAA.cpython-312.pyc index 19917a2c747ce0d7d799fa3a4ec48a11082de67a..69234c0186a8ea5b715b4a082a8ef7e4e7b4f985 100644 GIT binary patch delta 7037 zcmcIJYj9iDnfK^kUA<*lPs^4p$&xM0i5=(RR~&=g*oi}4q&To~2#%v8J2tj#uH+_8 zB@84`+N$8>(4kXm#wFbucF7j9n%!o02Bw|%$Ih^mR20^%Cf&_!L%aKDH+yG9-}jyGe6RD+FTbvO;cF_>n@tSZL#vfrR-@mi}s3Gh}p-4r@1kN)n|;u4lJJGhMiag(1p!ddqx

    q)ZAD?pt0o6ZQBv}{ zP{9i+f%q+U((Bc!)hYF)o4hahkeXZ(JV$}nEUz`iO?u>dsqE*T6{D(gE~+|W;<&V! z^vPo>QI_DWDpMf zoE68-+Psj6O^rz~7blsCMdKH!4M@AD6WPg(#_PHY&5s`AZt6LmIWzgKP)^(UwzlaS zxv05fQPuQU@IN+K`)h=sRH*x_$fDMTUL!ASUsolKpf)dA)Y+h#g(^Z-4?d& z+foNy^JpZYg3|Ao8p&}(NW2#si8shO!-M{tBIoq1I3hVmWW~{(b2MMII9Dv8oF%kk zY0FvKh|{>+Q(wQ`CPa&70a}hT!aooHALz4bqlnNK$-f_}B`=u4M=EDjw@CnN493iklN`WT&~V+vo;7Yv+v3vCl?TT=Wu59ad;Tw0yx(*n%rKj dmC(3xRPQoic)<_-On9)7|c({ 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 delta 6712 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 HfcL)vPlds; diff --git a/app/services/__init__.py b/app/services/__init__.py index 2ca32a7..7c0349d 100644 --- a/app/services/__init__.py +++ b/app/services/__init__.py @@ -29,8 +29,8 @@ __version__ = "4.2.0" __author__ = "DLmaster361 " __license__ = "GPL-3.0 license" -from .notification import Notification -from .security import CryptoHandler -from .system import SystemHandler +from .notification import Notify +from .security import Crypto +from .system import System -__all__ = ["Notification", "CryptoHandler", "SystemHandler"] +__all__ = ["Notify", "Crypto", "System"] diff --git a/app/services/__pycache__/__init__.cpython-312.pyc b/app/services/__pycache__/__init__.cpython-312.pyc index 6ae138a3c22a902af4be603a97ce983bd36c4cd1..84777a523acf876825d18f8e3266bc85bc4a413b 100644 GIT binary patch delta 71 zcmbQq(#pbnnwOW00SJEVnUY>Mk@vndn_qrOW?H2t<1IGlqRN7jd=M+RvbZEQcd|6& XTS0}p3^I2aq#ki;G_n`*19bubIKviG delta 91 zcmZo=naRR?nwOW00SL@jR;JIJ$a`O($1lGmGc7YYu_QA;Pm}Q$uX9mlK}o(xVqQv4 mY7s~vxU#q;H5V!{nVs>ipxRvq<+}`ukGO0a*^BsrrU3v~p&haS diff --git a/app/services/__pycache__/notification.cpython-312.pyc b/app/services/__pycache__/notification.cpython-312.pyc index d30e53a349b909568839ee53621d7bf6f954490e..96658da8b2743f879e3c7106eb5c6a6d91077ce6 100644 GIT binary patch delta 883 zcmaiyUr19?9LLYu{j=@fb7z|u+q~QEbX!w!N-K1cnNm%3>XZ4f9;Eh17V2PIlrLEz zF^Rx&DiMNSd{FGE2zuzHAYTmWvf_?mK~V3j8TAyMGn4*6bl`sO_xC&Je&KuWZ(CV% zShgfd0AwA1dV6Y1Dq8Gtwir0=HBJjNVoZd<00u$Av;Y$34Ff#~Knxi`5^aEDp^)NF zWoA?9srcT`9^ucTW+!49BtZ-&K+KSU3n0cM420|))6Q1VSSFuNrQ_%G>C9}L`^~~k zG((=+yShUjTe!oJ(v2^2iXq#Lw+)@7VP>8~BYw#Yc`9r!Ii1QPay~0jSP3dHpQE-O zj|V@2CvYztnh%gVcaGp1*yRDT>7uHMsxEpp(YqSaePPWP)_qaU7kw>`d_Z;`sTxwt zO-k9WmL1+5hx6XV{mGTdS6!o;YqaDTE889AgRXK@^OpvbWU0#FfLtT?AWj49FP?~c zAmbJCS_Xe6a>FoQEQDWQLw#KbpF17TK&X9)ORTkm9VrTS!R%KbyWxpo-OLAb> z$Xabx0oa{Y6R_HsQ4!s-R0knIBkdwZKLK zU{mF&_AyikY>{KkSUZPrA%C}%-px^hb&z#Ytx(YEs>4r2j*iR%_{=tNa;>$UQ?oAo z9eH2?tI|n)L2B%%@bx*J%hD_TWm7Tr&SVmorjvcyezHM_J{Q6(lH2(aC|~(rsD1(z PS0NCZZo04Y^-q5Q`#a!( delta 1185 zcmb7DOK1~87@pZzH<``$wN1C?(OUXiF_EBBq&~0)W2x3x8zdD%$)*~qP1&tTrC<*| z)PveENb0HAmL3E}yjBmbU=f!p8`6sx58@>>6+Jq$wIHRS{;=PC^Y6?z{NMaD+wk5e zzw>z9fW-2tM>q0vPFCT~TzfRYj<^$U9qJV$=(d!QAYecY=;AccT}w>v(ae3<>9Mgh z+0o(5jTGI!6U=W?ZXqNO(jWnKkYIF}W``M_ndTCl&Q5~_uX6;230@P5QeSpFGn`2c zjc2l>MIp7Vx}!t|DQC%7t|5>IlW znaqr4#*@i=b$=cf-br_mg{F(Z6!`4*&u|Y>nM?pqLT@btoio8Ln%NFKBt$%uyD~w% z2L13j{tCmp{;A9x=*AmNPn#hT0fSay)KaJ?P=w`?y(XT*3?7 z^Ic`{ZPF6|@*mgvUaSePA)?o6G*H-w=foLd+d|ytIs|KR+!cf#e8<&x^aNR9&Xc<$ zeo24ztKZW4KcNBq)}>!AC~Cep*J~>wO9|OZ#8M&!)jyA(B3q4EYQ$EfmKrUyOr5vH z^VKzFwjv`t&NH7ipIrQb|nNU4|6dD zR#~3#Rgt9})x-j9pH_jdqt^2k)JB;?6NOF!i@@mvr|}H>1RQ81#8e4PgA&K^fw_q? zAj76u$t&gN5Z`E2;#a5%9>4{3s*A~*MR90sES$<3X~Q|hQR<>{w96dzqImpvR=+cn hK53jGIdWCN4B@yGtlt2xFCh3sh(g%72`DdvCE}mu>D| zgo=n5FjgOG9f=T0?3*=2L&BRe5u))yqV%SiZ7!fMn)sl}VjE4256-!_ROaEEbG|uq z=A1KU=2FK*d+@fVsfdp|Uw&}xOzlK4hToiMZ9X96#e$TPFw(Iu=H-Gv<9B6=^CUxD zSm+x7wO~z(v@pI@QqL==tD;E8k)HJI+j@i$IrdY*$Fv7EUo^9uO-Kl(+%rvWnGzc+oYTQrmRlff5dm#N=KP&x5@Td zS~nYsS0tqLur77^|0dqnZ8q69OQQ=W-R!*jQe<96YL(}Iv#o3{lYX1@vwzji4U7KQ z+sb;+|8&p(AIZQRVuu4sJj-4SEcaO=`z-LCT*b37tJzr^?Ia*Ja&T1B7}T>zM=hgd zO29(S=1PE84k^i81@Z=f)$BH1iaXdJw54qyCrSr6xTT3FKi+a>%YChSJUf=1PNr=w zU8Xy1x?_eu&9-ZuOVivkCvbQ)WG;X{cbX$yT~#o_zR|Ywo2d#8x|m>BgFT*fLk;!$ z>SNsA3(}3G*Gq?9P&CdL!si4@cIGTv0bt+GB+X!0LK{rvTOfv;(YViEwRn9T%O@h&lYqpk-u_ z8>86~qhLPCc88&Qg>cKZ7r900xYt-J3f6dK+hA)O%5GTmd-Ju~##ihz`Q z-hPj)x@@hB{S=Oc=IJ5_1?OBeRr46xZEM|&UdnX9rUNtd0Jw|K6Sk-N2b^Z{nvHmh z9jv+QKZej*$x_)ZG0qM}bRQSLkM!bU7O6ddqz{to1c2%~LhhvL_>I#>?xbayTY>WF zM;$p=EEI;Vlnqc^P2)4LlANtiyuIta=ib>}iJn;ih~3A+H@RXWGv0;-6u(hGR<`3i!0YX6)& zSN365s=LftK27pB%cn}LMT)JsJWxR`(u%2^J6+GsfmYee{;W$kxhKIPsVc{x&FaNm zHtY5DGB~-3?X4dgab)kCG!5VugLBBHLQy}NH@290zQ7w0mEe_B1dQ>+HVKP!L4-s1 qkaiCRAE3qusObS}{u#CXiW>fwPhorzKSbVS2}q5;n>;VO-v0w0IIqC~ delta 2075 zcmZWqZ)_7~7=Q2DYwxaiW!;~4V;!tp5ju2&LtqTLFk}pdTllX9Qo7y^tL@sn*9pVP zFd>9WWQE+gr3ga8Qy;nQIuenI2&UN_kAlK$T3`906Q z&wJ0Gwq0@QcSrbu9Os!EZv!uQ|^eHK`dH_6#g($gfG~UPY>FK)tL+lF#e$|1U!vY z6k!w;VHHNT^|A_kn1-~eoMKnFUc2G|-Jv+Ct~x>ILFYkt7JXE%*P#f&35uwSiVOUt z$#;202HrL4C&9aJ(B%OxG|Q0J;DJaco9>A9DM=L@j(EDSH?cR)(j-hiRJOsdPzrDw z4Kjl$I%z^^0EL*Y5QAO7gjmC_smWeT(dcWWjc;DgN27_pL^c{d;Du< z0Ef^mum7n1BUb?wM80D}Vz1qbiQY!!c3ByDAe9j(i|vC`#1*cbjIv}VvBCD5%n>vXT-%5Vr168-cqdHfe7ix5&=4x%TE;Q%)cAal0Px!{*#7t|8 zF0|zNbvnOpLaLgm@S7YGI!K35|GZ;yo3%Q>c0%$^I<}LXu&3H|AkjTNVw*0s<@s)% z?cJx=4q5=$Zg3_vtze1eqQ`>tCwb_3Lqq4 zs0T8{L@JZU+2}j!fK_ZfLPwNdmv}3wbPWH%aW)K&DlGn3Cb6`JQNr8Sjo=w3| zp$6bForQZ}p1XJA$lVJ^?w|bZ{>Nwjyl?^gfDV;D%L#4;!r-(lPGk(h%1>6^pT!G- z#xGK!nZdNfFg<)RWs5)>!cIWLsi<)}G*;emn7Yu^8V=yoiW-uq< z6qW%PC9BtNiDqJ&wl9s9=$4MvxS7(kGC1*WEUVI5Ml)&(FQKfU5W!Oo^_l0Hw^0Q~ z8!Gm{h}@;q3lrAma9-M=OB=?ejd^LaE^Qu{wwg91%!XN+>D#Kyt>kNu&+9d%=S;M| zV5)5RpQT-w+i%LgT;$lUn{sJx+p!&{6AAuD5_#zPgDD}GOIw)B-`YZq}_&#-CREcF{29wZe>(yEhc9WrsCdY9gv|q`kid~)wsbsh_*E!ss z>&{E{x>QdB-lj&g1VMvSzAM+2mjb#J7^l|Y#OygoJ5Fr+u+ywSrF9RzNUnhKJm@{O z@HN;oWHanN>2wlXpFocqVkhq`8j)VPwY6}Dux~MQo@9KlIOv#!++@rb9Kt-vcou+R zgNC#+U~t88rCV8>8unxYjC30D9ttsl&k?5kST`c3|Bn_d06{wna2T0(ma7>ZC?Hr& zKE#PR;@H*#UCix_$StfI1ybay&TcEv#jKpqEg0QqB3Q=a*78-nKs9qSiB~SS zCfo`XDlweVsFIFHqXwJSio-*r;}^*HmAx_i7L}i#(BN05(n^0)4dXNzpl^{z2g0;5 u4D+yoW9$VtV#MpneI3bwH&D$DRC@yjZ=!~~XwKh`A%=N_`3qT#we5dF|9DZ;9Ie*^B?6_{~YP;gB>p*H{q*exINU7~AYQhkOIJ07`TC-bZ1Q~dV z4k0g4I(hJ56ohP4P~fFo1P!c=Egd`v5p;1^=oIv3v_l7fhmY@l@BO~t$M1b>{1B5r z%d!Yat$%zr8C;aB;q}G%P&oxG{-r0AGK9r@0}r{L*_qVTb>q0>up37vd=}Y4?X4?YD??LGzfhF(&+=Lh@H5~LP?NI@OIiSOYPT>t$Bfo$JCS#>j8P5j)g4ehz zLgoP;rB3h$5tl#~;1*Pi-%>%`ha}vND)3!YnG@&`gfxya3##pH$9IU@h)|oy@0r@; zt)6ZyMh{}1NAGg=q@ySE%HWm~#LuN^mIi?#n3K>h zgk!lsa)gFyTo>4cQ@9jpgCdTrt&&Uv+Pnt>PN_}paY7fscJS!@m96TAuS}@O&}>~% z6xk#!R@Jce#SVq7E@_Aj+vQ#xOF$R#7xnb90=K^jyVtw$Z@tee@aLvy%{yu9yxm8R g-pVtlaJ(W~8~)7=LKxl!KBg!j9(fXZ#QCj%0T1@ag8%>k delta 855 zcmZ`%OK1~O6n$?ppUf}LB(){|Bq^q!Nhzg9MVUn{0YPGEwA4>56lv0Gsahx5v{bAR z#DZAETeLeX2-THJ5Ep{F5kWT{uuKdtvT7om1`N;OuPT`nAa`Qxi14W6U2?KU&;s>dbPJOolD6X+Fah zP+G|FfZmJ%C}zBX(wt~Wqzi}pEBwUoYC9EZA<8}Q)XxB{par~u#(}v;ZsT@#0Znsc zS!gC}*cMgGm|6vOIF@sDr^o8?q@k#J3=<_m>LGQh^mdP zciDR~Imq+}EbO*J({3jhNJ&NZVed z2FM3C6Zi@nfnDqw<3GbO)_d}h3*(oix15Cc4F8cI+2i@A$WltEP=P&S6-z{sB8La4 zh!ltf5ipnj_r!*+7*C?ldY<+;v4kB!gYL3&Mpd}4j*(a`fl zugn*w6HnUlB#2af+dPO|9$p$=O>8QWs@AX~7iC8?Y|U`AUR&!e?{=BCMz^E;V3qoQ z@UP`NB56+W$Z4=)hDLsy5QqcP}`bSwR1$sA@MBeD#1ARaXsM-)( z94ZG7Y_N@6EXTF2&eajTYCeS<#DqM@@qv;%gA(A%#5pvPrES-cS Xz5QH_-10~Kp`ZMDj9Y4mqMPswdu+*~ diff --git a/app/services/notification.py b/app/services/notification.py index 76d0810..07865ec 100644 --- a/app/services/notification.py +++ b/app/services/notification.py @@ -30,27 +30,22 @@ import smtplib from email.mime.text import MIMEText from email.header import Header from email.utils import formataddr -import os -from app.core import AppConfig +from app.core import Config class Notification: - def __init__(self, config: AppConfig): - - self.config = config - def push_notification(self, title, message, ticker, t): """推送系统通知""" - if self.config.global_config.get(self.config.global_config.notify_IfPushPlyer): + if Config.global_config.get(Config.global_config.notify_IfPushPlyer): notification.notify( title=title, message=message, app_name="AUTO_MAA", - app_icon=str(self.config.app_path / "resources/icons/AUTO_MAA.ico"), + app_icon=str(Config.app_path / "resources/icons/AUTO_MAA.ico"), timeout=t, ticker=ticker, toast=True, @@ -64,7 +59,7 @@ class Notification: # 声明:此邮箱为AUTO_MAA项目组资产,未经授权不得私自使用 # 注意:此声明注释只有使用者更换发信邮箱时才能删除,本条规则优先级高于GPLv3 - if self.config.global_config.get(self.config.global_config.notify_IfSendMail): + if Config.global_config.get(Config.global_config.notify_IfSendMail): # 第三方 SMTP 服务配置 mail_host = "smtp.163.com" # 设置服务器 @@ -82,9 +77,7 @@ class Notification: message["To"] = formataddr( ( Header("AUTO_MAA用户", "utf-8").encode(), - self.config.global_config.get( - self.config.global_config.notify_MailAddress - ), + Config.global_config.get(Config.global_config.notify_MailAddress), ) ) # 收件人显示的名字 message["Subject"] = Header(title, "utf-8") @@ -94,9 +87,7 @@ class Notification: smtpObj.login(mail_sender, mail_key) smtpObj.sendmail( mail_sender, - self.config.global_config.get( - self.config.global_config.notify_MailAddress - ), + Config.global_config.get(Config.global_config.notify_MailAddress), message.as_string(), ) return True @@ -104,3 +95,6 @@ class Notification: return f"发送邮件时出错:\n{e}" finally: smtpObj.quit() + + +Notify = Notification() diff --git a/app/services/security.py b/app/services/security.py index 0836428..21d9a80 100644 --- a/app/services/security.py +++ b/app/services/security.py @@ -25,7 +25,6 @@ v4.2 作者:DLmaster_361 """ -import os import hashlib import random import secrets @@ -34,37 +33,33 @@ from Crypto.PublicKey import RSA from Crypto.Cipher import PKCS1_OAEP from Crypto.Util.Padding import pad, unpad -from app.core import AppConfig +from app.core import Config class CryptoHandler: - def __init__(self, config: AppConfig): - - self.config = config - def get_PASSWORD(self, PASSWORD: str) -> None: """配置管理密钥""" # 生成目录 - self.config.key_path.mkdir(parents=True, exist_ok=True) + Config.key_path.mkdir(parents=True, exist_ok=True) # 生成RSA密钥对 key = RSA.generate(2048) public_key_local = key.publickey() private_key = key # 保存RSA公钥 - (self.config.app_path / "data/key/public_key.pem").write_bytes( + (Config.app_path / "data/key/public_key.pem").write_bytes( public_key_local.exportKey() ) # 生成密钥转换与校验随机盐 PASSWORD_salt = secrets.token_hex(random.randint(32, 1024)) - (self.config.app_path / "data/key/PASSWORDsalt.txt").write_text( + (Config.app_path / "data/key/PASSWORDsalt.txt").write_text( PASSWORD_salt, encoding="utf-8", ) verify_salt = secrets.token_hex(random.randint(32, 1024)) - (self.config.app_path / "data/key/verifysalt.txt").write_text( + (Config.app_path / "data/key/verifysalt.txt").write_text( verify_salt, encoding="utf-8", ) @@ -76,22 +71,20 @@ class CryptoHandler: AES_password_verify = hashlib.sha256( AES_password + verify_salt.encode("utf-8") ).digest() - (self.config.app_path / "data/key/AES_password_verify.bin").write_bytes( + (Config.app_path / "data/key/AES_password_verify.bin").write_bytes( AES_password_verify ) # AES-256加密RSA私钥并保存密文 AES_key = AES.new(AES_password, AES.MODE_ECB) private_key_local = AES_key.encrypt(pad(private_key.exportKey(), 32)) - (self.config.app_path / "data/key/private_key.bin").write_bytes( - private_key_local - ) + (Config.app_path / "data/key/private_key.bin").write_bytes(private_key_local) def encryptx(self, note: str) -> bytes: """加密数据""" # 读取RSA公钥 public_key_local = RSA.import_key( - (self.config.app_path / "data/key/public_key.pem").read_bytes() + (Config.app_path / "data/key/public_key.pem").read_bytes() ) # 使用RSA公钥对数据进行加密 cipher = PKCS1_OAEP.new(public_key_local) @@ -103,22 +96,20 @@ class CryptoHandler: # 读入RSA私钥密文、盐与校验哈希值 private_key_local = ( - (self.config.app_path / "data/key/private_key.bin").read_bytes().strip() + (Config.app_path / "data/key/private_key.bin").read_bytes().strip() ) PASSWORD_salt = ( - (self.config.app_path / "data/key/PASSWORDsalt.txt") + (Config.app_path / "data/key/PASSWORDsalt.txt") .read_text(encoding="utf-8") .strip() ) verify_salt = ( - (self.config.app_path / "data/key/verifysalt.txt") + (Config.app_path / "data/key/verifysalt.txt") .read_text(encoding="utf-8") .strip() ) AES_password_verify = ( - (self.config.app_path / "data/key/AES_password_verify.bin") - .read_bytes() - .strip() + (Config.app_path / "data/key/AES_password_verify.bin").read_bytes().strip() ) # 将管理密钥转化为AES-256密钥并验证 AES_password = hashlib.sha256( @@ -149,7 +140,7 @@ class CryptoHandler: # 使用新管理密钥重新加密 self.get_PASSWORD(PASSWORD_new) for i in range(len(data)): - self.config.cur.execute( + Config.cur.execute( "UPDATE adminx SET password = ? WHERE mode = ? AND uid = ?", ( self.encryptx(new_data[i]), @@ -157,7 +148,7 @@ class CryptoHandler: data[i][16], ), ) - self.config.db.commit(), + Config.db.commit(), new_data[i] = None del new_data @@ -165,3 +156,6 @@ class CryptoHandler: """验证管理密钥""" return bool(self.decryptx(self.encryptx(""), PASSWORD) != "管理密钥错误") + + +Crypto = CryptoHandler() diff --git a/app/services/system.py b/app/services/system.py index d76fc8c..8099229 100644 --- a/app/services/system.py +++ b/app/services/system.py @@ -31,7 +31,7 @@ import win32process import winreg import psutil -from app.core import AppConfig +from app.core import Config class SystemHandler: @@ -39,9 +39,7 @@ class SystemHandler: ES_CONTINUOUS = 0x80000000 ES_SYSTEM_REQUIRED = 0x00000001 - def __init__(self, config: AppConfig): - - self.config = config + def __init__(self): self.set_Sleep() self.set_SelfStart() @@ -49,9 +47,7 @@ class SystemHandler: def set_Sleep(self): """同步系统休眠状态""" - if self.config.global_config.get( - self.config.global_config.function_IfAllowSleep - ): + if Config.global_config.get(Config.global_config.function_IfAllowSleep): # 设置系统电源状态 ctypes.windll.kernel32.SetThreadExecutionState( self.ES_CONTINUOUS | self.ES_SYSTEM_REQUIRED @@ -64,7 +60,7 @@ class SystemHandler: """同步开机自启""" if ( - self.config.global_config.get(self.config.global_config.start_IfSelfStart) + Config.global_config.get(Config.global_config.start_IfSelfStart) and not self.is_startup() ): key = winreg.OpenKey( @@ -73,14 +69,10 @@ class SystemHandler: winreg.KEY_SET_VALUE, winreg.KEY_ALL_ACCESS | winreg.KEY_WRITE | winreg.KEY_CREATE_SUB_KEY, ) - winreg.SetValueEx( - key, "AUTO_MAA", 0, winreg.REG_SZ, self.config.app_path_sys - ) + winreg.SetValueEx(key, "AUTO_MAA", 0, winreg.REG_SZ, Config.app_path_sys) winreg.CloseKey(key) elif ( - not self.config.global_config.get( - self.config.global_config.start_IfSelfStart - ) + not Config.global_config.get(Config.global_config.start_IfSelfStart) and self.is_startup() ): key = winreg.OpenKey( @@ -123,3 +115,6 @@ class SystemHandler: window_info = [] win32gui.EnumWindows(callback, window_info) return window_info + + +System = SystemHandler() diff --git a/app/ui/__pycache__/Widget.cpython-312.pyc b/app/ui/__pycache__/Widget.cpython-312.pyc index 887cab35025c964c1427de0d4b6a8ae0b7840bd4..c54c9a6b60bd2bcbb6ff52afb0acd2dbec55f177 100644 GIT binary patch delta 20 acmeyI|2d!gG%qg~0}u#Zp0bhqg*gCEZU++p delta 20 acmeyI|2d!gG%qg~0}$A6ow$+vg*gCE<_8}D diff --git a/app/ui/__pycache__/dispatch_center.cpython-312.pyc b/app/ui/__pycache__/dispatch_center.cpython-312.pyc index 67cad79c4e2eff1a693cc2716b178d8a33f49d9c..0cb39908f862410d05a4ae6c11da1a3f1ce3da6c 100644 GIT binary patch delta 7954 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 H;ePr*9vgkl diff --git a/app/ui/__pycache__/main_window.cpython-312.pyc b/app/ui/__pycache__/main_window.cpython-312.pyc index 8c8f6ced28e6995b909ecffe9f7a5c0853a3b4fc..fdf31dadb21ec507dfed046d561edc37958fd553 100644 GIT binary patch delta 4456 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 diff --git a/app/ui/__pycache__/member_manager.cpython-312.pyc b/app/ui/__pycache__/member_manager.cpython-312.pyc index e8fef47e9c6e17535ab5204259b8099809cde51e..8903c069e6f72b4ab3dd5997165eafb6c61daea0 100644 GIT binary patch delta 16407 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 XSP`|-b96_Bilz6i8WZrrU-o|hoBO4{ delta 18249 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 diff --git a/app/ui/__pycache__/queue_manager.cpython-312.pyc b/app/ui/__pycache__/queue_manager.cpython-312.pyc index 72cf6bf9b16cf55509eec1b3021cdffdc72b0e40..d25e03d45a8367d340d5808c32cecaba366e4ca5 100644 GIT binary patch delta 9083 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 delta 9786 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 delta 7112 zcmd5=dvH_NnZHMmE6I{9KO{@W@X`sLNnq2GY&Rs!9kZ3IvJJE}?as6_W-%et>~8k^t}Iy? zQ=0BSy(9h3ch33ld3@jb9`{_m%zp4Q7Wt80AHm`CtBWI>zFd7S@@-jzre{lTj^4|`EKJx^B!r#Txml|7a63S9YCP*Q$A&h>hNnwzpJ(r;M zD?IMrZebQC7}qXVYmqwzA4t;UH%H?@MSQW3n~Z`XU4r#yob{06dF}XY1-zoG zT68w;e9pO?F-sM)>2H|QkGW3Pztw!IdCXLbEfF_jl8-5lx!&A*eCt?D5w@sqSo2Q0 z&eorAKG!^Et%k33aZP6x=e6gwW9AC%*F8MOO||Z@epv5QXNu}fpL)Kip6^pviR!8g z-b;Hf?(r>JAud{RUA+=o^znuZ#h1!2mix+Ah~?BaI-sA&BEE@xIzr;(NVO1QG{Q|Z zl8HPu{3h~c)&`=XNaIp&U4Q~C9)y~PIC#$(J1QE=8MA;s`qwN8CZZGKn^0VSh5KoD zmtWb_H?YI&S9sk|dj*tV%u-V$_3~Yt`+K_F9y-n`DMBke6O)s=11p}p2>ZARp3_Ag zE*~!UX_G~5vQL{KYBR2Dv*4qc_T=#>;}PwM))$o}MrEChd&_#t>a#Bt?F+~371yIG zp)7VY@4#WY7<4W)MtqJQ0rgM#(09=g8wmAvJ=p0DT29XUM3ub#HG2g z##{;?n|`amxy$6@_sR$5FEZixa4D{my)nhAQ69qKtdiL7tv1mc3S`3hailBeMeNPs zn7r_FdYA%?04XqbAfNer3=eP3lq{A3Urkz4Bm4YO2g{#xsDQtibt(hII!Oq?0Dc7FgwYjrzliRthroDaD z6U*yIki$dn8#STkH2TBZVeMhVu)(KJ7S+kuQfjWNYsU?-hxZKcIXpBxQDReodntDbFfUkT=tIp`YtW|2Aud&(ia%6zJGJ7ZIdAM#daoJG|DXPZ#y+K7F>R z&ps=^u<4pU`?|jIUu-v$zVUj`(Vmm+)!su-+?R8aO{1+DYnif%UDG$hk23AwI2l)8 zB7dJtZ(y>YmMH71R9Bd$AxC*7!rYLdypo}8$bm01(;|L8+gUV0M~VU5S-+b;ldaXU zqg(7M8QVB2Lw=Y8^4^)g0q>Hc`q5hoKVX2DSz^$;!;n>wG_yI z5|`dmDZ5&rY+0zfTB&KxQhv;vTT_)Erz(*SI8-(c@0R2Ravq8k_e##NQ7yvm=%Ca+oBMY@{MgkK-96=gE$dL-?sQP^bzhYy5f3HwY^*0D;O26Le?CS0Gc)HxZy-w#T zCeSt|2~-CpK-r@}P(dBr5xzLUO+;}~#yk3)5@qtusQ3vbmgw}N6DL$ep@x$tG(<%p zbx(`b-98vEt6W7Jkp}BRBJ?PxsJj_RgnuZw7&o1tdnq-Np3@w#)>zQmHL$1L2$$;>Y!Ldh zOwdxD1I!*vt@wfB;sdRht88|PR?cdqn>vj(a^Wj8g7OR7+l?nNQ z5GYVuBE9J6TRM03@9+jxL|+$_-0cgfDGdx&HvTm_sFz`=BY7U?cD}f5F)ka^F754T zDe#^vMYgg`he6){`bTa}~_wUmhF68K?NQ>S$LWDdtE zUbsMOxk&I&1k&-7&f7aweHS78=tvqO_#Q6nE*(=mI(HNa%IuR%?sHh&ArKr;z1URq z*BydvnwRYNZ{rYX;YiJ5b{THgEVhS^gK&iw`9W}{0%=ar6Q~G2gtl5UTL?Y1d1-aj z@DagPf{zhA4=MU$Z4&<;Df$X2TK|Be;lFF+OG7Fw7R|+z8l^4bkm9;JaWaxiEe_Ma zecV_UVx2FV=R;dv%aCNE|3QO4TWEo3E`Xy=VK$pD zn)Bgcy$c|43 zFS%wFx@KO;$A)l)UBy{ubItkEt;y5~9On(*7;&eiF*$CpeA-icb?{YdqDtn%yA^ck z6vE4@E8*ECmOxC$YYh`cRDAF{LKmQrp3PmiFa5iM%gAAm5>l}U#7xOdrCea9g%ZmL z@SCNMC3QqT#z2u}_Z;c2Y}Zsguj>?C`A%m~Uys-6lu7+_)rU zoup}>xlT0K!R2PN=0g3Y=8Mf^iHpJCT)mid-G%?q^H;gjKc&MT+tTMwsVy`X$B~mF z72SdpdgmzHJ^KPbZ@SY|GPQCL*~6n{Q6O zI4A#5{qxPYO;%`Lo}wR5NPfNiXt^(;R7@y^-OFv$EoEXt8T@cLI)fljrI=6&zU9w6 z&ZXa?W!*+F)BGWqo})o-gjX~=_{BOadmBDqm%3ikoc=MIBj-Mq&k|Kb@E0j=>-r>q zFG<)ti{j3#Z)tJRP>)VXC6N*Ac|c7u0X1Q9heHUcsThhj9F00i1HMJ@BEbvr%MDv$ znbVRZNGhkXPGLSoeXR(7b;Y)R*N$Fym7qd(;E(gX3&YO3p`1^-I+3gUltZF)l3%Z6 z(T6roa#T)MYZF=awK>_79F~*SEE#L&%t;Q*$$Cb8# None: """添加一个调度台界面""" - dispatch_box = DispatchBox(self.config, task.name, self) + dispatch_box = DispatchBox(task.name, self) dispatch_box.top_bar.button.clicked.connect( - lambda: self.task_manager.stop_task(task.name) + lambda: Task_manager.stop_task(task.name) ) task.create_task_list.connect(dispatch_box.info.task.create_task) @@ -128,19 +126,54 @@ class DispatchCenter(QWidget): self.script_list[name].deleteLater() self.pivot.removeWidget(name) + def connect_main_board(self, task: Task) -> None: + """连接主调度台""" + + self.script_list["主调度台"].top_bar.button.clicked.disconnect() + self.script_list["主调度台"].top_bar.button.setText("中止任务") + self.script_list["主调度台"].top_bar.button.clicked.connect( + lambda: Task_manager.stop_task(task.name) + ) + task.create_task_list.connect( + self.script_list["主调度台"].info.task.create_task + ) + task.create_user_list.connect( + self.script_list["主调度台"].info.user.create_user + ) + task.update_task_list.connect( + self.script_list["主调度台"].info.task.update_task + ) + task.update_user_list.connect( + self.script_list["主调度台"].info.user.update_user + ) + task.update_log_text.connect( + self.script_list["主调度台"].info.log_text.text.setText + ) + task.accomplish.connect(lambda: self.disconnect_main_board(task.name)) + + def disconnect_main_board(self, name: str) -> None: + """断开主调度台""" + + self.script_list["主调度台"].top_bar.button.clicked.disconnect() + self.script_list["主调度台"].top_bar.button.setText("开始任务") + self.script_list["主调度台"].top_bar.button.clicked.connect( + self.script_list["主调度台"].top_bar.start_task + ) + self.script_list["主调度台"].info.log_text.text.setText( + Config.get_history(name)["History"] + ) + def update_top_bar(self): """更新顶栏""" list = [] - if (self.config.app_path / "config/QueueConfig").exists(): - for json_file in (self.config.app_path / "config/QueueConfig").glob( - "*.json" - ): + if (Config.app_path / "config/QueueConfig").exists(): + for json_file in (Config.app_path / "config/QueueConfig").glob("*.json"): list.append(f"队列 - {json_file.stem}") - if (self.config.app_path / "config/MaaConfig").exists(): - for subdir in (self.config.app_path / "config/MaaConfig").iterdir(): + if (Config.app_path / "config/MaaConfig").exists(): + for subdir in (Config.app_path / "config/MaaConfig").iterdir(): if subdir.is_dir(): list.append(f"实例 - Maa - {subdir.name}") @@ -150,13 +183,11 @@ class DispatchCenter(QWidget): class DispatchBox(QWidget): - def __init__(self, config: AppConfig, name: str, parent=None): + def __init__(self, name: str, parent=None): super().__init__(parent) self.setObjectName(name) - self.config = config - layout = QVBoxLayout() scrollArea = ScrollArea() @@ -195,6 +226,7 @@ class DispatchBox(QWidget): self.mode.setPlaceholderText("请选择调度模式") self.button = PushButton("开始任务") + self.button.clicked.connect(self.start_task) Layout.addWidget(self.object) Layout.addWidget(self.mode) @@ -210,6 +242,40 @@ class DispatchBox(QWidget): Layout.addStretch(1) Layout.addWidget(self.button) + def start_task(self): + """开始任务""" + + if self.object.currentIndex() == -1: + logger.warning("未选择调度对象") + MainInfoBar.push_info_bar( + "warning", "未选择调度对象", "请选择后再开始任务", 5000 + ) + return None + + if self.mode.currentIndex() == -1: + logger.warning("未选择调度模式") + MainInfoBar.push_info_bar( + "warning", "未选择调度模式", "请选择后再开始任务", 5000 + ) + return None + + name = self.object.currentText().split(" - ")[1] + + if name in Config.running_list: + logger.warning(f"任务已存在:{name}") + MainInfoBar.push_info_bar("warning", "任务已存在", name, 5000) + return None + + if self.object.currentText().split(" - ")[0] == "队列": + + with (Config.app_path / f"config/QueueConfig/{name}.json").open( + mode="r", encoding="utf-8" + ) as f: + info = json.load(f) + + logger.info(f"用户添加任务:{name}") + Task_manager.add_task("主窗口", name, info) + class DispatchInfoCard(HeaderCardWidget): def __init__(self, parent=None): diff --git a/app/ui/else.py b/app/ui/else.py index 6023aeb..86ca53e 100644 --- a/app/ui/else.py +++ b/app/ui/else.py @@ -6,9 +6,9 @@ class Main(QWidget): def __init__(self, config: AppConfig, notify: Notification, crypto: CryptoHandler): super().__init__() - self.config = config - self.notify = notify - self.crypto = crypto + Config = config + Notify = notify + Crypto = crypto @@ -23,9 +23,9 @@ class Main(QWidget): # uiLoader.registerCustomWidget(BodyLabel) # # 导入ui配置 - # self.ui = uiLoader.load(self.config.app_path / "resources/gui/main.ui") + # self.ui = uiLoader.load(Config.app_path / "resources/gui/main.ui") # self.ui.setWindowIcon( - # QIcon(str(self.config.app_path / "resources/icons/AUTO_MAA.ico")) + # QIcon(str(Config.app_path / "resources/icons/AUTO_MAA.ico")) # ) # # 初始化控件 @@ -176,12 +176,12 @@ class Main(QWidget): # self.change_password.clicked.connect(self.change_PASSWORD) # 初始化线程 - self.MaaManager = MaaManager(self.config) + self.MaaManager = MaaManager(Config) self.MaaManager.question.connect(lambda: self.read("question_runner")) self.MaaManager.update_gui.connect(self.update_board) self.MaaManager.update_user_info.connect(self.change_user_info) - self.MaaManager.push_notification.connect(self.notify.push_notification) - self.MaaManager.send_mail.connect(self.notify.send_mail) + self.MaaManager.push_notification.connect(Notify.push_notification) + self.MaaManager.send_mail.connect(Notify.send_mail) self.MaaManager.accomplish.connect(lambda: self.maa_ender("自动代理_结束")) self.MaaManager.get_json.connect(self.get_maa_config) self.MaaManager.set_silence.connect(self.switch_silence) @@ -198,79 +198,79 @@ class Main(QWidget): # self.update_config() # 启动后直接开始代理 - if self.config.content["Default"]["SelfSet.IfProxyDirectly"] == "True": + if Config.content["Default"]["SelfSet.IfProxyDirectly"] == "True": self.maa_starter("自动代理") # def update_config(self): - # """将self.config中的程序配置同步至GUI界面""" + # """将Config中的程序配置同步至GUI界面""" # # 阻止GUI程序配置被立即读入程序形成死循环 # self.if_update_config = False # self.main_tab.setCurrentIndex( - # self.config.content["Default"]["SelfSet.MainIndex"] + # Config.content["Default"]["SelfSet.MainIndex"] # ) - # self.maa_path.setText(str(Path(self.config.content["Default"]["MaaSet.path"]))) - # self.routine.setValue(self.config.content["Default"]["TimeLimit.routine"]) + # self.maa_path.setText(str(Path(Config.content["Default"]["MaaSet.path"]))) + # self.routine.setValue(Config.content["Default"]["TimeLimit.routine"]) # self.annihilation.setValue( - # self.config.content["Default"]["TimeLimit.annihilation"] + # Config.content["Default"]["TimeLimit.annihilation"] # ) - # self.num.setValue(self.config.content["Default"]["TimesLimit.run"]) - # self.mail_address.setText(self.config.content["Default"]["SelfSet.MailAddress"]) - # self.boss_key.setText(self.config.content["Default"]["SelfSet.BossKey"]) + # self.num.setValue(Config.content["Default"]["TimesLimit.run"]) + # self.mail_address.setText(Config.content["Default"]["SelfSet.MailAddress"]) + # self.boss_key.setText(Config.content["Default"]["SelfSet.BossKey"]) # self.if_self_start.setChecked( - # bool(self.config.content["Default"]["SelfSet.IfSelfStart"] == "True") + # bool(Config.content["Default"]["SelfSet.IfSelfStart"] == "True") # ) # self.if_sleep.setChecked( - # bool(self.config.content["Default"]["SelfSet.IfAllowSleep"] == "True") + # bool(Config.content["Default"]["SelfSet.IfAllowSleep"] == "True") # ) # self.if_proxy_directly.setChecked( - # bool(self.config.content["Default"]["SelfSet.IfProxyDirectly"] == "True") + # bool(Config.content["Default"]["SelfSet.IfProxyDirectly"] == "True") # ) # self.if_send_mail.setChecked( - # bool(self.config.content["Default"]["SelfSet.IfSendMail"] == "True") + # bool(Config.content["Default"]["SelfSet.IfSendMail"] == "True") # ) # self.mail_address.setVisible( - # bool(self.config.content["Default"]["SelfSet.IfSendMail"] == "True") + # bool(Config.content["Default"]["SelfSet.IfSendMail"] == "True") # ) # self.if_send_error_only.setChecked( # bool( - # self.config.content["Default"]["SelfSet.IfSendMail.OnlyError"] == "True" + # Config.content["Default"]["SelfSet.IfSendMail.OnlyError"] == "True" # ) # ) # self.if_send_error_only.setVisible( - # bool(self.config.content["Default"]["SelfSet.IfSendMail"] == "True") + # bool(Config.content["Default"]["SelfSet.IfSendMail"] == "True") # ) # self.if_silence.setChecked( - # bool(self.config.content["Default"]["SelfSet.IfSilence"] == "True") + # bool(Config.content["Default"]["SelfSet.IfSilence"] == "True") # ) # self.boss_key.setVisible( - # bool(self.config.content["Default"]["SelfSet.IfSilence"] == "True") + # bool(Config.content["Default"]["SelfSet.IfSilence"] == "True") # ) # self.if_to_tray.setChecked( - # bool(self.config.content["Default"]["SelfSet.IfToTray"] == "True") + # bool(Config.content["Default"]["SelfSet.IfToTray"] == "True") # ) # for i in range(10): # self.start_time[i][0].setChecked( - # bool(self.config.content["Default"][f"TimeSet.set{i + 1}"] == "True") + # bool(Config.content["Default"][f"TimeSet.set{i + 1}"] == "True") # ) # time = QtCore.QTime( - # int(self.config.content["Default"][f"TimeSet.run{i + 1}"][:2]), - # int(self.config.content["Default"][f"TimeSet.run{i + 1}"][3:]), + # int(Config.content["Default"][f"TimeSet.run{i + 1}"][:2]), + # int(Config.content["Default"][f"TimeSet.run{i + 1}"][3:]), # ) # self.start_time[i][1].setTime(time) # self.if_update_config = True @@ -281,20 +281,20 @@ class Main(QWidget): self.update_user_info("normal") def change_config(self): - """将GUI中发生修改的程序配置同步至self.config变量""" + """将GUI中发生修改的程序配置同步至Config变量""" - # 验证能否写入self.config变量 + # 验证能否写入Config变量 if not self.if_update_config: return None # 验证MAA路径 - if Path(self.config.content["Default"]["MaaSet.path"]) != Path( + if Path(Config.content["Default"]["MaaSet.path"]) != Path( self.maa_path.text() ): if (Path(self.maa_path.text()) / "MAA.exe").exists() and ( Path(self.maa_path.text()) / "config/gui.json" ).exists(): - self.config.content["Default"]["MaaSet.path"] = str( + Config.content["Default"]["MaaSet.path"] = str( Path(self.maa_path.text()) ) self.get_maa_config(["Default"]) @@ -307,62 +307,62 @@ class Main(QWidget): if choice.exec(): pass - self.config.content["Default"][ + Config.content["Default"][ "SelfSet.MainIndex" ] = self.main_tab.currentIndex() - self.config.content["Default"]["TimeLimit.routine"] = self.routine.value() - self.config.content["Default"][ + Config.content["Default"]["TimeLimit.routine"] = self.routine.value() + Config.content["Default"][ "TimeLimit.annihilation" ] = self.annihilation.value() - self.config.content["Default"]["TimesLimit.run"] = self.num.value() - self.config.content["Default"]["SelfSet.MailAddress"] = self.mail_address.text() - self.config.content["Default"]["SelfSet.BossKey"] = self.boss_key.text() + Config.content["Default"]["TimesLimit.run"] = self.num.value() + Config.content["Default"]["SelfSet.MailAddress"] = self.mail_address.text() + Config.content["Default"]["SelfSet.BossKey"] = self.boss_key.text() if self.if_sleep.isChecked(): - self.config.content["Default"]["SelfSet.IfAllowSleep"] = "True" + Config.content["Default"]["SelfSet.IfAllowSleep"] = "True" else: - self.config.content["Default"]["SelfSet.IfAllowSleep"] = "False" + Config.content["Default"]["SelfSet.IfAllowSleep"] = "False" if self.if_self_start.isChecked(): - self.config.content["Default"]["SelfSet.IfSelfStart"] = "True" + Config.content["Default"]["SelfSet.IfSelfStart"] = "True" else: - self.config.content["Default"]["SelfSet.IfSelfStart"] = "False" + Config.content["Default"]["SelfSet.IfSelfStart"] = "False" if self.if_proxy_directly.isChecked(): - self.config.content["Default"]["SelfSet.IfProxyDirectly"] = "True" + Config.content["Default"]["SelfSet.IfProxyDirectly"] = "True" else: - self.config.content["Default"]["SelfSet.IfProxyDirectly"] = "False" + Config.content["Default"]["SelfSet.IfProxyDirectly"] = "False" if self.if_send_mail.isChecked(): - self.config.content["Default"]["SelfSet.IfSendMail"] = "True" + Config.content["Default"]["SelfSet.IfSendMail"] = "True" else: - self.config.content["Default"]["SelfSet.IfSendMail"] = "False" + Config.content["Default"]["SelfSet.IfSendMail"] = "False" if self.if_send_error_only.isChecked(): - self.config.content["Default"]["SelfSet.IfSendMail.OnlyError"] = "True" + Config.content["Default"]["SelfSet.IfSendMail.OnlyError"] = "True" else: - self.config.content["Default"]["SelfSet.IfSendMail.OnlyError"] = "False" + Config.content["Default"]["SelfSet.IfSendMail.OnlyError"] = "False" if self.if_silence.isChecked(): - self.config.content["Default"]["SelfSet.IfSilence"] = "True" + Config.content["Default"]["SelfSet.IfSilence"] = "True" else: - self.config.content["Default"]["SelfSet.IfSilence"] = "False" + Config.content["Default"]["SelfSet.IfSilence"] = "False" if self.if_to_tray.isChecked(): - self.config.content["Default"]["SelfSet.IfToTray"] = "True" + Config.content["Default"]["SelfSet.IfToTray"] = "True" else: - self.config.content["Default"]["SelfSet.IfToTray"] = "False" + Config.content["Default"]["SelfSet.IfToTray"] = "False" for i in range(10): if self.start_time[i][0].isChecked(): - self.config.content["Default"][f"TimeSet.set{i + 1}"] = "True" + Config.content["Default"][f"TimeSet.set{i + 1}"] = "True" else: - self.config.content["Default"][f"TimeSet.set{i + 1}"] = "False" + Config.content["Default"][f"TimeSet.set{i + 1}"] = "False" time = self.start_time[i][1].getTime().toString("HH:mm") - self.config.content["Default"][f"TimeSet.run{i + 1}"] = time + Config.content["Default"][f"TimeSet.run{i + 1}"] = time # 将配置信息同步至本地JSON文件 - self.config.save_config() + Config.save_config() # 同步程序配置至GUI self.update_config() @@ -374,22 +374,22 @@ class Main(QWidget): # 获取全局MAA配置文件 if info == ["Default"]: shutil.copy( - Path(self.config.content["Default"]["MaaSet.path"]) + Path(Config.content["Default"]["MaaSet.path"]) / "config/gui.json", - self.config.app_path / "data/MAAconfig/Default", + Config.app_path / "data/MAAconfig/Default", ) # 获取基建配置文件 # 获取高级用户MAA配置文件 elif info[2] in ["routine", "annihilation"]: ( - self.config.app_path + Config.app_path / f"data/MAAconfig/{self.user_mode_list[info[0]]}/{info[1]}/{info[2]}" ).mkdir(parents=True, exist_ok=True) shutil.copy( - Path(self.config.content["Default"]["MaaSet.path"]) + Path(Config.content["Default"]["MaaSet.path"]) / "config/gui.json", - self.config.app_path + Config.app_path / f"data/MAAconfig/{self.user_mode_list[info[0]]}/{info[1]}/{info[2]}", ) @@ -425,10 +425,10 @@ class Main(QWidget): # 检查MAA路径是否可用 if ( not ( - Path(self.config.content["Default"]["MaaSet.path"]) / "MAA.exe" + Path(Config.content["Default"]["MaaSet.path"]) / "MAA.exe" ).exists() and ( - Path(self.config.content["Default"]["MaaSet.path"]) / "config/gui.json" + Path(Config.content["Default"]["MaaSet.path"]) / "config/gui.json" ).exists() ): choice = MessageBox("错误", "您还未正确配置MAA路径!", self.ui) @@ -441,8 +441,8 @@ class Main(QWidget): # 配置参数 self.MaaManager.mode = mode - self.config.cur.execute("SELECT * FROM adminx WHERE True") - data = self.config.cur.fetchall() + Config.cur.execute("SELECT * FROM adminx WHERE True") + data = Config.cur.fetchall() self.MaaManager.data = [list(row) for row in data] # 启动执行线程 @@ -501,8 +501,8 @@ class Main(QWidget): elif "结束" in mode: shutil.copy( - self.config.app_path / "data/MAAconfig/Default/gui.json", - Path(self.config.content["Default"]["MaaSet.path"]) / "config", + Config.app_path / "data/MAAconfig/Default/gui.json", + Path(Config.content["Default"]["MaaSet.path"]) / "config", ) self.user_add.setEnabled(True) self.user_del.setEnabled(True) diff --git a/app/ui/main_window.py b/app/ui/main_window.py index 8de6687..f86e299 100644 --- a/app/ui/main_window.py +++ b/app/ui/main_window.py @@ -47,8 +47,8 @@ from qfluentwidgets import ( from PySide6.QtGui import QIcon, QCloseEvent from PySide6 import QtCore -from app.core import AppConfig, TaskManager, MainTimer, MainInfoBar -from app.services import Notification, CryptoHandler, SystemHandler +from app.core import Config, Task_manager, Main_timer, MainInfoBar +from app.services import Notify, Crypto, System from .setting import Setting from .member_manager import MemberManager from .queue_manager import QueueManager @@ -57,23 +57,10 @@ from .dispatch_center import DispatchCenter class AUTO_MAA(MSFluentWindow): - def __init__( - self, - config: AppConfig, - notify: Notification, - crypto: CryptoHandler, - system: SystemHandler, - ): + def __init__(self): super().__init__() - self.config = config - self.notify = notify - self.crypto = crypto - self.system = system - - self.setWindowIcon( - QIcon(str(self.config.app_path / "resources/icons/AUTO_MAA.ico")) - ) + self.setWindowIcon(QIcon(str(Config.app_path / "resources/icons/AUTO_MAA.ico"))) self.setWindowTitle("AUTO_MAA") setTheme(Theme.AUTO) @@ -83,14 +70,11 @@ class AUTO_MAA(MSFluentWindow): MainInfoBar.parent = self - self.task_manager = TaskManager(self.config, self.notify) - self.main_timer = MainTimer(self.config, self.system, self.task_manager, self) - # 创建主窗口 - self.setting = Setting(self.config, self.notify, self.crypto, self.system, self) - self.member_manager = MemberManager(self.config, self.notify, self.crypto, self) - self.queue_manager = QueueManager(self.config, self.notify, self) - self.dispatch_center = DispatchCenter(self.config, self.task_manager, self) + self.setting = Setting(self) + self.member_manager = MemberManager(self) + self.queue_manager = QueueManager(self) + self.dispatch_center = DispatchCenter(self) self.addSubInterface( self.setting, @@ -141,7 +125,7 @@ class AUTO_MAA(MSFluentWindow): # 创建系统托盘及其菜单 self.tray = QSystemTrayIcon( - QIcon(str(self.config.app_path / "resources/icons/AUTO_MAA.ico")), + QIcon(str(Config.app_path / "resources/icons/AUTO_MAA.ico")), self, ) self.tray.setToolTip("AUTO_MAA") @@ -184,7 +168,8 @@ class AUTO_MAA(MSFluentWindow): self.tray.setContextMenu(self.tray_menu) self.tray.activated.connect(self.on_tray_activated) - self.task_manager.create_gui.connect(self.dispatch_center.add_board) + Task_manager.create_gui.connect(self.dispatch_center.add_board) + Task_manager.connect_gui.connect(self.dispatch_center.connect_main_board) self.setting.ui.card_IfShowTray.checkedChanged.connect( lambda: self.show_ui("配置托盘") ) @@ -195,14 +180,16 @@ class AUTO_MAA(MSFluentWindow): def start_up_task(self) -> None: """启动时任务""" + logger.debug(f"{Config.app_path}, {Config.app_path_sys}") + # 加载配置 - qconfig.load(self.config.config_path, self.config.global_config) + qconfig.load(Config.config_path, Config.global_config) # 检查密码 self.setting.check_PASSWORD() # 检查更新 - if self.config.global_config.get(self.config.global_config.update_IfAutoUpdate): + if Config.global_config.get(Config.global_config.update_IfAutoUpdate): result = self.setting.get_update_info() if result == "已是最新版本~": MainInfoBar.push_info_bar("success", "更新检查", result, 3000) @@ -225,7 +212,7 @@ class AUTO_MAA(MSFluentWindow): def set_min_method(self) -> None: """设置最小化方法""" - if self.config.global_config.get(self.config.global_config.ui_IfToTray): + if Config.global_config.get(Config.global_config.ui_IfToTray): self.titleBar.minBtn.clicked.disconnect() self.titleBar.minBtn.clicked.connect(lambda: self.show_ui("隐藏到托盘")) @@ -243,7 +230,7 @@ class AUTO_MAA(MSFluentWindow): # def start_task(self, mode): # """调起对应任务""" # if self.main.MaaManager.isRunning(): - # self.notify.push_notification( + # Notify.push_notification( # f"无法运行{mode}!", # "当前已有任务正在运行,请在该任务结束后重试", # "当前已有任务正在运行,请在该任务结束后重试", @@ -261,14 +248,14 @@ class AUTO_MAA(MSFluentWindow): # ): # self.main.maa_ender(f"{self.main.MaaManager.mode}_结束") # elif "设置MAA" in self.main.MaaManager.mode: - # self.notify.push_notification( + # Notify.push_notification( # "正在设置MAA!", # "正在运行设置MAA任务,无法中止", # "正在运行设置MAA任务,无法中止", # 3, # ) # else: - # self.notify.push_notification( + # Notify.push_notification( # "无任务运行!", # "当前无任务正在运行,无需中止", # "当前无任务正在运行,无需中止", @@ -289,32 +276,28 @@ class AUTO_MAA(MSFluentWindow): size = list( map( int, - self.config.global_config.get( - self.config.global_config.ui_size - ).split("x"), + Config.global_config.get(Config.global_config.ui_size).split("x"), ) ) location = list( map( int, - self.config.global_config.get( - self.config.global_config.ui_location - ).split("x"), + Config.global_config.get(Config.global_config.ui_location).split( + "x" + ), ) ) self.setGeometry(location[0], location[1], size[0], size[1]) self.show() if not if_quick: - if self.config.global_config.get( - self.config.global_config.ui_maximized - ): + if Config.global_config.get(Config.global_config.ui_maximized): self.showMaximized() self.set_min_method() self.show_ui("配置托盘") elif mode == "配置托盘": - if self.config.global_config.get(self.config.global_config.ui_IfShowTray): + if Config.global_config.get(Config.global_config.ui_IfShowTray): self.tray.show() else: self.tray.hide() @@ -324,18 +307,18 @@ class AUTO_MAA(MSFluentWindow): # 保存窗口相关属性 if not self.isMaximized(): - self.config.global_config.set( - self.config.global_config.ui_size, + Config.global_config.set( + Config.global_config.ui_size, f"{self.geometry().width()}x{self.geometry().height()}", ) - self.config.global_config.set( - self.config.global_config.ui_location, + Config.global_config.set( + Config.global_config.ui_location, f"{self.geometry().x()}x{self.geometry().y()}", ) - self.config.global_config.set( - self.config.global_config.ui_maximized, self.isMaximized() + Config.global_config.set( + Config.global_config.ui_maximized, self.isMaximized() ) - self.config.global_config.save() + Config.global_config.save() # 隐藏主窗口 if not if_quick: @@ -356,6 +339,6 @@ class AUTO_MAA(MSFluentWindow): # self.main.MaaManager.wait() # 关闭数据库连接 - self.config.close_database() + Config.close_database() event.accept() diff --git a/app/ui/member_manager.py b/app/ui/member_manager.py index e3729b2..3db87ba 100644 --- a/app/ui/member_manager.py +++ b/app/ui/member_manager.py @@ -57,8 +57,8 @@ import datetime import json import shutil -from app.core import AppConfig, MaaConfig, MainInfoBar -from app.services import Notification, CryptoHandler +from app.core import Config, MainInfoBar +from app.services import Notify, Crypto from .Widget import ( InputMessageBox, LineEditSettingCard, @@ -71,26 +71,19 @@ class MemberManager(QWidget): def __init__( self, - config: AppConfig, - notify: Notification, - crypto: CryptoHandler, parent=None, ): super().__init__(parent) self.setObjectName("脚本管理") - self.config = config - self.notify = notify - self.crypto = crypto - setTheme(Theme.AUTO) layout = QVBoxLayout(self) self.tools = CommandBar() - self.member_manager = MemberSettingBox(self.config, self.crypto, self) + self.member_manager = MemberSettingBox(self) # 逐个添加动作 self.tools.addActions( @@ -147,14 +140,14 @@ class MemberManager(QWidget): index = len(self.member_manager.search_member()) + 1 qconfig.load( - self.config.app_path / f"config/MaaConfig/脚本_{index}/config.json", - self.config.maa_config, + Config.app_path / f"config/MaaConfig/脚本_{index}/config.json", + Config.maa_config, ) - self.config.clear_maa_config() - self.config.maa_config.save() + Config.clear_maa_config() + Config.maa_config.save() - self.config.open_database("Maa", f"脚本_{index}") - self.config.init_database("Maa") + Config.open_database("Maa", f"脚本_{index}") + Config.init_database("Maa") self.member_manager.add_MaaSettingBox(index) self.member_manager.switch_SettingBox(index) @@ -181,16 +174,12 @@ class MemberManager(QWidget): self.member_manager.clear_SettingBox() - shutil.rmtree(self.config.app_path / f"config/{type[0]}Config/{name}") + shutil.rmtree(Config.app_path / f"config/{type[0]}Config/{name}") self.change_queue(name, "禁用") for member in move_list: - if ( - self.config.app_path / f"config/{member[1]}Config/{member[0]}" - ).exists(): - ( - self.config.app_path / f"config/{member[1]}Config/{member[0]}" - ).rename( - self.config.app_path + if (Config.app_path / f"config/{member[1]}Config/{member[0]}").exists(): + (Config.app_path / f"config/{member[1]}Config/{member[0]}").rename( + Config.app_path / f"config/{member[1]}Config/脚本_{int(member[0][3:])-1}", ) self.change_queue(member[0], f"脚本_{int(member[0][3:])-1}") @@ -216,16 +205,16 @@ class MemberManager(QWidget): self.member_manager.clear_SettingBox() - (self.config.app_path / f"config/{type_right[0]}Config/脚本_{index}").rename( - self.config.app_path / f"config/{type_right[0]}Config/脚本_0" + (Config.app_path / f"config/{type_right[0]}Config/脚本_{index}").rename( + Config.app_path / f"config/{type_right[0]}Config/脚本_0" ) self.change_queue(f"脚本_{index}", "脚本_0") - (self.config.app_path / f"config/{type_left[0]}Config/脚本_{index-1}").rename( - self.config.app_path / f"config/{type_left[0]}Config/脚本_{index}" + (Config.app_path / f"config/{type_left[0]}Config/脚本_{index-1}").rename( + Config.app_path / f"config/{type_left[0]}Config/脚本_{index}" ) self.change_queue(f"脚本_{index-1}", f"脚本_{index}") - (self.config.app_path / f"config/{type_right[0]}Config/脚本_0").rename( - self.config.app_path / f"config/{type_right[0]}Config/脚本_{index-1}" + (Config.app_path / f"config/{type_right[0]}Config/脚本_0").rename( + Config.app_path / f"config/{type_right[0]}Config/脚本_{index-1}" ) self.change_queue("脚本_0", f"脚本_{index-1}") @@ -250,16 +239,16 @@ class MemberManager(QWidget): self.member_manager.clear_SettingBox() - (self.config.app_path / f"config/{type_left[0]}Config/脚本_{index}").rename( - self.config.app_path / f"config/{type_left[0]}Config/脚本_0", + (Config.app_path / f"config/{type_left[0]}Config/脚本_{index}").rename( + Config.app_path / f"config/{type_left[0]}Config/脚本_0", ) self.change_queue(f"脚本_{index}", "脚本_0") - (self.config.app_path / f"config/{type_right[0]}Config/脚本_{index+1}").rename( - self.config.app_path / f"config/{type_right[0]}Config/脚本_{index}", + (Config.app_path / f"config/{type_right[0]}Config/脚本_{index+1}").rename( + Config.app_path / f"config/{type_right[0]}Config/脚本_{index}", ) self.change_queue(f"脚本_{index+1}", f"脚本_{index}") - (self.config.app_path / f"config/{type_left[0]}Config/脚本_0").rename( - self.config.app_path / f"config/{type_left[0]}Config/脚本_{index+1}", + (Config.app_path / f"config/{type_left[0]}Config/脚本_0").rename( + Config.app_path / f"config/{type_left[0]}Config/脚本_{index+1}", ) self.change_queue("脚本_0", f"脚本_{index+1}") @@ -267,7 +256,7 @@ class MemberManager(QWidget): def show_password(self): - if self.config.PASSWORD == "": + if Config.PASSWORD == "": choice = InputMessageBox( self, "请输入管理密钥", @@ -275,21 +264,21 @@ class MemberManager(QWidget): "密码", ) if choice.exec() and choice.input.text() != "": - self.config.PASSWORD = choice.input.text() + Config.PASSWORD = choice.input.text() self.member_manager.script_list[ int(self.member_manager.pivot.currentRouteKey()[3:]) - 1 ].user_setting.user_list.update_user_info("normal") self.key.setIcon(FluentIcon.VIEW) self.key.setChecked(True) else: - self.config.PASSWORD = "" + Config.PASSWORD = "" self.member_manager.script_list[ int(self.member_manager.pivot.currentRouteKey()[3:]) - 1 ].user_setting.user_list.update_user_info("normal") self.key.setIcon(FluentIcon.HIDE) self.key.setChecked(False) else: - self.config.PASSWORD = "" + Config.PASSWORD = "" self.member_manager.script_list[ int(self.member_manager.pivot.currentRouteKey()[3:]) - 1 ].user_setting.user_list.update_user_info("normal") @@ -299,10 +288,8 @@ class MemberManager(QWidget): def change_queue(self, old: str, new: str) -> None: """修改调度队列配置文件的队列参数""" - if (self.config.app_path / "config/QueueConfig").exists(): - for json_file in (self.config.app_path / "config/QueueConfig").glob( - "*.json" - ): + if (Config.app_path / "config/QueueConfig").exists(): + for json_file in (Config.app_path / "config/QueueConfig").glob("*.json"): with json_file.open("r", encoding="utf-8") as f: data = json.load(f) @@ -325,12 +312,10 @@ class MemberManager(QWidget): class MemberSettingBox(QWidget): - def __init__(self, config: AppConfig, crypto: CryptoHandler, parent=None): + def __init__(self, parent=None): super().__init__(parent) self.setObjectName("脚本管理") - self.config = config - self.crypto = crypto self.pivot = Pivot(self) self.stackedWidget = QStackedWidget(self) @@ -354,16 +339,16 @@ class MemberSettingBox(QWidget): member_list = self.search_member() qconfig.load( - self.config.app_path / "config/临时.json", - self.config.maa_config, + Config.app_path / "config/临时.json", + Config.maa_config, ) - self.config.clear_maa_config() + Config.clear_maa_config() for member in member_list: if member[1] == "Maa": - self.config.open_database(member[1], member[0]) + Config.open_database(member[1], member[0]) self.add_MaaSettingBox(int(member[0][3:])) - if (self.config.app_path / "config/临时.json").exists(): - (self.config.app_path / "config/临时.json").unlink() + if (Config.app_path / "config/临时.json").exists(): + (Config.app_path / "config/临时.json").unlink() self.switch_SettingBox(index) @@ -381,11 +366,11 @@ class MemberSettingBox(QWidget): type = [_[1] for _ in member_list if _[0] == f"脚本_{index}"] qconfig.load( - self.config.app_path + Config.app_path / f"config/{type[0]}Config/{self.script_list[index-1].objectName()}/config.json", - self.config.maa_config, + Config.maa_config, ) - self.config.open_database(type[0], self.script_list[index - 1].objectName()) + Config.open_database(type[0], self.script_list[index - 1].objectName()) self.script_list[index - 1].user_setting.user_list.update_user_info("normal") if if_chang_pivot: @@ -401,18 +386,18 @@ class MemberSettingBox(QWidget): self.script_list.clear() self.pivot.clear() qconfig.load( - self.config.app_path / "config/临时.json", - self.config.maa_config, + Config.app_path / "config/临时.json", + Config.maa_config, ) - self.config.clear_maa_config() - if (self.config.app_path / "config/临时.json").exists(): - (self.config.app_path / "config/临时.json").unlink() - self.config.close_database() + Config.clear_maa_config() + if (Config.app_path / "config/临时.json").exists(): + (Config.app_path / "config/临时.json").unlink() + Config.close_database() def add_MaaSettingBox(self, uid: int) -> None: """添加一个MAA设置界面""" - maa_setting_box = MaaSettingBox(self.config, self.crypto, uid, self) + maa_setting_box = MaaSettingBox(uid, self) self.script_list.append(maa_setting_box) @@ -425,8 +410,8 @@ class MemberSettingBox(QWidget): member_list = [] - if (self.config.app_path / "config/MaaConfig").exists(): - for subdir in (self.config.app_path / "config/MaaConfig").iterdir(): + if (Config.app_path / "config/MaaConfig").exists(): + for subdir in (Config.app_path / "config/MaaConfig").iterdir(): if subdir.is_dir(): member_list.append([subdir.name, "Maa"]) @@ -435,14 +420,11 @@ class MemberSettingBox(QWidget): class MaaSettingBox(QWidget): - def __init__(self, config: AppConfig, crypto: CryptoHandler, uid: int, parent=None): + def __init__(self, uid: int, parent=None): super().__init__(parent) self.setObjectName(f"脚本_{uid}") - self.config = config - self.crypto = crypto - layout = QVBoxLayout() scrollArea = ScrollArea() @@ -451,10 +433,8 @@ class MaaSettingBox(QWidget): content_widget = QWidget() content_layout = QVBoxLayout(content_widget) - self.app_setting = self.AppSettingCard(self, self.config, uid) - self.user_setting = self.UserSettingCard( - self, self.objectName(), self.config, self.crypto - ) + self.app_setting = self.AppSettingCard(self, uid) + self.user_setting = self.UserSettingCard(self, self.objectName()) content_layout.addWidget(self.app_setting) content_layout.addWidget(self.user_setting) @@ -468,12 +448,11 @@ class MaaSettingBox(QWidget): class AppSettingCard(HeaderCardWidget): - def __init__(self, parent=None, config: AppConfig = None, uid: int = None): + def __init__(self, parent=None, uid: int = None): super().__init__(parent) self.setTitle("MAA实例") - self.config = config self.uid = uid Layout = QVBoxLayout() @@ -483,13 +462,13 @@ class MaaSettingBox(QWidget): FluentIcon.EDIT, "实例名称", "用于标识MAA实例的名称", - self.config.maa_config.MaaSet_Name, + Config.maa_config.MaaSet_Name, ) self.card_Path = PushSettingCard( "选择文件夹", FluentIcon.FOLDER, "MAA目录", - self.config.maa_config.get(self.config.maa_config.MaaSet_Path), + Config.maa_config.get(Config.maa_config.MaaSet_Path), ) self.card_Set = PushSettingCard( "设置", @@ -497,12 +476,12 @@ class MaaSettingBox(QWidget): "MAA全局配置", "简洁模式下MAA将继承全局配置", ) - self.RunSet = self.RunSetSettingCard(self, self.config.maa_config) + self.RunSet = self.RunSetSettingCard(self) self.card_Path.clicked.connect(self.PathClicked) - self.config.maa_config.MaaSet_Path.valueChanged.connect( + Config.maa_config.MaaSet_Path.valueChanged.connect( lambda: self.card_Path.setContent( - self.config.maa_config.get(self.config.maa_config.MaaSet_Path) + Config.maa_config.get(Config.maa_config.MaaSet_Path) ) ) @@ -518,8 +497,7 @@ class MaaSettingBox(QWidget): folder = QFileDialog.getExistingDirectory(self, "选择MAA目录", "./") if ( not folder - or self.config.maa_config.get(self.config.maa_config.MaaSet_Path) - == folder + or Config.maa_config.get(Config.maa_config.MaaSet_Path) == folder ): logger.warning("选择MAA目录时未选择文件夹或未更改文件夹") MainInfoBar.push_info_bar( @@ -536,20 +514,19 @@ class MaaSettingBox(QWidget): ) return None - (self.config.app_path / f"config/MaaConfig/脚本_{self.uid}/Default").mkdir( + (Config.app_path / f"config/MaaConfig/脚本_{self.uid}/Default").mkdir( parents=True, exist_ok=True ) shutil.copy( Path(folder) / "config/gui.json", - self.config.app_path - / f"config/MaaConfig/脚本_{self.uid}/Default/gui.json", + Config.app_path / f"config/MaaConfig/脚本_{self.uid}/Default/gui.json", ) - self.config.maa_config.set(self.config.maa_config.MaaSet_Path, folder) + Config.maa_config.set(Config.maa_config.MaaSet_Path, folder) self.card_Path.setContent(folder) class RunSetSettingCard(ExpandGroupSettingCard): - def __init__(self, parent=None, maa_config: MaaConfig = None): + def __init__(self, parent=None): super().__init__( FluentIcon.SETTING, "运行", @@ -557,8 +534,6 @@ class MaaSettingBox(QWidget): parent, ) - self.maa_config = maa_config - widget = QWidget() Layout = QVBoxLayout(widget) @@ -567,7 +542,7 @@ class MaaSettingBox(QWidget): FluentIcon.PAGE_RIGHT, "剿灭代理超时限制", "MAA日志无变化时间超过该阈值视为超时,单位为分钟", - self.maa_config.RunSet_AnnihilationTimeLimit, + Config.maa_config.RunSet_AnnihilationTimeLimit, ) self.RoutineTimeLimit = SpinBoxSettingCard( @@ -575,7 +550,7 @@ class MaaSettingBox(QWidget): FluentIcon.PAGE_RIGHT, "自动代理超时限制", "MAA日志无变化时间超过该阈值视为超时,单位为分钟", - self.maa_config.RunSet_RoutineTimeLimit, + Config.maa_config.RunSet_RoutineTimeLimit, ) self.RunTimesLimit = SpinBoxSettingCard( @@ -583,7 +558,7 @@ class MaaSettingBox(QWidget): FluentIcon.PAGE_RIGHT, "代理重试次数限制", "若超过该次数限制仍未完成代理,视为代理失败", - self.maa_config.RunSet_RunTimesLimit, + Config.maa_config.RunSet_RunTimesLimit, ) Layout.addWidget(self.AnnihilationTimeLimit) @@ -601,20 +576,16 @@ class MaaSettingBox(QWidget): self, parent=None, name: str = None, - config: AppConfig = None, - crypto: CryptoHandler = None, ): super().__init__(parent) self.setTitle("用户列表") - self.config = config - self.crypto = crypto self.name = name Layout = QVBoxLayout() - self.user_list = self.UserListBox(self.name, self.config, self.crypto, self) + self.user_list = self.UserListBox(self.name, self) self.tools = CommandBar() self.tools.addActions( @@ -656,8 +627,8 @@ class MaaSettingBox(QWidget): def set_more(self): - self.config.cur.execute("SELECT * FROM adminx WHERE True") - data = self.config.cur.fetchall() + Config.cur.execute("SELECT * FROM adminx WHERE True") + data = Config.cur.fetchall() if self.user_list.pivot.currentRouteKey() == f"{self.name}_简洁用户列表": @@ -685,12 +656,12 @@ class MaaSettingBox(QWidget): ) if file_path != "": ( - self.config.app_path + Config.app_path / f"config/MaaConfig/{self.name}/simple/{choice.input[0].currentIndex()}/infrastructure" ).mkdir(parents=True, exist_ok=True) shutil.copy( file_path, - self.config.app_path + Config.app_path / f"config/MaaConfig/{self.name}/simple/{choice.input[0].currentIndex()}/infrastructure", ) else: @@ -712,13 +683,9 @@ class MaaSettingBox(QWidget): class UserListBox(QWidget): - def __init__( - self, name: str, config: AppConfig, crypto: CryptoHandler, parent=None - ): + def __init__(self, name: str, parent=None): super().__init__(parent) self.setObjectName(f"{name}_用户列表") - self.config = config - self.crypto = crypto self.name = name @@ -874,8 +841,8 @@ class MaaSettingBox(QWidget): """将本地数据库中的用户配置同步至GUI的用户管理界面""" # 读入本地数据库 - self.config.cur.execute("SELECT * FROM adminx WHERE True") - data = self.config.cur.fetchall() + Config.cur.execute("SELECT * FROM adminx WHERE True") + data = Config.cur.fetchall() # 处理部分模式调整 if operation == "read_only": @@ -946,15 +913,13 @@ class MaaSettingBox(QWidget): QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled ) elif j == 12: - if self.config.PASSWORD == "": + if Config.PASSWORD == "": item = QTableWidgetItem("******") item.setFlags( QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled ) else: - result = self.crypto.decryptx( - value, self.config.PASSWORD - ) + result = Crypto.decryptx(value, Config.PASSWORD) item = QTableWidgetItem(result) if result == "管理密钥错误": item.setFlags( @@ -1022,15 +987,13 @@ class MaaSettingBox(QWidget): QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled ) elif j == 12: - if self.config.PASSWORD == "": + if Config.PASSWORD == "": item = QTableWidgetItem("******") item.setFlags( QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled ) else: - result = self.crypto.decryptx( - value, self.config.PASSWORD - ) + result = Crypto.decryptx(value, Config.PASSWORD) item = QTableWidgetItem(result) if result == "管理密钥错误": item.setFlags( @@ -1094,9 +1057,7 @@ class MaaSettingBox(QWidget): if item.column() in [6, 7, 8]: # 关卡号 # 导入与应用特殊关卡规则 games = {} - with self.config.gameid_path.open( - mode="r", encoding="utf-8" - ) as f: + with Config.gameid_path.open(mode="r", encoding="utf-8") as f: gameids = f.readlines() for line in gameids: if ":" in line: @@ -1104,11 +1065,11 @@ class MaaSettingBox(QWidget): games[game_in.strip()] = game_out.strip() text = games.get(text, text) if item.column() == 11: # 密码 - text = self.crypto.encryptx(text) + text = Crypto.encryptx(text) # 保存至本地数据库 if text != "": - self.config.cur.execute( + Config.cur.execute( f"UPDATE adminx SET {self.user_column[self.userlist_simple_index.index(item.column())]} = ? WHERE mode = 'simple' AND uid = ?", (text, item.row()), ) @@ -1122,15 +1083,15 @@ class MaaSettingBox(QWidget): self.update_user_info("normal") return None if item.column() == 6: # 密码 - text = self.crypto.encryptx(text) + text = Crypto.encryptx(text) # 保存至本地数据库 if text != "": - self.config.cur.execute( + Config.cur.execute( f"UPDATE adminx SET {self.user_column[self.userlist_beta_index.index(item.column())]} = ? WHERE mode = 'beta' AND uid = ?", (text, item.row()), ) - self.config.db.commit() + Config.db.commit() # 同步一般用户信息更改到GUI self.update_user_info("normal") @@ -1156,7 +1117,7 @@ class MaaSettingBox(QWidget): # or ( # index == 0 # and not ( - # self.config.app_path + # Config.app_path # / f"data/MAAconfig/{self.user_mode_list[index]}/{row}/{column}/gui.json" # ).exists() # ) @@ -1173,14 +1134,14 @@ class MaaSettingBox(QWidget): # 服务器 if mode == 0 and column == "server": server_list = ["Official", "Bilibili"] - self.config.cur.execute( + Config.cur.execute( f"UPDATE adminx SET server = ? WHERE mode = 'simple' AND uid = ?", (server_list[index], row), ) # 其它(启用/禁用) elif index in [0, 1]: index_list = ["y", "n"] - self.config.cur.execute( + Config.cur.execute( f"UPDATE adminx SET {column} = ? WHERE mode = ? AND uid = ?", ( index_list[index], @@ -1188,7 +1149,7 @@ class MaaSettingBox(QWidget): row, ), ) - self.config.db.commit() + Config.db.commit() # 同步用户组件信息修改到GUI self.update_user_info("normal") @@ -1201,15 +1162,15 @@ class MaaSettingBox(QWidget): set_book = ["simple", self.user_list_simple.rowCount()] elif "高级用户列表" in self.pivot.currentRouteKey(): set_book = ["beta", self.user_list_beta.rowCount()] - self.config.cur.execute( + Config.cur.execute( "INSERT INTO adminx VALUES('新用户','手机号码(官服)/B站ID(B服)','Official',-1,'y','2000-01-01','1-7','-','-','n','n','n',?,'无',0,?,?)", ( - self.crypto.encryptx("未设置"), + Crypto.encryptx("未设置"), set_book[0], set_book[1], ), ) - self.config.db.commit(), + Config.db.commit(), # 同步新用户至GUI self.update_user_info("normal") @@ -1248,14 +1209,14 @@ class MaaSettingBox(QWidget): return None # 确认待删除用户信息 - self.config.cur.execute( + Config.cur.execute( "SELECT * FROM adminx WHERE mode = ? AND uid = ?", ( self.user_mode_list[mode], row, ), ) - data = self.config.cur.fetchall() + data = Config.cur.fetchall() choice = MessageBox( "确认", f"确定要删除用户 {data[0][0]} 吗?", @@ -1273,26 +1234,26 @@ class MaaSettingBox(QWidget): # 删除用户 if choice.exec(): # 删除所选用户 - self.config.cur.execute( + Config.cur.execute( "DELETE FROM adminx WHERE mode = ? AND uid = ?", ( self.user_mode_list[mode], row, ), ) - self.config.db.commit() + Config.db.commit() if ( - self.config.app_path + Config.app_path / f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{row}" ).exists(): shutil.rmtree( - self.config.app_path + Config.app_path / f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{row}" ) # 后续用户补位 for i in range(row + 1, current_numb): - self.config.cur.execute( + Config.cur.execute( "UPDATE adminx SET uid = ? WHERE mode = ? AND uid = ?", ( i - 1, @@ -1300,16 +1261,16 @@ class MaaSettingBox(QWidget): i, ), ) - self.config.db.commit() + Config.db.commit() if ( - self.config.app_path + Config.app_path / f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{i}" ).exists(): ( - self.config.app_path + Config.app_path / f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{i}" ).rename( - self.config.app_path + Config.app_path / f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{i}" ) @@ -1350,7 +1311,7 @@ class MaaSettingBox(QWidget): if row == 0: return None - self.config.cur.execute( + Config.cur.execute( "UPDATE adminx SET uid = ? WHERE mode = ? AND uid = ?", ( -1, @@ -1358,7 +1319,7 @@ class MaaSettingBox(QWidget): row, ), ) - self.config.cur.execute( + Config.cur.execute( "UPDATE adminx SET uid = ? WHERE mode = ? AND uid = ?", ( row, @@ -1366,7 +1327,7 @@ class MaaSettingBox(QWidget): row - 1, ), ) - self.config.cur.execute( + Config.cur.execute( "UPDATE adminx SET uid = ? WHERE mode = ? AND uid = ?", ( row - 1, @@ -1374,39 +1335,39 @@ class MaaSettingBox(QWidget): -1, ), ) - self.config.db.commit() + Config.db.commit() if ( - self.config.app_path + Config.app_path / f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{row}" ).exists(): ( - self.config.app_path + Config.app_path / f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{row}" ).rename( - self.config.app_path + Config.app_path / f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{-1}" ) if ( - self.config.app_path + Config.app_path / f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{row - 1}" ).exists(): ( - self.config.app_path + Config.app_path / f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{row - 1}" ).rename( - self.config.app_path + Config.app_path / f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{row}" ) if ( - self.config.app_path + Config.app_path / f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{-1}" ).exists(): ( - self.config.app_path + Config.app_path / f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{-1}" ).rename( - self.config.app_path + Config.app_path / f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{row - 1}" ) @@ -1452,7 +1413,7 @@ class MaaSettingBox(QWidget): if row == current_numb - 1: return None - self.config.cur.execute( + Config.cur.execute( "UPDATE adminx SET uid = ? WHERE mode = ? AND uid = ?", ( -1, @@ -1460,7 +1421,7 @@ class MaaSettingBox(QWidget): row, ), ) - self.config.cur.execute( + Config.cur.execute( "UPDATE adminx SET uid = ? WHERE mode = ? AND uid = ?", ( row, @@ -1468,7 +1429,7 @@ class MaaSettingBox(QWidget): row + 1, ), ) - self.config.cur.execute( + Config.cur.execute( "UPDATE adminx SET uid = ? WHERE mode = ? AND uid = ?", ( row + 1, @@ -1476,39 +1437,39 @@ class MaaSettingBox(QWidget): -1, ), ) - self.config.db.commit() + Config.db.commit() if ( - self.config.app_path + Config.app_path / f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{row}" ).exists(): ( - self.config.app_path + Config.app_path / f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{row}" ).rename( - self.config.app_path + Config.app_path / f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{-1}" ) if ( - self.config.app_path + Config.app_path / f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{row + 1}" ).exists(): ( - self.config.app_path + Config.app_path / f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{row + 1}" ).rename( - self.config.app_path + Config.app_path / f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{row}" ) if ( - self.config.app_path + Config.app_path / f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{-1}" ).exists(): ( - self.config.app_path + Config.app_path / f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{-1}" ).rename( - self.config.app_path + Config.app_path / f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{row + 1}" ) @@ -1550,14 +1511,14 @@ class MaaSettingBox(QWidget): return None # 确认待切换用户信息 - self.config.cur.execute( + Config.cur.execute( "SELECT * FROM adminx WHERE mode = ? AND uid = ?", ( self.user_mode_list[mode], row, ), ) - data = self.config.cur.fetchall() + data = Config.cur.fetchall() mode_list = ["简洁", "高级"] choice = MessageBox( @@ -1576,15 +1537,15 @@ class MaaSettingBox(QWidget): # 切换用户 if choice.exec(): - self.config.cur.execute("SELECT * FROM adminx WHERE True") - data = self.config.cur.fetchall() + Config.cur.execute("SELECT * FROM adminx WHERE True") + data = Config.cur.fetchall() if mode == 0: current_numb = self.user_list_simple.rowCount() elif mode == 1: current_numb = self.user_list_beta.rowCount() # 切换所选用户 other_numb = len(data) - current_numb - self.config.cur.execute( + Config.cur.execute( "UPDATE adminx SET mode = ?, uid = ? WHERE mode = ? AND uid = ?", ( self.user_mode_list[1 - mode], @@ -1593,20 +1554,20 @@ class MaaSettingBox(QWidget): row, ), ) - self.config.db.commit() + Config.db.commit() if ( - self.config.app_path + Config.app_path / f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{row}" ).exists(): shutil.move( - self.config.app_path + Config.app_path / f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{row}", - self.config.app_path + Config.app_path / f"config/MaaConfig/{self.name}/{self.user_mode_list[1 - mode]}/{other_numb}", ) # 后续用户补位 for i in range(row + 1, current_numb): - self.config.cur.execute( + Config.cur.execute( "UPDATE adminx SET uid = ? WHERE mode = ? AND uid = ?", ( i - 1, @@ -1614,16 +1575,16 @@ class MaaSettingBox(QWidget): i, ), ) - self.config.db.commit(), + Config.db.commit(), if ( - self.config.app_path + Config.app_path / f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{i}" ).exists(): ( - self.config.app_path + Config.app_path / f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{i}" ).rename( - self.config.app_path + Config.app_path / f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{i - 1}" ) diff --git a/app/ui/queue_manager.py b/app/ui/queue_manager.py index 0ef3a4f..3e32909 100644 --- a/app/ui/queue_manager.py +++ b/app/ui/queue_manager.py @@ -53,8 +53,8 @@ import shutil uiLoader = QUiLoader() -from app.core import AppConfig, QueueConfig -from app.services import Notification +from app.core import Config +from app.services import Notify from .Widget import ( LineEditSettingCard, TimeEditSettingCard, @@ -66,24 +66,19 @@ class QueueManager(QWidget): def __init__( self, - config: AppConfig, - notify: Notification, parent=None, ): super().__init__(parent) self.setObjectName("调度队列") - self.config = config - self.notify = notify - setTheme(Theme.AUTO) layout = QVBoxLayout(self) self.tools = CommandBar() - self.queue_manager = QueueSettingBox(self.config, self) + self.queue_manager = QueueSettingBox(self) # 逐个添加动作 self.tools.addActions( @@ -119,11 +114,11 @@ class QueueManager(QWidget): index = len(self.queue_manager.search_queue()) + 1 qconfig.load( - self.config.app_path / f"config/QueueConfig/调度队列_{index}.json", - self.config.queue_config, + Config.app_path / f"config/QueueConfig/调度队列_{index}.json", + Config.queue_config, ) - self.config.clear_queue_config() - self.config.queue_config.save() + Config.clear_queue_config() + Config.queue_config.save() self.queue_manager.add_QueueSettingBox(index) self.queue_manager.switch_SettingBox(index) @@ -150,15 +145,11 @@ class QueueManager(QWidget): self.queue_manager.clear_SettingBox() - (self.config.app_path / f"config/QueueConfig/{name}.json").unlink() + (Config.app_path / f"config/QueueConfig/{name}.json").unlink() for queue in move_list: - if ( - self.config.app_path / f"config/QueueConfig/{queue[0]}.json" - ).exists(): - ( - self.config.app_path / f"config/QueueConfig/{queue[0]}.json" - ).rename( - self.config.app_path + if (Config.app_path / f"config/QueueConfig/{queue[0]}.json").exists(): + (Config.app_path / f"config/QueueConfig/{queue[0]}.json").rename( + Config.app_path / f"config/QueueConfig/调度队列_{int(queue[0][5:])-1}.json", ) @@ -179,15 +170,15 @@ class QueueManager(QWidget): self.queue_manager.clear_SettingBox() - (self.config.app_path / f"config/QueueConfig/调度队列_{index}.json").rename( - self.config.app_path / f"config/QueueConfig/调度队列_0.json", + (Config.app_path / f"config/QueueConfig/调度队列_{index}.json").rename( + Config.app_path / f"config/QueueConfig/调度队列_0.json", ) shutil.move( - str(self.config.app_path / f"config/QueueConfig/调度队列_{index-1}.json"), - str(self.config.app_path / f"config/QueueConfig/调度队列_{index}.json"), + str(Config.app_path / f"config/QueueConfig/调度队列_{index-1}.json"), + str(Config.app_path / f"config/QueueConfig/调度队列_{index}.json"), ) - (self.config.app_path / f"config/QueueConfig/调度队列_0.json").rename( - self.config.app_path / f"config/QueueConfig/调度队列_{index-1}.json", + (Config.app_path / f"config/QueueConfig/调度队列_0.json").rename( + Config.app_path / f"config/QueueConfig/调度队列_{index-1}.json", ) self.queue_manager.show_SettingBox(index - 1) @@ -208,14 +199,14 @@ class QueueManager(QWidget): self.queue_manager.clear_SettingBox() - (self.config.app_path / f"config/QueueConfig/调度队列_{index}.json").rename( - self.config.app_path / f"config/QueueConfig/调度队列_0.json", + (Config.app_path / f"config/QueueConfig/调度队列_{index}.json").rename( + Config.app_path / f"config/QueueConfig/调度队列_0.json", ) - (self.config.app_path / f"config/QueueConfig/调度队列_{index+1}.json").rename( - self.config.app_path / f"config/QueueConfig/调度队列_{index}.json", + (Config.app_path / f"config/QueueConfig/调度队列_{index+1}.json").rename( + Config.app_path / f"config/QueueConfig/调度队列_{index}.json", ) - (self.config.app_path / f"config/QueueConfig/调度队列_0.json").rename( - self.config.app_path / f"config/QueueConfig/调度队列_{index+1}.json", + (Config.app_path / f"config/QueueConfig/调度队列_0.json").rename( + Config.app_path / f"config/QueueConfig/调度队列_{index+1}.json", ) self.queue_manager.show_SettingBox(index + 1) @@ -233,11 +224,10 @@ class QueueManager(QWidget): class QueueSettingBox(QWidget): - def __init__(self, config: AppConfig, parent=None): + def __init__(self, parent=None): super().__init__(parent) self.setObjectName("调度队列管理") - self.config = config self.pivot = Pivot(self) self.stackedWidget = QStackedWidget(self) @@ -261,14 +251,14 @@ class QueueSettingBox(QWidget): queue_list = self.search_queue() qconfig.load( - self.config.app_path / "config/临时.json", - self.config.queue_config, + Config.app_path / "config/临时.json", + Config.queue_config, ) - self.config.clear_queue_config() + Config.clear_queue_config() for queue in queue_list: self.add_QueueSettingBox(int(queue[0][5:])) - if (self.config.app_path / "config/临时.json").exists(): - (self.config.app_path / "config/临时.json").unlink() + if (Config.app_path / "config/临时.json").exists(): + (Config.app_path / "config/临时.json").unlink() self.switch_SettingBox(index) @@ -284,9 +274,9 @@ class QueueSettingBox(QWidget): return None qconfig.load( - self.config.app_path + Config.app_path / f"config/QueueConfig/{self.script_list[index-1].objectName()}.json", - self.config.queue_config, + Config.queue_config, ) if if_change_pivot: @@ -302,17 +292,17 @@ class QueueSettingBox(QWidget): self.script_list.clear() self.pivot.clear() qconfig.load( - self.config.app_path / "config/临时.json", - self.config.queue_config, + Config.app_path / "config/临时.json", + Config.queue_config, ) - self.config.clear_queue_config() - if (self.config.app_path / "config/临时.json").exists(): - (self.config.app_path / "config/临时.json").unlink() + Config.clear_queue_config() + if (Config.app_path / "config/临时.json").exists(): + (Config.app_path / "config/临时.json").unlink() def add_QueueSettingBox(self, uid: int) -> None: """添加一个调度队列设置界面""" - maa_setting_box = QueueMemberSettingBox(self.config, uid, self) + maa_setting_box = QueueMemberSettingBox(uid, self) self.script_list.append(maa_setting_box) @@ -325,10 +315,8 @@ class QueueSettingBox(QWidget): queue_list = [] - if (self.config.app_path / "config/QueueConfig").exists(): - for json_file in (self.config.app_path / "config/QueueConfig").glob( - "*.json" - ): + if (Config.app_path / "config/QueueConfig").exists(): + for json_file in (Config.app_path / "config/QueueConfig").glob("*.json"): with json_file.open("r", encoding="utf-8") as f: info = json.load(f) queue_list.append([json_file.stem, info["QueueSet"]["Name"]]) @@ -338,13 +326,11 @@ class QueueSettingBox(QWidget): class QueueMemberSettingBox(QWidget): - def __init__(self, config: AppConfig, uid: int, parent=None): + def __init__(self, uid: int, parent=None): super().__init__(parent) self.setObjectName(f"调度队列_{uid}") - self.config = config - layout = QVBoxLayout() scrollArea = ScrollArea() @@ -353,10 +339,10 @@ class QueueMemberSettingBox(QWidget): content_widget = QWidget() content_layout = QVBoxLayout(content_widget) - self.queue_set = self.QueueSetSettingCard(self, self.config.queue_config) - self.time = self.TimeSettingCard(self, self.config.queue_config) - self.task = self.TaskSettingCard(self, self.config) - self.history = self.HistoryCard(self, self.config, f"调度队列_{uid}") + self.queue_set = self.QueueSetSettingCard(self) + self.time = self.TimeSettingCard(self) + self.task = self.TaskSettingCard(self) + self.history = self.HistoryCard(self, f"调度队列_{uid}") content_layout.addWidget(self.queue_set) content_layout.addWidget(self.time) @@ -372,13 +358,11 @@ class QueueMemberSettingBox(QWidget): class QueueSetSettingCard(HeaderCardWidget): - def __init__(self, parent=None, queue_config: QueueConfig = None): + def __init__(self, parent=None): super().__init__(parent) self.setTitle("队列设置") - self.queue_config = queue_config - Layout = QVBoxLayout() self.card_Name = LineEditSettingCard( @@ -386,13 +370,13 @@ class QueueMemberSettingBox(QWidget): FluentIcon.EDIT, "调度队列名称", "用于标识调度队列的名称", - self.queue_config.queueSet_Name, + Config.queue_config.queueSet_Name, ) self.card_Enable = SwitchSettingCard( FluentIcon.HOME, "状态", "调度队列状态", - self.queue_config.queueSet_Enabled, + Config.queue_config.queueSet_Enabled, ) Layout.addWidget(self.card_Name) @@ -402,13 +386,11 @@ class QueueMemberSettingBox(QWidget): class TimeSettingCard(HeaderCardWidget): - def __init__(self, parent=None, queue_config: QueueConfig = None): + def __init__(self, parent=None): super().__init__(parent) self.setTitle("定时设置") - self.queue_config = queue_config - widget_1 = QWidget() Layout_1 = QVBoxLayout(widget_1) widget_2 = QWidget() @@ -419,71 +401,71 @@ class QueueMemberSettingBox(QWidget): FluentIcon.STOP_WATCH, "定时 1", "", - self.queue_config.time_TimeEnabled_0, - self.queue_config.time_TimeSet_0, + Config.queue_config.time_TimeEnabled_0, + Config.queue_config.time_TimeSet_0, ) self.card_Time_1 = TimeEditSettingCard( FluentIcon.STOP_WATCH, "定时 2", "", - self.queue_config.time_TimeEnabled_1, - self.queue_config.time_TimeSet_1, + Config.queue_config.time_TimeEnabled_1, + Config.queue_config.time_TimeSet_1, ) self.card_Time_2 = TimeEditSettingCard( FluentIcon.STOP_WATCH, "定时 3", "", - self.queue_config.time_TimeEnabled_2, - self.queue_config.time_TimeSet_2, + Config.queue_config.time_TimeEnabled_2, + Config.queue_config.time_TimeSet_2, ) self.card_Time_3 = TimeEditSettingCard( FluentIcon.STOP_WATCH, "定时 4", "", - self.queue_config.time_TimeEnabled_3, - self.queue_config.time_TimeSet_3, + Config.queue_config.time_TimeEnabled_3, + Config.queue_config.time_TimeSet_3, ) self.card_Time_4 = TimeEditSettingCard( FluentIcon.STOP_WATCH, "定时 5", "", - self.queue_config.time_TimeEnabled_4, - self.queue_config.time_TimeSet_4, + Config.queue_config.time_TimeEnabled_4, + Config.queue_config.time_TimeSet_4, ) self.card_Time_5 = TimeEditSettingCard( FluentIcon.STOP_WATCH, "定时 6", "", - self.queue_config.time_TimeEnabled_5, - self.queue_config.time_TimeSet_5, + Config.queue_config.time_TimeEnabled_5, + Config.queue_config.time_TimeSet_5, ) self.card_Time_6 = TimeEditSettingCard( FluentIcon.STOP_WATCH, "定时 7", "", - self.queue_config.time_TimeEnabled_6, - self.queue_config.time_TimeSet_6, + Config.queue_config.time_TimeEnabled_6, + Config.queue_config.time_TimeSet_6, ) self.card_Time_7 = TimeEditSettingCard( FluentIcon.STOP_WATCH, "定时 8", "", - self.queue_config.time_TimeEnabled_7, - self.queue_config.time_TimeSet_7, + Config.queue_config.time_TimeEnabled_7, + Config.queue_config.time_TimeSet_7, ) self.card_Time_8 = TimeEditSettingCard( FluentIcon.STOP_WATCH, "定时 9", "", - self.queue_config.time_TimeEnabled_8, - self.queue_config.time_TimeSet_8, + Config.queue_config.time_TimeEnabled_8, + Config.queue_config.time_TimeSet_8, ) self.card_Time_9 = TimeEditSettingCard( FluentIcon.STOP_WATCH, "定时 10", "", - self.queue_config.time_TimeEnabled_9, - self.queue_config.time_TimeSet_9, + Config.queue_config.time_TimeEnabled_9, + Config.queue_config.time_TimeSet_9, ) Layout_1.addWidget(self.card_Time_0) @@ -503,20 +485,17 @@ class QueueMemberSettingBox(QWidget): class TaskSettingCard(HeaderCardWidget): - def __init__(self, parent=None, config: AppConfig = None): + def __init__(self, parent=None): super().__init__(parent) self.setTitle("任务队列") - self.config = config - self.queue_config = config.queue_config - Layout = QVBoxLayout() member_list = self.search_member() self.card_Member_1 = NoOptionComboBoxSettingCard( - self.queue_config.queue_Member_1, + Config.queue_config.queue_Member_1, FluentIcon.APPLICATION, "任务实例 1", "第一个调起的脚本任务实例", @@ -524,7 +503,7 @@ class QueueMemberSettingBox(QWidget): member_list[1], ) self.card_Member_2 = NoOptionComboBoxSettingCard( - self.queue_config.queue_Member_2, + Config.queue_config.queue_Member_2, FluentIcon.APPLICATION, "任务实例 2", "第二个调起的脚本任务实例", @@ -532,7 +511,7 @@ class QueueMemberSettingBox(QWidget): member_list[1], ) self.card_Member_3 = NoOptionComboBoxSettingCard( - self.queue_config.queue_Member_3, + Config.queue_config.queue_Member_3, FluentIcon.APPLICATION, "任务实例 3", "第三个调起的脚本任务实例", @@ -540,7 +519,7 @@ class QueueMemberSettingBox(QWidget): member_list[1], ) self.card_Member_4 = NoOptionComboBoxSettingCard( - self.queue_config.queue_Member_4, + Config.queue_config.queue_Member_4, FluentIcon.APPLICATION, "任务实例 4", "第四个调起的脚本任务实例", @@ -548,7 +527,7 @@ class QueueMemberSettingBox(QWidget): member_list[1], ) self.card_Member_5 = NoOptionComboBoxSettingCard( - self.queue_config.queue_Member_5, + Config.queue_config.queue_Member_5, FluentIcon.APPLICATION, "任务实例 5", "第五个调起的脚本任务实例", @@ -556,7 +535,7 @@ class QueueMemberSettingBox(QWidget): member_list[1], ) self.card_Member_6 = NoOptionComboBoxSettingCard( - self.queue_config.queue_Member_6, + Config.queue_config.queue_Member_6, FluentIcon.APPLICATION, "任务实例 6", "第六个调起的脚本任务实例", @@ -564,7 +543,7 @@ class QueueMemberSettingBox(QWidget): member_list[1], ) self.card_Member_7 = NoOptionComboBoxSettingCard( - self.queue_config.queue_Member_7, + Config.queue_config.queue_Member_7, FluentIcon.APPLICATION, "任务实例 7", "第七个调起的脚本任务实例", @@ -572,7 +551,7 @@ class QueueMemberSettingBox(QWidget): member_list[1], ) self.card_Member_8 = NoOptionComboBoxSettingCard( - self.queue_config.queue_Member_8, + Config.queue_config.queue_Member_8, FluentIcon.APPLICATION, "任务实例 8", "第八个调起的脚本任务实例", @@ -580,7 +559,7 @@ class QueueMemberSettingBox(QWidget): member_list[1], ) self.card_Member_9 = NoOptionComboBoxSettingCard( - self.queue_config.queue_Member_9, + Config.queue_config.queue_Member_9, FluentIcon.APPLICATION, "任务实例 9", "第九个调起的脚本任务实例", @@ -588,7 +567,7 @@ class QueueMemberSettingBox(QWidget): member_list[1], ) self.card_Member_10 = NoOptionComboBoxSettingCard( - self.queue_config.queue_Member_10, + Config.queue_config.queue_Member_10, FluentIcon.APPLICATION, "任务实例 10", "第十个调起的脚本任务实例", @@ -615,8 +594,8 @@ class QueueMemberSettingBox(QWidget): member_list_name = ["禁用"] member_list_text = ["未启用"] - if (self.config.app_path / "config/MaaConfig").exists(): - for subdir in (self.config.app_path / "config/MaaConfig").iterdir(): + if (Config.app_path / "config/MaaConfig").exists(): + for subdir in (Config.app_path / "config/MaaConfig").iterdir(): if subdir.is_dir(): member_list_name.append(subdir.name) with (subdir / "config.json").open("r", encoding="utf-8") as f: @@ -632,15 +611,13 @@ class QueueMemberSettingBox(QWidget): class HistoryCard(HeaderCardWidget): - def __init__(self, parent=None, config: AppConfig = None, name: str = None): + def __init__(self, parent=None, name: str = None): super().__init__(parent) self.setTitle("历史运行记录") - self.config = config - self.text = TextBrowser() self.text.setMinimumHeight(300) - history = self.config.get_history(name) + history = Config.get_history(name) self.text.setPlainText(history["History"]) self.viewLayout.addWidget(self.text) diff --git a/app/ui/setting.py b/app/ui/setting.py index d130ec8..3236ad0 100644 --- a/app/ui/setting.py +++ b/app/ui/setting.py @@ -51,8 +51,8 @@ import requests uiLoader = QUiLoader() -from app.core import AppConfig, MainInfoBar -from app.services import Notification, CryptoHandler, SystemHandler +from app.core import Config, MainInfoBar +from app.services import Notify, Crypto, System from app.utils import Updater, version_text from .Widget import InputMessageBox, LineEditSettingCard @@ -61,21 +61,12 @@ class Setting(QWidget): def __init__( self, - config: AppConfig, - notify: Notification, - crypto: CryptoHandler, - system: SystemHandler, parent=None, ): super().__init__(parent) self.setObjectName("设置") - self.config = config - self.notify = notify - self.crypto = crypto - self.system = system - setTheme(Theme.AUTO) layout = QVBoxLayout() @@ -86,16 +77,16 @@ class Setting(QWidget): content_widget = QWidget() content_layout = QVBoxLayout(content_widget) - self.function = FunctionSettingCard(self, self.config) - self.start = StartSettingCard(self, self.config) - self.ui = UiSettingCard(self, self.config) - self.notification = NotifySettingCard(self, self.config) + self.function = FunctionSettingCard(self) + self.start = StartSettingCard(self) + self.ui = UiSettingCard(self) + self.notification = NotifySettingCard(self) self.security = SecuritySettingCard(self) - self.updater = UpdaterSettingCard(self, self.config) - self.other = OtherSettingCard(self, self.config) + self.updater = UpdaterSettingCard(self) + self.other = OtherSettingCard(self) - self.function.card_IfAllowSleep.checkedChanged.connect(self.system.set_Sleep) - self.start.card_IfSelfStart.checkedChanged.connect(self.system.set_SelfStart) + self.function.card_IfAllowSleep.checkedChanged.connect(System.set_Sleep) + self.start.card_IfSelfStart.checkedChanged.connect(System.set_SelfStart) self.security.card_changePASSWORD.clicked.connect(self.change_PASSWORD) self.updater.card_CheckUpdate.clicked.connect(self.get_update) self.other.card_Tips.clicked.connect(self.show_tips) @@ -117,7 +108,7 @@ class Setting(QWidget): def check_PASSWORD(self) -> None: """检查并配置管理密钥""" - if self.config.key_path.exists(): + if Config.key_path.exists(): return None while True: @@ -129,7 +120,7 @@ class Setting(QWidget): "密码", ) if choice.exec() and choice.input.text() != "": - self.crypto.get_PASSWORD(choice.input.text()) + Crypto.get_PASSWORD(choice.input.text()) break else: choice = MessageBox( @@ -146,8 +137,8 @@ class Setting(QWidget): """修改管理密钥""" # 获取用户信息 - self.config.cur.execute("SELECT * FROM adminx WHERE True") - data = self.config.cur.fetchall() + Config.cur.execute("SELECT * FROM adminx WHERE True") + data = Config.cur.fetchall() if len(data) == 0: @@ -168,7 +159,7 @@ class Setting(QWidget): ) if choice.exec() and choice.input.text() != "": # 修改管理密钥 - self.crypto.get_PASSWORD(choice.input.text()) + Crypto.get_PASSWORD(choice.input.text()) choice = MessageBox( "操作成功", "管理密钥修改成功", @@ -202,7 +193,7 @@ class Setting(QWidget): if choice.exec() and choice.input.text() != "": # 验证旧管理密钥 - if self.crypto.check_PASSWORD(choice.input.text()): + if Crypto.check_PASSWORD(choice.input.text()): PASSWORD_old = choice.input.text() # 获取新的管理密钥 @@ -217,7 +208,7 @@ class Setting(QWidget): if choice.exec() and choice.input.text() != "": # 修改管理密钥 - self.crypto.change_PASSWORD( + Crypto.change_PASSWORD( data, PASSWORD_old, choice.input.text() ) choice = MessageBox( @@ -261,7 +252,7 @@ class Setting(QWidget): """检查主程序版本更新,返回更新信息""" # 从本地版本信息文件获取当前版本信息 - with self.config.version_path.open(mode="r", encoding="utf-8") as f: + with Config.version_path.open(mode="r", encoding="utf-8") as f: version_current = json.load(f) main_version_current = list( map(int, version_current["main_version"].split(".")) @@ -297,7 +288,7 @@ class Setting(QWidget): """检查版本更新,调起文件下载进程""" # 从本地版本信息文件获取当前版本信息 - with self.config.version_path.open(mode="r", encoding="utf-8") as f: + with Config.version_path.open(mode="r", encoding="utf-8") as f: version_current = json.load(f) main_version_current = list( map(int, version_current["main_version"].split(".")) @@ -306,7 +297,7 @@ class Setting(QWidget): map(int, version_current["updater_version"].split(".")) ) # 检查更新器是否存在 - if not (self.config.app_path / "Updater.exe").exists(): + if not (Config.app_path / "Updater.exe").exists(): updater_version_current = [0, 0, 0, 0] # 从远程服务器获取最新版本信息 @@ -369,7 +360,7 @@ class Setting(QWidget): if updater_version_remote > updater_version_current: # 创建更新进程 self.updater = Updater( - self.config.app_path, + Config.app_path, "AUTO_MAA更新器", main_version_remote, updater_version_remote, @@ -392,7 +383,7 @@ class Setting(QWidget): """更新主程序""" subprocess.Popen( - str(self.config.app_path / "Updater.exe"), + str(Config.app_path / "Updater.exe"), shell=True, creationflags=subprocess.CREATE_NO_WINDOW, ) @@ -411,27 +402,25 @@ class Setting(QWidget): class FunctionSettingCard(HeaderCardWidget): - def __init__(self, parent=None, config: AppConfig = None): + def __init__(self, parent=None): super().__init__(parent) self.setTitle("功能") - self.config = config.global_config - Layout = QVBoxLayout() self.card_IfAllowSleep = SwitchSettingCard( icon=FluentIcon.PAGE_RIGHT, title="启动时阻止系统休眠", content="仅阻止电脑自动休眠,不会影响屏幕是否熄灭", - configItem=self.config.function_IfAllowSleep, + configItem=Config.global_config.function_IfAllowSleep, ) self.card_IfSilence = SwitchSettingCard( icon=FluentIcon.PAGE_RIGHT, title="静默模式", content="将各代理窗口置于后台运行,减少对前台的干扰", - configItem=self.config.function_IfSilence, + configItem=Config.global_config.function_IfSilence, ) # 添加各组到设置卡中 @@ -443,27 +432,25 @@ class FunctionSettingCard(HeaderCardWidget): class StartSettingCard(HeaderCardWidget): - def __init__(self, parent=None, config: AppConfig = None): + def __init__(self, parent=None): super().__init__(parent) self.setTitle("启动") - self.config = config.global_config - Layout = QVBoxLayout() self.card_IfSelfStart = SwitchSettingCard( icon=FluentIcon.PAGE_RIGHT, title="开机时自动启动", content="将AUTO_MAA添加到开机启动项", - configItem=self.config.start_IfSelfStart, + configItem=Config.global_config.start_IfSelfStart, ) self.card_IfRunDirectly = SwitchSettingCard( icon=FluentIcon.PAGE_RIGHT, title="启动后直接运行", content="启动AUTO_MAA后自动运行任务", - configItem=self.config.start_IfRunDirectly, + configItem=Config.global_config.start_IfRunDirectly, ) # 添加各组到设置卡中 @@ -477,27 +464,25 @@ class StartSettingCard(HeaderCardWidget): class UiSettingCard(HeaderCardWidget): - def __init__(self, parent=None, config: AppConfig = None): + def __init__(self, parent=None): super().__init__(parent) self.setTitle("界面") - self.config = config.global_config - Layout = QVBoxLayout() self.card_IfShowTray = SwitchSettingCard( icon=FluentIcon.PAGE_RIGHT, title="显示托盘图标", content="常态显示托盘图标", - configItem=self.config.ui_IfShowTray, + configItem=Config.global_config.ui_IfShowTray, ) self.card_IfToTray = SwitchSettingCard( icon=FluentIcon.PAGE_RIGHT, title="最小化到托盘", content="最小化时隐藏到托盘", - configItem=self.config.ui_IfToTray, + configItem=Config.global_config.ui_IfToTray, ) # 添加各组到设置卡中 @@ -509,23 +494,21 @@ class UiSettingCard(HeaderCardWidget): class NotifySettingCard(HeaderCardWidget): - def __init__(self, parent=None, config: AppConfig = None): + def __init__(self, parent=None): super().__init__(parent) self.setTitle("通知") - self.config = config - Layout = QVBoxLayout() self.card_IfPushPlyer = SwitchSettingCard( icon=FluentIcon.PAGE_RIGHT, title="推送系统通知", content="推送系统级通知,不会在通知中心停留", - configItem=self.config.global_config.notify_IfPushPlyer, + configItem=Config.global_config.notify_IfPushPlyer, ) - self.card_SendMail = self.SendMailSettingCard(self, self.config) + self.card_SendMail = self.SendMailSettingCard(self) Layout.addWidget(self.card_IfPushPlyer) Layout.addWidget(self.card_SendMail) @@ -534,7 +517,7 @@ class NotifySettingCard(HeaderCardWidget): class SendMailSettingCard(ExpandGroupSettingCard): - def __init__(self, parent=None, config: AppConfig = None): + def __init__(self, parent=None): super().__init__( FluentIcon.SETTING, "推送邮件通知", @@ -542,8 +525,6 @@ class NotifySettingCard(HeaderCardWidget): parent, ) - self.config = config.global_config - widget = QWidget() Layout = QVBoxLayout(widget) @@ -551,7 +532,7 @@ class NotifySettingCard(HeaderCardWidget): icon=FluentIcon.PAGE_RIGHT, title="推送邮件通知", content="是否启用邮件通知功能", - configItem=self.config.notify_IfSendMail, + configItem=Config.global_config.notify_IfSendMail, ) self.MailAddress = LineEditSettingCard( @@ -559,14 +540,14 @@ class NotifySettingCard(HeaderCardWidget): icon=FluentIcon.PAGE_RIGHT, title="邮箱地址", content="接收通知的邮箱地址", - configItem=self.config.notify_MailAddress, + configItem=Config.global_config.notify_MailAddress, ) self.card_IfSendErrorOnly = SwitchSettingCard( icon=FluentIcon.PAGE_RIGHT, title="仅推送异常信息", content="仅在任务出现异常时推送通知", - configItem=self.config.notify_IfSendErrorOnly, + configItem=Config.global_config.notify_IfSendErrorOnly, ) Layout.addWidget(self.card_IfSendMail) @@ -603,20 +584,18 @@ class SecuritySettingCard(HeaderCardWidget): class UpdaterSettingCard(HeaderCardWidget): - def __init__(self, parent=None, config: AppConfig = None): + def __init__(self, parent=None): super().__init__(parent) self.setTitle("更新") - self.config = config.global_config - Layout = QVBoxLayout() self.card_IfAutoUpdate = SwitchSettingCard( icon=FluentIcon.PAGE_RIGHT, title="自动检查更新", content="将在启动时自动检查AUTO_MAA是否有新版本", - configItem=self.config.update_IfAutoUpdate, + configItem=Config.global_config.update_IfAutoUpdate, ) self.card_CheckUpdate = PushSettingCard( @@ -634,13 +613,11 @@ class UpdaterSettingCard(HeaderCardWidget): class OtherSettingCard(HeaderCardWidget): - def __init__(self, parent=None, config: AppConfig = None): + def __init__(self, parent=None): super().__init__(parent) self.setTitle("其他") - self.config = config.global_config - Layout = QVBoxLayout() self.card_Tips = PushSettingCard( diff --git a/app/utils/Updater.py b/app/utils/Updater.py index 32fb829..a697169 100644 --- a/app/utils/Updater.py +++ b/app/utils/Updater.py @@ -176,7 +176,7 @@ class UpdateProcess(QThread): elif self.name == "AUTO_MAA主程序": version_info["main_version"] = ".".join(map(str, self.main_version)) with open(self.version_path, "w", encoding="utf-8") as f: - json.dump(version_info, f, indent=4) + json.dump(version_info, f, ensure_ascii=False, indent=4) # 主程序更新完成后打开AUTO_MAA if self.name == "AUTO_MAA主程序": diff --git a/app/utils/__pycache__/Updater.cpython-312.pyc b/app/utils/__pycache__/Updater.cpython-312.pyc index 39855a6194a46d11eff5c2bd2ddb8d290f1b35f8..3c6844ede59f01a024dbc43e84198ddea0f97c72 100644 GIT binary patch delta 1076 zcma))OH30%7{@!i-ELbbrIcc65eq)s1_&q$)RvZ~yh0*Sd6bX>D>jyv%(fIv6E27c zBu2)>a5j2S59(etF@^)0m`Z{%yb1}4;X*v=K@(5Tw~aRs?%|jJeE)C$Gv8(o=h3fu zq)X{^S_S=nZ#%SHyYJ=<@2g%N>Z6)Ce4Onbe=pil%Wgcv*A0cCW|I3 zN=XNK6$l*?ef}NvSbCVRN9ZeAG8K|llNwb^A5CwWf|esC4YxDtY#}1Xu`m)8$3h|L zuG!1bfOX3cCI6y%wPZ89Nm@H`faY?UHKVmJmwE3j@Yg9mpypD48Jjw#ri)Y=8Z;_W z6+ZJoo?@LZ8sOOVlWNe;1~YXwtOWrB`$cUD6tkPTz5>64+p;5I8Rx&mZ&g9aR-I;m zVYk`xemA>asqaVH9Yqb*J8q8FcRM+5K+o@LA$B*fb})xcXE8K8twW%5IM7B-fa;?1 zfQH@E>W3`ay+S9|`x=hc_YGXY%I_C*fpb!%RI4uc(D|_!-~%)OT!71fMnDsw2hc*E zI8LK_^2t%C3P53)d~?{24N)ob6t>KVZQ!}3Qs-;7q6@T~*b1rxFbH5N(#mj1jA09` zLjbp=sTfk3RHqw{j4r$&O&CI7ll}_FcY&gxEMN?C`5+B zX3N}SQR=AKLfyBaSxcM!Au%)>7Vtb2)UYjGR!JP&q05A`hFFpfGo@o)3Jof^qS->p{5m9(EVM!<^$%HF`lG1_8fzI5c z6}t)-f+5F1OIkS@3`OvqEX5nq#PUTeX?F)b|8b3fp1T6^E9A)CidIOar# zvf%NVdO&sqynt(fMzZf&X_K!k?}x+F>{wzP=Yd@dxB?gf^irht(*hPl(a6YH9AhC8 z!}9Ox1HYBLt1t1$Pw+ad63TL7CCFvd;fxYvnZNo`&$ F^9T7m3GDy? delta 995 zcma))OH30%7{@!i-L_jOrG=7~@~Ei6QfNVe&{FyUfdtWmVnbntfNZqN!%PbWn`jIW z6C$F{1rElGCPuxGy-4E4L`}58Xb7z=L_+l9$>_z4G0wMKJvfJ7{@-K%^UcownnPdb zkRfd_=v8#RUrb$iuxc3Aq8{mrc8ym*t9#0lx;!iCG@V07$scAx9<)etrGVWeKo2@nWs`S}l z6V;#m9L;ZatGQ^Nc8dqwEt9v;z{+}tdds;8w1ER{<^`(lZb8Rx^TvLge%tDzdPm36 z{7yb66l-@%IiXUzQK8qlTj+gp5D)@{0X{%8pcT*tI1OkgYgLC)fb3S;H2she$e$_) z>LcYY3-U`1uIH?$8}f=n2dFMU6u?r*>d{y{fr}x&2=GfKo_>v0*`$F6P502u#AE{V zQ1y|eh8ff)@r`b#5HMVz5Ui>w9uC0o6&s6ac2i%6Lgo%H#{6l-tdNng+~J z#1Tbk-z){m6uH`*L@DypW0P|HCRBQxW}O;rgQ8*uZL)f7C^n9-5pT#{?jRq72Lj3uBtjel2mnkW7r?Csr$ii&O^gp>acm+X;uBCFfif#% QjN3?U$c0uVA!KL%0w6f=F#rGn diff --git a/config/MaaConfig/脚本_1/Default/gui.json b/config/MaaConfig/脚本_1/Default/gui.json index 4a39db8..8930816 100644 --- a/config/MaaConfig/脚本_1/Default/gui.json +++ b/config/MaaConfig/脚本_1/Default/gui.json @@ -23,8 +23,8 @@ "Connect.AdbLiteEnabled": "False", "Connect.AdbPath": "C:\\Program Files\\Netease\\MuMu Player 12\\shell\\adb.exe", "Connect.AdbReplaced": "False", - "Connect.Address": "127.0.0.1:16448", - "Connect.AddressHistory": "[\"127.0.0.1:16448\",\"127.0.0.1:16416\",\"127.0.0.1:16384\"]", + "Connect.Address": "127.0.0.1:16416", + "Connect.AddressHistory": "[\"127.0.0.1:16416\",\"127.0.0.1:16448\",\"127.0.0.1:16384\"]", "Connect.AllowADBHardRestart": "True", "Connect.AllowADBRestart": "True", "Connect.AlwaysAutoDetect": "False", @@ -78,13 +78,14 @@ "GUI.Placement": "{\"Length\":44,\"Flags\":0,\"ShowCmd\":1,\"MinPosition\":{\"X\":-1,\"Y\":-1},\"MaxPosition\":{\"X\":-1,\"Y\":-1},\"NormalPosition\":{\"Left\":680,\"Top\":314,\"Right\":1880,\"Bottom\":1214}}", "GUI.Placement.Load": "True", "GUI.Placement.SaveOnClosing": "True", - "GUI.UseAlternateStage": "True", + "GUI.UseAlternateStage": "False", "GUI.UseLogItemDateFormat": "False", + "GUI.UseTray": "True", "GUI.WindowTitlePrefix": "", "Guide.StepIndex": "4", "Infrast.ContinueTraining": "True", "Infrast.Control.IsChecked": "True", - "Infrast.CustomInfrastEnabled": "True", + "Infrast.CustomInfrastEnabled": "False", "Infrast.CustomInfrastFile": "D:\\AUTO\\MAA\\合成玉排班.json", "Infrast.CustomInfrastPlanIndex": "2", "Infrast.CustomInfrastPlanShowInFightSettings": "False", @@ -118,10 +119,10 @@ "MainFunction.Drops.ItemName": "不选择", "MainFunction.Drops.Quantity": "5", "MainFunction.InverseMode": "False", - "MainFunction.PostActions": "0", + "MainFunction.PostActions": "12", "MainFunction.Series.Quantity": "6", - "MainFunction.Stage1": "SK-5", - "MainFunction.Stage2": "1-7", + "MainFunction.Stage1": "1-7", + "MainFunction.Stage2": "", "MainFunction.Stage3": "", "MainFunction.TimesLimited": "False", "MainFunction.TimesLimited.Quantity": "5", @@ -137,7 +138,7 @@ "Mall.CreditVisitFriendsEnabled": "True", "Mall.CreditVisitOnceADay": "True", "Mall.CreidtReserveMaxCredit": "False", - "Mall.LastCreditVisitFriendsTime": "2024/10/23 00:00:00", + "Mall.LastCreditVisitFriendsTime": "2025/01/01 00:00:00", "Mission.ReceiveAward": "True", "Mission.ReceiveFreeRecruit": "True", "Mission.ReceiveMail": "True", @@ -177,7 +178,7 @@ "Roguelike.CoreChar": "", "Roguelike.DeepExplorationAutoIterate": "False", "Roguelike.DeploymentWithPause": "False", - "Roguelike.Difficulty": "0", + "Roguelike.Difficulty": "2", "Roguelike.ExitAtFinalBoss": "False", "Roguelike.InvestmentEnabled": "True", "Roguelike.InvestmentEnterSecondFloor": "True", @@ -195,7 +196,7 @@ "Roguelike.RoguelikeExpectedCollapsalParadigms": "", "Roguelike.RoguelikeOnlyStartWithEliteTwo": "False", "Roguelike.RoguelikeStartWithEliteTwo": "False", - "Roguelike.RoguelikeTheme": "Phantom", + "Roguelike.RoguelikeTheme": "Sarkaz", "Roguelike.RoguelikeUseSupportUnit": "False", "Roguelike.Roles": "", "Roguelike.Squad": "", @@ -209,7 +210,7 @@ "Start.BlockSleepWithScreenOn": "True", "Start.ClientType": "Official", "Start.CopilotWithScript": "False", - "Start.EmulatorAddCommand": "-v 2", + "Start.EmulatorAddCommand": "-v 1", "Start.EmulatorPath": "C:\\Program Files\\Netease\\MuMu Player 12\\shell\\MuMuPlayer.exe", "Start.EmulatorWaitSeconds": "30", "Start.EndsWithScript": "", @@ -221,10 +222,10 @@ "Start.StartEmulator": "True", "Start.StartsWithScript": "", "TaskQueue.AutoRoguelike.IsChecked": "False", - "TaskQueue.Base.IsChecked": "False", - "TaskQueue.Combat.IsChecked": "False", - "TaskQueue.Mall.IsChecked": "False", - "TaskQueue.Mission.IsChecked": "False", + "TaskQueue.Base.IsChecked": "True", + "TaskQueue.Combat.IsChecked": "True", + "TaskQueue.Mall.IsChecked": "True", + "TaskQueue.Mission.IsChecked": "True", "TaskQueue.Order.AutoRoguelike": "6", "TaskQueue.Order.Base": "2", "TaskQueue.Order.Combat": "3", @@ -236,8 +237,8 @@ "TaskQueue.Order.WakeUp": "0", "TaskQueue.Reclamation.IsChecked": "False", "TaskQueue.ReclamationAlgorithm2.IsChecked": "False", - "TaskQueue.Recruiting.IsChecked": "False", - "TaskQueue.WakeUp.IsChecked": "False", + "TaskQueue.Recruiting.IsChecked": "True", + "TaskQueue.WakeUp.IsChecked": "True", "VersionUpdate.AutoDownloadUpdatePackage": "True", "VersionUpdate.AutoInstallUpdatePackage": "True", "VersionUpdate.body": "## v5.6.0-beta.2\n\n### 新增 | New\n\n* 外部通知支持多选 (#10395) @ABA2396\n* add Qmsg notification (#10358) @octopusYan\n* 允许手动指定WPFGUI中干员名称显示语言 (#10310) @ABA2396 @Manicsteiner\n* GetLocalizedNames for Infrast and Copilot output (#10335) @Constrat\n* Reclamation for YostarJP (#10414) @Manicsteiner\n* 生息演算添加沙中之火选择项 @ABA2396\n* 适配「词祭」界面主题 (#10331) @Constrat @ManicSteiner @HX3N @SherkeyXD\n\n### 改进 | Improved\n\n* 全肉鸽招募适配娜仁图亚、艾拉 (#10385) @Daydreamer114\n* Mumu截图增强路径清空时不再检查路径是否存在 @status102\n* duplicates templates from I.S. (#10376) @Constrat\n* 优化外部通知界面显示 (#10363) @ABA2396\n* 更新 bug issue 模板 (#10357) @Rbqwow\n* 重构 OperBox 输出与显示 (#10320) @ABA2396\n* 重构定时器和重启询问 (#10078) @ABA2396\n* Win10以上系统在退出时Wpf不再清除Toast (#10307) @status102\n* 第一次启动时默认不勾选肉鸽和生息演算 @ABA2396\n* 优化动编队日志输出 @ABA2396\n* 优化生息演算 (#10411) @Alan-Charred @status102 @ABA2396\n\n### 修复 | Fix\n\n* FC rerun navigation fix EN @Constrat\n* 生息演算主题读取配置错误 @ABA2396\n* 萨卡兹肉鸽多选招募券模板错误 @ABA2396\n* 肉鸽编队检测在未触底时返回 true (#10396) @Alan-Charred\n* DoDragDrop 拖动操作已在进行中 (#10368) @ABA2396\n* insert delay after SquadConfirm @Constrat\n* 使用匹配后偏移代替每日任务 @status102\n* add ocrReplace for JP \"Reclamation2CopiousCoppice\" (#10362) @Daydreamer114\n* 勾选启动MAA后直接最小化后点击隐藏托盘图标后无法显示MAA @ABA2396\n* add delay after selecting clue @Constrat\n* SL 导航错误 @ABA2396\n* 修复调试版本判断条件 @SherkeyXD\n* 多配置下公告和更新日志显示异常 @ABA2396\n* 修复保全战斗在core干员重复时只会放1次bug (#10306) @status102\n* ProxyType 重启不生效 @ABA2396\n* EN needs templates for clue exchange the number font is different, score too low @Constrat\n* sarkaz 仓库识别错误 @ABA2396\n\n### 文档 | Docs\n\n* 贡献者头像添加 105 上限 (#10351) @MistEO\n\n### 其他 | Other\n\n* `std::ranges::views::join` with LLVM clang 16 on darwin (#10309) @Cryolitia\n* impossiblity of fetch-depth modification. reverting + generic perfs @Constrat\n* rev-list instead of rev-parse @Constrat\n* revert to simple if @Constrat\n* fetching depth 0 @Constrat\n* roi 错误 @ABA2396\n* remove \"\" in nightly fix #10308 @Constrat\n* 生息演算2刷开局清空编队干员 (#10359) @Daydreamer114\n* 重构 FightSettingsUserControl (#10407) @ABA2396\n* CopilotViewModel (#10099) @Manicsteiner\n* git blame ignore @Constrat\n* 优化界面显示 @ABA2396\n* smoking-test中肉鸽参数更新 @SherkeyXD\n* 使用变换后的图像进行技能按钮识别 (#10293) @horror-proton\n* OTA打包时对跳过的版本做删除处理 (#10020) @SherkeyXD\n* 公招错误时保存截图 @zzyyyl\n* 调用PowerManagement.Shutdown();后再次调用Bootstrapper.Shutdown(); @ABA2396\n* 关机前尝试保存配置 @ABA2396\n* 调整令牌关闭强度 @ABA2396\n* 迁移公告相关配置 (#10399) @status102\n* bump maa-cli to 0.4.12 (#10390) @wangl-cc\n* 调整 check link 提示样式 @ABA2396\n* 对comment中的未知链接进行提醒 (#10379) @IzakyL @ABA2396\n* update ignore templates @Constrat\n* 获取任务端口无效时不进行轮询 (#10321) @ABA2396\n* use CsWin32 source generator instead of random pinvoke library (#10361) @dantmnf\n* 删除子模块 @ABA2396\n* remove MaaDeps submodule (#10354) @dantmnf\n* RoguelikeRoutingTaskPlugin.h missing VS22 filter @Constrat\n* bump zzyyyl/issue-checker from 1.8 to 1.9 @zzyyyl\n* 公招识别拥有全干员时不显示未拥有干员数量 @ABA2396\n* YostarJP ocr fix @Manicsteiner\n* JP ZH-TW GPU option & reclamation translation @Manicsteiner\n* KR GpuDeprecated translation @HX3N\n* fix WPF Warning @SherkeyXD\n* 修改过时的Binding方法 @SherkeyXD\n* YostarJP FC navigation (#10316) @Manicsteiner\n* 整理 tasks.json 中记录的肉鸽插件参数 (#10290) @Alan-Charred\n* clearout git blame @Constrat\n* MuMu12EmulatorPath Placeholder 添加示例提示 @ABA2396\n* remove last checked commit @Constrat\n* auto blame ignore @github-actions[bot]\n* git blame added styling commits (#10283) @Constrat\n* smoking-test添加领取奖励的测试 @SherkeyXD\n* 移除tasks中的默认值 @SherkeyXD\n\n**Full Changelog**: [v5.6.0-beta.1 -> v5.6.0-beta.2](https://github.com/MaaAssistantArknights/MaaAssistantArknights/compare/v5.6.0-beta.1...v5.6.0-beta.2)\n", @@ -266,9 +267,9 @@ "GUI.LastBuyWineTime": "2024/04/15 00:00:00", "GUI.Localization": "zh-cn", "GUI.LogItemDateFormatString": "HH:mm:ss", - "GUI.MinimizeToTray": "False", + "GUI.MinimizeToTray": "True", "GUI.OperNameLanguage": "OperNameLanguageMAA", - "GUI.Placement": "{\"Length\":44,\"Flags\":0,\"ShowCmd\":1,\"MinPosition\":{\"X\":-1,\"Y\":-1},\"MaxPosition\":{\"X\":-1,\"Y\":-1},\"NormalPosition\":{\"Left\":512,\"Top\":296,\"Right\":1712,\"Bottom\":1196}}", + "GUI.Placement": "{\"Length\":44,\"Flags\":0,\"ShowCmd\":1,\"MinPosition\":{\"X\":-1,\"Y\":-1},\"MaxPosition\":{\"X\":-1,\"Y\":-1},\"NormalPosition\":{\"Left\":934,\"Top\":297,\"Right\":2134,\"Bottom\":1197}}", "GUI.Placement.Load": "True", "GUI.Placement.SaveOnClosing": "True", "GUI.SoberLanguage": "zh-cn", @@ -278,8 +279,8 @@ "HotKeys": "{\"ShowGui\":{\"Key\":56,\"Modifiers\":7}}", "Roguelike.RoguelikeStartWithSelectList": "Roguelike@LastReward Roguelike@LastReward4 Sarkaz@Roguelike@LastReward5", "Start.MinimizeDirectly": "False", - "Start.OpenEmulatorAfterLaunch": "False", - "Start.RunDirectly": "False", + "Start.OpenEmulatorAfterLaunch": "True", + "Start.RunDirectly": "True", "Timer.CustomConfig": "False", "Timer.ForceScheduledStart": "False", "Timer.ShowWindowBeforeForceScheduledStart": "False", @@ -318,12 +319,12 @@ "VersionUpdate.AllowNightlyUpdates": "False", "VersionUpdate.AutoDownloadUpdatePackage": "True", "VersionUpdate.AutoInstallUpdatePackage": "True", - "VersionUpdate.body": "## v5.12.3\n\n### 停不下来了 | Highlight\n\n* Base navigation fixes for the overseas clients\n\n### 新增 | New\n\n* 繁中服更新活動導航\"懷黍離\" (#11592) @XuQingTW\n\n### 修复 | Fix\n\n* 繁中服-生息演算中,完成生存週期畫面、大地圖畫面卡住 (#11649) @momomochi987\n* 繁中服 生息演算讀檔畫面卡住 (#11646) @momomochi987\n* 基建修复4 识别不到缩小状态下的后两个宿舍 @ABA2396\n* 38c8dd8 68357b9 modified base tasks in Official. Global needs custom ROI to work @Constrat\n* 380bf68 modified Base Infrast Siege for all clients. Reverting for global and co. @Constrat\n\n### 文档 | Docs\n\n* README 移除 MaaX,更换前端仓库地址 (#11636) @Rbqwow\n\n### 其他 | Other\n\n* 補上繁中服的加工站、訓練室相關內容 (#11648) @momomochi987\n* 调整基建宿舍阈值 @ABA2396\n* 调整基建发电站阈值 @ABA2396\n\n**Full Changelog**: [v5.12.2 -> v5.12.3](https://github.com/MaaAssistantArknights/MaaAssistantArknights/compare/v5.12.2...v5.12.3)\n", + "VersionUpdate.body": "## v5.12.0-beta.1\n\n### 真的没有摸鱼吗 | Highlight\n\n* 添加了种子存钱的功能,在选择 **萨卡兹** 主题,**刷源石锭** 模式,**点刺成锭分队** or **后勤分队** 时,高级设置中会出现 **启用种子刷钱(美愿)** 选项。\n* 种子固定为存钱种,若使用后勤存钱,请确保解锁美愿。种子难度为 6 难,由于难度设置仍然生效,可设为 “当前” 或 16 难(若有需要)。\n* 公招选择 **手动确认 1/5/6 星** 后,若出现 1/5/6 星,将不会计数,继续在下一个招募格内招募。\n\n#### 其他\n\n* 【**萨卡兹的无终奇语**】 【**内容拓展·二**】的资源内容暂时没有更新,在新增关卡中会出现 “关卡识别错误” 的情况,可能会尽快修复。\n* 新增了部分导航,改进了肉鸽流程\n* 修复博朗台模式等待异常\n* 修复了一些已知问题\n\n### 新增 | New\n\n* 繁中服「源石塵行動」復刻活動導航 @momomochi987\n* 点刺、后勤种子存钱 (#11521) @Daydreamer114 @ABA2396\n* 肉鸽满级自动停止选项 (#11466) @BxFS @Constrat @momomochi987 @status102\n* 为肉鸽开始探索添加 cd 识别 (#11443) @Daydreamer114\n* 萨卡兹肉鸽冰川期作战策略 @Daydreamer114\n* 萨卡兹内容拓展II点刺进入商店获得构想 (#11509) @Daydreamer114\n* 不自动招募1/5/6星干员时,不计入最大确认招募次数 (#11380) @Roland125 @horror-proton\n* 干员识别排除当前客户端未出干员 @ABA2396\n* 肉鸽开局干员列表排除当前客户端未出干员 @ABA2396\n\n### 改进 | Improved\n\n* 新增投掷手干员组并调整优先级 @Daydreamer114\n* 优化傀影肉鸽雪山上的来客ew部署 (#11195) @Daydreamer114\n\n### 修复 | Fix\n\n* 肉鸽烧热水没烧出来会从预设难度开始,而不是返回n0 @ABA2396\n* 删除傀影肉鸽远方来客意义不明的撤退 (#11194) @Daydreamer114\n* 博朗台计算等待时间失败数据处理 @status102\n* 修正nothing to select情况下的判断逻辑 @Roland125\n* update Collect Rewards template for EN fix #11485 @Constrat\n* tw OcrReplace 肉鸽招募助战 (#11487) @Saratoga-Official\n* 繁中服作戰失敗畫面卡住 (#11479) @momomochi987\n* InitialDrop.png更新 @Constrat @BxFS\n* txwy duplicates in tasks.json @Constrat\n* 更新 \"视相\" 主题后未关闭退出基建弹窗时无法回到主界面 @ABA2396\n* `手动输入关卡名` 与 `使用剩余理智` 选项无法保存 @ABA2396\n\n### 文档 | Docs\n\n* 肉鸽辅助协议文档翻译 (#11360) @Windsland52\n* 为肉鸽参数 start_with_seed 添加文档 (#11531) @Daydreamer114\n\n### 其他 | Other\n\n* manual recursion + robocopy for smoke-testing (#11458) @Constrat\n* implement cache for smoke-test (#11457) @Constrat\n* Release 模式下,如文件夹中包含 DEBUG.txt 也会输出 DBG 日志 (#11496) @ABA2396\n* ProcessTask的Action 新增 Input (#11521) @Daydreamer114 @ABA2396\n* increase fetch depth for release nightly-ota to generate tags (might need successive increases) @Constrat\n* delay and retry downloads on resource updater (#11504) @Constrat\n* use read/write secret to delete cache on pr merge @Constrat\n* checkout depth for nightly ota @Constrat\n* 移动企鹅物流及一图流上报设置 至 运行设置 @status102\n* Translations update from MAA Weblate (#11524) @AlisaAkiron\n* ignore blame for e3d63894b28b2ef5e2405e144a32a6981de5e1b2 oxipng optimization @Constrat\n* disable link checker in issues and PRs (#11506) @Constrat\n* use API for cache-deletion @Constrat\n* 移除不再使用的代码 for 最小化启动模拟器 @status102\n* move `push tag` later in the workflow in case or errors (#11480) @Constrat\n* 上报添加 User-Agent @ABA2396\n* 修改上报抬头 @ABA2396\n* Use %B to consider header for skip changelog @Constrat\n* try setup dotnet cache @Constrat\n* EN duplicates in tasks.json + SSS Buffs @Constrat\n* YostarJP phantom roguelike game pass, SSS#6 (#11473) @Manicsteiner\n* battle_data 未实装干员添加字段提示 @ABA2396\n* 别用 1234567890ABCDEF 去连模拟器了 @ABA2396\n* Revert \"refactor: move resource copy to test script\" @Constrat\n* `启动 MAA 后直接运行` 和 `启动 MAA 后自动开启模拟器` 改为独立配置 @ABA2396\n* 只有一个配置的时候不显示 `此选项页为全局配置` @ABA2396\n* 当前配置不存在时尝试读取全局配置 @ABA2396\n* Config序列化参数不转义中文 @status102\n\n**Full Changelog**: [v5.11.1 -> v5.12.0-beta.1](https://github.com/MaaAssistantArknights/MaaAssistantArknights/compare/v5.11.1...v5.12.0-beta.1)\n", "VersionUpdate.doNotShowUpdate": "False", "VersionUpdate.HasAcknowledgedNightlyWarning": "False", "VersionUpdate.isfirstboot": "False", - "VersionUpdate.name": "v5.12.3", - "VersionUpdate.package": "MAAComponent-OTA-v5.12.2_v5.12.3-win-x64.zip", + "VersionUpdate.name": "v5.12.0-beta.1", + "VersionUpdate.package": "", "VersionUpdate.Proxy": "127.0.0.1:26561", "VersionUpdate.ProxyType": "http", "VersionUpdate.ResourceApi": "https://maa-ota.annangela.cn/MaaAssistantArknights/MaaAssistantArknights/", diff --git a/config/MaaConfig/脚本_1/config.json b/config/MaaConfig/脚本_1/config.json index 1f6c6ef..9feb341 100644 --- a/config/MaaConfig/脚本_1/config.json +++ b/config/MaaConfig/脚本_1/config.json @@ -1,7 +1,7 @@ { "MaaSet": { "Name": "12332", - "Path": "D:/AUTO/MAA_for_AUTO" + "Path": "D:/AUTO/MAA" }, "RunSet": { "AnnihilationTimeLimit": 40, diff --git a/config/QueueConfig/调度队列_1.json b/config/QueueConfig/调度队列_1.json index 5cc7aa7..64c4d10 100644 --- a/config/QueueConfig/调度队列_1.json +++ b/config/QueueConfig/调度队列_1.json @@ -30,7 +30,7 @@ "TimeEnabled_7": false, "TimeEnabled_8": false, "TimeEnabled_9": false, - "TimeSet_0": "17:54", + "TimeSet_0": "20:33", "TimeSet_1": "01:00", "TimeSet_2": "00:00", "TimeSet_3": "01:00", diff --git a/config/config.json b/config/config.json index 6611c5e..6ca3d4c 100644 --- a/config/config.json +++ b/config/config.json @@ -1,7 +1,7 @@ { "Function": { "BossKey": "", - "IfAllowSleep": true, + "IfAllowSleep": false, "IfSilence": false }, "Notify": { @@ -22,7 +22,7 @@ "IfShowTray": false, "IfToTray": false, "MainIndex": 0, - "location": "207x195", + "location": "100x100", "maximized": false, "size": "1200x700" }, diff --git a/config/history.json b/config/history.json index 05f7fda..526f1fa 100644 --- a/config/history.json +++ b/config/history.json @@ -1,18 +1,18 @@ { - "\u811a\u672c_1": { - "History": "\u4efb\u52a1\u5f00\u59cb\u65f6\u95f4\uff1a2025-01-25 17:49:28\uff0c\u7ed3\u675f\u65f6\u95f4\uff1a2025-01-25 17:50:50\n\u5df2\u5b8c\u6210\u6570\uff1a0\uff0c\u672a\u5b8c\u6210\u6570\uff1a1\n\n\u4ee3\u7406\u672a\u6210\u529f\u7684\u7528\u6237\uff1a\n\u65b0\u7528\u6237\n", + "脚本_1": { + "History": "任务开始时间:2025-01-25 17:49:28,结束时间:2025-01-25 17:50:50\n已完成数:0,未完成数:1\n\n代理未成功的用户:\n新用户\n", "Time": "2025-01-25 17:49:28" }, - "\u8c03\u5ea6\u961f\u5217_2": { + "调度队列_2": { "Time": "2025-01-24 19:35:19", - "History": "\u4efb\u52a1\u540d\u79f0\uff1a\u811a\u672c_1\uff0c\u4efb\u52a1\u5f00\u59cb\u65f6\u95f4\uff1a2025-01-24 19:35:19\uff0c\u7ed3\u675f\u65f6\u95f4\uff1a2025-01-24 19:36:21\n\u5df2\u5b8c\u6210\u6570\uff1a0\uff0c\u672a\u5b8c\u6210\u6570\uff1a1\n\n\u4ee3\u7406\u672a\u6210\u529f\u7684\u7528\u6237\uff1a\n\u65b0\u7528\u6237\n\n" + "History": "任务名称:脚本_1,任务开始时间:2025-01-24 19:35:19,结束时间:2025-01-24 19:36:21\n已完成数:0,未完成数:1\n\n代理未成功的用户:\n新用户\n\n" }, - "\u811a\u672c_2": { - "History": "\u4efb\u52a1\u5f00\u59cb\u65f6\u95f4\uff1a2025-01-25 17:54:26\uff0c\u7ed3\u675f\u65f6\u95f4\uff1a2025-01-25 17:54:37\n\u5df2\u5b8c\u6210\u6570\uff1a0\uff0c\u672a\u5b8c\u6210\u6570\uff1a1\n\n\u4ee3\u7406\u672a\u6210\u529f\u7684\u7528\u6237\uff1a\n\u65b0\u7528\u6237\n", - "Time": "2025-01-25 17:54:26" + "脚本_2": { + "History": "任务开始时间:2025-01-26 07:56:52,结束时间:2025-01-26 07:56:56\n已完成数:0,未完成数:1\n\n代理未成功的用户:\n新用户\n", + "Time": "2025-01-26 07:56:52" }, - "\u8c03\u5ea6\u961f\u5217_1": { - "Time": "2025-01-25 17:54:26", - "History": "\u4efb\u52a1\u540d\u79f0\uff1a\u811a\u672c_2\uff0c\u4efb\u52a1\u5f00\u59cb\u65f6\u95f4\uff1a2025-01-25 17:54:26\uff0c\u7ed3\u675f\u65f6\u95f4\uff1a2025-01-25 17:54:37\n \u5df2\u5b8c\u6210\u6570\uff1a0\uff0c\u672a\u5b8c\u6210\u6570\uff1a1\n \n \u4ee3\u7406\u672a\u6210\u529f\u7684\u7528\u6237\uff1a\n \u65b0\u7528\u6237\n \n" + "调度队列_1": { + "Time": "2025-01-26 07:56:52", + "History": "任务名称:脚本_2,任务开始时间:2025-01-26 07:56:52,结束时间:2025-01-26 07:56:56\n 已完成数:0,未完成数:1\n \n 代理未成功的用户:\n 新用户\n \n" } } \ No newline at end of file diff --git a/debug/AUTO_MAA.log b/debug/AUTO_MAA.log index c326022..ee52458 100644 --- a/debug/AUTO_MAA.log +++ b/debug/AUTO_MAA.log @@ -3680,3 +3680,1022 @@ 2025-01-25 17:54:57.712 | DEBUG | [] 2025-01-25 17:54:58.714 | DEBUG | [] 2025-01-25 17:54:59.714 | DEBUG | [] +2025-01-25 18:09:40.335 | INFO | 日志记录器初始化完成 +2025-01-25 18:09:40.335 | INFO | 配置类初始化完成 +2025-01-25 18:09:40.335 | INFO | 程序配置管理模块初始化完成 +2025-01-25 18:09:40.764 | INFO | 日志记录器初始化完成 +2025-01-25 18:09:40.765 | INFO | 配置类初始化完成 +2025-01-25 18:09:40.765 | INFO | 程序配置管理模块初始化完成 +2025-01-25 18:09:40.764 | INFO | 日志记录器初始化完成 +2025-01-25 18:09:40.765 | INFO | 配置类初始化完成 +2025-01-25 18:09:40.765 | INFO | 程序配置管理模块初始化完成 +2025-01-25 18:09:42.324 | DEBUG | [] +2025-01-25 18:09:42.324 | DEBUG | [] +2025-01-25 18:09:43.324 | DEBUG | [] +2025-01-25 18:09:43.324 | DEBUG | [] +2025-01-25 18:09:44.325 | DEBUG | [] +2025-01-25 18:09:44.325 | DEBUG | [] +2025-01-25 18:09:45.325 | DEBUG | [] +2025-01-25 18:09:45.325 | DEBUG | [] +2025-01-25 18:09:46.325 | DEBUG | [] +2025-01-25 18:09:46.325 | DEBUG | [] +2025-01-25 18:09:47.325 | DEBUG | [] +2025-01-25 18:09:47.325 | DEBUG | [] +2025-01-25 18:16:01.090 | INFO | 日志记录器初始化完成 +2025-01-25 18:16:01.091 | INFO | 配置类初始化完成 +2025-01-25 18:16:01.091 | INFO | 程序配置管理模块初始化完成 +2025-01-25 18:16:01.509 | INFO | 日志记录器初始化完成 +2025-01-25 18:16:01.509 | INFO | 配置类初始化完成 +2025-01-25 18:16:01.510 | INFO | 程序配置管理模块初始化完成 +2025-01-25 18:16:01.509 | INFO | 日志记录器初始化完成 +2025-01-25 18:16:01.509 | INFO | 配置类初始化完成 +2025-01-25 18:16:01.510 | INFO | 程序配置管理模块初始化完成 +2025-01-25 18:16:03.135 | DEBUG | [] +2025-01-25 18:16:03.135 | DEBUG | [] +2025-01-25 18:16:04.136 | DEBUG | [] +2025-01-25 18:16:04.136 | DEBUG | [] +2025-01-25 18:16:05.135 | DEBUG | [] +2025-01-25 18:16:05.135 | DEBUG | [] +2025-01-25 18:16:06.135 | DEBUG | [] +2025-01-25 18:16:06.135 | DEBUG | [] +2025-01-25 18:16:07.135 | DEBUG | [] +2025-01-25 18:16:07.135 | DEBUG | [] +2025-01-25 18:16:08.135 | DEBUG | [] +2025-01-25 18:16:08.135 | DEBUG | [] +2025-01-25 18:16:09.135 | DEBUG | [] +2025-01-25 18:16:09.135 | DEBUG | [] +2025-01-25 18:16:10.135 | DEBUG | [] +2025-01-25 18:16:10.135 | DEBUG | [] +2025-01-25 18:16:11.134 | DEBUG | [] +2025-01-25 18:16:11.134 | DEBUG | [] +2025-01-25 18:16:12.135 | DEBUG | [] +2025-01-25 18:16:12.135 | DEBUG | [] +2025-01-25 18:16:13.134 | DEBUG | [] +2025-01-25 18:16:13.134 | DEBUG | [] +2025-01-25 18:16:14.134 | DEBUG | [] +2025-01-25 18:16:14.134 | DEBUG | [] +2025-01-25 18:16:15.134 | DEBUG | [] +2025-01-25 18:16:15.134 | DEBUG | [] +2025-01-25 18:16:16.134 | DEBUG | [] +2025-01-25 18:16:16.134 | DEBUG | [] +2025-01-25 18:16:17.139 | DEBUG | [] +2025-01-25 18:16:17.139 | DEBUG | [] +2025-01-25 18:16:18.139 | DEBUG | [] +2025-01-25 18:16:18.139 | DEBUG | [] +2025-01-25 18:16:19.136 | DEBUG | [] +2025-01-25 18:16:19.136 | DEBUG | [] +2025-01-25 18:16:20.133 | DEBUG | [] +2025-01-25 18:16:20.133 | DEBUG | [] +2025-01-25 18:16:21.141 | DEBUG | [] +2025-01-25 18:16:21.141 | DEBUG | [] +2025-01-25 18:16:22.141 | DEBUG | [] +2025-01-25 18:16:22.141 | DEBUG | [] +2025-01-25 18:16:23.138 | INFO | 按时间调起任务:调度队列_1 +2025-01-25 18:16:23.138 | INFO | 按时间调起任务:调度队列_1 +2025-01-25 18:16:23.140 | INFO | 任务开始:调度队列_1 +2025-01-25 18:16:23.140 | INFO | 任务开始:调度队列_1 +2025-01-25 18:16:23.166 | DEBUG | ['调度队列_1'] +2025-01-25 18:16:23.166 | DEBUG | ['调度队列_1'] +2025-01-25 18:16:23.167 | INFO | 任务开始:脚本_2 +2025-01-25 18:16:23.167 | INFO | 任务开始:脚本_2 +2025-01-25 18:16:24.137 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 18:16:24.137 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 18:16:25.134 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 18:16:25.134 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 18:16:26.213 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 18:16:26.213 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 18:16:26.243 | INFO | 中止任务:调度队列_1 +2025-01-25 18:16:26.243 | INFO | 中止任务:调度队列_1 +2025-01-25 18:16:26.279 | INFO | 申请中止本次任务 +2025-01-25 18:16:26.279 | INFO | 申请中止本次任务 +2025-01-25 18:16:30.407 | INFO | 任务完成:脚本_2 +2025-01-25 18:16:30.407 | INFO | 任务完成:脚本_2 +2025-01-25 18:16:30.410 | DEBUG | ['调度队列_1'] +2025-01-25 18:16:30.410 | DEBUG | ['调度队列_1'] +2025-01-25 18:16:30.414 | INFO | 任务结束:调度队列_1 +2025-01-25 18:16:30.414 | INFO | 任务结束:调度队列_1 +2025-01-25 18:16:31.137 | DEBUG | [] +2025-01-25 18:16:31.137 | DEBUG | [] +2025-01-25 18:16:32.137 | DEBUG | [] +2025-01-25 18:16:32.137 | DEBUG | [] +2025-01-25 18:16:33.139 | DEBUG | [] +2025-01-25 18:16:33.139 | DEBUG | [] +2025-01-25 18:16:34.137 | DEBUG | [] +2025-01-25 18:16:34.137 | DEBUG | [] +2025-01-25 18:16:35.137 | DEBUG | [] +2025-01-25 18:16:35.137 | DEBUG | [] +2025-01-25 18:16:36.137 | DEBUG | [] +2025-01-25 18:16:36.137 | DEBUG | [] +2025-01-25 18:16:37.138 | DEBUG | [] +2025-01-25 18:16:37.138 | DEBUG | [] +2025-01-25 18:16:38.137 | DEBUG | [] +2025-01-25 18:16:38.137 | DEBUG | [] +2025-01-25 18:26:09.413 | INFO | 日志记录器初始化完成 +2025-01-25 18:26:09.413 | INFO | 配置类初始化完成 +2025-01-25 18:26:09.413 | INFO | 程序配置管理模块初始化完成 +2025-01-25 18:26:09.835 | INFO | 日志记录器初始化完成 +2025-01-25 18:26:09.835 | INFO | 配置类初始化完成 +2025-01-25 18:26:09.836 | INFO | 程序配置管理模块初始化完成 +2025-01-25 18:26:09.835 | INFO | 日志记录器初始化完成 +2025-01-25 18:26:09.835 | INFO | 配置类初始化完成 +2025-01-25 18:26:09.836 | INFO | 程序配置管理模块初始化完成 +2025-01-25 18:26:11.400 | DEBUG | [] +2025-01-25 18:26:11.400 | DEBUG | [] +2025-01-25 18:26:12.398 | DEBUG | [] +2025-01-25 18:26:12.398 | DEBUG | [] +2025-01-25 18:26:13.802 | DEBUG | [] +2025-01-25 18:26:13.802 | DEBUG | [] +2025-01-25 18:26:14.399 | DEBUG | [] +2025-01-25 18:26:14.399 | DEBUG | [] +2025-01-25 18:26:15.403 | DEBUG | [] +2025-01-25 18:26:15.403 | DEBUG | [] +2025-01-25 18:26:16.404 | DEBUG | [] +2025-01-25 18:26:16.404 | DEBUG | [] +2025-01-25 18:26:17.405 | DEBUG | [] +2025-01-25 18:26:17.405 | DEBUG | [] +2025-01-25 18:26:18.405 | DEBUG | [] +2025-01-25 18:26:18.405 | DEBUG | [] +2025-01-25 18:26:19.405 | INFO | 按时间调起任务:调度队列_1 +2025-01-25 18:26:19.405 | INFO | 按时间调起任务:调度队列_1 +2025-01-25 18:26:19.406 | INFO | 任务开始:调度队列_1 +2025-01-25 18:26:19.406 | INFO | 任务开始:调度队列_1 +2025-01-25 18:26:19.425 | DEBUG | ['调度队列_1'] +2025-01-25 18:26:19.425 | DEBUG | ['调度队列_1'] +2025-01-25 18:26:19.426 | INFO | 任务开始:脚本_2 +2025-01-25 18:26:19.426 | INFO | 任务开始:脚本_2 +2025-01-25 18:26:20.414 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 18:26:20.414 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 18:26:21.405 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 18:26:21.405 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 18:26:22.468 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 18:26:22.468 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 18:26:22.478 | INFO | 中止任务:调度队列_1 +2025-01-25 18:26:22.478 | INFO | 中止任务:调度队列_1 +2025-01-25 18:26:22.518 | INFO | 申请中止本次任务 +2025-01-25 18:26:22.518 | INFO | 申请中止本次任务 +2025-01-25 18:26:26.024 | INFO | 任务完成:脚本_2 +2025-01-25 18:26:26.024 | INFO | 任务完成:脚本_2 +2025-01-25 18:26:26.027 | DEBUG | ['调度队列_1'] +2025-01-25 18:26:26.027 | DEBUG | ['调度队列_1'] +2025-01-25 18:26:26.031 | INFO | 任务结束:调度队列_1 +2025-01-25 18:26:26.031 | INFO | 任务结束:调度队列_1 +2025-01-25 18:26:26.446 | DEBUG | [] +2025-01-25 18:26:26.446 | DEBUG | [] +2025-01-25 18:26:27.404 | DEBUG | [] +2025-01-25 18:26:27.404 | DEBUG | [] +2025-01-25 18:26:28.404 | DEBUG | [] +2025-01-25 18:26:28.404 | DEBUG | [] +2025-01-25 18:26:29.402 | DEBUG | [] +2025-01-25 18:26:29.402 | DEBUG | [] +2025-01-25 18:26:30.400 | DEBUG | [] +2025-01-25 18:26:30.400 | DEBUG | [] +2025-01-25 18:26:31.403 | DEBUG | [] +2025-01-25 18:26:31.403 | DEBUG | [] +2025-01-25 18:26:32.405 | DEBUG | [] +2025-01-25 18:26:32.405 | DEBUG | [] +2025-01-25 18:26:33.403 | DEBUG | [] +2025-01-25 18:26:33.403 | DEBUG | [] +2025-01-25 18:26:34.403 | DEBUG | [] +2025-01-25 18:26:34.403 | DEBUG | [] +2025-01-25 18:33:13.458 | INFO | 日志记录器初始化完成 +2025-01-25 18:33:13.459 | INFO | 配置类初始化完成 +2025-01-25 18:33:13.459 | INFO | 程序配置管理模块初始化完成 +2025-01-25 19:54:36.822 | INFO | 日志记录器初始化完成 +2025-01-25 19:54:36.822 | INFO | 配置类初始化完成 +2025-01-25 19:54:36.822 | INFO | 程序配置管理模块初始化完成 +2025-01-25 19:56:27.107 | INFO | 日志记录器初始化完成 +2025-01-25 19:56:27.107 | INFO | 配置类初始化完成 +2025-01-25 19:56:27.107 | INFO | 程序配置管理模块初始化完成 +2025-01-25 19:56:50.749 | INFO | 日志记录器初始化完成 +2025-01-25 19:56:50.749 | INFO | 配置类初始化完成 +2025-01-25 19:56:50.749 | INFO | 程序配置管理模块初始化完成 +2025-01-25 19:58:05.103 | INFO | 日志记录器初始化完成 +2025-01-25 19:58:05.103 | INFO | 配置类初始化完成 +2025-01-25 19:58:05.104 | INFO | 程序配置管理模块初始化完成 +2025-01-25 19:59:44.416 | INFO | 日志记录器初始化完成 +2025-01-25 19:59:44.417 | INFO | 配置类初始化完成 +2025-01-25 19:59:44.417 | INFO | 程序配置管理模块初始化完成 +2025-01-25 20:00:18.237 | INFO | 日志记录器初始化完成 +2025-01-25 20:00:18.237 | INFO | 配置类初始化完成 +2025-01-25 20:00:18.237 | INFO | 程序配置管理模块初始化完成 +2025-01-25 20:01:05.945 | INFO | 日志记录器初始化完成 +2025-01-25 20:01:05.945 | INFO | 配置类初始化完成 +2025-01-25 20:01:05.945 | INFO | 程序配置管理模块初始化完成 +2025-01-25 20:01:38.131 | INFO | 日志记录器初始化完成 +2025-01-25 20:01:38.131 | INFO | 配置类初始化完成 +2025-01-25 20:01:38.131 | INFO | 程序配置管理模块初始化完成 +2025-01-25 20:02:37.816 | INFO | 日志记录器初始化完成 +2025-01-25 20:02:37.816 | INFO | 配置类初始化完成 +2025-01-25 20:02:37.816 | INFO | 程序配置管理模块初始化完成 +2025-01-25 20:29:29.801 | INFO | 日志记录器初始化完成 +2025-01-25 20:29:29.801 | INFO | 配置类初始化完成 +2025-01-25 20:29:29.801 | INFO | 程序配置管理模块初始化完成 +2025-01-25 20:29:52.719 | INFO | 日志记录器初始化完成 +2025-01-25 20:29:52.719 | INFO | 配置类初始化完成 +2025-01-25 20:29:52.720 | INFO | 程序配置管理模块初始化完成 +2025-01-25 20:30:13.394 | INFO | 日志记录器初始化完成 +2025-01-25 20:30:13.394 | INFO | 配置类初始化完成 +2025-01-25 20:30:13.395 | INFO | 程序配置管理模块初始化完成 +2025-01-25 20:30:31.331 | INFO | 日志记录器初始化完成 +2025-01-25 20:30:31.331 | INFO | 配置类初始化完成 +2025-01-25 20:30:31.332 | INFO | 程序配置管理模块初始化完成 +2025-01-25 20:30:58.949 | INFO | 日志记录器初始化完成 +2025-01-25 20:30:58.950 | INFO | 配置类初始化完成 +2025-01-25 20:30:58.950 | INFO | 程序配置管理模块初始化完成 +2025-01-25 20:31:19.002 | INFO | 日志记录器初始化完成 +2025-01-25 20:31:19.002 | INFO | 配置类初始化完成 +2025-01-25 20:31:19.002 | INFO | 程序配置管理模块初始化完成 +2025-01-25 20:31:35.661 | INFO | 日志记录器初始化完成 +2025-01-25 20:31:35.661 | INFO | 配置类初始化完成 +2025-01-25 20:31:35.662 | INFO | 程序配置管理模块初始化完成 +2025-01-25 20:31:37.764 | DEBUG | [] +2025-01-25 20:31:38.743 | DEBUG | [] +2025-01-25 20:31:39.742 | DEBUG | [] +2025-01-25 20:31:40.749 | DEBUG | [] +2025-01-25 20:31:41.748 | DEBUG | [] +2025-01-25 20:31:42.746 | DEBUG | [] +2025-01-25 20:31:43.822 | DEBUG | [] +2025-01-25 20:31:44.748 | DEBUG | [] +2025-01-25 20:31:45.747 | DEBUG | [] +2025-01-25 20:31:46.743 | DEBUG | [] +2025-01-25 20:31:47.747 | DEBUG | [] +2025-01-25 20:31:48.748 | DEBUG | [] +2025-01-25 20:31:49.748 | DEBUG | [] +2025-01-25 20:31:50.747 | DEBUG | [] +2025-01-25 20:31:51.747 | INFO | 按时间调起任务:调度队列_1 +2025-01-25 20:31:51.747 | INFO | 任务开始:调度队列_1 +2025-01-25 20:31:51.753 | DEBUG | ['调度队列_1'] +2025-01-25 20:31:52.743 | DEBUG | ['调度队列_1'] +2025-01-25 20:31:53.747 | DEBUG | ['调度队列_1'] +2025-01-25 20:31:54.747 | DEBUG | ['调度队列_1'] +2025-01-25 20:32:23.144 | INFO | 日志记录器初始化完成 +2025-01-25 20:32:23.146 | INFO | 配置类初始化完成 +2025-01-25 20:32:23.146 | INFO | 程序配置管理模块初始化完成 +2025-01-25 20:32:25.221 | DEBUG | [] +2025-01-25 20:32:25.232 | DEBUG | [] +2025-01-25 20:32:26.228 | DEBUG | [] +2025-01-25 20:32:27.609 | DEBUG | [] +2025-01-25 20:32:28.226 | DEBUG | [] +2025-01-25 20:32:29.233 | DEBUG | [] +2025-01-25 20:32:30.228 | INFO | 按时间调起任务:调度队列_1 +2025-01-25 20:32:30.229 | INFO | 任务开始:调度队列_1 +2025-01-25 20:32:30.251 | DEBUG | ['调度队列_1'] +2025-01-25 20:32:30.252 | INFO | 任务开始:脚本_2 +2025-01-25 20:32:39.557 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 20:32:40.232 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 20:32:41.232 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 20:32:42.236 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 20:32:43.231 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 20:32:44.230 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 20:33:26.084 | INFO | 日志记录器初始化完成 +2025-01-25 20:33:26.084 | INFO | 配置类初始化完成 +2025-01-25 20:33:26.085 | INFO | 程序配置管理模块初始化完成 +2025-01-25 20:33:28.172 | DEBUG | [] +2025-01-25 20:33:29.165 | DEBUG | [] +2025-01-25 20:33:30.167 | DEBUG | [] +2025-01-25 20:33:31.166 | DEBUG | [] +2025-01-25 20:33:32.170 | DEBUG | [] +2025-01-25 20:33:33.170 | DEBUG | [] +2025-01-25 20:33:34.170 | INFO | 按时间调起任务:调度队列_1 +2025-01-25 20:33:34.170 | INFO | 任务开始:调度队列_1 +2025-01-25 20:33:34.192 | DEBUG | ['调度队列_1'] +2025-01-25 20:33:34.194 | INFO | 任务开始:脚本_2 +2025-01-25 20:33:35.171 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 20:33:36.166 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 20:33:37.230 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 20:33:38.168 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 20:33:39.172 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 20:33:40.216 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 20:33:41.171 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 20:33:42.169 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 20:33:43.169 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-25 20:33:43.184 | INFO | 中止任务:调度队列_1 +2025-01-25 20:33:43.187 | INFO | 申请中止本次任务 +2025-01-25 20:33:46.901 | INFO | 任务完成:脚本_2 +2025-01-25 20:33:46.903 | DEBUG | ['调度队列_1'] +2025-01-25 20:33:46.906 | INFO | 任务结束:调度队列_1 +2025-01-25 20:33:47.170 | DEBUG | [] +2025-01-25 20:33:48.169 | DEBUG | [] +2025-01-25 20:33:49.169 | DEBUG | [] +2025-01-25 20:33:50.170 | DEBUG | [] +2025-01-25 20:33:51.169 | DEBUG | [] +2025-01-25 20:33:52.167 | DEBUG | [] +2025-01-25 20:33:53.446 | DEBUG | [] +2025-01-25 20:33:54.167 | DEBUG | [] +2025-01-25 20:33:55.168 | DEBUG | [] +2025-01-25 20:33:56.168 | DEBUG | [] +2025-01-25 20:33:57.167 | DEBUG | [] +2025-01-25 20:41:49.496 | INFO | 日志记录器初始化完成 +2025-01-25 20:41:49.496 | INFO | 配置类初始化完成 +2025-01-25 20:41:49.497 | INFO | 程序配置管理模块初始化完成 +2025-01-25 20:41:51.450 | DEBUG | [] +2025-01-25 20:41:51.575 | DEBUG | [] +2025-01-25 20:41:52.574 | DEBUG | [] +2025-01-25 20:41:53.575 | DEBUG | [] +2025-01-25 20:41:54.574 | DEBUG | [] +2025-01-25 20:41:55.575 | DEBUG | [] +2025-01-25 20:41:56.574 | DEBUG | [] +2025-01-25 20:41:57.574 | DEBUG | [] +2025-01-25 20:41:58.575 | DEBUG | [] +2025-01-25 20:41:59.574 | DEBUG | [] +2025-01-25 20:42:00.574 | DEBUG | [] +2025-01-25 20:42:01.573 | DEBUG | [] +2025-01-25 20:42:02.573 | DEBUG | [] +2025-01-25 20:42:03.573 | DEBUG | [] +2025-01-25 20:42:04.573 | DEBUG | [] +2025-01-25 20:42:05.574 | DEBUG | [] +2025-01-25 20:42:06.574 | DEBUG | [] +2025-01-25 20:42:07.574 | DEBUG | [] +2025-01-25 20:42:08.573 | DEBUG | [] +2025-01-25 20:42:09.572 | DEBUG | [] +2025-01-25 20:42:10.573 | DEBUG | [] +2025-01-25 20:42:11.573 | DEBUG | [] +2025-01-25 20:42:12.571 | DEBUG | [] +2025-01-25 20:42:13.572 | DEBUG | [] +2025-01-25 20:42:14.573 | DEBUG | [] +2025-01-25 20:42:15.572 | DEBUG | [] +2025-01-25 20:42:16.572 | DEBUG | [] +2025-01-25 20:42:17.574 | DEBUG | [] +2025-01-25 20:42:18.575 | DEBUG | [] +2025-01-25 20:42:19.573 | DEBUG | [] +2025-01-25 20:42:20.580 | DEBUG | [] +2025-01-25 20:42:21.579 | DEBUG | [] +2025-01-25 20:42:22.577 | DEBUG | [] +2025-01-25 20:42:23.576 | DEBUG | [] +2025-01-25 20:42:24.576 | DEBUG | [] +2025-01-25 20:42:25.577 | DEBUG | [] +2025-01-25 20:42:26.574 | DEBUG | [] +2025-01-25 20:42:27.571 | DEBUG | [] +2025-01-25 20:42:28.577 | DEBUG | [] +2025-01-25 20:42:29.576 | DEBUG | [] +2025-01-25 20:42:30.572 | DEBUG | [] +2025-01-25 20:42:31.572 | DEBUG | [] +2025-01-25 20:42:32.572 | DEBUG | [] +2025-01-25 20:42:33.572 | DEBUG | [] +2025-01-25 20:42:34.572 | DEBUG | [] +2025-01-25 20:42:35.577 | DEBUG | [] +2025-01-25 20:42:36.574 | DEBUG | [] +2025-01-25 20:42:37.575 | DEBUG | [] +2025-01-25 20:42:38.578 | DEBUG | [] +2025-01-25 20:42:39.574 | DEBUG | [] +2025-01-25 20:42:40.577 | DEBUG | [] +2025-01-25 20:42:41.574 | DEBUG | [] +2025-01-25 20:42:42.574 | DEBUG | [] +2025-01-25 20:42:43.577 | DEBUG | [] +2025-01-25 20:42:44.572 | DEBUG | [] +2025-01-25 20:42:45.576 | DEBUG | [] +2025-01-25 20:42:46.574 | DEBUG | [] +2025-01-25 20:42:47.573 | DEBUG | [] +2025-01-25 20:42:48.575 | DEBUG | [] +2025-01-25 20:42:49.574 | DEBUG | [] +2025-01-25 20:42:50.575 | DEBUG | [] +2025-01-25 20:42:51.574 | DEBUG | [] +2025-01-25 20:42:52.574 | DEBUG | [] +2025-01-25 20:42:53.573 | DEBUG | [] +2025-01-25 20:42:54.573 | DEBUG | [] +2025-01-25 20:42:55.582 | DEBUG | [] +2025-01-25 20:42:56.573 | DEBUG | [] +2025-01-25 20:42:57.580 | DEBUG | [] +2025-01-25 20:42:58.572 | DEBUG | [] +2025-01-25 20:42:59.573 | DEBUG | [] +2025-01-25 20:43:00.575 | DEBUG | [] +2025-01-25 20:43:01.571 | DEBUG | [] +2025-01-25 20:43:02.574 | DEBUG | [] +2025-01-25 20:43:03.578 | DEBUG | [] +2025-01-25 20:43:04.573 | DEBUG | [] +2025-01-25 20:43:05.574 | DEBUG | [] +2025-01-25 20:43:06.577 | DEBUG | [] +2025-01-25 20:43:07.577 | DEBUG | [] +2025-01-25 20:43:08.572 | DEBUG | [] +2025-01-25 20:43:09.573 | DEBUG | [] +2025-01-25 20:43:10.578 | DEBUG | [] +2025-01-25 20:43:11.578 | DEBUG | [] +2025-01-25 20:43:12.579 | DEBUG | [] +2025-01-25 20:43:13.577 | DEBUG | [] +2025-01-25 20:43:14.576 | DEBUG | [] +2025-01-25 20:43:15.577 | DEBUG | [] +2025-01-25 20:43:16.575 | DEBUG | [] +2025-01-25 20:43:17.577 | DEBUG | [] +2025-01-25 20:43:18.576 | DEBUG | [] +2025-01-25 20:43:19.577 | DEBUG | [] +2025-01-25 20:43:20.577 | DEBUG | [] +2025-01-25 20:43:21.574 | DEBUG | [] +2025-01-25 20:43:22.575 | DEBUG | [] +2025-01-25 20:43:23.575 | DEBUG | [] +2025-01-25 20:43:24.575 | DEBUG | [] +2025-01-25 20:43:25.576 | DEBUG | [] +2025-01-25 20:43:26.574 | DEBUG | [] +2025-01-25 20:43:27.576 | DEBUG | [] +2025-01-25 20:43:28.575 | DEBUG | [] +2025-01-25 20:43:29.574 | DEBUG | [] +2025-01-25 20:43:30.575 | DEBUG | [] +2025-01-25 20:43:31.574 | DEBUG | [] +2025-01-25 20:43:32.572 | DEBUG | [] +2025-01-25 20:43:33.573 | DEBUG | [] +2025-01-25 20:43:34.573 | DEBUG | [] +2025-01-25 20:43:35.572 | DEBUG | [] +2025-01-25 20:43:36.572 | DEBUG | [] +2025-01-25 20:43:37.573 | DEBUG | [] +2025-01-25 20:43:38.573 | DEBUG | [] +2025-01-25 20:43:39.574 | DEBUG | [] +2025-01-25 20:43:40.573 | DEBUG | [] +2025-01-25 20:43:41.572 | DEBUG | [] +2025-01-25 20:43:42.573 | DEBUG | [] +2025-01-25 20:43:43.572 | DEBUG | [] +2025-01-25 20:43:44.575 | DEBUG | [] +2025-01-25 20:43:45.573 | DEBUG | [] +2025-01-25 20:43:46.572 | DEBUG | [] +2025-01-25 20:43:47.571 | DEBUG | [] +2025-01-25 20:43:48.571 | DEBUG | [] +2025-01-25 20:43:49.572 | DEBUG | [] +2025-01-25 20:43:50.578 | DEBUG | [] +2025-01-25 20:43:51.577 | DEBUG | [] +2025-01-25 20:43:52.575 | DEBUG | [] +2025-01-25 20:43:53.573 | DEBUG | [] +2025-01-25 20:43:54.575 | DEBUG | [] +2025-01-25 20:43:55.574 | DEBUG | [] +2025-01-25 20:43:56.573 | DEBUG | [] +2025-01-25 20:43:57.576 | DEBUG | [] +2025-01-25 20:43:58.577 | DEBUG | [] +2025-01-25 20:43:59.576 | DEBUG | [] +2025-01-25 20:44:00.576 | DEBUG | [] +2025-01-25 20:44:01.574 | DEBUG | [] +2025-01-25 20:44:02.575 | DEBUG | [] +2025-01-25 20:44:03.571 | DEBUG | [] +2025-01-25 20:44:04.577 | DEBUG | [] +2025-01-25 20:44:05.576 | DEBUG | [] +2025-01-25 20:44:06.577 | DEBUG | [] +2025-01-25 20:44:07.576 | DEBUG | [] +2025-01-25 20:44:08.576 | DEBUG | [] +2025-01-25 20:44:09.575 | DEBUG | [] +2025-01-25 20:44:10.575 | DEBUG | [] +2025-01-25 20:44:11.575 | DEBUG | [] +2025-01-25 20:44:12.575 | DEBUG | [] +2025-01-25 20:44:13.574 | DEBUG | [] +2025-01-25 20:44:14.575 | DEBUG | [] +2025-01-25 20:44:15.573 | DEBUG | [] +2025-01-25 20:44:16.574 | DEBUG | [] +2025-01-25 20:44:17.574 | DEBUG | [] +2025-01-25 20:44:18.575 | DEBUG | [] +2025-01-25 20:44:19.573 | DEBUG | [] +2025-01-25 20:44:20.574 | DEBUG | [] +2025-01-25 20:44:21.574 | DEBUG | [] +2025-01-25 20:44:22.576 | DEBUG | [] +2025-01-25 20:44:23.572 | DEBUG | [] +2025-01-25 20:44:24.573 | DEBUG | [] +2025-01-25 20:44:25.573 | DEBUG | [] +2025-01-25 20:44:26.573 | DEBUG | [] +2025-01-25 20:44:27.573 | DEBUG | [] +2025-01-25 20:44:28.575 | DEBUG | [] +2025-01-25 20:44:29.573 | DEBUG | [] +2025-01-25 20:44:30.572 | DEBUG | [] +2025-01-25 20:44:31.577 | DEBUG | [] +2025-01-25 20:44:32.577 | DEBUG | [] +2025-01-25 20:44:33.572 | DEBUG | [] +2025-01-25 20:44:34.579 | DEBUG | [] +2025-01-25 20:44:35.571 | DEBUG | [] +2025-01-25 20:44:36.572 | DEBUG | [] +2025-01-25 20:44:37.572 | DEBUG | [] +2025-01-25 20:44:38.571 | DEBUG | [] +2025-01-25 20:44:39.579 | DEBUG | [] +2025-01-25 20:44:40.578 | DEBUG | [] +2025-01-25 20:44:41.579 | DEBUG | [] +2025-01-25 20:44:42.575 | DEBUG | [] +2025-01-25 20:44:43.576 | DEBUG | [] +2025-01-25 20:44:44.575 | DEBUG | [] +2025-01-25 20:44:45.573 | DEBUG | [] +2025-01-25 20:44:46.578 | DEBUG | [] +2025-01-25 20:44:47.577 | DEBUG | [] +2025-01-25 20:44:48.577 | DEBUG | [] +2025-01-25 20:44:49.576 | DEBUG | [] +2025-01-25 20:44:50.576 | DEBUG | [] +2025-01-25 20:44:51.575 | DEBUG | [] +2025-01-25 20:44:52.576 | DEBUG | [] +2025-01-25 20:44:53.572 | DEBUG | [] +2025-01-25 20:44:54.575 | DEBUG | [] +2025-01-25 20:44:55.574 | DEBUG | [] +2025-01-25 20:44:56.576 | DEBUG | [] +2025-01-25 20:44:57.574 | DEBUG | [] +2025-01-25 20:44:58.574 | DEBUG | [] +2025-01-25 20:44:59.574 | DEBUG | [] +2025-01-25 20:45:00.574 | DEBUG | [] +2025-01-25 20:45:01.573 | DEBUG | [] +2025-01-25 20:45:02.575 | DEBUG | [] +2025-01-25 20:45:03.572 | DEBUG | [] +2025-01-25 20:45:04.574 | DEBUG | [] +2025-01-25 20:45:05.574 | DEBUG | [] +2025-01-25 20:45:06.572 | DEBUG | [] +2025-01-25 20:45:07.574 | DEBUG | [] +2025-01-25 20:45:08.573 | DEBUG | [] +2025-01-25 20:45:09.573 | DEBUG | [] +2025-01-25 20:45:10.573 | DEBUG | [] +2025-01-25 20:45:11.573 | DEBUG | [] +2025-01-25 20:45:12.573 | DEBUG | [] +2025-01-25 20:45:13.571 | DEBUG | [] +2025-01-25 20:45:14.578 | DEBUG | [] +2025-01-25 20:45:15.572 | DEBUG | [] +2025-01-25 20:45:16.571 | DEBUG | [] +2025-01-25 20:45:17.579 | DEBUG | [] +2025-01-25 20:45:18.577 | DEBUG | [] +2025-01-25 20:45:19.577 | DEBUG | [] +2025-01-25 20:45:20.571 | DEBUG | [] +2025-01-25 20:45:21.572 | DEBUG | [] +2025-01-25 20:45:22.577 | DEBUG | [] +2025-01-25 20:45:23.573 | DEBUG | [] +2025-01-25 20:45:24.578 | DEBUG | [] +2025-01-25 20:45:25.576 | DEBUG | [] +2025-01-25 20:45:26.576 | DEBUG | [] +2025-01-25 20:45:27.577 | DEBUG | [] +2025-01-25 20:45:28.576 | DEBUG | [] +2025-01-25 20:45:29.574 | DEBUG | [] +2025-01-25 20:45:30.575 | DEBUG | [] +2025-01-25 20:45:31.577 | DEBUG | [] +2025-01-25 20:45:32.577 | DEBUG | [] +2025-01-25 20:45:33.576 | DEBUG | [] +2025-01-25 20:45:34.574 | DEBUG | [] +2025-01-25 20:45:35.573 | DEBUG | [] +2025-01-25 20:45:36.574 | DEBUG | [] +2025-01-25 20:45:37.576 | DEBUG | [] +2025-01-25 20:45:38.574 | DEBUG | [] +2025-01-25 20:45:39.575 | DEBUG | [] +2025-01-25 20:45:40.576 | DEBUG | [] +2025-01-25 20:45:41.574 | DEBUG | [] +2025-01-25 20:45:42.574 | DEBUG | [] +2025-01-25 20:45:43.574 | DEBUG | [] +2025-01-25 20:45:44.574 | DEBUG | [] +2025-01-25 20:45:45.574 | DEBUG | [] +2025-01-25 20:45:46.574 | DEBUG | [] +2025-01-25 20:45:47.575 | DEBUG | [] +2025-01-25 20:45:48.575 | DEBUG | [] +2025-01-25 20:45:49.575 | DEBUG | [] +2025-01-25 20:45:50.575 | DEBUG | [] +2025-01-25 20:45:51.573 | DEBUG | [] +2025-01-25 20:45:52.573 | DEBUG | [] +2025-01-25 20:45:53.574 | DEBUG | [] +2025-01-25 20:45:54.575 | DEBUG | [] +2025-01-25 20:45:55.573 | DEBUG | [] +2025-01-25 20:45:56.573 | DEBUG | [] +2025-01-25 20:45:57.573 | DEBUG | [] +2025-01-25 20:45:58.573 | DEBUG | [] +2025-01-25 20:45:59.579 | DEBUG | [] +2025-01-25 20:46:00.573 | DEBUG | [] +2025-01-25 20:46:01.571 | DEBUG | [] +2025-01-25 20:46:02.572 | DEBUG | [] +2025-01-25 20:46:03.572 | DEBUG | [] +2025-01-25 20:46:04.573 | DEBUG | [] +2025-01-25 20:46:05.572 | DEBUG | [] +2025-01-25 20:46:06.572 | DEBUG | [] +2025-01-25 20:46:07.578 | DEBUG | [] +2025-01-25 20:46:08.578 | DEBUG | [] +2025-01-25 20:46:09.574 | DEBUG | [] +2025-01-25 20:46:10.575 | DEBUG | [] +2025-01-25 20:46:11.576 | DEBUG | [] +2025-01-25 20:46:12.576 | DEBUG | [] +2025-01-25 20:46:13.574 | DEBUG | [] +2025-01-25 20:46:14.575 | DEBUG | [] +2025-01-25 20:46:15.572 | DEBUG | [] +2025-01-25 20:46:16.577 | DEBUG | [] +2025-01-25 20:46:17.577 | DEBUG | [] +2025-01-25 20:46:18.578 | DEBUG | [] +2025-01-25 20:46:19.575 | DEBUG | [] +2025-01-25 20:46:20.574 | DEBUG | [] +2025-01-25 20:46:21.572 | DEBUG | [] +2025-01-25 20:46:22.577 | DEBUG | [] +2025-01-25 20:46:23.574 | DEBUG | [] +2025-01-25 20:46:24.575 | DEBUG | [] +2025-01-25 20:46:25.574 | DEBUG | [] +2025-01-25 20:46:26.573 | DEBUG | [] +2025-01-25 20:46:27.576 | DEBUG | [] +2025-01-25 20:46:28.575 | DEBUG | [] +2025-01-25 20:46:29.576 | DEBUG | [] +2025-01-25 20:46:30.574 | DEBUG | [] +2025-01-25 20:46:31.575 | DEBUG | [] +2025-01-25 20:46:32.575 | DEBUG | [] +2025-01-25 20:46:33.573 | DEBUG | [] +2025-01-25 20:46:34.576 | DEBUG | [] +2025-01-25 20:46:35.573 | DEBUG | [] +2025-01-25 20:46:36.574 | DEBUG | [] +2025-01-25 20:46:37.574 | DEBUG | [] +2025-01-25 20:46:38.572 | DEBUG | [] +2025-01-25 20:46:39.573 | DEBUG | [] +2025-01-25 20:46:40.574 | DEBUG | [] +2025-01-25 20:46:41.573 | DEBUG | [] +2025-01-25 20:46:42.579 | DEBUG | [] +2025-01-25 20:46:43.572 | DEBUG | [] +2025-01-25 20:46:44.573 | DEBUG | [] +2025-01-25 20:46:45.572 | DEBUG | [] +2025-01-25 20:46:46.573 | DEBUG | [] +2025-01-25 20:46:47.574 | DEBUG | [] +2025-01-25 20:46:48.573 | DEBUG | [] +2025-01-25 20:46:49.572 | DEBUG | [] +2025-01-25 20:46:50.573 | DEBUG | [] +2025-01-25 20:46:51.574 | DEBUG | [] +2025-01-25 20:46:52.571 | DEBUG | [] +2025-01-25 20:46:53.580 | DEBUG | [] +2025-01-25 20:46:54.580 | DEBUG | [] +2025-01-25 20:46:55.579 | DEBUG | [] +2025-01-25 20:46:56.572 | DEBUG | [] +2025-01-25 20:46:57.576 | DEBUG | [] +2025-01-25 20:46:58.577 | DEBUG | [] +2025-01-25 20:46:59.577 | DEBUG | [] +2025-01-25 20:47:00.576 | DEBUG | [] +2025-01-25 20:47:01.576 | DEBUG | [] +2025-01-25 20:47:02.574 | DEBUG | [] +2025-01-25 20:47:03.577 | DEBUG | [] +2025-01-25 20:47:04.577 | DEBUG | [] +2025-01-25 20:47:05.577 | DEBUG | [] +2025-01-25 20:47:06.575 | DEBUG | [] +2025-01-25 20:47:07.574 | DEBUG | [] +2025-01-25 20:47:08.573 | DEBUG | [] +2025-01-25 20:47:09.575 | DEBUG | [] +2025-01-25 20:47:10.576 | DEBUG | [] +2025-01-25 20:47:11.574 | DEBUG | [] +2025-01-25 20:47:12.574 | DEBUG | [] +2025-01-25 20:47:13.574 | DEBUG | [] +2025-01-25 20:47:14.576 | DEBUG | [] +2025-01-25 20:47:15.574 | DEBUG | [] +2025-01-25 20:47:16.573 | DEBUG | [] +2025-01-25 20:51:50.441 | INFO | 日志记录器初始化完成 +2025-01-25 20:51:50.441 | INFO | 配置类初始化完成 +2025-01-25 20:51:50.443 | INFO | 程序配置管理模块初始化完成 +2025-01-25 20:52:39.704 | INFO | 日志记录器初始化完成 +2025-01-25 20:52:39.705 | INFO | 配置类初始化完成 +2025-01-25 20:52:39.705 | INFO | 程序配置管理模块初始化完成 +2025-01-25 20:52:41.637 | DEBUG | D:\程序开发\AUTO_MAA, D:\程序开发\AUTO_MAA\main.py +2025-01-25 20:52:41.667 | DEBUG | [] +2025-01-25 20:52:41.779 | DEBUG | [] +2025-01-25 20:52:42.777 | DEBUG | [] +2025-01-25 20:52:43.777 | DEBUG | [] +2025-01-25 20:52:44.779 | DEBUG | [] +2025-01-25 20:59:03.259 | INFO | 日志记录器初始化完成 +2025-01-25 20:59:03.259 | INFO | 配置类初始化完成 +2025-01-25 20:59:03.260 | INFO | 程序配置管理模块初始化完成 +2025-01-25 20:59:05.168 | DEBUG | D:\程序开发\AUTO_MAA, D:\程序开发\AUTO_MAA\main.py +2025-01-25 20:59:05.194 | DEBUG | [] +2025-01-25 20:59:05.337 | DEBUG | [] +2025-01-25 20:59:06.342 | DEBUG | [] +2025-01-25 20:59:07.342 | DEBUG | [] +2025-01-25 20:59:08.338 | DEBUG | [] +2025-01-26 07:39:34.101 | INFO | 日志记录器初始化完成 +2025-01-26 07:39:34.102 | INFO | 配置类初始化完成 +2025-01-26 07:39:34.102 | INFO | 程序配置管理模块初始化完成 +2025-01-26 07:39:36.413 | DEBUG | D:\程序开发\AUTO_MAA, D:\程序开发\AUTO_MAA\main.py +2025-01-26 07:39:36.440 | DEBUG | [] +2025-01-26 07:39:37.196 | DEBUG | [] +2025-01-26 07:39:38.201 | DEBUG | [] +2025-01-26 07:39:39.196 | DEBUG | [] +2025-01-26 07:39:40.195 | DEBUG | [] +2025-01-26 07:39:41.197 | DEBUG | [] +2025-01-26 07:39:42.195 | DEBUG | [] +2025-01-26 07:39:43.074 | WARNING | 未选择调度模式 +2025-01-26 07:39:43.196 | DEBUG | [] +2025-01-26 07:39:44.196 | DEBUG | [] +2025-01-26 07:39:45.197 | DEBUG | [] +2025-01-26 07:39:46.198 | DEBUG | [] +2025-01-26 07:39:47.198 | DEBUG | [] +2025-01-26 07:39:48.198 | DEBUG | [] +2025-01-26 07:39:49.420 | DEBUG | [] +2025-01-26 07:39:50.417 | DEBUG | [] +2025-01-26 07:39:51.417 | DEBUG | [] +2025-01-26 07:39:52.417 | DEBUG | [] +2025-01-26 07:39:53.417 | DEBUG | [] +2025-01-26 07:39:54.417 | DEBUG | [] +2025-01-26 07:40:11.603 | INFO | 日志记录器初始化完成 +2025-01-26 07:40:11.603 | INFO | 配置类初始化完成 +2025-01-26 07:40:11.603 | INFO | 程序配置管理模块初始化完成 +2025-01-26 07:40:13.655 | DEBUG | D:\程序开发\AUTO_MAA, D:\程序开发\AUTO_MAA\main.py +2025-01-26 07:40:13.685 | DEBUG | [] +2025-01-26 07:40:14.682 | DEBUG | [] +2025-01-26 07:40:15.682 | DEBUG | [] +2025-01-26 07:40:16.682 | DEBUG | [] +2025-01-26 07:40:17.682 | DEBUG | [] +2025-01-26 07:40:18.681 | DEBUG | [] +2025-01-26 07:40:19.682 | DEBUG | [] +2025-01-26 07:40:20.682 | DEBUG | [] +2025-01-26 07:40:21.682 | DEBUG | [] +2025-01-26 07:40:22.682 | DEBUG | [] +2025-01-26 07:40:23.682 | DEBUG | [] +2025-01-26 07:40:24.681 | DEBUG | [] +2025-01-26 07:40:25.687 | DEBUG | [] +2025-01-26 07:40:26.682 | DEBUG | [] +2025-01-26 07:40:27.686 | DEBUG | [] +2025-01-26 07:40:28.681 | DEBUG | [] +2025-01-26 07:40:29.687 | DEBUG | [] +2025-01-26 07:40:30.686 | DEBUG | [] +2025-01-26 07:40:31.687 | DEBUG | [] +2025-01-26 07:40:32.679 | DEBUG | [] +2025-01-26 07:40:33.685 | DEBUG | [] +2025-01-26 07:40:34.684 | DEBUG | [] +2025-01-26 07:40:35.686 | DEBUG | [] +2025-01-26 07:40:36.686 | DEBUG | [] +2025-01-26 07:40:37.685 | DEBUG | [] +2025-01-26 07:40:38.685 | DEBUG | [] +2025-01-26 07:40:39.685 | DEBUG | [] +2025-01-26 07:40:40.685 | DEBUG | [] +2025-01-26 07:40:41.685 | DEBUG | [] +2025-01-26 07:40:42.685 | DEBUG | [] +2025-01-26 07:40:43.685 | DEBUG | [] +2025-01-26 07:40:44.684 | DEBUG | [] +2025-01-26 07:40:45.684 | DEBUG | [] +2025-01-26 07:40:46.684 | DEBUG | [] +2025-01-26 07:40:47.683 | DEBUG | [] +2025-01-26 07:40:48.682 | DEBUG | [] +2025-01-26 07:40:49.684 | DEBUG | [] +2025-01-26 07:40:50.684 | DEBUG | [] +2025-01-26 07:40:51.683 | DEBUG | [] +2025-01-26 07:40:52.683 | DEBUG | [] +2025-01-26 07:40:53.683 | DEBUG | [] +2025-01-26 07:40:54.684 | DEBUG | [] +2025-01-26 07:40:55.680 | DEBUG | [] +2025-01-26 07:40:56.682 | DEBUG | [] +2025-01-26 07:40:57.683 | DEBUG | [] +2025-01-26 07:40:58.681 | DEBUG | [] +2025-01-26 07:40:59.684 | DEBUG | [] +2025-01-26 07:41:00.679 | DEBUG | [] +2025-01-26 07:41:01.679 | DEBUG | [] +2025-01-26 07:41:02.681 | DEBUG | [] +2025-01-26 07:41:03.683 | DEBUG | [] +2025-01-26 07:41:04.682 | DEBUG | [] +2025-01-26 07:41:05.682 | DEBUG | [] +2025-01-26 07:41:06.680 | DEBUG | [] +2025-01-26 07:41:07.682 | DEBUG | [] +2025-01-26 07:41:08.681 | DEBUG | [] +2025-01-26 07:41:09.682 | DEBUG | [] +2025-01-26 07:41:10.681 | DEBUG | [] +2025-01-26 07:41:11.681 | DEBUG | [] +2025-01-26 07:41:12.687 | DEBUG | [] +2025-01-26 07:41:13.682 | DEBUG | [] +2025-01-26 07:41:14.694 | DEBUG | [] +2025-01-26 07:41:15.680 | DEBUG | [] +2025-01-26 07:41:16.679 | DEBUG | [] +2025-01-26 07:41:17.686 | DEBUG | [] +2025-01-26 07:41:18.682 | DEBUG | [] +2025-01-26 07:41:19.686 | DEBUG | [] +2025-01-26 07:41:20.686 | DEBUG | [] +2025-01-26 07:41:21.685 | DEBUG | [] +2025-01-26 07:41:22.686 | DEBUG | [] +2025-01-26 07:41:23.685 | DEBUG | [] +2025-01-26 07:41:24.686 | DEBUG | [] +2025-01-26 07:41:25.685 | DEBUG | [] +2025-01-26 07:41:26.686 | DEBUG | [] +2025-01-26 07:41:27.684 | DEBUG | [] +2025-01-26 07:41:28.695 | DEBUG | [] +2025-01-26 07:41:29.684 | DEBUG | [] +2025-01-26 07:41:30.684 | DEBUG | [] +2025-01-26 07:41:31.684 | DEBUG | [] +2025-01-26 07:41:32.684 | DEBUG | [] +2025-01-26 07:41:33.684 | DEBUG | [] +2025-01-26 07:41:34.684 | DEBUG | [] +2025-01-26 07:41:35.684 | DEBUG | [] +2025-01-26 07:41:36.683 | DEBUG | [] +2025-01-26 07:41:37.683 | DEBUG | [] +2025-01-26 07:41:38.683 | DEBUG | [] +2025-01-26 07:41:39.684 | DEBUG | [] +2025-01-26 07:41:40.683 | DEBUG | [] +2025-01-26 07:41:41.683 | DEBUG | [] +2025-01-26 07:41:42.684 | DEBUG | [] +2025-01-26 07:41:43.683 | DEBUG | [] +2025-01-26 07:41:44.697 | DEBUG | [] +2025-01-26 07:41:45.683 | DEBUG | [] +2025-01-26 07:41:46.682 | DEBUG | [] +2025-01-26 07:41:47.683 | DEBUG | [] +2025-01-26 07:41:48.684 | DEBUG | [] +2025-01-26 07:41:49.683 | DEBUG | [] +2025-01-26 07:41:50.681 | DEBUG | [] +2025-01-26 07:41:51.694 | DEBUG | [] +2025-01-26 07:41:52.682 | DEBUG | [] +2025-01-26 07:41:53.682 | DEBUG | [] +2025-01-26 07:43:24.872 | INFO | 日志记录器初始化完成 +2025-01-26 07:43:24.873 | INFO | 配置类初始化完成 +2025-01-26 07:43:24.874 | INFO | 程序配置管理模块初始化完成 +2025-01-26 07:43:26.989 | DEBUG | D:\程序开发\AUTO_MAA, D:\程序开发\AUTO_MAA\main.py +2025-01-26 07:43:27.017 | DEBUG | [] +2025-01-26 07:43:27.946 | DEBUG | [] +2025-01-26 07:43:28.948 | DEBUG | [] +2025-01-26 07:43:29.948 | DEBUG | [] +2025-01-26 07:43:30.951 | DEBUG | [] +2025-01-26 07:43:31.735 | INFO | 用户添加任务:调度队列_1 +2025-01-26 07:43:31.735 | INFO | 任务开始:调度队列_1 +2025-01-26 07:43:31.743 | INFO | 任务开始:脚本_2 +2025-01-26 07:43:32.055 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-26 07:43:32.948 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-26 07:43:33.948 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-26 07:43:35.032 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-26 07:43:35.948 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-26 07:43:36.947 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-26 07:43:37.956 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-26 07:43:38.947 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-26 07:43:39.946 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-26 07:43:40.946 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-26 07:43:42.024 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-26 07:43:42.946 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-26 07:43:43.952 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-26 07:43:44.996 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-26 07:43:45.804 | INFO | 中止任务:调度队列_1 +2025-01-26 07:43:45.809 | INFO | 申请中止本次任务 +2025-01-26 07:43:48.287 | INFO | 任务完成:脚本_2 +2025-01-26 07:43:48.294 | DEBUG | ['调度队列_1'] +2025-01-26 07:43:48.306 | INFO | 任务结束:调度队列_1 +2025-01-26 07:43:48.967 | DEBUG | [] +2025-01-26 07:43:49.963 | DEBUG | [] +2025-01-26 07:43:50.963 | DEBUG | [] +2025-01-26 07:43:51.963 | DEBUG | [] +2025-01-26 07:43:52.962 | DEBUG | [] +2025-01-26 07:43:53.962 | DEBUG | [] +2025-01-26 07:48:36.656 | INFO | 日志记录器初始化完成 +2025-01-26 07:48:36.657 | INFO | 配置类初始化完成 +2025-01-26 07:48:36.657 | INFO | 程序配置管理模块初始化完成 +2025-01-26 07:48:38.736 | DEBUG | D:\程序开发\AUTO_MAA, D:\程序开发\AUTO_MAA\main.py +2025-01-26 07:48:38.765 | DEBUG | [] +2025-01-26 07:48:39.748 | DEBUG | [] +2025-01-26 07:48:40.749 | DEBUG | [] +2025-01-26 07:48:41.743 | DEBUG | [] +2025-01-26 07:48:42.747 | DEBUG | [] +2025-01-26 07:48:43.744 | DEBUG | [] +2025-01-26 07:48:44.748 | DEBUG | [] +2025-01-26 07:48:45.748 | DEBUG | [] +2025-01-26 07:48:46.747 | DEBUG | [] +2025-01-26 07:48:47.748 | DEBUG | [] +2025-01-26 07:48:48.746 | DEBUG | [] +2025-01-26 07:48:49.747 | DEBUG | [] +2025-01-26 07:48:50.748 | DEBUG | [] +2025-01-26 07:48:51.745 | DEBUG | [] +2025-01-26 07:48:52.746 | DEBUG | [] +2025-01-26 07:48:53.746 | DEBUG | [] +2025-01-26 07:48:54.746 | DEBUG | [] +2025-01-26 07:48:55.746 | DEBUG | [] +2025-01-26 07:48:56.746 | DEBUG | [] +2025-01-26 07:48:57.747 | DEBUG | [] +2025-01-26 07:48:58.746 | DEBUG | [] +2025-01-26 07:48:59.746 | DEBUG | [] +2025-01-26 07:49:00.746 | DEBUG | [] +2025-01-26 07:49:01.745 | DEBUG | [] +2025-01-26 07:49:02.745 | DEBUG | [] +2025-01-26 07:49:03.745 | DEBUG | [] +2025-01-26 07:49:04.746 | DEBUG | [] +2025-01-26 07:49:05.744 | DEBUG | [] +2025-01-26 07:49:06.745 | DEBUG | [] +2025-01-26 07:49:07.744 | DEBUG | [] +2025-01-26 07:49:08.744 | DEBUG | [] +2025-01-26 07:49:09.746 | DEBUG | [] +2025-01-26 07:49:10.746 | DEBUG | [] +2025-01-26 07:49:11.745 | DEBUG | [] +2025-01-26 07:49:12.745 | DEBUG | [] +2025-01-26 07:49:13.744 | DEBUG | [] +2025-01-26 07:49:14.745 | DEBUG | [] +2025-01-26 07:49:15.744 | DEBUG | [] +2025-01-26 07:49:16.744 | DEBUG | [] +2025-01-26 07:49:17.744 | DEBUG | [] +2025-01-26 07:49:18.748 | DEBUG | [] +2025-01-26 07:49:19.750 | DEBUG | [] +2025-01-26 07:49:20.743 | DEBUG | [] +2025-01-26 07:49:21.749 | DEBUG | [] +2025-01-26 07:49:22.744 | DEBUG | [] +2025-01-26 07:49:23.749 | DEBUG | [] +2025-01-26 07:49:24.743 | DEBUG | [] +2025-01-26 07:49:25.748 | DEBUG | [] +2025-01-26 07:49:26.748 | DEBUG | [] +2025-01-26 07:49:27.748 | DEBUG | [] +2025-01-26 07:49:28.748 | DEBUG | [] +2025-01-26 07:49:29.749 | DEBUG | [] +2025-01-26 07:49:30.743 | DEBUG | [] +2025-01-26 07:49:31.743 | DEBUG | [] +2025-01-26 07:49:32.745 | DEBUG | [] +2025-01-26 07:49:33.745 | DEBUG | [] +2025-01-26 07:49:34.743 | DEBUG | [] +2025-01-26 07:49:35.743 | DEBUG | [] +2025-01-26 07:49:36.745 | DEBUG | [] +2025-01-26 07:49:37.745 | DEBUG | [] +2025-01-26 07:49:38.745 | DEBUG | [] +2025-01-26 07:49:39.744 | DEBUG | [] +2025-01-26 07:49:40.744 | DEBUG | [] +2025-01-26 07:49:41.745 | DEBUG | [] +2025-01-26 07:49:42.743 | DEBUG | [] +2025-01-26 07:49:43.746 | DEBUG | [] +2025-01-26 07:49:44.743 | DEBUG | [] +2025-01-26 07:49:45.745 | DEBUG | [] +2025-01-26 07:49:46.744 | DEBUG | [] +2025-01-26 07:49:47.746 | DEBUG | [] +2025-01-26 07:49:48.744 | DEBUG | [] +2025-01-26 07:49:49.745 | DEBUG | [] +2025-01-26 07:49:50.745 | DEBUG | [] +2025-01-26 07:49:51.743 | DEBUG | [] +2025-01-26 07:49:52.743 | DEBUG | [] +2025-01-26 07:49:53.744 | DEBUG | [] +2025-01-26 07:49:54.745 | DEBUG | [] +2025-01-26 07:49:55.751 | DEBUG | [] +2025-01-26 07:49:56.743 | DEBUG | [] +2025-01-26 07:49:57.744 | DEBUG | [] +2025-01-26 07:49:58.743 | DEBUG | [] +2025-01-26 07:49:59.744 | DEBUG | [] +2025-01-26 07:50:00.745 | DEBUG | [] +2025-01-26 07:50:01.744 | DEBUG | [] +2025-01-26 07:50:02.745 | DEBUG | [] +2025-01-26 07:50:03.744 | DEBUG | [] +2025-01-26 07:50:04.744 | DEBUG | [] +2025-01-26 07:50:05.744 | DEBUG | [] +2025-01-26 07:50:06.746 | DEBUG | [] +2025-01-26 07:50:07.742 | DEBUG | [] +2025-01-26 07:50:08.749 | DEBUG | [] +2025-01-26 07:50:09.750 | DEBUG | [] +2025-01-26 07:50:10.743 | DEBUG | [] +2025-01-26 07:50:11.748 | DEBUG | [] +2025-01-26 07:50:12.747 | DEBUG | [] +2025-01-26 07:50:13.744 | DEBUG | [] +2025-01-26 07:50:14.747 | DEBUG | [] +2025-01-26 07:50:15.745 | DEBUG | [] +2025-01-26 07:50:16.745 | DEBUG | [] +2025-01-26 07:50:17.889 | DEBUG | [] +2025-01-26 07:50:18.747 | DEBUG | [] +2025-01-26 07:50:19.747 | DEBUG | [] +2025-01-26 07:50:20.749 | DEBUG | [] +2025-01-26 07:50:21.749 | DEBUG | [] +2025-01-26 07:50:22.748 | DEBUG | [] +2025-01-26 07:50:23.747 | DEBUG | [] +2025-01-26 07:50:24.746 | DEBUG | [] +2025-01-26 07:50:25.744 | DEBUG | [] +2025-01-26 07:50:26.886 | DEBUG | [] +2025-01-26 07:50:27.886 | DEBUG | [] +2025-01-26 07:50:28.884 | DEBUG | [] +2025-01-26 07:50:29.885 | DEBUG | [] +2025-01-26 07:50:30.782 | INFO | 用户添加任务:调度队列_1 +2025-01-26 07:50:30.783 | INFO | 任务开始:调度队列_1 +2025-01-26 07:50:30.788 | INFO | 任务开始:脚本_2 +2025-01-26 07:50:30.997 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-26 07:50:31.885 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-26 07:50:32.885 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-26 07:50:34.041 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-26 07:50:34.883 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-26 07:50:35.884 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-26 07:50:36.878 | INFO | 中止任务:调度队列_1 +2025-01-26 07:50:36.880 | INFO | 申请中止本次任务 +2025-01-26 07:50:41.715 | INFO | 任务完成:脚本_2 +2025-01-26 07:50:41.717 | DEBUG | ['调度队列_1'] +2025-01-26 07:50:41.720 | INFO | 任务结束:调度队列_1 +2025-01-26 07:50:41.885 | DEBUG | [] +2025-01-26 07:50:42.884 | DEBUG | [] +2025-01-26 07:50:43.883 | DEBUG | [] +2025-01-26 07:50:44.885 | DEBUG | [] +2025-01-26 07:50:45.883 | DEBUG | [] +2025-01-26 07:50:46.883 | DEBUG | [] +2025-01-26 07:50:47.883 | DEBUG | [] +2025-01-26 07:50:48.884 | DEBUG | [] +2025-01-26 07:56:21.015 | INFO | 日志记录器初始化完成 +2025-01-26 07:56:21.016 | INFO | 配置类初始化完成 +2025-01-26 07:56:21.016 | INFO | 程序配置管理模块初始化完成 +2025-01-26 07:56:23.010 | DEBUG | D:\程序开发\AUTO_MAA, D:\程序开发\AUTO_MAA\main.py +2025-01-26 07:56:23.039 | DEBUG | [] +2025-01-26 07:56:23.087 | DEBUG | [] +2025-01-26 07:56:24.087 | DEBUG | [] +2025-01-26 07:56:25.092 | DEBUG | [] +2025-01-26 07:56:26.091 | DEBUG | [] +2025-01-26 07:56:27.088 | DEBUG | [] +2025-01-26 07:56:27.351 | INFO | 用户添加任务:调度队列_1 +2025-01-26 07:56:27.352 | INFO | 任务开始:调度队列_1 +2025-01-26 07:56:27.357 | INFO | 任务开始:脚本_2 +2025-01-26 07:56:28.092 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-26 07:56:29.189 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-26 07:56:30.087 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-26 07:56:30.863 | INFO | 中止任务:调度队列_1 +2025-01-26 07:56:30.866 | INFO | 申请中止本次任务 +2025-01-26 07:56:34.083 | INFO | 任务完成:脚本_2 +2025-01-26 07:56:34.084 | DEBUG | ['调度队列_1'] +2025-01-26 07:56:34.087 | INFO | 任务结束:调度队列_1 +2025-01-26 07:56:34.097 | DEBUG | [] +2025-01-26 07:56:35.091 | DEBUG | [] +2025-01-26 07:56:36.091 | DEBUG | [] +2025-01-26 07:56:37.090 | DEBUG | [] +2025-01-26 07:56:38.091 | DEBUG | [] +2025-01-26 07:56:39.091 | DEBUG | [] +2025-01-26 07:56:40.091 | DEBUG | [] +2025-01-26 07:56:41.090 | DEBUG | [] +2025-01-26 07:56:42.090 | DEBUG | [] +2025-01-26 07:56:43.089 | DEBUG | [] +2025-01-26 07:56:44.089 | DEBUG | [] +2025-01-26 07:56:45.090 | DEBUG | [] +2025-01-26 07:56:46.089 | DEBUG | [] +2025-01-26 07:56:47.088 | DEBUG | [] +2025-01-26 07:56:48.087 | DEBUG | [] +2025-01-26 07:56:49.088 | DEBUG | [] +2025-01-26 07:56:50.088 | DEBUG | [] +2025-01-26 07:56:51.089 | DEBUG | [] +2025-01-26 07:56:52.088 | DEBUG | [] +2025-01-26 07:56:52.580 | INFO | 用户添加任务:调度队列_1 +2025-01-26 07:56:52.580 | INFO | 任务开始:调度队列_1 +2025-01-26 07:56:52.585 | INFO | 任务开始:脚本_2 +2025-01-26 07:56:53.087 | DEBUG | ['调度队列_1', '脚本_2'] +2025-01-26 07:56:53.750 | INFO | 中止任务:调度队列_1 +2025-01-26 07:56:53.754 | INFO | 申请中止本次任务 +2025-01-26 07:56:56.417 | INFO | 任务完成:脚本_2 +2025-01-26 07:56:56.419 | DEBUG | ['调度队列_1'] +2025-01-26 07:56:56.422 | INFO | 任务结束:调度队列_1 +2025-01-26 07:56:57.086 | DEBUG | [] +2025-01-26 07:56:58.087 | DEBUG | [] +2025-01-26 07:56:59.088 | DEBUG | [] +2025-01-26 07:57:00.087 | DEBUG | [] +2025-01-26 07:57:01.087 | DEBUG | [] +2025-01-26 07:57:02.087 | DEBUG | [] +2025-01-26 07:57:03.088 | DEBUG | [] +2025-01-26 07:57:04.088 | DEBUG | [] +2025-01-26 07:57:05.093 | DEBUG | [] +2025-01-26 07:57:06.086 | DEBUG | [] diff --git a/main.py b/main.py index 19654f2..f311092 100644 --- a/main.py +++ b/main.py @@ -31,31 +31,18 @@ from PySide6.QtCore import Qt from qfluentwidgets import FluentTranslator import sys -from app.core import AppConfig -from app.services.notification import Notification -from app.services.security import CryptoHandler -from app.services.system import SystemHandler -from app.ui.main_window import AUTO_MAA if __name__ == "__main__": - config = AppConfig() - notify = Notification(config) - crypto = CryptoHandler(config) - system = SystemHandler(config) - - QApplication.setAttribute(Qt.AA_DontCreateNativeWidgetSiblings) application = QApplication(sys.argv) + QApplication.setAttribute(Qt.AA_DontCreateNativeWidgetSiblings) translator = FluentTranslator() application.installTranslator(translator) - window = AUTO_MAA( - config=config, - notify=notify, - crypto=crypto, - system=system, - ) + from app.ui.main_window import AUTO_MAA + + window = AUTO_MAA() window.show_ui("显示主窗口") window.start_up_task() sys.exit(application.exec()) From 126799d2a29ed30bdff84bf2f87e61a2a9300be3 Mon Sep 17 00:00:00 2001 From: DLmaster Date: Mon, 27 Jan 2025 10:38:17 +0800 Subject: [PATCH 11/12] =?UTF-8?q?feat(core):=20=E6=81=A2=E5=A4=8D=E5=9F=BA?= =?UTF-8?q?=E6=9C=AC=E6=89=80=E6=9C=89=E5=8E=9F=E5=8A=9F=E8=83=BD=EF=BC=8C?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=96=87=E4=BB=B6=E7=89=88=E6=9C=AC=E6=9B=B4?= =?UTF-8?q?=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/python-app.yml | 2 +- Updater.exe | 0 app/__pycache__/__init__.cpython-312.pyc | Bin 800 -> 0 bytes app/__pycache__/config.cpython-312.pyc | Bin 19115 -> 0 bytes app/__pycache__/task_manager.cpython-312.pyc | Bin 7150 -> 0 bytes app/__pycache__/timer.cpython-312.pyc | Bin 3363 -> 0 bytes app/core/__pycache__/__init__.cpython-312.pyc | Bin 683 -> 0 bytes app/core/__pycache__/config.cpython-312.pyc | Bin 21648 -> 0 bytes .../__pycache__/main_info_bar.cpython-312.pyc | Bin 2158 -> 0 bytes .../__pycache__/task_manager.cpython-312.pyc | Bin 11435 -> 0 bytes app/core/__pycache__/timer.cpython-312.pyc | Bin 3823 -> 0 bytes app/core/config.py | 347 +- app/core/task_manager.py | 143 +- app/core/timer.py | 38 +- app/models/MAA.py | 165 +- app/models/__pycache__/MAA.cpython-312.pyc | Bin 34075 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 420 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 517 -> 0 bytes .../__pycache__/notification.cpython-312.pyc | Bin 3216 -> 0 bytes .../__pycache__/security.cpython-312.pyc | Bin 6545 -> 0 bytes .../__pycache__/system.cpython-312.pyc | Bin 4795 -> 0 bytes app/ui/__pycache__/Widget.cpython-312.pyc | Bin 14323 -> 0 bytes app/ui/__pycache__/__init__.cpython-312.pyc | Bin 431 -> 0 bytes .../dispatch_center.cpython-312.pyc | Bin 25075 -> 0 bytes .../__pycache__/main_window.cpython-312.pyc | Bin 13735 -> 0 bytes .../member_manager.cpython-312.pyc | Bin 68905 -> 0 bytes .../__pycache__/queue_manager.cpython-312.pyc | Bin 28044 -> 0 bytes app/ui/__pycache__/setting.cpython-312.pyc | Bin 24652 -> 0 bytes app/ui/dispatch_center.py | 38 +- app/ui/else.py | 539 -- app/ui/main_window.py | 17 +- app/ui/member_manager.py | 266 +- app/ui/queue_manager.py | 57 +- app/ui/setting.py | 147 +- app/utils/Updater.py | 1 - app/utils/__pycache__/Updater.cpython-312.pyc | Bin 17015 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 466 -> 0 bytes app/utils/__pycache__/version.cpython-312.pyc | Bin 1115 -> 0 bytes app/utils/package.py | 1 - config/MaaConfig/脚本_1/Default/gui.json | 335 -- config/MaaConfig/脚本_1/config.json | 15 - config/MaaConfig/脚本_1/user_data.db | Bin 12288 -> 0 bytes config/MaaConfig/脚本_2/Default/gui.json | 335 -- config/MaaConfig/脚本_2/config.json | 15 - config/MaaConfig/脚本_2/user_data.db | Bin 12288 -> 0 bytes config/QueueConfig/调度队列_1.json | 44 - config/QueueConfig/调度队列_2.json | 44 - config/QueueConfig/调度队列_3.json | 44 - config/config.json | 32 - config/history.json | 18 - data/gameid.txt | 5 - data/key/AES_password_verify.bin | 1 - data/key/PASSWORDsalt.txt | 1 - data/key/private_key.bin | Bin 1696 -> 0 bytes data/key/public_key.pem | 9 - data/key/verifysalt.txt | 1 - debug/AUTO_MAA.log | 4701 ----------------- log.txt | 10 - main.py | 8 +- resources/gui/main.ui | 1545 ------ resources/version.json | 5 +- 61 files changed, 836 insertions(+), 8093 deletions(-) delete mode 100644 Updater.exe delete mode 100644 app/__pycache__/__init__.cpython-312.pyc delete mode 100644 app/__pycache__/config.cpython-312.pyc delete mode 100644 app/__pycache__/task_manager.cpython-312.pyc delete mode 100644 app/__pycache__/timer.cpython-312.pyc delete mode 100644 app/core/__pycache__/__init__.cpython-312.pyc delete mode 100644 app/core/__pycache__/config.cpython-312.pyc delete mode 100644 app/core/__pycache__/main_info_bar.cpython-312.pyc delete mode 100644 app/core/__pycache__/task_manager.cpython-312.pyc delete mode 100644 app/core/__pycache__/timer.cpython-312.pyc delete mode 100644 app/models/__pycache__/MAA.cpython-312.pyc delete mode 100644 app/models/__pycache__/__init__.cpython-312.pyc delete mode 100644 app/services/__pycache__/__init__.cpython-312.pyc delete mode 100644 app/services/__pycache__/notification.cpython-312.pyc delete mode 100644 app/services/__pycache__/security.cpython-312.pyc delete mode 100644 app/services/__pycache__/system.cpython-312.pyc delete mode 100644 app/ui/__pycache__/Widget.cpython-312.pyc delete mode 100644 app/ui/__pycache__/__init__.cpython-312.pyc delete mode 100644 app/ui/__pycache__/dispatch_center.cpython-312.pyc delete mode 100644 app/ui/__pycache__/main_window.cpython-312.pyc delete mode 100644 app/ui/__pycache__/member_manager.cpython-312.pyc delete mode 100644 app/ui/__pycache__/queue_manager.cpython-312.pyc delete mode 100644 app/ui/__pycache__/setting.cpython-312.pyc delete mode 100644 app/ui/else.py delete mode 100644 app/utils/__pycache__/Updater.cpython-312.pyc delete mode 100644 app/utils/__pycache__/__init__.cpython-312.pyc delete mode 100644 app/utils/__pycache__/version.cpython-312.pyc delete mode 100644 config/MaaConfig/脚本_1/Default/gui.json delete mode 100644 config/MaaConfig/脚本_1/config.json delete mode 100644 config/MaaConfig/脚本_1/user_data.db delete mode 100644 config/MaaConfig/脚本_2/Default/gui.json delete mode 100644 config/MaaConfig/脚本_2/config.json delete mode 100644 config/MaaConfig/脚本_2/user_data.db delete mode 100644 config/QueueConfig/调度队列_1.json delete mode 100644 config/QueueConfig/调度队列_2.json delete mode 100644 config/QueueConfig/调度队列_3.json delete mode 100644 config/config.json delete mode 100644 config/history.json delete mode 100644 data/gameid.txt delete mode 100644 data/key/AES_password_verify.bin delete mode 100644 data/key/PASSWORDsalt.txt delete mode 100644 data/key/private_key.bin delete mode 100644 data/key/public_key.pem delete mode 100644 data/key/verifysalt.txt delete mode 100644 debug/AUTO_MAA.log delete mode 100644 log.txt delete mode 100644 resources/gui/main.ui diff --git a/.github/workflows/python-app.yml b/.github/workflows/python-app.yml index b07af9f..28912d4 100644 --- a/.github/workflows/python-app.yml +++ b/.github/workflows/python-app.yml @@ -22,7 +22,7 @@ name: Build AUTO_MAA on: push: - branches: [ "main","fluent-gui-dev" ] + branches: [ "main","dev" ] paths-ignore: - '**.md' - 'LICENSE' diff --git a/Updater.exe b/Updater.exe deleted file mode 100644 index e69de29..0000000 diff --git a/app/__pycache__/__init__.cpython-312.pyc b/app/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index e8ee89856e6283e22c1d1334231f06485b094b40..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 800 zcmaKpO=}ZD7{_OmeamiMYHh0^YVp*S7#brLN-2gGyfjrwdl>@5lAXrIo$NBZ8=9Qr zp(lkR2!eR>q~Acaegg5J7t28D!G`L|YVqz&n(d(n=kVisn|c28JfCto1MpM)`n>g7 z0pPoEl9L)4$D7=E0UQ8w?q6>;;k)}WvW52* zu{)H*lsIyE^{FZ$$@V;i-hyK;68xRvSe|c;7QNFSY(Hxx<7wDI&_Kv-yAeXApv&|H z-aYp4BE8J7iPeR-IgZkjB>ldwNb*r06sG#-Zm!%ncJo*J<{_wm1NA*{Wgis3fZ`sw RxDRIj$aypMSfiKt-G6Fg;1K`- diff --git a/app/__pycache__/config.cpython-312.pyc b/app/__pycache__/config.cpython-312.pyc deleted file mode 100644 index de7a882eaacaa791c419f9e29f0426ad12c071be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19115 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 diff --git a/app/__pycache__/task_manager.cpython-312.pyc b/app/__pycache__/task_manager.cpython-312.pyc deleted file mode 100644 index 02a6d68dfefbd8f56439901c8afc7cdb4cf48e50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7150 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 diff --git a/app/__pycache__/timer.cpython-312.pyc b/app/__pycache__/timer.cpython-312.pyc deleted file mode 100644 index 8cb95542bd1621f6e9aba09743e884e2bd9d58bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3363 zcmb7GYfu~46~4RLU9DbN*dRc*fj}_`2igF(vFkd)rg755IMi-B)?n{!v@0T6TFJXB z+fXrOTG|SS3}QMR@S`=fGYuVksDETSOq`^Tzx{)3JYqI+hfa9@Dt^^zfA!p5tz>)n z)2q?F=f2K8_w4z;d;acn*%6e6s~`5p9SD7eJ7%GC!XpWUaU>u=5(t5e5K+=k5?HoG zEK$l&=`t0eql}-?WjbQ@TVbA#uzprx1Z%_=wfpT+hu;D7jKD^mQJ3FEAQBx#f^7&1 zc9FbcG0yWB_0c{@;x*{mJAQETICre0BQGq?-d>u$vV3W3dFIN>_@9<9PutJ8HMiK8 zKD)Ly__Kd~dZqL2D6goZ%(d=)#lDU;`UuV1{lk#ZE2UBOX5zlY*gM&326E4H0%YPV&mxW4y%oigEy}HcQ@9hhgLw;42aN z3Gf#wumT}k1X84eR0;*bV?!=KEl@+q&j>WsR)G=OASqafD8DU*E)stG3FNckb3@X} zP*jvPCSaK2RN-_knme8{&xRH|4*ws4_tCG2air!ahp8m`5X?(jZs5y7AyAS?B91hA zFhfEw=X!)xn>ilV1H*EYu&9PI_@oY`&I3KG z(;qB@+j{>Ts)d~g*$Q70Ou17t4>kf+OG6`iC6vI4XTmLz=@{aTl0M}CwljE<2bUJ4B` z1GJilKsYbu41y+%Eq|eyc82poURWT|X7~(PlYmOW>P1QBJW_~}P|^bT-UJSt1^#&g zcKk%$VrmxHqy^u|)DG}NVf>L_DB*1{3_w?~!O4`#iv${(p-`Va0NfiO2j~kB+zId= z%28qZkIR>)mu~-VHU0CY+qZ!t*RjbOg~M8N;`+N1|6T+lSz~eUgs5`;MRli|>Y`0` zLUr962kMTk!yACsv3Us$v1c`}Ph4M4jRV6bFn-qloL-w6F~+)lcFn1Xyc~F+JC_g> zqDBL!_KF%S@T!O-TeC>93mU7aau9cQ)M!pQAxR;rmy3iHz*SrhNvaM@jpYS_!))hc z8`t_4JrFq#oJRIixuAC@1;7^-+0U-Z`Fi+t>O_)l^6Z9 zq9)z3u&r!@89O-n^7Ogsz+839oo%ffG%7AlzdPofxHwHrDide!x?f(XsDWWu=>~$0 zkDaKjD(k7wc92#0$c2*)5AM}35k)T3%`=JVChW|n3zt=yb4zBatK z>*F7H{Q+K7{j(^T3JmvZE^t2ww5M{|vHfKQM?W|5HtbL^GQrghvbp5#AZv^)stH+o z&a6D~1a;!+ML;en469!(;rvThm=TD62;{K&EEgv7R3-oD|JJq%p$K_c1MR(I(B7ux zViBmD^o^XQdw>>I3^cuLMk0mRdVm5df}gn;zuw_IxtKceE4~@2{Fv&^TL|>=eF}D; zK(*)!-_~{N8~1^2~3R zKL4P9tC5a;vl}DbNR9fL#^$gRlQcr^rxR+hsU4CfR+IuU0r1`Bvl)PA;i2Q=y!yVz zh!+9#ibnNDV()2GEG|kKrE8!fF<#IZSSd;Zys@en_0f8?$-BWe&4yQT!B9lhh@jjI zL-|)W2lQGP>-Rhxe+6Rd#_O*_rH7xVJY`>Wx<}s{ek<#&&N!>*YWHQF`?8K#Gmcm1 z9UTjmHP_ExKAWv<$yBz??Rhg(`DS+K@yyQS3-0oNTgb|yv<-sTQ#F2O?9AkmTlMKP z^Q8x7`7gIuUEhCs|77>ogXzwv7UcQ%qT6eLb8`Pjho%nQYMZNRzvte+;Q$>QMab=) zV=JE8VBuWpf&VI)UjN$QIb2Wwt)4#oEt`+%f-DBo7tDGbr`b6!8WR!`EIT=1Ts~sV z$T&h}{I=;?gid*K8+0`aQ>=_Vqq%bFNkEK5I1Z4EpIsfvuNg#%15?J;E5z;$2Q!s^mkkR+5Dyw@f_hSfh+X%Q_deSF1#*0WwydIt`>5_Q(@uEP L)+Y!WUETix-JB#7 diff --git a/app/core/__pycache__/__init__.cpython-312.pyc b/app/core/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 45dc4c8bdb85f15c9839fb34695d70acc9a1ec73..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 683 zcmYjO&ubGw7@bM>=WI67gL)E+2O(lZW26UZiqV27jX$7XhJ|6wZsX$4ZkQy6<`mJM z6pA1S;z2y=KOm*8=-s22GEh9&7(H1n-ksSb);YX+@0;(N_n7(Qx(LYC{P?VST?gQ+ z5|fn~lLJqZ=fDRT_z*)sgEM{>XMN4rBaP`;X9hNyiA`o<3j$d;BAX$MQf@{L%i$bz zv72fu%CiD4K+puf{TkvUtElL7tI`71?kwFT^;+#8`SxmK@ZsTb>(SoUyTOw+v~ryBlXq8phY+<>WHu#f;FF zX#2j%DI|=>v>9;Ogj5shgiI=nXQd4{6le6`??%Bq zKOtw;Be%;E_OlSeUuSiw?dL(^c;DG^%YC$yKh<}Jp!yk9cfpx2;M^`a`CGG{%mb4j HlT&{IY(vIK diff --git a/app/core/__pycache__/config.cpython-312.pyc b/app/core/__pycache__/config.cpython-312.pyc deleted file mode 100644 index 90ea41b27a0267fad9417fef2b65ee9773865938..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21648 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 IaHP}!1^EyOLjV8( diff --git a/app/core/__pycache__/timer.cpython-312.pyc b/app/core/__pycache__/timer.cpython-312.pyc deleted file mode 100644 index c448c0a70497575ec3b5a905dcefa67751d98a7d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3823 zcmbtXU2qfE6~4RLU9DEKk&PwWGT07auuO0o>^k65mmhbaOfjK`bWjaDLc10c`f+ww zfIafWow|t)?pU5Ql^~>;rjt4)L;aApOd#o`Po3$Dg-ztyzzm&O#(t{#8)%<;?ygoc zsUI@!)#(15bMHOp-h0k>&i=iqh(l1GMc(n(79sQ%9vFqrbsh~uCy4~)K>{I=AtFqA zNCNjwAyb(0P+Fe~(P75JXni_l_LzZBhgc6QFoHQ`33DC}c#Ob?tYMqSrp>d2io(U7 zVgiw9FA}&xBv?i2s!5mYSw$jo)zzF59(ynCw#9bBklS_S@In5-u3h=g-1QrC*Dq$z zUCCa%IG_Ae_QC{ry18*HH}~nKg@K>{^XA3&ABMfMB1(Ky%gfv%-qKB|OepI2ixTwA zhkhIo{Gx)1hm<{0N$gl8a+CH%Bi#W%aBPRY@+m&-jd=A%OlL1_8TR4bjFM9wJ=zJB zx8Tx585opoeO$y8)U0DaK2pAfwZk*TxOU z5lc8atVfhomgfVJfWq?;6|V#XSyXsA z5E3Ik5jMm$w@IaBG1RRxJzhzSD5{0$eIc(b^Sq3ov$l5NNdvU)tzGvg&SyUv&E6cy zj*fL1_TJ^~>FM%;b#`GvQe#iAgzvepG;bx1hQ@B7%VDUV4WP#?vJ?-S(`-e`Im6b@ zIjWM!#*V$s4^boBENdI(hPe#uO0%vEyDrVH8*k36Z%VIknqiy2A-4i=U3QzTegp!M zFK2hSkIeAbEcG5xlL%gZIaiwkmXT}wi8#@Yj?Ey{PsYhEu=svcKNY70q7r5ZB(7y* zq(s3xY9*MrSc3wVZ!#>cpH{GZtq6H)I~rwtq#yanV-+BQf&D3Me>%>*i{8_uNY*@+ zDNx7A5f_E}&Hap$_l_0)#A-+_w8j}%@)yCJ*O-m70xMWtC~iKD&-zxJjRQnz`f-?k z>J{w{-j17;JR+>*ZKnxX{eezldWBZ7#!dLdhIBv*hrtaxjb5P@Y;jXOkIw`e z`GP{doDX7wkL+j8Aa_v=ZWQG}IPr($6yPh=IXbVhcmz}VzT�Tk67F>V(?5eXVr|7V+gSVg%^Wq|J{E1LQ9z zKVF#p*}@K{I4eO|2~-=ecx?UZL;Wu7q zX~`S$iz+L46%qTFYKlb9sI06=-P+J5#UhbF#LtIdfrL#^r2>)esDy1nWxayHD-a>v z771US%4u@6$tn?0sfZU`b~EOf4T%IC6K~A}Q~-*^Bs`F@-nB-N@XJdWyZRgjFURw8 zIMWO)*$PfIfRCgk)$7N9aBFqr zti58+xhCVRPdn=;%BG!-Lwf-wTs0}_QspC>swnFiJ$reIOl?gRkJsO_H_Vn*rOu3>zVOC`JV{Q~G)_(Z?r=`1{mvcEHN+-;?1jiya{5*`&to9 z0`(DnHD?~*hIpi4_|ZzxX7mc}ve-jGt_we7Edd!>a8+TZ(TkJ86|$K(D1TlGx||(K zX0QEv?z8iKrI4mTCi{{G!g^NQ$22qsi{UzV3LKr zgYWSwCsjr~3*aZKls^K`IUsl68-2*nju+O>N&I)kt1D<>yD$UHC6+_&dt#tI@@WH9-t!dlVjI}jw zZJn|1xKq91a`ZxU>RavU>h{dq{pq#)|F-RmwTBaySx0s9_}KCBJ(HUf$7dX^*S&YD zYA$cTuzmc{yE_u?Pff`AoqKjy#{NRu{=)e7-?d$7n{1w1x9zrl`;r+|A0d`FWOq%m zl}{}&bIQ^BZyCS;=WCq1tLVR0(YrTT+(ZZDj*v8BsONc=nyQ@<)~gA%SbVMaYv&jvC4+smHN z7P{u4b1nV7hiw+R;i1z+7cFsC+LaQXB4{-K)RwwSR5Q;DQ6FfBzl35^Ob4ryS9?1H zg4oh{NYTHFWQhU^syRp3l3{5#kR&W#WpumJO~r;opz)EUM@AdiM58Q9rvpAwmavm) z@>LE$wT3Q|v<*`+j%nvp*&X`DwMj>ShEY=90o9U;AczMIG(kNnMuh7ws=JF^Un1+5 kXjK-$aN}K6^O)I75UzyzF~aSG!z3y$KmU`Ta@y|y0g*h1h5!Hn diff --git a/app/core/config.py b/app/core/config.py index 5e699a9..9998047 100644 --- a/app/core/config.py +++ b/app/core/config.py @@ -29,12 +29,11 @@ from loguru import logger import sqlite3 import json import sys +import shutil from pathlib import Path -from typing import Dict, Union from qfluentwidgets import ( QConfig, ConfigItem, - qconfig, OptionsConfigItem, RangeConfigItem, FolderValidator, @@ -60,7 +59,7 @@ class AppConfig: self.PASSWORD = "" self.running_list = [] - self.if_silence_needed = 0 + self.silence_list = [] self.if_database_opened = False # 检查文件完整性 @@ -73,9 +72,6 @@ class AppConfig: (self.app_path / "config").mkdir(parents=True, exist_ok=True) (self.app_path / "data").mkdir(parents=True, exist_ok=True) (self.app_path / "debug").mkdir(parents=True, exist_ok=True) - # (self.app_path / "data/MAAconfig/simple").mkdir(parents=True, exist_ok=True) - # (self.app_path / "data/MAAconfig/beta").mkdir(parents=True, exist_ok=True) - # (self.app_path / "data/MAAconfig/Default").mkdir(parents=True, exist_ok=True) # 生成版本信息文件 if not self.version_path.exists(): @@ -95,22 +91,14 @@ class AppConfig: self.init_logger() self.init_config() - # self.check_database() + self.check_data() logger.info("程序配置管理模块初始化完成") def init_logger(self) -> None: """初始化日志记录器""" - # logger.remove(0) + logger.remove(0) - # logger.add( - # sink=sys.stdout, - # level="DEBUG", - # format="{time:YYYY-MM-DD HH:mm:ss.SSS} | {level: <8} | {message}", - # enqueue=True, - # backtrace=True, - # diagnose=True, - # ) logger.add( sink=self.log_path, level="DEBUG", @@ -122,6 +110,11 @@ class AppConfig: retention="1 month", compression="zip", ) + logger.info("===================================") + logger.info("AUTO_MAA 主程序") + logger.info("版本号: v4.2.1.1") + logger.info(f"根目录: {self.app_path}") + logger.info("===================================") logger.info("日志记录器初始化完成") @@ -142,89 +135,248 @@ class AppConfig: "CREATE TABLE adminx(admin text,id text,server text,day int,status text,last date,game text,game_1 text,game_2 text,routine text,annihilation text,infrastructure text,password byte,notes text,numb int,mode text,uid int)" ) self.cur.execute("CREATE TABLE version(v text)") - self.cur.execute("INSERT INTO version VALUES(?)", ("v1.3",)) + self.cur.execute("INSERT INTO version VALUES(?)", ("v1.4",)) self.db.commit() logger.info("用户数据库初始化完成") - def check_database(self) -> None: - """检查用户数据库文件并处理数据库版本更新""" + def check_data(self) -> None: + """检查用户数据文件并处理数据文件版本更新""" - # 生成用户数据库 + # 生成主数据库 if not self.database_path.exists(): db = sqlite3.connect(self.database_path) cur = db.cursor() - cur.execute( - "CREATE TABLE adminx(admin text,id text,server text,day int,status text,last date,game text,game_1 text,game_2 text,routine text,annihilation text,infrastructure text,password byte,notes text,numb int,mode text,uid int)" - ) cur.execute("CREATE TABLE version(v text)") - cur.execute("INSERT INTO version VALUES(?)", ("v1.3",)) + cur.execute("INSERT INTO version VALUES(?)", ("v1.4",)) db.commit() cur.close() db.close() - # 数据库版本更新 + # 数据文件版本更新 db = sqlite3.connect(self.database_path) cur = db.cursor() cur.execute("SELECT * FROM version WHERE True") version = cur.fetchall() - # v1.0-->v1.1 - if version[0][0] == "v1.0": - cur.execute("SELECT * FROM adminx WHERE True") - data = cur.fetchall() - cur.execute("DROP TABLE IF EXISTS adminx") - cur.execute( - "CREATE TABLE adminx(admin text,id text,server text,day int,status text,last date,game text,game_1 text,game_2 text,routines text,annihilation text,infrastructure text,password byte,notes text,numb int,mode text,uid int)" - ) - for i in range(len(data)): + + if version[0][0] != "v1.4": + logger.info("数据文件版本更新开始") + if_streaming = False + # v1.0-->v1.1 + if version[0][0] == "v1.0" or if_streaming: + logger.info("数据文件版本更新:v1.0-->v1.1") + if_streaming = True + cur.execute("SELECT * FROM adminx WHERE True") + data = cur.fetchall() + cur.execute("DROP TABLE IF EXISTS adminx") cur.execute( - "INSERT INTO adminx VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", - ( - data[i][0], # 0 0 0 - data[i][1], # 1 1 - - "Official", # 2 2 - - data[i][2], # 3 3 1 - data[i][3], # 4 4 2 - data[i][4], # 5 5 3 - data[i][5], # 6 6 - - data[i][6], # 7 7 - - data[i][7], # 8 8 - - "y", # 9 - 4 - data[i][8], # 10 9 5 - data[i][9], # 11 10 - - data[i][10], # 12 11 6 - data[i][11], # 13 12 7 - data[i][12], # 14 - - - "simple", # 15 - - - data[i][13], # 16 - - - ), + "CREATE TABLE adminx(admin text,id text,server text,day int,status text,last date,game text,game_1 text,game_2 text,routines text,annihilation text,infrastructure text,password byte,notes text,numb int,mode text,uid int)" ) - cur.execute("DELETE FROM version WHERE v = ?", ("v1.0",)) - cur.execute("INSERT INTO version VALUES(?)", ("v1.1",)) - db.commit() - # v1.1-->v1.2 - if version[0][0] == "v1.1": - cur.execute("SELECT * FROM adminx WHERE True") - data = cur.fetchall() - for i in range(len(data)): - cur.execute( - "UPDATE adminx SET infrastructure = 'n' WHERE mode = ? AND uid = ?", - ( - data[i][15], - data[i][16], - ), + for i in range(len(data)): + cur.execute( + "INSERT INTO adminx VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", + ( + data[i][0], # 0 0 0 + data[i][1], # 1 1 - + "Official", # 2 2 - + data[i][2], # 3 3 1 + data[i][3], # 4 4 2 + data[i][4], # 5 5 3 + data[i][5], # 6 6 - + data[i][6], # 7 7 - + data[i][7], # 8 8 - + "y", # 9 - 4 + data[i][8], # 10 9 5 + data[i][9], # 11 10 - + data[i][10], # 12 11 6 + data[i][11], # 13 12 7 + data[i][12], # 14 - - + "simple", # 15 - - + data[i][13], # 16 - - + ), + ) + cur.execute("DELETE FROM version WHERE v = ?", ("v1.0",)) + cur.execute("INSERT INTO version VALUES(?)", ("v1.1",)) + db.commit() + # v1.1-->v1.2 + if version[0][0] == "v1.1" or if_streaming: + logger.info("数据文件版本更新:v1.1-->v1.2") + if_streaming = True + cur.execute("SELECT * FROM adminx WHERE True") + data = cur.fetchall() + for i in range(len(data)): + cur.execute( + "UPDATE adminx SET infrastructure = 'n' WHERE mode = ? AND uid = ?", + ( + data[i][15], + data[i][16], + ), + ) + cur.execute("DELETE FROM version WHERE v = ?", ("v1.1",)) + cur.execute("INSERT INTO version VALUES(?)", ("v1.2",)) + db.commit() + # v1.2-->v1.3 + if version[0][0] == "v1.2" or if_streaming: + logger.info("数据文件版本更新:v1.2-->v1.3") + if_streaming = True + cur.execute("ALTER TABLE adminx RENAME COLUMN routines TO routine") + cur.execute("DELETE FROM version WHERE v = ?", ("v1.2",)) + cur.execute("INSERT INTO version VALUES(?)", ("v1.3",)) + db.commit() + # v1.3-->v1.4 + if version[0][0] == "v1.3" or if_streaming: + logger.info("数据文件版本更新:v1.3-->v1.4") + if_streaming = True + (self.app_path / "config/MaaConfig").mkdir(parents=True, exist_ok=True) + shutil.move( + self.app_path / "data/MaaConfig", + self.app_path / "config/MaaConfig", ) - cur.execute("DELETE FROM version WHERE v = ?", ("v1.1",)) - cur.execute("INSERT INTO version VALUES(?)", ("v1.2",)) - db.commit() - # v1.2-->v1.3 - if version[0][0] == "v1.2": - cur.execute("ALTER TABLE adminx RENAME COLUMN routines TO routine") - cur.execute("DELETE FROM version WHERE v = ?", ("v1.2",)) - cur.execute("INSERT INTO version VALUES(?)", ("v1.3",)) - db.commit() - cur.close() - db.close() + (self.app_path / "config/MaaConfig/MaaConfig").rename( + self.app_path / "config/MaaConfig/脚本_1" + ) + shutil.copy( + self.database_path, + self.app_path / "config/MaaConfig/脚本_1/user_data.db", + ) + cur.execute("DROP TABLE IF EXISTS adminx") + cur.execute("DELETE FROM version WHERE v = ?", ("v1.3",)) + cur.execute("INSERT INTO version VALUES(?)", ("v1.4",)) + db.commit() + with (self.app_path / "config/gui.json").open( + "r", encoding="utf-8" + ) as f: + info = json.load(f) + maa_config = { + "MaaSet": { + "Name": "", + "Path": info["Default"]["MaaSet.path"], + }, + "RunSet": { + "AnnihilationTimeLimit": info["Default"][ + "TimeLimit.annihilation" + ], + "RoutineTimeLimit": info["Default"]["TimeLimit.routine"], + "RunTimesLimit": info["Default"]["TimesLimit.run"], + }, + } + with (self.app_path / "config/MaaConfig/脚本_1/config.json").open( + "w", encoding="utf-8" + ) as f: + json.dump(maa_config, f, ensure_ascii=False, indent=4) + config = { + "Function": { + "BossKey": info["Default"]["SelfSet.BossKey"], + "IfAllowSleep": bool( + info["Default"]["SelfSet.IfSleep"] == "True" + ), + "IfSilence": bool( + info["Default"]["SelfSet.IfSilence"] == "True" + ), + }, + "Notify": { + "IfPushPlyer": True, + "IfSendErrorOnly": bool( + info["Default"]["SelfSet.IfSendMail.OnlyError"] == "True" + ), + "IfSendMail": bool( + info["Default"]["SelfSet.IfSendMail"] == "True" + ), + "MailAddress": info["Default"]["SelfSet.MailAddress"], + }, + "Start": { + "IfRunDirectly": bool( + info["Default"]["SelfSet.IfProxyDirectly"] == "True" + ), + "IfSelfStart": bool( + info["Default"]["SelfSet.IfSelfStart"] == "True" + ), + }, + "UI": { + "IfShowTray": bool( + info["Default"]["SelfSet.IfToTray"] == "True" + ), + "IfToTray": bool(info["Default"]["SelfSet.IfToTray"] == "True"), + "location": info["Default"]["SelfSet.UIlocation"], + "maximized": bool( + info["Default"]["SelfSet.UImaximized"] == "True" + ), + "size": info["Default"]["SelfSet.UIsize"], + }, + "Update": {"IfAutoUpdate": False}, + } + with (self.app_path / "config/config.json").open( + "w", encoding="utf-8" + ) as f: + json.dump(config, f, ensure_ascii=False, indent=4) + queue_config = { + "QueueSet": {"Enabled": True, "Name": ""}, + "Queue": { + "Member_1": "脚本_1", + "Member_10": "禁用", + "Member_2": "禁用", + "Member_3": "禁用", + "Member_4": "禁用", + "Member_5": "禁用", + "Member_6": "禁用", + "Member_7": "禁用", + "Member_8": "禁用", + "Member_9": "禁用", + }, + "Time": { + "TimeEnabled_0": bool( + info["Default"]["TimeSet.set1"] == "True" + ), + "TimeEnabled_1": bool( + info["Default"]["TimeSet.set2"] == "True" + ), + "TimeEnabled_2": bool( + info["Default"]["TimeSet.set3"] == "True" + ), + "TimeEnabled_3": bool( + info["Default"]["TimeSet.set4"] == "True" + ), + "TimeEnabled_4": bool( + info["Default"]["TimeSet.set5"] == "True" + ), + "TimeEnabled_5": bool( + info["Default"]["TimeSet.set6"] == "True" + ), + "TimeEnabled_6": bool( + info["Default"]["TimeSet.set7"] == "True" + ), + "TimeEnabled_7": bool( + info["Default"]["TimeSet.set8"] == "True" + ), + "TimeEnabled_8": bool( + info["Default"]["TimeSet.set9"] == "True" + ), + "TimeEnabled_9": bool( + info["Default"]["TimeSet.set10"] == "True" + ), + "TimeSet_0": info["Default"]["TimeSet.run1"], + "TimeSet_1": info["Default"]["TimeSet.run2"], + "TimeSet_2": info["Default"]["TimeSet.run3"], + "TimeSet_3": info["Default"]["TimeSet.run4"], + "TimeSet_4": info["Default"]["TimeSet.run5"], + "TimeSet_5": info["Default"]["TimeSet.run6"], + "TimeSet_6": info["Default"]["TimeSet.run7"], + "TimeSet_7": info["Default"]["TimeSet.run8"], + "TimeSet_8": info["Default"]["TimeSet.run9"], + "TimeSet_9": info["Default"]["TimeSet.run10"], + }, + } + (self.app_path / "config/QueueConfig").mkdir( + parents=True, exist_ok=True + ) + with (self.app_path / "config/QueueConfig/调度队列_1.json").open( + "w", encoding="utf-8" + ) as f: + json.dump(queue_config, f, ensure_ascii=False, indent=4) + (self.app_path / "config/gui.json").unlink() + cur.close() + db.close() + logger.info("数据文件版本更新完成") def open_database(self, mode: str, index: str = None) -> None: """打开数据库""" @@ -244,6 +396,42 @@ class AppConfig: self.db.close() self.if_database_opened = False + def change_user_info( + self, + data_path: Path, + modes: list, + uids: list, + days: list, + lasts: list, + notes: list, + numbs: list, + ) -> None: + """将代理完成后发生改动的用户信息同步至本地数据库""" + + db = sqlite3.connect(data_path / "user_data.db") + cur = db.cursor() + + for index in range(len(uids)): + cur.execute( + "UPDATE adminx SET day = ? WHERE mode = ? AND uid = ?", + (days[index], modes[index], uids[index]), + ) + cur.execute( + "UPDATE adminx SET last = ? WHERE mode = ? AND uid = ?", + (lasts[index], modes[index], uids[index]), + ) + cur.execute( + "UPDATE adminx SET notes = ? WHERE mode = ? AND uid = ?", + (notes[index], modes[index], uids[index]), + ) + cur.execute( + "UPDATE adminx SET numb = ? WHERE mode = ? AND uid = ?", + (numbs[index], modes[index], uids[index]), + ) + db.commit() + cur.close() + db.close() + def save_history(self, key: str, content: dict) -> None: """保存历史记录""" @@ -334,7 +522,6 @@ class GlobalConfig(QConfig): ui_size = ConfigItem("UI", "size", "1200x700") ui_location = ConfigItem("UI", "location", "100x100") ui_maximized = ConfigItem("UI", "maximized", False, BoolValidator()) - ui_MainIndex = RangeConfigItem("UI", "MainIndex", 0, RangeValidator(0, 3)) notify_IfPushPlyer = ConfigItem("Notify", "IfPushPlyer", False, BoolValidator()) notify_IfSendMail = ConfigItem("Notify", "IfSendMail", False, BoolValidator()) diff --git a/app/core/task_manager.py b/app/core/task_manager.py index 57c979d..bcd4870 100644 --- a/app/core/task_manager.py +++ b/app/core/task_manager.py @@ -26,76 +26,126 @@ v4.2 """ from loguru import logger -from PySide6 import QtCore -from typing import Dict, Union, List +from PySide6.QtCore import QThread, QObject, Signal +from qfluentwidgets import Dialog +from pathlib import Path +from typing import Dict, Union from .config import Config from .main_info_bar import MainInfoBar from app.models import MaaManager -from app.services import Notify -class Task(QtCore.QThread): +class Task(QThread): """业务线程""" - push_info_bar = QtCore.Signal(str, str, str, int) - update_user_info = QtCore.Signal(list, list, list, list, list, list) - create_task_list = QtCore.Signal(list) - create_user_list = QtCore.Signal(list) - update_task_list = QtCore.Signal(list) - update_user_list = QtCore.Signal(list) - update_log_text = QtCore.Signal(str) - accomplish = QtCore.Signal(list) + push_info_bar = Signal(str, str, str, int) + question = Signal(str, str) + question_response = Signal(bool) + update_user_info = Signal(Path, list, list, list, list, list, list) + create_task_list = Signal(list) + create_user_list = Signal(list) + update_task_list = Signal(list) + update_user_list = Signal(list) + update_log_text = Signal(str) + accomplish = Signal(list) def __init__( self, + mode: str, name: str, info: Dict[str, Dict[str, Union[str, int, bool]]], ): super(Task, self).__init__() + self.mode = mode self.name = name self.info = info self.logs = [] + self.question_response.connect(lambda: print("response")) + def run(self): - self.member_dict = self.search_member() - self.task_list = [ - [value, "等待"] - for _, value in self.info["Queue"].items() - if value != "禁用" - ] + if "设置MAA" in self.mode: - self.create_task_list.emit(self.task_list) + logger.info(f"任务开始:设置{self.name}") + self.push_info_bar.emit("info", "设置MAA", self.name, 3000) - for i in range(len(self.task_list)): + self.task = MaaManager( + self.mode, + Config.app_path / f"config/MaaConfig/{self.name}", + ( + None + if "全局" in self.mode + else Config.app_path + / f"config/MaaConfig/{self.name}/beta/{self.info["SetMaaInfo"]["UserId"]}/{self.info["SetMaaInfo"]["SetType"]}" + ), + ) + self.task.push_info_bar.connect(self.push_info_bar.emit) + self.task.accomplish.connect(lambda: self.accomplish.emit([])) - if self.isInterruptionRequested(): - break + self.task.run() - self.task_list[i][1] = "运行" - self.update_task_list.emit(self.task_list) + else: - if self.task_list[i][0] not in Config.running_list: + self.member_dict = self.search_member() + self.task_list = [ + [value, "等待"] + for _, value in self.info["Queue"].items() + if value != "禁用" + ] + + self.create_task_list.emit(self.task_list) + + for i in range(len(self.task_list)): + + if self.isInterruptionRequested(): + break + + self.task_list[i][1] = "运行" + self.update_task_list.emit(self.task_list) + + if self.task_list[i][0] in Config.running_list: + + self.task_list[i][1] = "跳过" + self.update_task_list.emit(self.task_list) + logger.info(f"跳过任务:{self.task_list[i][0]}") + self.push_info_bar.emit( + "info", "跳过任务", self.task_list[i][0], 3000 + ) + continue Config.running_list.append(self.task_list[i][0]) logger.info(f"任务开始:{self.task_list[i][0]}") - self.push_info_bar.emit("info", "任务开始", self.task_list[i][0], 5000) + self.push_info_bar.emit("info", "任务开始", self.task_list[i][0], 3000) if self.member_dict[self.task_list[i][0]][0] == "Maa": self.task = MaaManager( - "自动代理", + self.mode[0:4], self.member_dict[self.task_list[i][0]][1], ) + self.task.question.connect(self.question.emit) + self.question_response.disconnect() + self.question_response.connect(self.task.question_response.emit) self.task.push_info_bar.connect(self.push_info_bar.emit) self.task.create_user_list.connect(self.create_user_list.emit) self.task.update_user_list.connect(self.update_user_list.emit) self.task.update_log_text.connect(self.update_log_text.emit) - self.task.update_user_info.connect(self.update_user_info.emit) + self.task.update_user_info.connect( + lambda modes, uids, days, lasts, notes, numbs: self.update_user_info.emit( + self.member_dict[self.task_list[i][0]][1], + modes, + uids, + days, + lasts, + notes, + numbs, + ) + ) self.task.accomplish.connect( lambda log: self.save_log(self.task_list[i][0], log) ) @@ -106,15 +156,9 @@ class Task(QtCore.QThread): self.task_list[i][1] = "完成" logger.info(f"任务完成:{self.task_list[i][0]}") - self.push_info_bar.emit("info", "任务完成", self.task_list[i][0], 5000) + self.push_info_bar.emit("info", "任务完成", self.task_list[i][0], 3000) - else: - - self.task_list[i][1] = "跳过" - logger.info(f"跳过任务:{self.task_list[i][0]}") - self.push_info_bar.emit("info", "跳过任务", self.task_list[i][0], 5000) - - self.accomplish.emit(self.logs) + self.accomplish.emit(self.logs) def search_member(self) -> dict: """搜索所有脚本实例并固定相关配置信息""" @@ -135,12 +179,12 @@ class Task(QtCore.QThread): self.logs.append([name, log]) -class TaskManager(QtCore.QObject): +class TaskManager(QObject): """业务调度器""" - create_gui = QtCore.Signal(Task) - connect_gui = QtCore.Signal(Task) - push_info_bar = QtCore.Signal(str, str, str, int) + create_gui = Signal(Task) + connect_gui = Signal(Task) + push_info_bar = Signal(str, str, str, int) def __init__(self): super(TaskManager, self).__init__() @@ -162,16 +206,20 @@ class TaskManager(QtCore.QObject): MainInfoBar.push_info_bar("info", "任务开始", name, 3000) Config.running_list.append(name) - self.task_list[name] = Task(name, info) + self.task_list[name] = Task(mode, name, info) + self.task_list[name].question.connect( + lambda title, content: self.push_dialog(name, title, content) + ) self.task_list[name].push_info_bar.connect(MainInfoBar.push_info_bar) + self.task_list[name].update_user_info.connect(Config.change_user_info) self.task_list[name].accomplish.connect( lambda logs: self.remove_task(name, logs) ) - if mode == "新窗口": + if "新窗口" in mode: self.create_gui.emit(self.task_list[name]) - elif mode == "主窗口": + elif "主窗口" in mode: self.connect_gui.emit(self.task_list[name]) self.task_list[name].start() @@ -217,5 +265,14 @@ class TaskManager(QtCore.QObject): self.task_list.pop(name) Config.running_list.remove(name) + def push_dialog(self, name: str, title: str, content: str): + """推送对话框""" + + choice = Dialog(title, content, None) + choice.yesButton.setText("是") + choice.cancelButton.setText("否") + + self.task_list[name].question_response.emit(bool(choice.exec_())) + Task_manager = TaskManager() diff --git a/app/core/timer.py b/app/core/timer.py index 9f9c459..11b9008 100644 --- a/app/core/timer.py +++ b/app/core/timer.py @@ -27,9 +27,10 @@ v4.2 from loguru import logger from PySide6.QtWidgets import QWidget -from PySide6 import QtCore +from PySide6.QtCore import QTimer import json import datetime +import pyautogui from .config import Config from .task_manager import Task_manager @@ -44,7 +45,7 @@ class MainTimer(QWidget): ): super().__init__(parent) - self.Timer = QtCore.QTimer() + self.Timer = QTimer() self.Timer.timeout.connect(self.timed_start) self.Timer.timeout.connect(self.set_silence) self.Timer.start(1000) @@ -77,24 +78,29 @@ class MainTimer(QWidget): and name not in Config.running_list ): - logger.info(f"按时间调起任务:{name}") - Task_manager.add_task("新窗口", name, info) + logger.info(f"定时任务:{name}") + Task_manager.add_task("自动代理_新窗口", name, info) def set_silence(self): """设置静默模式""" - # # 临时 - # windows = System.get_window_info() - # if any(emulator_path in _ for _ in windows): - # try: - # pyautogui.hotkey(*boss_key) - # except pyautogui.FailSafeException as e: - # 执行日志记录,暂时缺省 - logger.debug(Config.running_list) - def set_last_time(self): - """设置上次运行时间""" - - pass + windows = System.get_window_info() + if any( + str(emulator_path) in window + for window in windows + for emulator_path in Config.silence_list + ): + try: + pyautogui.hotkey( + *[ + _.strip().lower() + for _ in Config.global_config.get( + Config.global_config.function_BossKey + ).split("+") + ] + ) + except pyautogui.FailSafeException as e: + logger.warning(f"FailSafeException: {e}") def search_queue(self) -> list: """搜索所有调度队列实例""" diff --git a/app/models/MAA.py b/app/models/MAA.py index c860282..7ac85a5 100644 --- a/app/models/MAA.py +++ b/app/models/MAA.py @@ -25,7 +25,7 @@ v4.2 作者:DLmaster_361 """ from loguru import logger -from PySide6 import QtCore +from PySide6.QtCore import QObject, Signal, QEventLoop import json import sqlite3 import datetime @@ -33,24 +33,23 @@ import subprocess import shutil import time from pathlib import Path -from typing import List, Dict, Union +from typing import List from app.core import Config from app.services import Notify -class MaaManager(QtCore.QObject): +class MaaManager(QObject): """MAA控制器""" - question = QtCore.Signal(str, str) - question_response = QtCore.Signal(int) - update_user_info = QtCore.Signal(list, list, list, list, list, list) - push_info_bar = QtCore.Signal(str, str, str, int) - create_user_list = QtCore.Signal(list) - update_user_list = QtCore.Signal(list) - update_log_text = QtCore.Signal(str) - accomplish = QtCore.Signal(dict) - get_json = QtCore.Signal(list) + question = Signal(str, str) + question_response = Signal(bool) + update_user_info = Signal(list, list, list, list, list, list) + push_info_bar = Signal(str, str, str, int) + create_user_list = Signal(list) + update_user_list = Signal(list) + update_log_text = Signal(str) + accomplish = Signal(dict) isInterruptionRequested = False @@ -58,24 +57,29 @@ class MaaManager(QtCore.QObject): self, mode: str, config_path: Path, + user_config_path: Path = None, ): super(MaaManager, self).__init__() self.mode = mode self.config_path = config_path + self.user_config_path = user_config_path with (self.config_path / "config.json").open("r", encoding="utf-8") as f: self.set = json.load(f) - db = sqlite3.connect(self.config_path / "user_data.db") - cur = db.cursor() - cur.execute("SELECT * FROM adminx WHERE True") - self.data = cur.fetchall() - self.data = [list(row) for row in self.data] - cur.close() - db.close() + if "设置MAA" not in self.mode: - self.get_json_path = [0, 0, 0] + db = sqlite3.connect(self.config_path / "user_data.db") + cur = db.cursor() + cur.execute("SELECT * FROM adminx WHERE True") + self.data = cur.fetchall() + self.data = [list(row) for row in self.data] + cur.close() + db.close() + + else: + self.data = [] def configure(self): """提取配置信息""" @@ -84,12 +88,6 @@ class MaaManager(QtCore.QObject): self.maa_set_path = self.maa_root_path / "config/gui.json" self.maa_log_path = self.maa_root_path / "debug/gui.log" self.maa_exe_path = self.maa_root_path / "MAA.exe" - self.boss_key = [ - _.strip().lower() - for _ in Config.global_config.get( - Config.global_config.function_BossKey - ).split("+") - ] def run(self): """主进程,运行MAA代理进程""" @@ -177,8 +175,18 @@ class MaaManager(QtCore.QObject): shell=True, creationflags=subprocess.CREATE_NO_WINDOW, ) - # 添加静默进程数量标记 - Config.if_silence_needed += 1 + # 添加静默进程标记 + if Config.global_config.get( + Config.global_config.function_IfSilence + ): + with self.maa_set_path.open( + mode="r", encoding="utf-8" + ) as f: + set = json.load(f) + self.emulator_path = Path( + set["Configurations"]["Default"]["Start.EmulatorPath"] + ) + Config.silence_list.append(self.emulator_path) # 记录是否超时的标记 self.if_time_out = False @@ -233,8 +241,11 @@ class MaaManager(QtCore.QObject): self.update_log_text.emit( "检测到MAA进程完成代理任务\n正在等待相关程序结束\n请等待10s" ) - # 移除静默进程数量标记 - Config.if_silence_needed -= 1 + # 移除静默进程标记 + if Config.global_config.get( + Config.global_config.function_IfSilence + ): + Config.silence_list.remove(self.emulator_path) for _ in range(10): if self.isInterruptionRequested: break @@ -254,8 +265,11 @@ class MaaManager(QtCore.QObject): creationflags=subprocess.CREATE_NO_WINDOW, ) killprocess.wait() - # 移除静默进程数量标记 - Config.if_silence_needed -= 1 + # 移除静默进程标记 + if Config.global_config.get( + Config.global_config.function_IfSilence + ): + Config.silence_list.remove(self.emulator_path) # 推送异常通知 Notify.push_notification( "用户自动代理出现异常!", @@ -375,24 +389,18 @@ class MaaManager(QtCore.QObject): break # 登录失败,询问是否结束循环 elif not self.isInterruptionRequested: - 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": + + if not self.push_question( + "操作提示", "MAA未能正确登录到PRTS,是否重试?" + ): break # 登录成功,录入人工排查情况 if run_book[0] and not self.isInterruptionRequested: - 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": + + if self.push_question( + "操作提示", "请检查用户代理情况,是否将该用户标记为异常?" + ): run_book[1] = True # 结果录入用户备注栏 @@ -441,13 +449,16 @@ class MaaManager(QtCore.QObject): # 检测时间间隔 time.sleep(1) - # 保存MAA配置文件 if "全局" in self.mode: - self.get_json.emit(["Default"]) - elif "用户" in self.mode: - self.get_json.emit(self.get_json_path) + (self.config_path / "Default").mkdir(parents=True, exist_ok=True) + shutil.copy(self.maa_set_path, self.config_path / "Default") - end_log = "" + elif "用户" in self.mode: + self.user_config_path.mkdir(parents=True, exist_ok=True) + shutil.copy(self.maa_set_path, self.user_config_path) + logger.debug(self.user_config_path) + + end_log = "" # 导出结果 if self.mode in ["自动代理", "人工排查"]: @@ -517,6 +528,18 @@ class MaaManager(QtCore.QObject): logger.info("申请中止本次任务") self.isInterruptionRequested = True + def push_question(self, title: str, message: str) -> bool: + + self.question.emit(title, message) + loop = QEventLoop() + self.question_response.connect(self._capture_response) + self.question_response.connect(loop.quit) + loop.exec() + return self.response + + def _capture_response(self, response: bool) -> None: + self.response = response + def get_maa_log(self, start_time): """获取MAA日志""" @@ -586,16 +609,8 @@ class MaaManager(QtCore.QObject): # 预导入MAA配置文件 if mode == "设置MAA_用户": - set_book = ["simple", "beta"] - if ( - self.config_path - / f"{set_book[self.get_json_path[0]]}/{self.get_json_path[1]}/{self.get_json_path[2]}/gui.json" - ).exists(): - shutil.copy( - self.config_path - / f"{set_book[self.get_json_path[0]]}/{self.get_json_path[1]}/{self.get_json_path[2]}/gui.json", - self.maa_set_path, - ) + if self.user_config_path.exists(): + shutil.copy(self.user_config_path / "gui.json", self.maa_set_path) else: shutil.copy( self.config_path / "Default/gui.json", @@ -638,12 +653,14 @@ class MaaManager(QtCore.QObject): data["Configurations"]["Default"][ "MainFunction.PostActions" ] = "12" # 完成后退出MAA和模拟器 - data["Global"]["Start.RunDirectly"] = "True" # 启动MAA后直接运行 - data["Global"][ + data["Configurations"]["Default"][ + "Start.RunDirectly" + ] = "True" # 启动MAA后直接运行 + data["Configurations"]["Default"][ "Start.OpenEmulatorAfterLaunch" ] = "True" # 启动MAA后自动开启模拟器 - if Config.if_silence_needed > 0: + if Config.global_config.get(Config.global_config.function_IfSilence): data["Global"]["Start.MinimizeDirectly"] = "True" # 启动MAA后直接最小化 data["Global"]["GUI.UseTray"] = "True" # 显示托盘图标 data["Global"]["GUI.MinimizeToTray"] = "True" # 最小化时隐藏至托盘 @@ -845,15 +862,21 @@ class MaaManager(QtCore.QObject): data["Configurations"]["Default"][ "MainFunction.PostActions" ] = "8" # 完成后退出MAA - data["Global"]["Start.RunDirectly"] = "True" # 启动MAA后直接运行 + data["Configurations"]["Default"][ + "Start.RunDirectly" + ] = "True" # 启动MAA后直接运行 data["Global"]["Start.MinimizeDirectly"] = "True" # 启动MAA后直接最小化 data["Global"]["GUI.UseTray"] = "True" # 显示托盘图标 data["Global"]["GUI.MinimizeToTray"] = "True" # 最小化时隐藏至托盘 # 启动MAA后自动开启模拟器 if "启动模拟器" in mode: - data["Global"]["Start.OpenEmulatorAfterLaunch"] = "True" + data["Configurations"]["Default"][ + "Start.OpenEmulatorAfterLaunch" + ] = "True" elif "仅切换账号" in mode: - data["Global"]["Start.OpenEmulatorAfterLaunch"] = "False" + data["Configurations"]["Default"][ + "Start.OpenEmulatorAfterLaunch" + ] = "False" if self.data[index][15] == "simple": @@ -915,12 +938,14 @@ class MaaManager(QtCore.QObject): data["Configurations"]["Default"][ "MainFunction.PostActions" ] = "0" # 完成后无动作 - data["Global"]["Start.RunDirectly"] = "False" # 启动MAA后直接运行 - data["Global"][ + data["Configurations"]["Default"][ + "Start.RunDirectly" + ] = "False" # 启动MAA后直接运行 + data["Configurations"]["Default"][ "Start.OpenEmulatorAfterLaunch" ] = "False" # 启动MAA后自动开启模拟器 - if Config.if_silence_needed > 0: + if Config.global_config.get(Config.global_config.function_IfSilence): data["Global"][ "Start.MinimizeDirectly" ] = "False" # 启动MAA后直接最小化 diff --git a/app/models/__pycache__/MAA.cpython-312.pyc b/app/models/__pycache__/MAA.cpython-312.pyc deleted file mode 100644 index 69234c0186a8ea5b715b4a082a8ef7e4e7b4f985..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34075 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

    g`Wp-$zTz^;5yO|62GtdHurF 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 diff --git a/app/ui/dispatch_center.py b/app/ui/dispatch_center.py index 00f73fb..4c0abc6 100644 --- a/app/ui/dispatch_center.py +++ b/app/ui/dispatch_center.py @@ -36,32 +36,23 @@ from qfluentwidgets import ( CardWidget, IconWidget, BodyLabel, - qconfig, Pivot, ScrollArea, FluentIcon, - MessageBox, HeaderCardWidget, - CommandBar, FluentIcon, TextBrowser, ComboBox, - setTheme, - Theme, SubtitleLabel, PushButton, - ElevatedCardWidget, ) -from PySide6.QtUiTools import QUiLoader -from PySide6 import QtCore +from PySide6.QtCore import Qt +from PySide6.QtGui import QTextCursor from typing import List, Dict import json -import shutil -uiLoader = QUiLoader() from app.core import Config, Task_manager, Task, MainInfoBar -from app.services import Notify class DispatchCenter(QWidget): @@ -88,7 +79,7 @@ class DispatchCenter(QWidget): ) self.update_top_bar() - self.Layout.addWidget(self.pivot, 0, QtCore.Qt.AlignHCenter) + self.Layout.addWidget(self.pivot, 0, Qt.AlignHCenter) self.Layout.addWidget(self.stackedWidget) self.Layout.setContentsMargins(0, 0, 0, 0) @@ -259,7 +250,7 @@ class DispatchBox(QWidget): ) return None - name = self.object.currentText().split(" - ")[1] + name = self.object.currentText().split(" - ")[-1] if name in Config.running_list: logger.warning(f"任务已存在:{name}") @@ -274,7 +265,18 @@ class DispatchBox(QWidget): info = json.load(f) logger.info(f"用户添加任务:{name}") - Task_manager.add_task("主窗口", name, info) + Task_manager.add_task(f"{self.mode.currentText()}_主窗口", name, info) + + elif self.object.currentText().split(" - ")[0] == "实例": + + if self.object.currentText().split(" - ")[1] == "Maa": + + info = {"Queue": {"Member_1": name}} + + logger.info(f"用户添加任务:{name}") + Task_manager.add_task( + f"{self.mode.currentText()}_主窗口", "用户自定义队列", info + ) class DispatchInfoCard(HeaderCardWidget): @@ -389,6 +391,14 @@ class DispatchBox(QWidget): self.viewLayout.setContentsMargins(3, 0, 3, 3) self.viewLayout.addWidget(self.text) + self.text.textChanged.connect(self.to_end) + + def to_end(self): + """滚动到底部""" + + self.text.moveCursor(QTextCursor.End) + self.text.ensureCursorVisible() + class ItemCard(CardWidget): diff --git a/app/ui/else.py b/app/ui/else.py deleted file mode 100644 index 86ca53e..0000000 --- a/app/ui/else.py +++ /dev/null @@ -1,539 +0,0 @@ -class Main(QWidget): - - ES_CONTINUOUS = 0x80000000 - ES_SYSTEM_REQUIRED = 0x00000001 - - def __init__(self, config: AppConfig, notify: Notification, crypto: CryptoHandler): - super().__init__() - - Config = config - Notify = notify - Crypto = crypto - - - - # uiLoader.registerCustomWidget(PushButton) - # uiLoader.registerCustomWidget(LineEdit) - # uiLoader.registerCustomWidget(TextBrowser) - # uiLoader.registerCustomWidget(TableWidget) - # uiLoader.registerCustomWidget(TimePicker) - # uiLoader.registerCustomWidget(SpinBox) - # uiLoader.registerCustomWidget(CheckBox) - # uiLoader.registerCustomWidget(HeaderCardWidget) - # uiLoader.registerCustomWidget(BodyLabel) - - # # 导入ui配置 - # self.ui = uiLoader.load(Config.app_path / "resources/gui/main.ui") - # self.ui.setWindowIcon( - # QIcon(str(Config.app_path / "resources/icons/AUTO_MAA.ico")) - # ) - - # # 初始化控件 - # self.main_tab: QTabWidget = self.ui.findChild(QTabWidget, "tabWidget_main") - # self.main_tab.currentChanged.connect(self.change_config) - - # self.user_set: QToolBox = self.ui.findChild(QToolBox, "toolBox_userset") - # self.user_set.currentChanged.connect(lambda: self.update_user_info("normal")) - - # self.user_list_simple: TableWidget = self.ui.findChild( - # TableWidget, "tableWidget_userlist_simple" - # ) - # self.user_list_simple.itemChanged.connect( - # lambda item: self.change_user_Item(item, "simple") - # ) - - # self.user_list_beta: TableWidget = self.ui.findChild( - # TableWidget, "tableWidget_userlist_beta" - # ) - # self.user_list_beta.itemChanged.connect( - # lambda item: self.change_user_Item(item, "beta") - # ) - - # self.user_add: PushButton = self.ui.findChild(PushButton, "pushButton_new") - # self.user_add.setIcon(FluentIcon.ADD_TO) - # self.user_add.clicked.connect(self.add_user) - - # self.user_del: PushButton = self.ui.findChild(PushButton, "pushButton_del") - # self.user_del.setIcon(FluentIcon.REMOVE_FROM) - # self.user_del.clicked.connect(self.del_user) - - # self.user_switch: PushButton = self.ui.findChild( - # PushButton, "pushButton_switch" - # ) - # self.user_switch.setIcon(FluentIcon.MOVE) - # self.user_switch.clicked.connect(self.switch_user) - - # self.read_PASSWORD: PushButton = self.ui.findChild( - # PushButton, "pushButton_password" - # ) - # self.read_PASSWORD.setIcon(FluentIcon.HIDE) - # self.read_PASSWORD.clicked.connect(lambda: self.read("key")) - - # self.refresh: PushButton = self.ui.findChild(PushButton, "pushButton_refresh") - # self.refresh.setIcon(FluentIcon.SYNC) - # self.refresh.clicked.connect(lambda: self.update_user_info("clear")) - - # self.run_now: PushButton = self.ui.findChild(PushButton, "pushButton_runnow") - # self.run_now.setIcon(FluentIcon.PLAY) - # self.run_now.clicked.connect(lambda: self.maa_starter("自动代理")) - - # self.check_start: PushButton = self.ui.findChild( - # PushButton, "pushButton_checkstart" - # ) - # self.check_start.setIcon(FluentIcon.PLAY) - # self.check_start.clicked.connect(lambda: self.maa_starter("人工排查")) - - # self.maa_path: LineEdit = self.ui.findChild(LineEdit, "lineEdit_MAApath") - # self.maa_path.textChanged.connect(self.change_config) - # self.maa_path.setReadOnly(True) - - # self.get_maa_path: PushButton = self.ui.findChild( - # PushButton, "pushButton_getMAApath" - # ) - # self.get_maa_path.setIcon(FluentIcon.FOLDER) - # self.get_maa_path.clicked.connect(lambda: self.read("file_path_maa")) - - # self.set_maa: PushButton = self.ui.findChild(PushButton, "pushButton_setMAA") - # self.set_maa.setIcon(FluentIcon.SETTING) - # self.set_maa.clicked.connect(lambda: self.maa_starter("设置MAA_全局")) - - # self.routine: SpinBox = self.ui.findChild(SpinBox, "spinBox_routine") - # self.routine.valueChanged.connect(self.change_config) - - # self.annihilation: SpinBox = self.ui.findChild(SpinBox, "spinBox_annihilation") - # self.annihilation.valueChanged.connect(self.change_config) - - # self.num: SpinBox = self.ui.findChild(SpinBox, "spinBox_numt") - # self.num.valueChanged.connect(self.change_config) - - # self.if_self_start: CheckBox = self.ui.findChild( - # CheckBox, "checkBox_ifselfstart" - # ) - # self.if_self_start.stateChanged.connect(self.change_config) - - # self.if_sleep: CheckBox = self.ui.findChild(CheckBox, "checkBox_IfAllowSleep") - # self.if_sleep.stateChanged.connect(self.change_config) - - # self.if_proxy_directly: CheckBox = self.ui.findChild( - # CheckBox, "checkBox_ifproxydirectly" - # ) - # self.if_proxy_directly.stateChanged.connect(self.change_config) - - # self.if_send_mail: CheckBox = self.ui.findChild(CheckBox, "checkBox_ifsendmail") - # self.if_send_mail.stateChanged.connect(self.change_config) - - # self.mail_address: LineEdit = self.ui.findChild( - # LineEdit, "lineEdit_mailaddress" - # ) - # self.mail_address.textChanged.connect(self.change_config) - - # self.if_send_error_only: CheckBox = self.ui.findChild( - # CheckBox, "checkBox_ifonlyerror" - # ) - # self.if_send_error_only.stateChanged.connect(self.change_config) - - # self.if_silence: CheckBox = self.ui.findChild(CheckBox, "checkBox_silence") - # self.if_silence.stateChanged.connect(self.change_config) - - # self.boss_key: LineEdit = self.ui.findChild(LineEdit, "lineEdit_boss") - # self.boss_key.textChanged.connect(self.change_config) - - # self.if_to_tray: CheckBox = self.ui.findChild(CheckBox, "checkBox_iftotray") - # self.if_to_tray.stateChanged.connect(self.change_config) - - # self.check_update: PushButton = self.ui.findChild( - # PushButton, "pushButton_check_update" - # ) - # self.check_update.setIcon(FluentIcon.UPDATE) - # self.check_update.clicked.connect(self.check_version) - - # self.tips: TextBrowser = self.ui.findChild(TextBrowser, "textBrowser_tips") - # self.tips.setOpenExternalLinks(True) - - # self.run_text: TextBrowser = self.ui.findChild(TextBrowser, "textBrowser_run") - # self.wait_text: TextBrowser = self.ui.findChild(TextBrowser, "textBrowser_wait") - # self.over_text: TextBrowser = self.ui.findChild(TextBrowser, "textBrowser_over") - # self.error_text: TextBrowser = self.ui.findChild( - # TextBrowser, "textBrowser_error" - # ) - # self.log_text: TextBrowser = self.ui.findChild(TextBrowser, "textBrowser_log") - - # self.start_time: List[Tuple[CheckBox, TimePicker]] = [] - # for i in range(10): - # self.start_time.append( - # [ - # self.ui.findChild(CheckBox, f"checkBox_t{i + 1}"), - # self.ui.findChild(TimePicker, f"timeEdit_{i + 1}"), - # ] - # ) - # self.start_time[i][0].stateChanged.connect(self.change_config) - # self.start_time[i][1].timeChanged.connect(self.change_config) - - # self.change_password: PushButton = self.ui.findChild( - # PushButton, "pushButton_changePASSWORD" - # ) - # self.change_password.setIcon(FluentIcon.VPN) - # self.change_password.clicked.connect(self.change_PASSWORD) - - # 初始化线程 - self.MaaManager = MaaManager(Config) - self.MaaManager.question.connect(lambda: self.read("question_runner")) - self.MaaManager.update_gui.connect(self.update_board) - self.MaaManager.update_user_info.connect(self.change_user_info) - self.MaaManager.push_notification.connect(Notify.push_notification) - self.MaaManager.send_mail.connect(Notify.send_mail) - self.MaaManager.accomplish.connect(lambda: self.maa_ender("自动代理_结束")) - self.MaaManager.get_json.connect(self.get_maa_config) - self.MaaManager.set_silence.connect(self.switch_silence) - - # self.last_time = "0000-00-00 00:00" - # self.Timer = QtCore.QTimer() - # self.Timer.timeout.connect(self.set_theme) - # self.Timer.timeout.connect(self.set_system) - # self.Timer.timeout.connect(self.timed_start) - # self.Timer.start(1000) - - # 载入GUI数据 - # self.update_user_info("normal") - # self.update_config() - - # 启动后直接开始代理 - if Config.content["Default"]["SelfSet.IfProxyDirectly"] == "True": - self.maa_starter("自动代理") - - - - # def update_config(self): - # """将Config中的程序配置同步至GUI界面""" - - # # 阻止GUI程序配置被立即读入程序形成死循环 - # self.if_update_config = False - - # self.main_tab.setCurrentIndex( - # Config.content["Default"]["SelfSet.MainIndex"] - # ) - - # self.maa_path.setText(str(Path(Config.content["Default"]["MaaSet.path"]))) - # self.routine.setValue(Config.content["Default"]["TimeLimit.routine"]) - # self.annihilation.setValue( - # Config.content["Default"]["TimeLimit.annihilation"] - # ) - # self.num.setValue(Config.content["Default"]["TimesLimit.run"]) - # self.mail_address.setText(Config.content["Default"]["SelfSet.MailAddress"]) - # self.boss_key.setText(Config.content["Default"]["SelfSet.BossKey"]) - - # self.if_self_start.setChecked( - # bool(Config.content["Default"]["SelfSet.IfSelfStart"] == "True") - # ) - - # self.if_sleep.setChecked( - # bool(Config.content["Default"]["SelfSet.IfAllowSleep"] == "True") - # ) - - # self.if_proxy_directly.setChecked( - # bool(Config.content["Default"]["SelfSet.IfProxyDirectly"] == "True") - # ) - - # self.if_send_mail.setChecked( - # bool(Config.content["Default"]["SelfSet.IfSendMail"] == "True") - # ) - - # self.mail_address.setVisible( - # bool(Config.content["Default"]["SelfSet.IfSendMail"] == "True") - # ) - - # self.if_send_error_only.setChecked( - # bool( - # Config.content["Default"]["SelfSet.IfSendMail.OnlyError"] == "True" - # ) - # ) - - # self.if_send_error_only.setVisible( - # bool(Config.content["Default"]["SelfSet.IfSendMail"] == "True") - # ) - - # self.if_silence.setChecked( - # bool(Config.content["Default"]["SelfSet.IfSilence"] == "True") - # ) - - # self.boss_key.setVisible( - # bool(Config.content["Default"]["SelfSet.IfSilence"] == "True") - # ) - - # self.if_to_tray.setChecked( - # bool(Config.content["Default"]["SelfSet.IfToTray"] == "True") - # ) - - # for i in range(10): - # self.start_time[i][0].setChecked( - # bool(Config.content["Default"][f"TimeSet.set{i + 1}"] == "True") - # ) - # time = QtCore.QTime( - # int(Config.content["Default"][f"TimeSet.run{i + 1}"][:2]), - # int(Config.content["Default"][f"TimeSet.run{i + 1}"][3:]), - # ) - # self.start_time[i][1].setTime(time) - # self.if_update_config = True - - - - # 同步用户信息更改至GUI - self.update_user_info("normal") - - def change_config(self): - """将GUI中发生修改的程序配置同步至Config变量""" - - # 验证能否写入Config变量 - if not self.if_update_config: - return None - - # 验证MAA路径 - if Path(Config.content["Default"]["MaaSet.path"]) != Path( - self.maa_path.text() - ): - if (Path(self.maa_path.text()) / "MAA.exe").exists() and ( - Path(self.maa_path.text()) / "config/gui.json" - ).exists(): - Config.content["Default"]["MaaSet.path"] = str( - Path(self.maa_path.text()) - ) - self.get_maa_config(["Default"]) - else: - choice = MessageBox( - "错误", - "该路径下未找到MAA.exe或MAA配置文件,请重新设置MAA路径!", - self.ui, - ) - if choice.exec(): - pass - - Config.content["Default"][ - "SelfSet.MainIndex" - ] = self.main_tab.currentIndex() - Config.content["Default"]["TimeLimit.routine"] = self.routine.value() - Config.content["Default"][ - "TimeLimit.annihilation" - ] = self.annihilation.value() - Config.content["Default"]["TimesLimit.run"] = self.num.value() - Config.content["Default"]["SelfSet.MailAddress"] = self.mail_address.text() - Config.content["Default"]["SelfSet.BossKey"] = self.boss_key.text() - - if self.if_sleep.isChecked(): - Config.content["Default"]["SelfSet.IfAllowSleep"] = "True" - else: - Config.content["Default"]["SelfSet.IfAllowSleep"] = "False" - - if self.if_self_start.isChecked(): - Config.content["Default"]["SelfSet.IfSelfStart"] = "True" - else: - Config.content["Default"]["SelfSet.IfSelfStart"] = "False" - - if self.if_proxy_directly.isChecked(): - Config.content["Default"]["SelfSet.IfProxyDirectly"] = "True" - else: - Config.content["Default"]["SelfSet.IfProxyDirectly"] = "False" - - if self.if_send_mail.isChecked(): - Config.content["Default"]["SelfSet.IfSendMail"] = "True" - else: - Config.content["Default"]["SelfSet.IfSendMail"] = "False" - - if self.if_send_error_only.isChecked(): - Config.content["Default"]["SelfSet.IfSendMail.OnlyError"] = "True" - else: - Config.content["Default"]["SelfSet.IfSendMail.OnlyError"] = "False" - - if self.if_silence.isChecked(): - Config.content["Default"]["SelfSet.IfSilence"] = "True" - else: - Config.content["Default"]["SelfSet.IfSilence"] = "False" - - if self.if_to_tray.isChecked(): - Config.content["Default"]["SelfSet.IfToTray"] = "True" - else: - Config.content["Default"]["SelfSet.IfToTray"] = "False" - - for i in range(10): - if self.start_time[i][0].isChecked(): - Config.content["Default"][f"TimeSet.set{i + 1}"] = "True" - else: - Config.content["Default"][f"TimeSet.set{i + 1}"] = "False" - time = self.start_time[i][1].getTime().toString("HH:mm") - Config.content["Default"][f"TimeSet.run{i + 1}"] = time - - # 将配置信息同步至本地JSON文件 - Config.save_config() - - # 同步程序配置至GUI - self.update_config() - - - def get_maa_config(self, info): - """获取MAA配置文件""" - - # 获取全局MAA配置文件 - if info == ["Default"]: - shutil.copy( - Path(Config.content["Default"]["MaaSet.path"]) - / "config/gui.json", - Config.app_path / "data/MAAconfig/Default", - ) - # 获取基建配置文件 - - # 获取高级用户MAA配置文件 - elif info[2] in ["routine", "annihilation"]: - ( - Config.app_path - / f"data/MAAconfig/{self.user_mode_list[info[0]]}/{info[1]}/{info[2]}" - ).mkdir(parents=True, exist_ok=True) - shutil.copy( - Path(Config.content["Default"]["MaaSet.path"]) - / "config/gui.json", - Config.app_path - / f"data/MAAconfig/{self.user_mode_list[info[0]]}/{info[1]}/{info[2]}", - ) - - def set_theme(self): - """手动更新主题色到组件""" - - self.user_list_simple.setStyleSheet("QTableWidget::item {}") - self.user_list_beta.setStyleSheet("QTableWidget::item {}") - - - def switch_silence(self, mode, emulator_path, boss_key): - """切换静默模式""" - - if mode == "启用": - self.Timer.timeout.disconnect() - self.Timer.timeout.connect(self.set_theme) - self.Timer.timeout.connect(self.set_system) - self.Timer.timeout.connect(self.timed_start) - self.Timer.timeout.connect( - lambda: self.set_silence(emulator_path, boss_key) - ) - elif mode == "禁用": - self.Timer.timeout.disconnect() - self.Timer.timeout.connect(self.set_theme) - self.Timer.timeout.connect(self.set_system) - self.Timer.timeout.connect(self.timed_start) - - - - def maa_starter(self, mode): - """启动MaaManager线程运行任务""" - - # 检查MAA路径是否可用 - if ( - not ( - Path(Config.content["Default"]["MaaSet.path"]) / "MAA.exe" - ).exists() - and ( - Path(Config.content["Default"]["MaaSet.path"]) / "config/gui.json" - ).exists() - ): - choice = MessageBox("错误", "您还未正确配置MAA路径!", self.ui) - choice.cancelButton.hide() - choice.buttonLayout.insertStretch(1) - if choice.exec(): - return None - - self.maa_running_set(f"{mode}_开始") - - # 配置参数 - self.MaaManager.mode = mode - Config.cur.execute("SELECT * FROM adminx WHERE True") - data = Config.cur.fetchall() - self.MaaManager.data = [list(row) for row in data] - - # 启动执行线程 - self.MaaManager.start() - - def maa_ender(self, mode): - """中止MAA线程""" - - self.switch_silence("禁用", "", []) - - self.MaaManager.requestInterruption() - self.MaaManager.wait() - - self.maa_running_set(mode) - - def maa_running_set(self, mode): - """处理MAA运行过程中的GUI组件变化""" - - if "开始" in mode: - - self.MaaManager.accomplish.disconnect() - self.user_add.setEnabled(False) - self.user_del.setEnabled(False) - self.user_switch.setEnabled(False) - self.set_maa.setEnabled(False) - - self.update_user_info("read_only") - - if mode == "自动代理_开始": - self.MaaManager.accomplish.connect( - lambda: self.maa_ender("自动代理_结束") - ) - self.check_start.setEnabled(False) - self.run_now.clicked.disconnect() - self.run_now.setText("结束运行") - self.run_now.clicked.connect(lambda: self.maa_ender("自动代理_结束")) - - elif mode == "人工排查_开始": - self.MaaManager.accomplish.connect( - lambda: self.maa_ender("人工排查_结束") - ) - self.run_now.setEnabled(False) - self.check_start.clicked.disconnect() - self.check_start.setText("中止排查") - self.check_start.clicked.connect( - lambda: self.maa_ender("人工排查_结束") - ) - - elif mode == "设置MAA_全局_开始" or mode == "设置MAA_用户_开始": - self.MaaManager.accomplish.connect( - lambda: self.maa_ender("设置MAA_结束") - ) - self.run_now.setEnabled(False) - self.check_start.setEnabled(False) - - elif "结束" in mode: - - shutil.copy( - Config.app_path / "data/MAAconfig/Default/gui.json", - Path(Config.content["Default"]["MaaSet.path"]) / "config", - ) - self.user_add.setEnabled(True) - self.user_del.setEnabled(True) - self.user_switch.setEnabled(True) - self.set_maa.setEnabled(True) - - self.update_user_info("editable") - - if mode == "自动代理_结束": - - self.check_start.setEnabled(True) - self.run_now.clicked.disconnect() - self.run_now.setText("立即执行") - self.run_now.clicked.connect(lambda: self.maa_starter("自动代理")) - - elif mode == "人工排查_结束": - - self.run_now.setEnabled(True) - self.check_start.clicked.disconnect() - self.check_start.setText("开始排查") - self.check_start.clicked.connect(lambda: self.maa_starter("人工排查")) - - elif mode == "设置MAA_结束": - - self.run_now.setEnabled(True) - self.check_start.setEnabled(True) - - def server_date(self): - """获取当前的服务器日期""" - - dt = datetime.datetime.now() - if dt.time() < datetime.datetime.min.time().replace(hour=4): - dt = dt - datetime.timedelta(days=1) - return dt.strftime("%Y-%m-%d") diff --git a/app/ui/main_window.py b/app/ui/main_window.py index f86e299..05378e9 100644 --- a/app/ui/main_window.py +++ b/app/ui/main_window.py @@ -45,7 +45,7 @@ from qfluentwidgets import ( qconfig, ) from PySide6.QtGui import QIcon, QCloseEvent -from PySide6 import QtCore +from PySide6.QtCore import Qt from app.core import Config, Task_manager, Main_timer, MainInfoBar from app.services import Notify, Crypto, System @@ -180,8 +180,6 @@ class AUTO_MAA(MSFluentWindow): def start_up_task(self) -> None: """启动时任务""" - logger.debug(f"{Config.app_path}, {Config.app_path_sys}") - # 加载配置 qconfig.load(Config.config_path, Config.global_config) @@ -197,7 +195,7 @@ class AUTO_MAA(MSFluentWindow): info = InfoBar.info( title="更新检查", content=result, - orient=QtCore.Qt.Horizontal, + orient=Qt.Horizontal, isClosable=True, position=InfoBarPosition.BOTTOM_LEFT, duration=-1, @@ -332,13 +330,14 @@ class AUTO_MAA(MSFluentWindow): self.show_ui("隐藏到托盘", if_quick=True) # 清理各功能线程 - # self.main.Timer.stop() - # self.main.Timer.deleteLater() - # self.main.MaaManager.requestInterruption() - # self.main.MaaManager.quit() - # self.main.MaaManager.wait() + Main_timer.Timer.stop() + Main_timer.Timer.deleteLater() + Task_manager.stop_task("ALL") # 关闭数据库连接 Config.close_database() + logger.info("AUTO_MAA主程序关闭") + logger.info("===================================") + event.accept() diff --git a/app/ui/member_manager.py b/app/ui/member_manager.py index 3db87ba..7b17504 100644 --- a/app/ui/member_manager.py +++ b/app/ui/member_manager.py @@ -44,12 +44,10 @@ from qfluentwidgets import ( MessageBox, HeaderCardWidget, CommandBar, - setTheme, - Theme, ExpandGroupSettingCard, PushSettingCard, ) -from PySide6 import QtCore +from PySide6.QtCore import Qt from functools import partial from pathlib import Path from typing import List @@ -57,8 +55,8 @@ import datetime import json import shutil -from app.core import Config, MainInfoBar -from app.services import Notify, Crypto +from app.core import Config, MainInfoBar, Task_manager +from app.services import Crypto from .Widget import ( InputMessageBox, LineEditSettingCard, @@ -77,8 +75,6 @@ class MemberManager(QWidget): self.setObjectName("脚本管理") - setTheme(Theme.AUTO) - layout = QVBoxLayout(self) self.tools = CommandBar() @@ -157,6 +153,17 @@ class MemberManager(QWidget): name = self.member_manager.pivot.currentRouteKey() if name == None: + logger.warning("删除脚本实例时未选择脚本实例") + MainInfoBar.push_info_bar( + "warning", "未选择脚本实例", "请选择一个脚本实例", 5000 + ) + return None + + if len(Config.running_list) > 0: + logger.warning("删除脚本实例时调度队列未停止运行") + MainInfoBar.push_info_bar( + "warning", "调度中心正在执行任务", "请等待或手动中止任务", 5000 + ) return None choice = MessageBox( @@ -192,12 +199,27 @@ class MemberManager(QWidget): name = self.member_manager.pivot.currentRouteKey() if name == None: + logger.warning("向左移动脚本实例时未选择脚本实例") + MainInfoBar.push_info_bar( + "warning", "未选择脚本实例", "请选择一个脚本实例", 5000 + ) return None member_list = self.member_manager.search_member() index = int(name[3:]) if index == 1: + logger.warning("向左移动脚本实例时已到达最左端") + MainInfoBar.push_info_bar( + "warning", "已经是第一个脚本实例", "无法向左移动", 5000 + ) + return None + + if len(Config.running_list) > 0: + logger.warning("向左移动脚本实例时调度队列未停止运行") + MainInfoBar.push_info_bar( + "warning", "调度中心正在执行任务", "请等待或手动中止任务", 5000 + ) return None type_right = [_[1] for _ in member_list if _[0] == name] @@ -226,12 +248,27 @@ class MemberManager(QWidget): name = self.member_manager.pivot.currentRouteKey() if name == None: + logger.warning("向右移动脚本实例时未选择脚本实例") + MainInfoBar.push_info_bar( + "warning", "未选择脚本实例", "请选择一个脚本实例", 5000 + ) return None member_list = self.member_manager.search_member() index = int(name[3:]) if index == len(member_list): + logger.warning("向右移动脚本实例时已到达最右端") + MainInfoBar.push_info_bar( + "warning", "已经是最后一个脚本实例", "无法向右移动", 5000 + ) + return None + + if len(Config.running_list) > 0: + logger.warning("向右移动脚本实例时调度队列未停止运行") + MainInfoBar.push_info_bar( + "warning", "调度中心正在执行任务", "请等待或手动中止任务", 5000 + ) return None type_left = [_[1] for _ in member_list if _[0] == name] @@ -323,7 +360,7 @@ class MemberSettingBox(QWidget): self.script_list: List[MaaSettingBox] = [] - self.Layout.addWidget(self.pivot, 0, QtCore.Qt.AlignHCenter) + self.Layout.addWidget(self.pivot, 0, Qt.AlignHCenter) self.Layout.addWidget(self.stackedWidget) self.Layout.setContentsMargins(0, 0, 0, 0) @@ -433,7 +470,7 @@ class MaaSettingBox(QWidget): content_widget = QWidget() content_layout = QVBoxLayout(content_widget) - self.app_setting = self.AppSettingCard(self, uid) + self.app_setting = self.AppSettingCard(self, self.objectName()) self.user_setting = self.UserSettingCard(self, self.objectName()) content_layout.addWidget(self.app_setting) @@ -448,12 +485,12 @@ class MaaSettingBox(QWidget): class AppSettingCard(HeaderCardWidget): - def __init__(self, parent=None, uid: int = None): + def __init__(self, parent=None, name: str = None): super().__init__(parent) self.setTitle("MAA实例") - self.uid = uid + self.name = name Layout = QVBoxLayout() @@ -484,6 +521,9 @@ class MaaSettingBox(QWidget): Config.maa_config.get(Config.maa_config.MaaSet_Path) ) ) + self.card_Set.clicked.connect( + lambda: Task_manager.add_task("设置MAA_全局", self.name, None) + ) Layout.addWidget(self.card_Name) Layout.addWidget(self.card_Path) @@ -514,12 +554,12 @@ class MaaSettingBox(QWidget): ) return None - (Config.app_path / f"config/MaaConfig/脚本_{self.uid}/Default").mkdir( + (Config.app_path / f"config/MaaConfig/{self.name}/Default").mkdir( parents=True, exist_ok=True ) shutil.copy( Path(folder) / "config/gui.json", - Config.app_path / f"config/MaaConfig/脚本_{self.uid}/Default/gui.json", + Config.app_path / f"config/MaaConfig/{self.name}/Default/gui.json", ) Config.maa_config.set(Config.maa_config.MaaSet_Path, folder) self.card_Path.setContent(folder) @@ -572,11 +612,7 @@ class MaaSettingBox(QWidget): class UserSettingCard(HeaderCardWidget): - def __init__( - self, - parent=None, - name: str = None, - ): + def __init__(self, parent=None, name: str = None): super().__init__(parent) self.setTitle("用户列表") @@ -626,6 +662,14 @@ class MaaSettingBox(QWidget): self.viewLayout.addLayout(Layout) def set_more(self): + """用户选项配置""" + + if len(Config.running_list) > 0: + logger.warning("配置用户选项时调度队列未停止运行") + MainInfoBar.push_info_bar( + "warning", "调度中心正在执行任务", "请等待或手动中止任务", 5000 + ) + return None Config.cur.execute("SELECT * FROM adminx WHERE True") data = Config.cur.fetchall() @@ -665,21 +709,39 @@ class MaaSettingBox(QWidget): / f"config/MaaConfig/{self.name}/simple/{choice.input[0].currentIndex()}/infrastructure", ) else: - choice = MessageBox( - "错误", - "未选择自定义基建文件", - self.parent() - .parent() - .parent() - .parent() - .parent() - .parent() - .parent(), + logger.warning("未选择自定义基建文件") + MainInfoBar.push_info_bar( + "warning", "警告", "未选择自定义基建文件", 5000 ) - choice.cancelButton.hide() - choice.buttonLayout.insertStretch(1) - if choice.exec(): - pass + + elif self.user_list.pivot.currentRouteKey() == f"{self.name}_高级用户列表": + + user_list = [_[0] for _ in data if _[15] == "beta"] + set_list = ["MAA日常配置", "MAA剿灭配置"] + + choice = SetMessageBox( + self.parent().parent().parent().parent().parent().parent().parent(), + "用户选项配置", + ["选择要配置的用户", "选择要配置的选项"], + [user_list, set_list], + ) + if ( + choice.exec() + and choice.input[0].currentIndex() != -1 + and choice.input[1].currentIndex() != -1 + ): + + set_book = ["routine", "annihilation"] + Task_manager.add_task( + "设置MAA_用户", + self.name, + { + "SetMaaInfo": { + "UserId": choice.input[0].currentIndex(), + "SetType": set_book[choice.input[1].currentIndex()], + } + }, + ) class UserListBox(QWidget): @@ -762,9 +824,7 @@ class MaaSettingBox(QWidget): self.user_list_simple.setBorderVisible(True) self.user_list_simple.setBorderRadius(10) self.user_list_simple.setWordWrap(False) - self.user_list_simple.setVerticalScrollBarPolicy( - QtCore.Qt.ScrollBarAlwaysOff - ) + self.user_list_simple.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.user_list_simple.setHorizontalHeaderLabels( [ "用户名", @@ -789,9 +849,7 @@ class MaaSettingBox(QWidget): self.user_list_beta.setBorderVisible(True) self.user_list_beta.setBorderRadius(10) self.user_list_beta.setWordWrap(False) - self.user_list_beta.setVerticalScrollBarPolicy( - QtCore.Qt.ScrollBarAlwaysOff - ) + self.user_list_beta.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.user_list_beta.setHorizontalHeaderLabels( [ "用户名", @@ -818,7 +876,7 @@ class MaaSettingBox(QWidget): routeKey=f"{name}_高级用户列表", text=f"高级用户列表" ) - self.Layout.addWidget(self.pivot, 0, QtCore.Qt.AlignHCenter) + self.Layout.addWidget(self.pivot, 0, Qt.AlignHCenter) self.Layout.addWidget(self.stackedWidget) self.Layout.setContentsMargins(0, 0, 0, 0) @@ -909,22 +967,17 @@ class MaaSettingBox(QWidget): item = QTableWidgetItem( f"今日已代理{data_simple[i][14]}次" ) - item.setFlags( - QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled - ) + item.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled) elif j == 12: if Config.PASSWORD == "": item = QTableWidgetItem("******") - item.setFlags( - QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled - ) + item.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled) else: result = Crypto.decryptx(value, Config.PASSWORD) item = QTableWidgetItem(result) if result == "管理密钥错误": item.setFlags( - QtCore.Qt.ItemIsSelectable - | QtCore.Qt.ItemIsEnabled + Qt.ItemIsSelectable | Qt.ItemIsEnabled ) else: item = QTableWidgetItem(str(value)) @@ -983,22 +1036,17 @@ class MaaSettingBox(QWidget): item = QTableWidgetItem( f"今日已代理{data_beta[i][14]}次" ) - item.setFlags( - QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled - ) + item.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled) elif j == 12: if Config.PASSWORD == "": item = QTableWidgetItem("******") - item.setFlags( - QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled - ) + item.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled) else: result = Crypto.decryptx(value, Config.PASSWORD) item = QTableWidgetItem(result) if result == "管理密钥错误": item.setFlags( - QtCore.Qt.ItemIsSelectable - | QtCore.Qt.ItemIsEnabled + Qt.ItemIsSelectable | Qt.ItemIsEnabled ) else: item = QTableWidgetItem(str(value)) @@ -1178,6 +1226,13 @@ class MaaSettingBox(QWidget): def del_user(self) -> None: """删除选中的首位用户""" + if len(Config.running_list) > 0: + logger.warning("删除用户时调度队列未停止运行") + MainInfoBar.push_info_bar( + "warning", "调度中心正在执行任务", "请等待或手动中止任务", 5000 + ) + return None + # 获取对应的行索引 if "简洁用户列表" in self.pivot.currentRouteKey(): row = self.user_list_simple.currentRow() @@ -1190,23 +1245,11 @@ class MaaSettingBox(QWidget): # 判断选择合理性 if row == -1: - choice = MessageBox( - "错误", - "请选中一个用户后再执行删除操作", - self.parent() - .parent() - .parent() - .parent() - .parent() - .parent() - .parent() - .parent() - .parent(), + logger.warning("删除用户时未选中用户") + MainInfoBar.push_info_bar( + "warning", "未选择用户", "请先选择一个用户", 5000 ) - choice.cancelButton.hide() - choice.buttonLayout.insertStretch(1) - if choice.exec(): - return None + return None # 确认待删除用户信息 Config.cur.execute( @@ -1280,6 +1323,13 @@ class MaaSettingBox(QWidget): def up_user(self): """向上移动用户""" + if len(Config.running_list) > 0: + logger.warning("向上移动用户时调度队列未停止运行") + MainInfoBar.push_info_bar( + "warning", "调度中心正在执行任务", "请等待或手动中止任务", 5000 + ) + return None + # 获取对应的行索引 if "简洁用户列表" in self.pivot.currentRouteKey(): row = self.user_list_simple.currentRow() @@ -1290,23 +1340,11 @@ class MaaSettingBox(QWidget): # 判断选择合理性 if row == -1: - choice = MessageBox( - "错误", - "请选中一个用户后再执行向下移动操作", - self.parent() - .parent() - .parent() - .parent() - .parent() - .parent() - .parent() - .parent() - .parent(), + logger.warning("向上移动用户时未选中用户") + MainInfoBar.push_info_bar( + "warning", "未选中用户", "请先选择一个用户", 5000 ) - choice.cancelButton.hide() - choice.buttonLayout.insertStretch(1) - if choice.exec(): - return None + return None if row == 0: return None @@ -1380,6 +1418,13 @@ class MaaSettingBox(QWidget): def down_user(self): """向下移动用户""" + if len(Config.running_list) > 0: + logger.warning("向下移动用户时调度队列未停止运行") + MainInfoBar.push_info_bar( + "warning", "调度中心正在执行任务", "请等待或手动中止任务", 5000 + ) + return None + # 获取对应的行索引 if "简洁用户列表" in self.pivot.currentRouteKey(): row = self.user_list_simple.currentRow() @@ -1392,23 +1437,11 @@ class MaaSettingBox(QWidget): # 判断选择合理性 if row == -1: - choice = MessageBox( - "错误", - "请选中一个用户后再执行向下移动操作", - self.parent() - .parent() - .parent() - .parent() - .parent() - .parent() - .parent() - .parent() - .parent(), + logger.warning("向下移动用户时未选中用户") + MainInfoBar.push_info_bar( + "warning", "未选中用户", "请先选择一个用户", 5000 ) - choice.cancelButton.hide() - choice.buttonLayout.insertStretch(1) - if choice.exec(): - return None + return None if row == current_numb - 1: return None @@ -1482,6 +1515,13 @@ class MaaSettingBox(QWidget): def switch_user(self) -> None: """切换用户配置模式""" + if len(Config.running_list) > 0: + logger.warning("切换用户配置模式时调度队列未停止运行") + MainInfoBar.push_info_bar( + "warning", "调度中心正在执行任务", "请等待或手动中止任务", 5000 + ) + return None + # 获取当前用户配置模式信息 if "简洁用户列表" in self.pivot.currentRouteKey(): row = self.user_list_simple.currentRow() @@ -1492,23 +1532,11 @@ class MaaSettingBox(QWidget): # 判断选择合理性 if row == -1: - choice = MessageBox( - "错误", - "请选中一个用户后再执行切换操作", - self.parent() - .parent() - .parent() - .parent() - .parent() - .parent() - .parent() - .parent() - .parent(), + logger.warning("切换用户配置模式时未选中用户") + MainInfoBar.push_info_bar( + "warning", "未选中用户", "请先选择一个用户", 5000 ) - choice.cancelButton.hide() - choice.buttonLayout.insertStretch(1) - if choice.exec(): - return None + return None # 确认待切换用户信息 Config.cur.execute( diff --git a/app/ui/queue_manager.py b/app/ui/queue_manager.py index 3e32909..2661baf 100644 --- a/app/ui/queue_manager.py +++ b/app/ui/queue_manager.py @@ -24,7 +24,7 @@ AUTO_MAA调度队列界面 v4.2 作者:DLmaster_361 """ - +from loguru import logger from PySide6.QtWidgets import ( QWidget, QVBoxLayout, @@ -41,20 +41,14 @@ from qfluentwidgets import ( HeaderCardWidget, TextBrowser, CommandBar, - setTheme, - Theme, SwitchSettingCard, ) -from PySide6.QtUiTools import QUiLoader -from PySide6 import QtCore +from PySide6.QtCore import Qt from typing import List import json import shutil -uiLoader = QUiLoader() - -from app.core import Config -from app.services import Notify +from app.core import Config, MainInfoBar from .Widget import ( LineEditSettingCard, TimeEditSettingCard, @@ -72,8 +66,6 @@ class QueueManager(QWidget): self.setObjectName("调度队列") - setTheme(Theme.AUTO) - layout = QVBoxLayout(self) self.tools = CommandBar() @@ -129,6 +121,17 @@ class QueueManager(QWidget): name = self.queue_manager.pivot.currentRouteKey() if name == None: + logger.warning("未选择调度队列") + MainInfoBar.push_info_bar( + "warning", "未选择调度队列", "请先选择一个调度队列", 5000 + ) + return None + + if name in Config.running_list: + logger.warning("调度队列正在运行") + MainInfoBar.push_info_bar( + "warning", "调度队列正在运行", "请先停止调度队列", 5000 + ) return None choice = MessageBox( @@ -161,11 +164,26 @@ class QueueManager(QWidget): name = self.queue_manager.pivot.currentRouteKey() if name == None: + logger.warning("未选择调度队列") + MainInfoBar.push_info_bar( + "warning", "未选择调度队列", "请先选择一个调度队列", 5000 + ) return None index = int(name[5:]) if index == 1: + logger.warning("向左移动调度队列时已到达最左端") + MainInfoBar.push_info_bar( + "warning", "已经是第一个调度队列", "无法向左移动", 5000 + ) + return None + + if name in Config.running_list or f"调度队列_{index-1}" in Config.running_list: + logger.warning("相关调度队列正在运行") + MainInfoBar.push_info_bar( + "warning", "相关调度队列正在运行", "请先停止调度队列", 5000 + ) return None self.queue_manager.clear_SettingBox() @@ -189,12 +207,27 @@ class QueueManager(QWidget): name = self.queue_manager.pivot.currentRouteKey() if name == None: + logger.warning("未选择调度队列") + MainInfoBar.push_info_bar( + "warning", "未选择调度队列", "请先选择一个调度队列", 5000 + ) return None queue_list = self.queue_manager.search_queue() index = int(name[5:]) if index == len(queue_list): + logger.warning("向右移动调度队列时已到达最右端") + MainInfoBar.push_info_bar( + "warning", "已经是最后一个调度队列", "无法向右移动", 5000 + ) + return None + + if name in Config.running_list or f"调度队列_{index+1}" in Config.running_list: + logger.warning("相关调度队列正在运行") + MainInfoBar.push_info_bar( + "warning", "相关调度队列正在运行", "请先停止调度队列", 5000 + ) return None self.queue_manager.clear_SettingBox() @@ -235,7 +268,7 @@ class QueueSettingBox(QWidget): self.script_list: List[QueueMemberSettingBox] = [] - self.Layout.addWidget(self.pivot, 0, QtCore.Qt.AlignHCenter) + self.Layout.addWidget(self.pivot, 0, Qt.AlignHCenter) self.Layout.addWidget(self.stackedWidget) self.Layout.setContentsMargins(0, 0, 0, 0) diff --git a/app/ui/setting.py b/app/ui/setting.py index 3236ad0..6ca4781 100644 --- a/app/ui/setting.py +++ b/app/ui/setting.py @@ -25,34 +25,31 @@ v4.2 作者:DLmaster_361 """ +from loguru import logger from PySide6.QtWidgets import ( QWidget, QApplication, QVBoxLayout, + QVBoxLayout, ) from qfluentwidgets import ( ScrollArea, FluentIcon, - setTheme, - Theme, MessageBox, Dialog, + HyperlinkCard, HeaderCardWidget, SwitchSettingCard, ExpandGroupSettingCard, PushSettingCard, ) -from PySide6.QtUiTools import QUiLoader -from PySide6 import QtCore import json import subprocess import time import requests -uiLoader = QUiLoader() - from app.core import Config, MainInfoBar -from app.services import Notify, Crypto, System +from app.services import Crypto, System from app.utils import Updater, version_text from .Widget import InputMessageBox, LineEditSettingCard @@ -67,8 +64,6 @@ class Setting(QWidget): self.setObjectName("设置") - setTheme(Theme.AUTO) - layout = QVBoxLayout() scrollArea = ScrollArea() @@ -89,7 +84,7 @@ class Setting(QWidget): self.start.card_IfSelfStart.checkedChanged.connect(System.set_SelfStart) self.security.card_changePASSWORD.clicked.connect(self.change_PASSWORD) self.updater.card_CheckUpdate.clicked.connect(self.get_update) - self.other.card_Tips.clicked.connect(self.show_tips) + self.other.card_Notice.clicked.connect(self.show_notice) content_layout.addWidget(self.function) content_layout.addWidget(self.start) @@ -379,7 +374,7 @@ class Setting(QWidget): else: MainInfoBar.push_info_bar("success", "更新检查", "已是最新版本~", 3000) - def update_main(self): + def update_main(self) -> None: """更新主程序""" subprocess.Popen( @@ -390,14 +385,41 @@ class Setting(QWidget): self.close() QApplication.quit() - def show_tips(self): - """显示小贴士""" + def show_notice(self): + """显示公告""" - choice = Dialog("小贴士", "这里什么都没有~", self) + # 从远程服务器获取最新版本信息 + for _ in range(3): + try: + response = requests.get( + "https://gitee.com/DLmaster_361/AUTO_MAA/raw/main/resources/version.json" + ) + version_remote = response.json() + break + except Exception as e: + err = e + time.sleep(0.1) + else: + logger.warning(f"获取最新公告时出错:\n{err}") + choice = Dialog( + "网络错误", + f"获取最新公告时出错:\n{err}", + self, + ) + choice.cancelButton.hide() + choice.buttonLayout.insertStretch(1) + if choice.exec(): + return None + + if "notice" in version_remote: + notice = version_remote["notice"] + else: + notice = "暂无公告~" + + choice = Dialog("公告", notice, self) choice.cancelButton.hide() choice.buttonLayout.insertStretch(1) - if choice.exec(): - pass + choice.exec() class FunctionSettingCard(HeaderCardWidget): @@ -416,12 +438,7 @@ class FunctionSettingCard(HeaderCardWidget): configItem=Config.global_config.function_IfAllowSleep, ) - self.card_IfSilence = SwitchSettingCard( - icon=FluentIcon.PAGE_RIGHT, - title="静默模式", - content="将各代理窗口置于后台运行,减少对前台的干扰", - configItem=Config.global_config.function_IfSilence, - ) + self.card_IfSilence = self.SilenceSettingCard(self) # 添加各组到设置卡中 Layout.addWidget(self.card_IfAllowSleep) @@ -429,6 +446,43 @@ class FunctionSettingCard(HeaderCardWidget): self.viewLayout.addLayout(Layout) + class SilenceSettingCard(ExpandGroupSettingCard): + + def __init__(self, parent=None): + super().__init__( + FluentIcon.SETTING, + "静默模式", + "将各代理窗口置于后台运行,减少对前台的干扰", + parent, + ) + + widget = QWidget() + Layout = QVBoxLayout(widget) + + self.card_IfSilence = SwitchSettingCard( + icon=FluentIcon.PAGE_RIGHT, + title="静默模式", + content="是否启用静默模式", + configItem=Config.global_config.function_IfSilence, + ) + + self.card_BossKey = LineEditSettingCard( + text="请输入安卓模拟器老版键", + icon=FluentIcon.PAGE_RIGHT, + title="模拟器老版键", + content="输入模拟器老版快捷键,以“+”分隔", + configItem=Config.global_config.function_BossKey, + ) + + Layout.addWidget(self.card_IfSilence) + Layout.addWidget(self.card_BossKey) + + # 调整内部布局 + self.viewLayout.setContentsMargins(0, 0, 0, 0) + self.viewLayout.setSpacing(0) + + self.addGroupWidget(widget) + class StartSettingCard(HeaderCardWidget): @@ -449,7 +503,7 @@ class StartSettingCard(HeaderCardWidget): self.card_IfRunDirectly = SwitchSettingCard( icon=FluentIcon.PAGE_RIGHT, title="启动后直接运行", - content="启动AUTO_MAA后自动运行任务", + content="启动AUTO_MAA后自动运行任务(暂不可用)", configItem=Config.global_config.start_IfRunDirectly, ) @@ -618,15 +672,48 @@ class OtherSettingCard(HeaderCardWidget): self.setTitle("其他") - Layout = QVBoxLayout() - - self.card_Tips = PushSettingCard( + self.card_Notice = PushSettingCard( text="查看", icon=FluentIcon.PAGE_RIGHT, - title="小贴士", - content="查看AUTO_MAA的小贴士", + title="公告", + content="查看AUTO_MAA的最新公告", ) + self.card_Association = self.AssociationSettingCard() - Layout.addWidget(self.card_Tips) - + Layout = QVBoxLayout() + Layout.addWidget(self.card_Notice) + Layout.addWidget(self.card_Association) self.viewLayout.addLayout(Layout) + + class AssociationSettingCard(ExpandGroupSettingCard): + + def __init__(self, parent=None): + super().__init__( + FluentIcon.SETTING, + "AUTO_MAA官方社群", + "加入AUTO_MAA官方社群,获取更多帮助", + parent, + ) + + self.card_GitHubRepository = HyperlinkCard( + url="https://github.com/DLmaster361/AUTO_MAA", + text="访问GitHub仓库", + icon=FluentIcon.GITHUB, + title="GitHub", + content="查看AUTO_MAA的源代码,提交问题和建议,欢迎参与开发", + ) + self.card_QQGroup = HyperlinkCard( + url="https://qm.qq.com/q/bd9fISNoME", + text="加入官方QQ交流群", + icon=FluentIcon.CHAT, + title="QQ群", + content="与AUTO_MAA开发者和用户交流", + ) + + widget = QWidget() + Layout = QVBoxLayout(widget) + Layout.addWidget(self.card_GitHubRepository) + Layout.addWidget(self.card_QQGroup) + self.viewLayout.setContentsMargins(0, 0, 0, 0) + self.viewLayout.setSpacing(0) + self.addGroupWidget(widget) diff --git a/app/utils/Updater.py b/app/utils/Updater.py index a697169..ffad9cb 100644 --- a/app/utils/Updater.py +++ b/app/utils/Updater.py @@ -25,7 +25,6 @@ v1.1 作者:DLmaster_361 """ -import os import sys import json import zipfile diff --git a/app/utils/__pycache__/Updater.cpython-312.pyc b/app/utils/__pycache__/Updater.cpython-312.pyc deleted file mode 100644 index 3c6844ede59f01a024dbc43e84198ddea0f97c72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17015 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⪼t> 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
    \n", - "Announcement.DoNotRemindThisAnnouncementAgain": "True", - "Announcement.DoNotShowAnnouncement": "False", - "AutoRecruit.AutoRecruitFirstList": "", - "AutoRecruit.ChooseLevel3": "True", - "AutoRecruit.ChooseLevel3.Time": "540", - "AutoRecruit.ChooseLevel4": "True", - "AutoRecruit.ChooseLevel4.Time": "540", - "AutoRecruit.ChooseLevel5": "True", - "AutoRecruit.ChooseLevel5.Time": "540", - "AutoRecruit.ForceRefresh": "True", - "AutoRecruit.IsLevel3UseShortTime": "False", - "AutoRecruit.IsLevel3UseShortTime2": "False", - "AutoRecruit.MaxTimes": "4", - "AutoRecruit.NotChooseLevel1": "False", - "AutoRecruit.RefreshLevel3": "True", - "AutoRecruit.SelectExtraTags": "0", - "Bluestacks.Config.Keyword": "", - "Bluestacks.Config.Path": "", - "Connect.AdbLiteEnabled": "False", - "Connect.AdbPath": "C:\\Program Files\\Netease\\MuMu Player 12\\shell\\adb.exe", - "Connect.AdbReplaced": "False", - "Connect.Address": "127.0.0.1:16416", - "Connect.AddressHistory": "[\"127.0.0.1:16416\",\"127.0.0.1:16448\",\"127.0.0.1:16384\"]", - "Connect.AllowADBHardRestart": "True", - "Connect.AllowADBRestart": "True", - "Connect.AlwaysAutoDetect": "False", - "Connect.AutoDetect": "False", - "Connect.ConnectConfig": "MuMuEmulator12", - "Connect.KillAdbOnExit": "True", - "Connect.LdPlayerEmulatorPath": "C:\\leidian\\LDPlayer9", - "Connect.LdPlayerExtras.Enabled": "False", - "Connect.LdPlayerIndex": "0", - "Connect.MuMu12Display": "0", - "Connect.MuMu12EmulatorPath": "C:\\Program Files\\Netease\\MuMu Player 12", - "Connect.MuMu12Extras.Enabled": "True", - "Connect.MuMu12Index": "2", - "Connect.MumuBridgeConnection": "False", - "Connect.RetryOnDisconnected": "True", - "Connect.TouchMode": "minitouch", - "Copilot.AddUserAdditional": "False", - "Copilot.CopilotTaskList": "", - "Copilot.LoopTimes": "1", - "Copilot.UserAdditional": "", - "ExternalNotification.Bark.SendKey": "", - "ExternalNotification.Bark.Server": "https://api.day.app", - "ExternalNotification.Discord.BotToken": "", - "ExternalNotification.Discord.UserId": "", - "ExternalNotification.Discord.WebhookUrl": "", - "ExternalNotification.Enabled": "Off", - "ExternalNotification.Qmsg.Bot": "", - "ExternalNotification.Qmsg.Key": "", - "ExternalNotification.Qmsg.Server": "", - "ExternalNotification.Qmsg.User": "", - "ExternalNotification.ServerChan.SendKey": "", - "ExternalNotification.Smtp.From": "", - "ExternalNotification.Smtp.Password": "", - "ExternalNotification.Smtp.Port": "", - "ExternalNotification.Smtp.RequiresAuthentication": "false", - "ExternalNotification.Smtp.Server": "", - "ExternalNotification.Smtp.To": "", - "ExternalNotification.Smtp.User": "", - "ExternalNotification.Smtp.UseSsl": "false", - "ExternalNotification.Telegram.BotToken": "", - "ExternalNotification.Telegram.ChatId": "", - "Fight.RemainingSanityStage": "", - "Fight.UseExpiringMedicine": "True", - "Fight.UseRemainingSanityStage": "False", - "Gacha.ShowDisclaimerNoMore": "False", - "GUI.AllowUseStoneSave": "False", - "GUI.CustomStageCode": "True", - "GUI.HideSeries": "False", - "GUI.HideUnavailableStage": "False", - "GUI.MinimizeToTray": "False", - "GUI.Placement": "{\"Length\":44,\"Flags\":0,\"ShowCmd\":1,\"MinPosition\":{\"X\":-1,\"Y\":-1},\"MaxPosition\":{\"X\":-1,\"Y\":-1},\"NormalPosition\":{\"Left\":680,\"Top\":314,\"Right\":1880,\"Bottom\":1214}}", - "GUI.Placement.Load": "True", - "GUI.Placement.SaveOnClosing": "True", - "GUI.UseAlternateStage": "False", - "GUI.UseLogItemDateFormat": "False", - "GUI.UseTray": "True", - "GUI.WindowTitlePrefix": "", - "Guide.StepIndex": "4", - "Infrast.ContinueTraining": "True", - "Infrast.Control.IsChecked": "True", - "Infrast.CustomInfrastEnabled": "False", - "Infrast.CustomInfrastFile": "D:\\AUTO\\MAA\\合成玉排班.json", - "Infrast.CustomInfrastPlanIndex": "2", - "Infrast.CustomInfrastPlanShowInFightSettings": "False", - "Infrast.DefaultInfrast": "user_defined", - "Infrast.Dorm.IsChecked": "True", - "Infrast.DormFilterNotStationedEnabled": "True", - "Infrast.DormThreshold": "30", - "Infrast.DormTrustEnabled": "False", - "Infrast.IsCustomInfrastFileReadOnly": "False", - "Infrast.Mfg.IsChecked": "True", - "Infrast.Office.IsChecked": "True", - "Infrast.Order.Control": "2", - "Infrast.Order.Dorm": "6", - "Infrast.Order.Mfg": "0", - "Infrast.Order.Office": "5", - "Infrast.Order.Power": "3", - "Infrast.Order.Processing": "7", - "Infrast.Order.Reception": "4", - "Infrast.Order.Trade": "1", - "Infrast.Order.Training": "8", - "Infrast.OriginiumShardAutoReplenishment": "True", - "Infrast.Power.IsChecked": "True", - "Infrast.Processing.IsChecked": "True", - "Infrast.Reception.IsChecked": "True", - "Infrast.Trade.IsChecked": "True", - "Infrast.Training.IsChecked": "True", - "Infrast.UsesOfDrones": "Money", - "MainFunction.ActionAfterCompleted": "ExitEmulatorAndSelf", - "MainFunction.Drops.Enable": "False", - "MainFunction.Drops.ItemId": "", - "MainFunction.Drops.ItemName": "不选择", - "MainFunction.Drops.Quantity": "5", - "MainFunction.InverseMode": "False", - "MainFunction.PostActions": "12", - "MainFunction.Series.Quantity": "6", - "MainFunction.Stage1": "1-7", - "MainFunction.Stage2": "", - "MainFunction.Stage3": "", - "MainFunction.TimesLimited": "False", - "MainFunction.TimesLimited.Quantity": "5", - "MainFunction.UseMedicine": "False", - "MainFunction.UseMedicine.Quantity": "999", - "MainFunction.UseStone.Quantity": "0", - "Mall.CreditBlackListNew": "碳;家具;加急许可", - "Mall.CreditFirstListNew": "招聘许可", - "Mall.CreditForceShoppingIfCreditFull": "False", - "Mall.CreditOnlyBuyDiscount": "False", - "Mall.CreditShopping": "True", - "Mall.CreditVisitFriends": "True", - "Mall.CreditVisitFriendsEnabled": "True", - "Mall.CreditVisitOnceADay": "True", - "Mall.CreidtReserveMaxCredit": "False", - "Mall.LastCreditVisitFriendsTime": "2025/01/01 00:00:00", - "Mission.ReceiveAward": "True", - "Mission.ReceiveFreeRecruit": "True", - "Mission.ReceiveMail": "True", - "Mission.ReceiveMining": "False", - "Mission.ReceiveOrundum": "True", - "Mission.ReceiveSpecialAccess": "False", - "OperBox.Data": "", - "Peep.TargetFps": "20", - "Penguin.EnablePenguin": "True", - "Penguin.Id": "121289881", - "Penguin.IsDrGrandet": "False", - "Performance.AllowDeprecatedGpu": "false", - "Performance.PreferredGpuDescription": "Intel(R) UHD Graphics", - "Performance.PreferredGpuInstancePath": "PCI\\VEN_8086&DEV_A788&SUBSYS_35381043&REV_04\\3&11583659&0&10", - "Performance.UseGpu": "true", - "Reclamation.Mode": "1", - "Reclamation.Reclamation2ExEnable": "False", - "Reclamation.Reclamation2ExProduct": "", - "Reclamation.ReclamationIncrementMode": "0", - "Reclamation.ReclamationMaxCraftCountPerRound": "16", - "Reclamation.Theme": "Tales", - "Reclamation.ToolToCraft": "", - "Recruit.AutoSetTime": "True", - "Recruit.ChooseLevel3": "False", - "Recruit.ChooseLevel4": "True", - "Recruit.ChooseLevel5": "True", - "Recruit.ChooseLevel6": "True", - "Recruit.IsLevel3UseShortTime": "False", - "Recruit.IsLevel3UseShortTime2": "False", - "Recruit.ShowPotential": "True", - "RemoteControl.RemoteControlDeviceIdentity": "", - "RemoteControl.RemoteControlGetTaskEndpointUri": "", - "RemoteControl.RemoteControlReportStatusUri": "", - "RemoteControl.RemoteControlUserIdentity": "", - "Roguelike.CollectibleModeShopping": "False", - "Roguelike.CollectibleModeSquad": "", - "Roguelike.CoreChar": "", - "Roguelike.DeepExplorationAutoIterate": "False", - "Roguelike.DeploymentWithPause": "False", - "Roguelike.Difficulty": "2", - "Roguelike.ExitAtFinalBoss": "False", - "Roguelike.InvestmentEnabled": "True", - "Roguelike.InvestmentEnterSecondFloor": "True", - "Roguelike.InvestsCount": "999", - "Roguelike.Mode": "0", - "Roguelike.MonthlySquadAutoIterate": "False", - "Roguelike.MonthlySquadCheckComms": "False", - "Roguelike.RefreshTraderWithDice": "False", - "Roguelike.Roguelike3FirstFloorFoldartal": "False", - "Roguelike.Roguelike3NewSquad2StartingFoldartal": "False", - "Roguelike.Roguelike3NewSquad2StartingFoldartals": "", - "Roguelike.Roguelike3StartFloorFoldartal": "", - "Roguelike.RoguelikeDelayAbortUntilCombatComplete": "False", - "Roguelike.RoguelikeEnableNonfriendSupport": "False", - "Roguelike.RoguelikeExpectedCollapsalParadigms": "", - "Roguelike.RoguelikeOnlyStartWithEliteTwo": "False", - "Roguelike.RoguelikeStartWithEliteTwo": "False", - "Roguelike.RoguelikeTheme": "Sarkaz", - "Roguelike.RoguelikeUseSupportUnit": "False", - "Roguelike.Roles": "", - "Roguelike.Squad": "", - "Roguelike.StartsCount": "99999", - "Roguelike.StartWithSeed": "False", - "Roguelike.StopAtMaxLevel": "False", - "Roguelike.StopWhenInvestmentFull": "False", - "Start.AccountName": "152****", - "Start.AutoRestartOnDrop": "True", - "Start.BlockSleep": "False", - "Start.BlockSleepWithScreenOn": "True", - "Start.ClientType": "Official", - "Start.CopilotWithScript": "False", - "Start.EmulatorAddCommand": "-v 1", - "Start.EmulatorPath": "C:\\Program Files\\Netease\\MuMu Player 12\\shell\\MuMuPlayer.exe", - "Start.EmulatorWaitSeconds": "30", - "Start.EndsWithScript": "", - "Start.ManualStopWithScript": "False", - "Start.MinimizeDirectly": "False", - "Start.MinimizingStartup": "True", - "Start.OpenEmulatorAfterLaunch": "False", - "Start.RunDirectly": "False", - "Start.StartEmulator": "True", - "Start.StartsWithScript": "", - "TaskQueue.AutoRoguelike.IsChecked": "False", - "TaskQueue.Base.IsChecked": "True", - "TaskQueue.Combat.IsChecked": "True", - "TaskQueue.Mall.IsChecked": "True", - "TaskQueue.Mission.IsChecked": "True", - "TaskQueue.Order.AutoRoguelike": "6", - "TaskQueue.Order.Base": "2", - "TaskQueue.Order.Combat": "3", - "TaskQueue.Order.Mall": "4", - "TaskQueue.Order.Mission": "5", - "TaskQueue.Order.Reclamation": "7", - "TaskQueue.Order.ReclamationAlgorithm2": "7", - "TaskQueue.Order.Recruiting": "1", - "TaskQueue.Order.WakeUp": "0", - "TaskQueue.Reclamation.IsChecked": "False", - "TaskQueue.ReclamationAlgorithm2.IsChecked": "False", - "TaskQueue.Recruiting.IsChecked": "True", - "TaskQueue.WakeUp.IsChecked": "True", - "VersionUpdate.AutoDownloadUpdatePackage": "True", - "VersionUpdate.AutoInstallUpdatePackage": "True", - "VersionUpdate.body": "## v5.6.0-beta.2\n\n### 新增 | New\n\n* 外部通知支持多选 (#10395) @ABA2396\n* add Qmsg notification (#10358) @octopusYan\n* 允许手动指定WPFGUI中干员名称显示语言 (#10310) @ABA2396 @Manicsteiner\n* GetLocalizedNames for Infrast and Copilot output (#10335) @Constrat\n* Reclamation for YostarJP (#10414) @Manicsteiner\n* 生息演算添加沙中之火选择项 @ABA2396\n* 适配「词祭」界面主题 (#10331) @Constrat @ManicSteiner @HX3N @SherkeyXD\n\n### 改进 | Improved\n\n* 全肉鸽招募适配娜仁图亚、艾拉 (#10385) @Daydreamer114\n* Mumu截图增强路径清空时不再检查路径是否存在 @status102\n* duplicates templates from I.S. (#10376) @Constrat\n* 优化外部通知界面显示 (#10363) @ABA2396\n* 更新 bug issue 模板 (#10357) @Rbqwow\n* 重构 OperBox 输出与显示 (#10320) @ABA2396\n* 重构定时器和重启询问 (#10078) @ABA2396\n* Win10以上系统在退出时Wpf不再清除Toast (#10307) @status102\n* 第一次启动时默认不勾选肉鸽和生息演算 @ABA2396\n* 优化动编队日志输出 @ABA2396\n* 优化生息演算 (#10411) @Alan-Charred @status102 @ABA2396\n\n### 修复 | Fix\n\n* FC rerun navigation fix EN @Constrat\n* 生息演算主题读取配置错误 @ABA2396\n* 萨卡兹肉鸽多选招募券模板错误 @ABA2396\n* 肉鸽编队检测在未触底时返回 true (#10396) @Alan-Charred\n* DoDragDrop 拖动操作已在进行中 (#10368) @ABA2396\n* insert delay after SquadConfirm @Constrat\n* 使用匹配后偏移代替每日任务 @status102\n* add ocrReplace for JP \"Reclamation2CopiousCoppice\" (#10362) @Daydreamer114\n* 勾选启动MAA后直接最小化后点击隐藏托盘图标后无法显示MAA @ABA2396\n* add delay after selecting clue @Constrat\n* SL 导航错误 @ABA2396\n* 修复调试版本判断条件 @SherkeyXD\n* 多配置下公告和更新日志显示异常 @ABA2396\n* 修复保全战斗在core干员重复时只会放1次bug (#10306) @status102\n* ProxyType 重启不生效 @ABA2396\n* EN needs templates for clue exchange the number font is different, score too low @Constrat\n* sarkaz 仓库识别错误 @ABA2396\n\n### 文档 | Docs\n\n* 贡献者头像添加 105 上限 (#10351) @MistEO\n\n### 其他 | Other\n\n* `std::ranges::views::join` with LLVM clang 16 on darwin (#10309) @Cryolitia\n* impossiblity of fetch-depth modification. reverting + generic perfs @Constrat\n* rev-list instead of rev-parse @Constrat\n* revert to simple if @Constrat\n* fetching depth 0 @Constrat\n* roi 错误 @ABA2396\n* remove \"\" in nightly fix #10308 @Constrat\n* 生息演算2刷开局清空编队干员 (#10359) @Daydreamer114\n* 重构 FightSettingsUserControl (#10407) @ABA2396\n* CopilotViewModel (#10099) @Manicsteiner\n* git blame ignore @Constrat\n* 优化界面显示 @ABA2396\n* smoking-test中肉鸽参数更新 @SherkeyXD\n* 使用变换后的图像进行技能按钮识别 (#10293) @horror-proton\n* OTA打包时对跳过的版本做删除处理 (#10020) @SherkeyXD\n* 公招错误时保存截图 @zzyyyl\n* 调用PowerManagement.Shutdown();后再次调用Bootstrapper.Shutdown(); @ABA2396\n* 关机前尝试保存配置 @ABA2396\n* 调整令牌关闭强度 @ABA2396\n* 迁移公告相关配置 (#10399) @status102\n* bump maa-cli to 0.4.12 (#10390) @wangl-cc\n* 调整 check link 提示样式 @ABA2396\n* 对comment中的未知链接进行提醒 (#10379) @IzakyL @ABA2396\n* update ignore templates @Constrat\n* 获取任务端口无效时不进行轮询 (#10321) @ABA2396\n* use CsWin32 source generator instead of random pinvoke library (#10361) @dantmnf\n* 删除子模块 @ABA2396\n* remove MaaDeps submodule (#10354) @dantmnf\n* RoguelikeRoutingTaskPlugin.h missing VS22 filter @Constrat\n* bump zzyyyl/issue-checker from 1.8 to 1.9 @zzyyyl\n* 公招识别拥有全干员时不显示未拥有干员数量 @ABA2396\n* YostarJP ocr fix @Manicsteiner\n* JP ZH-TW GPU option & reclamation translation @Manicsteiner\n* KR GpuDeprecated translation @HX3N\n* fix WPF Warning @SherkeyXD\n* 修改过时的Binding方法 @SherkeyXD\n* YostarJP FC navigation (#10316) @Manicsteiner\n* 整理 tasks.json 中记录的肉鸽插件参数 (#10290) @Alan-Charred\n* clearout git blame @Constrat\n* MuMu12EmulatorPath Placeholder 添加示例提示 @ABA2396\n* remove last checked commit @Constrat\n* auto blame ignore @github-actions[bot]\n* git blame added styling commits (#10283) @Constrat\n* smoking-test添加领取奖励的测试 @SherkeyXD\n* 移除tasks中的默认值 @SherkeyXD\n\n**Full Changelog**: [v5.6.0-beta.1 -> v5.6.0-beta.2](https://github.com/MaaAssistantArknights/MaaAssistantArknights/compare/v5.6.0-beta.1...v5.6.0-beta.2)\n", - "VersionUpdate.doNotShowUpdate": "False", - "VersionUpdate.isfirstboot": "True", - "VersionUpdate.name": "v5.6.0-beta.2", - "VersionUpdate.package": "", - "VersionUpdate.Proxy": "", - "VersionUpdate.ResourceApi": "https://s3.maa-org.net:25240/maaassistantarknights/MaaAssistantArknights/MaaAssistantArknights/", - "VersionUpdate.ScheduledUpdateCheck": "True", - "VersionUpdate.UpdateCheck": "True", - "VersionUpdate.VersionType": "Beta", - "Visit.CreditFightSelectFormation": "0", - "Visit.CreditFightTaskEnabled": "False", - "Visit.LastCreditFightTaskTime": "2024/03/27 00:00:00", - "Yituliu.EnableYituliu": "True" - } - }, - "Current": "Default", - "Global": { - "GUI.Cheers": "False", - "GUI.CustomCulture": "", - "GUI.Hangover": "False", - "GUI.HideCloseButton": "False", - "GUI.InverseClearMode": "Clear", - "GUI.LastBuyWineTime": "2024/04/15 00:00:00", - "GUI.Localization": "zh-cn", - "GUI.LogItemDateFormatString": "HH:mm:ss", - "GUI.MinimizeToTray": "True", - "GUI.OperNameLanguage": "OperNameLanguageMAA", - "GUI.Placement": "{\"Length\":44,\"Flags\":0,\"ShowCmd\":1,\"MinPosition\":{\"X\":-1,\"Y\":-1},\"MaxPosition\":{\"X\":-1,\"Y\":-1},\"NormalPosition\":{\"Left\":934,\"Top\":297,\"Right\":2134,\"Bottom\":1197}}", - "GUI.Placement.Load": "True", - "GUI.Placement.SaveOnClosing": "True", - "GUI.SoberLanguage": "zh-cn", - "GUI.UseTray": "True", - "GUI.WindowTitleScrollable": "False", - "GUI.WindowTitleSelectShowList": "3", - "HotKeys": "{\"ShowGui\":{\"Key\":56,\"Modifiers\":7}}", - "Roguelike.RoguelikeStartWithSelectList": "Roguelike@LastReward Roguelike@LastReward4 Sarkaz@Roguelike@LastReward5", - "Start.MinimizeDirectly": "False", - "Start.OpenEmulatorAfterLaunch": "True", - "Start.RunDirectly": "True", - "Timer.CustomConfig": "False", - "Timer.ForceScheduledStart": "False", - "Timer.ShowWindowBeforeForceScheduledStart": "False", - "Timer.Timer1": "False", - "Timer.Timer1.Config": "Default", - "Timer.Timer1Hour": "0", - "Timer.Timer1Min": "0", - "Timer.Timer2": "False", - "Timer.Timer2.Config": "Default", - "Timer.Timer2Hour": "3", - "Timer.Timer2Min": "0", - "Timer.Timer3": "False", - "Timer.Timer3.Config": "Default", - "Timer.Timer3Hour": "6", - "Timer.Timer3Min": "0", - "Timer.Timer4": "False", - "Timer.Timer4.Config": "Default", - "Timer.Timer4Hour": "9", - "Timer.Timer4Min": "0", - "Timer.Timer5": "False", - "Timer.Timer5.Config": "Default", - "Timer.Timer5Hour": "12", - "Timer.Timer5Min": "0", - "Timer.Timer6": "False", - "Timer.Timer6.Config": "Default", - "Timer.Timer6Hour": "15", - "Timer.Timer6Min": "0", - "Timer.Timer7": "False", - "Timer.Timer7.Config": "Default", - "Timer.Timer7Hour": "18", - "Timer.Timer7Min": "0", - "Timer.Timer8": "False", - "Timer.Timer8.Config": "Default", - "Timer.Timer8Hour": "21", - "Timer.Timer8Min": "0", - "VersionUpdate.AllowNightlyUpdates": "False", - "VersionUpdate.AutoDownloadUpdatePackage": "True", - "VersionUpdate.AutoInstallUpdatePackage": "True", - "VersionUpdate.body": "## v5.12.0-beta.1\n\n### 真的没有摸鱼吗 | Highlight\n\n* 添加了种子存钱的功能,在选择 **萨卡兹** 主题,**刷源石锭** 模式,**点刺成锭分队** or **后勤分队** 时,高级设置中会出现 **启用种子刷钱(美愿)** 选项。\n* 种子固定为存钱种,若使用后勤存钱,请确保解锁美愿。种子难度为 6 难,由于难度设置仍然生效,可设为 “当前” 或 16 难(若有需要)。\n* 公招选择 **手动确认 1/5/6 星** 后,若出现 1/5/6 星,将不会计数,继续在下一个招募格内招募。\n\n#### 其他\n\n* 【**萨卡兹的无终奇语**】 【**内容拓展·二**】的资源内容暂时没有更新,在新增关卡中会出现 “关卡识别错误” 的情况,可能会尽快修复。\n* 新增了部分导航,改进了肉鸽流程\n* 修复博朗台模式等待异常\n* 修复了一些已知问题\n\n### 新增 | New\n\n* 繁中服「源石塵行動」復刻活動導航 @momomochi987\n* 点刺、后勤种子存钱 (#11521) @Daydreamer114 @ABA2396\n* 肉鸽满级自动停止选项 (#11466) @BxFS @Constrat @momomochi987 @status102\n* 为肉鸽开始探索添加 cd 识别 (#11443) @Daydreamer114\n* 萨卡兹肉鸽冰川期作战策略 @Daydreamer114\n* 萨卡兹内容拓展II点刺进入商店获得构想 (#11509) @Daydreamer114\n* 不自动招募1/5/6星干员时,不计入最大确认招募次数 (#11380) @Roland125 @horror-proton\n* 干员识别排除当前客户端未出干员 @ABA2396\n* 肉鸽开局干员列表排除当前客户端未出干员 @ABA2396\n\n### 改进 | Improved\n\n* 新增投掷手干员组并调整优先级 @Daydreamer114\n* 优化傀影肉鸽雪山上的来客ew部署 (#11195) @Daydreamer114\n\n### 修复 | Fix\n\n* 肉鸽烧热水没烧出来会从预设难度开始,而不是返回n0 @ABA2396\n* 删除傀影肉鸽远方来客意义不明的撤退 (#11194) @Daydreamer114\n* 博朗台计算等待时间失败数据处理 @status102\n* 修正nothing to select情况下的判断逻辑 @Roland125\n* update Collect Rewards template for EN fix #11485 @Constrat\n* tw OcrReplace 肉鸽招募助战 (#11487) @Saratoga-Official\n* 繁中服作戰失敗畫面卡住 (#11479) @momomochi987\n* InitialDrop.png更新 @Constrat @BxFS\n* txwy duplicates in tasks.json @Constrat\n* 更新 \"视相\" 主题后未关闭退出基建弹窗时无法回到主界面 @ABA2396\n* `手动输入关卡名` 与 `使用剩余理智` 选项无法保存 @ABA2396\n\n### 文档 | Docs\n\n* 肉鸽辅助协议文档翻译 (#11360) @Windsland52\n* 为肉鸽参数 start_with_seed 添加文档 (#11531) @Daydreamer114\n\n### 其他 | Other\n\n* manual recursion + robocopy for smoke-testing (#11458) @Constrat\n* implement cache for smoke-test (#11457) @Constrat\n* Release 模式下,如文件夹中包含 DEBUG.txt 也会输出 DBG 日志 (#11496) @ABA2396\n* ProcessTask的Action 新增 Input (#11521) @Daydreamer114 @ABA2396\n* increase fetch depth for release nightly-ota to generate tags (might need successive increases) @Constrat\n* delay and retry downloads on resource updater (#11504) @Constrat\n* use read/write secret to delete cache on pr merge @Constrat\n* checkout depth for nightly ota @Constrat\n* 移动企鹅物流及一图流上报设置 至 运行设置 @status102\n* Translations update from MAA Weblate (#11524) @AlisaAkiron\n* ignore blame for e3d63894b28b2ef5e2405e144a32a6981de5e1b2 oxipng optimization @Constrat\n* disable link checker in issues and PRs (#11506) @Constrat\n* use API for cache-deletion @Constrat\n* 移除不再使用的代码 for 最小化启动模拟器 @status102\n* move `push tag` later in the workflow in case or errors (#11480) @Constrat\n* 上报添加 User-Agent @ABA2396\n* 修改上报抬头 @ABA2396\n* Use %B to consider header for skip changelog @Constrat\n* try setup dotnet cache @Constrat\n* EN duplicates in tasks.json + SSS Buffs @Constrat\n* YostarJP phantom roguelike game pass, SSS#6 (#11473) @Manicsteiner\n* battle_data 未实装干员添加字段提示 @ABA2396\n* 别用 1234567890ABCDEF 去连模拟器了 @ABA2396\n* Revert \"refactor: move resource copy to test script\" @Constrat\n* `启动 MAA 后直接运行` 和 `启动 MAA 后自动开启模拟器` 改为独立配置 @ABA2396\n* 只有一个配置的时候不显示 `此选项页为全局配置` @ABA2396\n* 当前配置不存在时尝试读取全局配置 @ABA2396\n* Config序列化参数不转义中文 @status102\n\n**Full Changelog**: [v5.11.1 -> v5.12.0-beta.1](https://github.com/MaaAssistantArknights/MaaAssistantArknights/compare/v5.11.1...v5.12.0-beta.1)\n", - "VersionUpdate.doNotShowUpdate": "False", - "VersionUpdate.HasAcknowledgedNightlyWarning": "False", - "VersionUpdate.isfirstboot": "False", - "VersionUpdate.name": "v5.12.0-beta.1", - "VersionUpdate.package": "", - "VersionUpdate.Proxy": "127.0.0.1:26561", - "VersionUpdate.ProxyType": "http", - "VersionUpdate.ResourceApi": "https://maa-ota.annangela.cn/MaaAssistantArknights/MaaAssistantArknights/", - "VersionUpdate.ScheduledUpdateCheck": "True", - "VersionUpdate.UpdateCheck": "True", - "VersionUpdate.VersionType": "Beta" - } -} \ No newline at end of file diff --git a/config/MaaConfig/脚本_1/config.json b/config/MaaConfig/脚本_1/config.json deleted file mode 100644 index 9feb341..0000000 --- a/config/MaaConfig/脚本_1/config.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "MaaSet": { - "Name": "12332", - "Path": "D:/AUTO/MAA" - }, - "RunSet": { - "AnnihilationTimeLimit": 40, - "RoutineTimeLimit": 10, - "RunTimesLimit": 3 - }, - "QFluentWidgets": { - "ThemeColor": "#ff009faa", - "ThemeMode": "Auto" - } -} \ No newline at end of file diff --git a/config/MaaConfig/脚本_1/user_data.db b/config/MaaConfig/脚本_1/user_data.db deleted file mode 100644 index 33602bb681c6caf5971ef53e150b7e566c69d0e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 zcmWFz^vNtqRY=P(%1ta$FlG>7U}R))P*7lCU|Z6UWra|Nn%N9F+?mUvA9Gb zC9xz`Cp|GY6(R;=#Tz2AjUeoz{L+%lJgB0?yu8ee%$&p$pkE-;nR#hNK+}p!lS@jA zpsETIi;K(ii&7MlDuGty<(H&F?aeFAO#(Y6H$MfcwiM`Qpz}0AeRD>>$qYa=3PwX< zGz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLx7$k(3Hg}EFUk+$ge2O4+1Sb!W@zu z&!%m7K4rzTj_uDnyPwV3^|XKc^97CX_jEj6H{;oy-uHVt^_`xtp6TfV6mo(H_@||1 zCTAw*a8()^7#Qdp7y^-@uDPymUS3{#Ou*^#8<+Z}8PwBSbn@%cek8WNj>_L|aQ(qK z{au$&9=Q6*ds;3FqgdRuU8@s$8>jY%g}wf|H}65pCI1)=CG);n)1#&30)iB36f8DEiGGfTJ+F{|5sQje^k- w7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fngQ`Y>Z5zWrljj0R43*_5c6? diff --git a/config/MaaConfig/脚本_2/Default/gui.json b/config/MaaConfig/脚本_2/Default/gui.json deleted file mode 100644 index be91433..0000000 --- a/config/MaaConfig/脚本_2/Default/gui.json +++ /dev/null @@ -1,335 +0,0 @@ -{ - "Configurations": { - "Default": { - "Announcement.AnnouncementInfo": "# 生息演算内容拓展Ⅱ\n\n生息演算内容拓展之后加了点剧情, 现在的版本制造刷点数的自己过一下这个剧情后再过三天到下个定量之日再开始任务还是能用的, 靠一直开局刷点数的会卡住, 得等修了之后更新才能用。 \n\n# 停止资源版本自动更新\n\n现停止提供资源版本自动更新,手动更新方式参考 [链接](https://github.com/MaaAssistantArknights/MaaAssistantArknights/issues/10033)\n\n仓库地址 [https://github.com/MaaAssistantArknights/MaaResource](https://github.com/MaaAssistantArknights/MaaResource)\n\n# 长期公告\n\n请不要在明日方舟及鹰角在各平台(包括不限于:森空岛、B 站、微博)的官方动态下讨论任何关于 MAA 内容。 \n\n请勿参加内鬼消息的传播,禁止将内鬼消息发送至任何 MAA 群。 \n\n
    \n", - "Announcement.DoNotRemindThisAnnouncementAgain": "True", - "Announcement.DoNotShowAnnouncement": "False", - "AutoRecruit.AutoRecruitFirstList": "", - "AutoRecruit.ChooseLevel3": "True", - "AutoRecruit.ChooseLevel3.Time": "540", - "AutoRecruit.ChooseLevel4": "True", - "AutoRecruit.ChooseLevel4.Time": "540", - "AutoRecruit.ChooseLevel5": "True", - "AutoRecruit.ChooseLevel5.Time": "540", - "AutoRecruit.ForceRefresh": "True", - "AutoRecruit.IsLevel3UseShortTime": "False", - "AutoRecruit.IsLevel3UseShortTime2": "False", - "AutoRecruit.MaxTimes": "4", - "AutoRecruit.NotChooseLevel1": "False", - "AutoRecruit.RefreshLevel3": "True", - "AutoRecruit.SelectExtraTags": "0", - "Bluestacks.Config.Keyword": "", - "Bluestacks.Config.Path": "", - "Connect.AdbLiteEnabled": "False", - "Connect.AdbPath": "C:\\Program Files\\Netease\\MuMu Player 12\\shell\\adb.exe", - "Connect.AdbReplaced": "False", - "Connect.Address": "127.0.0.1:16416", - "Connect.AddressHistory": "[\"127.0.0.1:16416\",\"127.0.0.1:16448\",\"127.0.0.1:16384\"]", - "Connect.AllowADBHardRestart": "True", - "Connect.AllowADBRestart": "True", - "Connect.AlwaysAutoDetect": "False", - "Connect.AutoDetect": "False", - "Connect.ConnectConfig": "MuMuEmulator12", - "Connect.KillAdbOnExit": "True", - "Connect.LdPlayerEmulatorPath": "C:\\leidian\\LDPlayer9", - "Connect.LdPlayerExtras.Enabled": "False", - "Connect.LdPlayerIndex": "0", - "Connect.MuMu12Display": "0", - "Connect.MuMu12EmulatorPath": "C:\\Program Files\\Netease\\MuMu Player 12", - "Connect.MuMu12Extras.Enabled": "True", - "Connect.MuMu12Index": "2", - "Connect.MumuBridgeConnection": "False", - "Connect.RetryOnDisconnected": "True", - "Connect.TouchMode": "minitouch", - "Copilot.AddUserAdditional": "False", - "Copilot.CopilotTaskList": "", - "Copilot.LoopTimes": "1", - "Copilot.UserAdditional": "", - "ExternalNotification.Bark.SendKey": "", - "ExternalNotification.Bark.Server": "https://api.day.app", - "ExternalNotification.Discord.BotToken": "", - "ExternalNotification.Discord.UserId": "", - "ExternalNotification.Discord.WebhookUrl": "", - "ExternalNotification.Enabled": "Off", - "ExternalNotification.Qmsg.Bot": "", - "ExternalNotification.Qmsg.Key": "", - "ExternalNotification.Qmsg.Server": "", - "ExternalNotification.Qmsg.User": "", - "ExternalNotification.ServerChan.SendKey": "", - "ExternalNotification.Smtp.From": "", - "ExternalNotification.Smtp.Password": "", - "ExternalNotification.Smtp.Port": "", - "ExternalNotification.Smtp.RequiresAuthentication": "false", - "ExternalNotification.Smtp.Server": "", - "ExternalNotification.Smtp.To": "", - "ExternalNotification.Smtp.User": "", - "ExternalNotification.Smtp.UseSsl": "false", - "ExternalNotification.Telegram.BotToken": "", - "ExternalNotification.Telegram.ChatId": "", - "Fight.RemainingSanityStage": "", - "Fight.UseExpiringMedicine": "True", - "Fight.UseRemainingSanityStage": "False", - "Gacha.ShowDisclaimerNoMore": "False", - "GUI.AllowUseStoneSave": "False", - "GUI.CustomStageCode": "True", - "GUI.HideSeries": "False", - "GUI.HideUnavailableStage": "False", - "GUI.MinimizeToTray": "False", - "GUI.Placement": "{\"Length\":44,\"Flags\":0,\"ShowCmd\":1,\"MinPosition\":{\"X\":-1,\"Y\":-1},\"MaxPosition\":{\"X\":-1,\"Y\":-1},\"NormalPosition\":{\"Left\":680,\"Top\":314,\"Right\":1880,\"Bottom\":1214}}", - "GUI.Placement.Load": "True", - "GUI.Placement.SaveOnClosing": "True", - "GUI.UseAlternateStage": "False", - "GUI.UseLogItemDateFormat": "False", - "GUI.UseTray": "True", - "GUI.WindowTitlePrefix": "", - "Guide.StepIndex": "4", - "Infrast.ContinueTraining": "True", - "Infrast.Control.IsChecked": "True", - "Infrast.CustomInfrastEnabled": "False", - "Infrast.CustomInfrastFile": "D:\\AUTO\\MAA\\合成玉排班.json", - "Infrast.CustomInfrastPlanIndex": "2", - "Infrast.CustomInfrastPlanShowInFightSettings": "False", - "Infrast.DefaultInfrast": "user_defined", - "Infrast.Dorm.IsChecked": "True", - "Infrast.DormFilterNotStationedEnabled": "True", - "Infrast.DormThreshold": "30", - "Infrast.DormTrustEnabled": "False", - "Infrast.IsCustomInfrastFileReadOnly": "False", - "Infrast.Mfg.IsChecked": "True", - "Infrast.Office.IsChecked": "True", - "Infrast.Order.Control": "2", - "Infrast.Order.Dorm": "6", - "Infrast.Order.Mfg": "0", - "Infrast.Order.Office": "5", - "Infrast.Order.Power": "3", - "Infrast.Order.Processing": "7", - "Infrast.Order.Reception": "4", - "Infrast.Order.Trade": "1", - "Infrast.Order.Training": "8", - "Infrast.OriginiumShardAutoReplenishment": "True", - "Infrast.Power.IsChecked": "True", - "Infrast.Processing.IsChecked": "True", - "Infrast.Reception.IsChecked": "True", - "Infrast.Trade.IsChecked": "True", - "Infrast.Training.IsChecked": "True", - "Infrast.UsesOfDrones": "Money", - "MainFunction.ActionAfterCompleted": "ExitEmulatorAndSelf", - "MainFunction.Drops.Enable": "False", - "MainFunction.Drops.ItemId": "", - "MainFunction.Drops.ItemName": "不选择", - "MainFunction.Drops.Quantity": "5", - "MainFunction.InverseMode": "False", - "MainFunction.PostActions": "0", - "MainFunction.Series.Quantity": "6", - "MainFunction.Stage1": "1-7", - "MainFunction.Stage2": "", - "MainFunction.Stage3": "", - "MainFunction.TimesLimited": "False", - "MainFunction.TimesLimited.Quantity": "5", - "MainFunction.UseMedicine": "False", - "MainFunction.UseMedicine.Quantity": "999", - "MainFunction.UseStone.Quantity": "0", - "Mall.CreditBlackListNew": "碳;家具;加急许可", - "Mall.CreditFirstListNew": "招聘许可", - "Mall.CreditForceShoppingIfCreditFull": "False", - "Mall.CreditOnlyBuyDiscount": "False", - "Mall.CreditShopping": "True", - "Mall.CreditVisitFriends": "True", - "Mall.CreditVisitFriendsEnabled": "True", - "Mall.CreditVisitOnceADay": "True", - "Mall.CreidtReserveMaxCredit": "False", - "Mall.LastCreditVisitFriendsTime": "2025/01/01 00:00:00", - "Mission.ReceiveAward": "True", - "Mission.ReceiveFreeRecruit": "True", - "Mission.ReceiveMail": "True", - "Mission.ReceiveMining": "False", - "Mission.ReceiveOrundum": "True", - "Mission.ReceiveSpecialAccess": "False", - "OperBox.Data": "", - "Peep.TargetFps": "20", - "Penguin.EnablePenguin": "True", - "Penguin.Id": "121289881", - "Penguin.IsDrGrandet": "False", - "Performance.AllowDeprecatedGpu": "false", - "Performance.PreferredGpuDescription": "Intel(R) UHD Graphics", - "Performance.PreferredGpuInstancePath": "PCI\\VEN_8086&DEV_A788&SUBSYS_35381043&REV_04\\3&11583659&0&10", - "Performance.UseGpu": "true", - "Reclamation.Mode": "1", - "Reclamation.Reclamation2ExEnable": "False", - "Reclamation.Reclamation2ExProduct": "", - "Reclamation.ReclamationIncrementMode": "0", - "Reclamation.ReclamationMaxCraftCountPerRound": "16", - "Reclamation.Theme": "Tales", - "Reclamation.ToolToCraft": "", - "Recruit.AutoSetTime": "True", - "Recruit.ChooseLevel3": "False", - "Recruit.ChooseLevel4": "True", - "Recruit.ChooseLevel5": "True", - "Recruit.ChooseLevel6": "True", - "Recruit.IsLevel3UseShortTime": "False", - "Recruit.IsLevel3UseShortTime2": "False", - "Recruit.ShowPotential": "True", - "RemoteControl.RemoteControlDeviceIdentity": "", - "RemoteControl.RemoteControlGetTaskEndpointUri": "", - "RemoteControl.RemoteControlReportStatusUri": "", - "RemoteControl.RemoteControlUserIdentity": "", - "Roguelike.CollectibleModeShopping": "False", - "Roguelike.CollectibleModeSquad": "", - "Roguelike.CoreChar": "", - "Roguelike.DeepExplorationAutoIterate": "False", - "Roguelike.DeploymentWithPause": "False", - "Roguelike.Difficulty": "2", - "Roguelike.ExitAtFinalBoss": "False", - "Roguelike.InvestmentEnabled": "True", - "Roguelike.InvestmentEnterSecondFloor": "True", - "Roguelike.InvestsCount": "999", - "Roguelike.Mode": "0", - "Roguelike.MonthlySquadAutoIterate": "False", - "Roguelike.MonthlySquadCheckComms": "False", - "Roguelike.RefreshTraderWithDice": "False", - "Roguelike.Roguelike3FirstFloorFoldartal": "False", - "Roguelike.Roguelike3NewSquad2StartingFoldartal": "False", - "Roguelike.Roguelike3NewSquad2StartingFoldartals": "", - "Roguelike.Roguelike3StartFloorFoldartal": "", - "Roguelike.RoguelikeDelayAbortUntilCombatComplete": "False", - "Roguelike.RoguelikeEnableNonfriendSupport": "False", - "Roguelike.RoguelikeExpectedCollapsalParadigms": "", - "Roguelike.RoguelikeOnlyStartWithEliteTwo": "False", - "Roguelike.RoguelikeStartWithEliteTwo": "False", - "Roguelike.RoguelikeTheme": "Sarkaz", - "Roguelike.RoguelikeUseSupportUnit": "False", - "Roguelike.Roles": "", - "Roguelike.Squad": "", - "Roguelike.StartsCount": "99999", - "Roguelike.StartWithSeed": "False", - "Roguelike.StopAtMaxLevel": "False", - "Roguelike.StopWhenInvestmentFull": "False", - "Start.AccountName": "152", - "Start.AutoRestartOnDrop": "True", - "Start.BlockSleep": "False", - "Start.BlockSleepWithScreenOn": "True", - "Start.ClientType": "Official", - "Start.CopilotWithScript": "False", - "Start.EmulatorAddCommand": "-v 1", - "Start.EmulatorPath": "C:\\Program Files\\Netease\\MuMu Player 12\\shell\\MuMuPlayer.exe", - "Start.EmulatorWaitSeconds": "30", - "Start.EndsWithScript": "", - "Start.ManualStopWithScript": "False", - "Start.MinimizeDirectly": "False", - "Start.MinimizingStartup": "True", - "Start.OpenEmulatorAfterLaunch": "False", - "Start.RunDirectly": "False", - "Start.StartEmulator": "True", - "Start.StartsWithScript": "", - "TaskQueue.AutoRoguelike.IsChecked": "True", - "TaskQueue.Base.IsChecked": "False", - "TaskQueue.Combat.IsChecked": "False", - "TaskQueue.Mall.IsChecked": "False", - "TaskQueue.Mission.IsChecked": "False", - "TaskQueue.Order.AutoRoguelike": "6", - "TaskQueue.Order.Base": "2", - "TaskQueue.Order.Combat": "3", - "TaskQueue.Order.Mall": "4", - "TaskQueue.Order.Mission": "5", - "TaskQueue.Order.Reclamation": "7", - "TaskQueue.Order.ReclamationAlgorithm2": "7", - "TaskQueue.Order.Recruiting": "1", - "TaskQueue.Order.WakeUp": "0", - "TaskQueue.Reclamation.IsChecked": "False", - "TaskQueue.ReclamationAlgorithm2.IsChecked": "False", - "TaskQueue.Recruiting.IsChecked": "False", - "TaskQueue.WakeUp.IsChecked": "True", - "VersionUpdate.AutoDownloadUpdatePackage": "True", - "VersionUpdate.AutoInstallUpdatePackage": "True", - "VersionUpdate.body": "## v5.6.0-beta.2\n\n### 新增 | New\n\n* 外部通知支持多选 (#10395) @ABA2396\n* add Qmsg notification (#10358) @octopusYan\n* 允许手动指定WPFGUI中干员名称显示语言 (#10310) @ABA2396 @Manicsteiner\n* GetLocalizedNames for Infrast and Copilot output (#10335) @Constrat\n* Reclamation for YostarJP (#10414) @Manicsteiner\n* 生息演算添加沙中之火选择项 @ABA2396\n* 适配「词祭」界面主题 (#10331) @Constrat @ManicSteiner @HX3N @SherkeyXD\n\n### 改进 | Improved\n\n* 全肉鸽招募适配娜仁图亚、艾拉 (#10385) @Daydreamer114\n* Mumu截图增强路径清空时不再检查路径是否存在 @status102\n* duplicates templates from I.S. (#10376) @Constrat\n* 优化外部通知界面显示 (#10363) @ABA2396\n* 更新 bug issue 模板 (#10357) @Rbqwow\n* 重构 OperBox 输出与显示 (#10320) @ABA2396\n* 重构定时器和重启询问 (#10078) @ABA2396\n* Win10以上系统在退出时Wpf不再清除Toast (#10307) @status102\n* 第一次启动时默认不勾选肉鸽和生息演算 @ABA2396\n* 优化动编队日志输出 @ABA2396\n* 优化生息演算 (#10411) @Alan-Charred @status102 @ABA2396\n\n### 修复 | Fix\n\n* FC rerun navigation fix EN @Constrat\n* 生息演算主题读取配置错误 @ABA2396\n* 萨卡兹肉鸽多选招募券模板错误 @ABA2396\n* 肉鸽编队检测在未触底时返回 true (#10396) @Alan-Charred\n* DoDragDrop 拖动操作已在进行中 (#10368) @ABA2396\n* insert delay after SquadConfirm @Constrat\n* 使用匹配后偏移代替每日任务 @status102\n* add ocrReplace for JP \"Reclamation2CopiousCoppice\" (#10362) @Daydreamer114\n* 勾选启动MAA后直接最小化后点击隐藏托盘图标后无法显示MAA @ABA2396\n* add delay after selecting clue @Constrat\n* SL 导航错误 @ABA2396\n* 修复调试版本判断条件 @SherkeyXD\n* 多配置下公告和更新日志显示异常 @ABA2396\n* 修复保全战斗在core干员重复时只会放1次bug (#10306) @status102\n* ProxyType 重启不生效 @ABA2396\n* EN needs templates for clue exchange the number font is different, score too low @Constrat\n* sarkaz 仓库识别错误 @ABA2396\n\n### 文档 | Docs\n\n* 贡献者头像添加 105 上限 (#10351) @MistEO\n\n### 其他 | Other\n\n* `std::ranges::views::join` with LLVM clang 16 on darwin (#10309) @Cryolitia\n* impossiblity of fetch-depth modification. reverting + generic perfs @Constrat\n* rev-list instead of rev-parse @Constrat\n* revert to simple if @Constrat\n* fetching depth 0 @Constrat\n* roi 错误 @ABA2396\n* remove \"\" in nightly fix #10308 @Constrat\n* 生息演算2刷开局清空编队干员 (#10359) @Daydreamer114\n* 重构 FightSettingsUserControl (#10407) @ABA2396\n* CopilotViewModel (#10099) @Manicsteiner\n* git blame ignore @Constrat\n* 优化界面显示 @ABA2396\n* smoking-test中肉鸽参数更新 @SherkeyXD\n* 使用变换后的图像进行技能按钮识别 (#10293) @horror-proton\n* OTA打包时对跳过的版本做删除处理 (#10020) @SherkeyXD\n* 公招错误时保存截图 @zzyyyl\n* 调用PowerManagement.Shutdown();后再次调用Bootstrapper.Shutdown(); @ABA2396\n* 关机前尝试保存配置 @ABA2396\n* 调整令牌关闭强度 @ABA2396\n* 迁移公告相关配置 (#10399) @status102\n* bump maa-cli to 0.4.12 (#10390) @wangl-cc\n* 调整 check link 提示样式 @ABA2396\n* 对comment中的未知链接进行提醒 (#10379) @IzakyL @ABA2396\n* update ignore templates @Constrat\n* 获取任务端口无效时不进行轮询 (#10321) @ABA2396\n* use CsWin32 source generator instead of random pinvoke library (#10361) @dantmnf\n* 删除子模块 @ABA2396\n* remove MaaDeps submodule (#10354) @dantmnf\n* RoguelikeRoutingTaskPlugin.h missing VS22 filter @Constrat\n* bump zzyyyl/issue-checker from 1.8 to 1.9 @zzyyyl\n* 公招识别拥有全干员时不显示未拥有干员数量 @ABA2396\n* YostarJP ocr fix @Manicsteiner\n* JP ZH-TW GPU option & reclamation translation @Manicsteiner\n* KR GpuDeprecated translation @HX3N\n* fix WPF Warning @SherkeyXD\n* 修改过时的Binding方法 @SherkeyXD\n* YostarJP FC navigation (#10316) @Manicsteiner\n* 整理 tasks.json 中记录的肉鸽插件参数 (#10290) @Alan-Charred\n* clearout git blame @Constrat\n* MuMu12EmulatorPath Placeholder 添加示例提示 @ABA2396\n* remove last checked commit @Constrat\n* auto blame ignore @github-actions[bot]\n* git blame added styling commits (#10283) @Constrat\n* smoking-test添加领取奖励的测试 @SherkeyXD\n* 移除tasks中的默认值 @SherkeyXD\n\n**Full Changelog**: [v5.6.0-beta.1 -> v5.6.0-beta.2](https://github.com/MaaAssistantArknights/MaaAssistantArknights/compare/v5.6.0-beta.1...v5.6.0-beta.2)\n", - "VersionUpdate.doNotShowUpdate": "False", - "VersionUpdate.isfirstboot": "True", - "VersionUpdate.name": "v5.6.0-beta.2", - "VersionUpdate.package": "", - "VersionUpdate.Proxy": "", - "VersionUpdate.ResourceApi": "https://s3.maa-org.net:25240/maaassistantarknights/MaaAssistantArknights/MaaAssistantArknights/", - "VersionUpdate.ScheduledUpdateCheck": "True", - "VersionUpdate.UpdateCheck": "True", - "VersionUpdate.VersionType": "Beta", - "Visit.CreditFightSelectFormation": "0", - "Visit.CreditFightTaskEnabled": "False", - "Visit.LastCreditFightTaskTime": "2024/03/27 00:00:00", - "Yituliu.EnableYituliu": "True" - } - }, - "Current": "Default", - "Global": { - "GUI.Cheers": "False", - "GUI.CustomCulture": "", - "GUI.Hangover": "False", - "GUI.HideCloseButton": "False", - "GUI.InverseClearMode": "Clear", - "GUI.LastBuyWineTime": "2024/04/15 00:00:00", - "GUI.Localization": "zh-cn", - "GUI.LogItemDateFormatString": "HH:mm:ss", - "GUI.MinimizeToTray": "True", - "GUI.OperNameLanguage": "OperNameLanguageMAA", - "GUI.Placement": "{\"Length\":44,\"Flags\":0,\"ShowCmd\":1,\"MinPosition\":{\"X\":-1,\"Y\":-1},\"MaxPosition\":{\"X\":-1,\"Y\":-1},\"NormalPosition\":{\"Left\":934,\"Top\":297,\"Right\":2134,\"Bottom\":1197}}", - "GUI.Placement.Load": "True", - "GUI.Placement.SaveOnClosing": "True", - "GUI.SoberLanguage": "zh-cn", - "GUI.UseTray": "True", - "GUI.WindowTitleScrollable": "False", - "GUI.WindowTitleSelectShowList": "3", - "HotKeys": "{\"ShowGui\":{\"Key\":56,\"Modifiers\":7}}", - "Roguelike.RoguelikeStartWithSelectList": "Roguelike@LastReward Roguelike@LastReward4 Sarkaz@Roguelike@LastReward5", - "Start.MinimizeDirectly": "False", - "Start.OpenEmulatorAfterLaunch": "False", - "Start.RunDirectly": "False", - "Timer.CustomConfig": "False", - "Timer.ForceScheduledStart": "False", - "Timer.ShowWindowBeforeForceScheduledStart": "False", - "Timer.Timer1": "False", - "Timer.Timer1.Config": "Default", - "Timer.Timer1Hour": "0", - "Timer.Timer1Min": "0", - "Timer.Timer2": "False", - "Timer.Timer2.Config": "Default", - "Timer.Timer2Hour": "3", - "Timer.Timer2Min": "0", - "Timer.Timer3": "False", - "Timer.Timer3.Config": "Default", - "Timer.Timer3Hour": "6", - "Timer.Timer3Min": "0", - "Timer.Timer4": "False", - "Timer.Timer4.Config": "Default", - "Timer.Timer4Hour": "9", - "Timer.Timer4Min": "0", - "Timer.Timer5": "False", - "Timer.Timer5.Config": "Default", - "Timer.Timer5Hour": "12", - "Timer.Timer5Min": "0", - "Timer.Timer6": "False", - "Timer.Timer6.Config": "Default", - "Timer.Timer6Hour": "15", - "Timer.Timer6Min": "0", - "Timer.Timer7": "False", - "Timer.Timer7.Config": "Default", - "Timer.Timer7Hour": "18", - "Timer.Timer7Min": "0", - "Timer.Timer8": "False", - "Timer.Timer8.Config": "Default", - "Timer.Timer8Hour": "21", - "Timer.Timer8Min": "0", - "VersionUpdate.AllowNightlyUpdates": "False", - "VersionUpdate.AutoDownloadUpdatePackage": "True", - "VersionUpdate.AutoInstallUpdatePackage": "True", - "VersionUpdate.body": "## v5.12.0-beta.1\n\n### 真的没有摸鱼吗 | Highlight\n\n* 添加了种子存钱的功能,在选择 **萨卡兹** 主题,**刷源石锭** 模式,**点刺成锭分队** or **后勤分队** 时,高级设置中会出现 **启用种子刷钱(美愿)** 选项。\n* 种子固定为存钱种,若使用后勤存钱,请确保解锁美愿。种子难度为 6 难,由于难度设置仍然生效,可设为 “当前” 或 16 难(若有需要)。\n* 公招选择 **手动确认 1/5/6 星** 后,若出现 1/5/6 星,将不会计数,继续在下一个招募格内招募。\n\n#### 其他\n\n* 【**萨卡兹的无终奇语**】 【**内容拓展·二**】的资源内容暂时没有更新,在新增关卡中会出现 “关卡识别错误” 的情况,可能会尽快修复。\n* 新增了部分导航,改进了肉鸽流程\n* 修复博朗台模式等待异常\n* 修复了一些已知问题\n\n### 新增 | New\n\n* 繁中服「源石塵行動」復刻活動導航 @momomochi987\n* 点刺、后勤种子存钱 (#11521) @Daydreamer114 @ABA2396\n* 肉鸽满级自动停止选项 (#11466) @BxFS @Constrat @momomochi987 @status102\n* 为肉鸽开始探索添加 cd 识别 (#11443) @Daydreamer114\n* 萨卡兹肉鸽冰川期作战策略 @Daydreamer114\n* 萨卡兹内容拓展II点刺进入商店获得构想 (#11509) @Daydreamer114\n* 不自动招募1/5/6星干员时,不计入最大确认招募次数 (#11380) @Roland125 @horror-proton\n* 干员识别排除当前客户端未出干员 @ABA2396\n* 肉鸽开局干员列表排除当前客户端未出干员 @ABA2396\n\n### 改进 | Improved\n\n* 新增投掷手干员组并调整优先级 @Daydreamer114\n* 优化傀影肉鸽雪山上的来客ew部署 (#11195) @Daydreamer114\n\n### 修复 | Fix\n\n* 肉鸽烧热水没烧出来会从预设难度开始,而不是返回n0 @ABA2396\n* 删除傀影肉鸽远方来客意义不明的撤退 (#11194) @Daydreamer114\n* 博朗台计算等待时间失败数据处理 @status102\n* 修正nothing to select情况下的判断逻辑 @Roland125\n* update Collect Rewards template for EN fix #11485 @Constrat\n* tw OcrReplace 肉鸽招募助战 (#11487) @Saratoga-Official\n* 繁中服作戰失敗畫面卡住 (#11479) @momomochi987\n* InitialDrop.png更新 @Constrat @BxFS\n* txwy duplicates in tasks.json @Constrat\n* 更新 \"视相\" 主题后未关闭退出基建弹窗时无法回到主界面 @ABA2396\n* `手动输入关卡名` 与 `使用剩余理智` 选项无法保存 @ABA2396\n\n### 文档 | Docs\n\n* 肉鸽辅助协议文档翻译 (#11360) @Windsland52\n* 为肉鸽参数 start_with_seed 添加文档 (#11531) @Daydreamer114\n\n### 其他 | Other\n\n* manual recursion + robocopy for smoke-testing (#11458) @Constrat\n* implement cache for smoke-test (#11457) @Constrat\n* Release 模式下,如文件夹中包含 DEBUG.txt 也会输出 DBG 日志 (#11496) @ABA2396\n* ProcessTask的Action 新增 Input (#11521) @Daydreamer114 @ABA2396\n* increase fetch depth for release nightly-ota to generate tags (might need successive increases) @Constrat\n* delay and retry downloads on resource updater (#11504) @Constrat\n* use read/write secret to delete cache on pr merge @Constrat\n* checkout depth for nightly ota @Constrat\n* 移动企鹅物流及一图流上报设置 至 运行设置 @status102\n* Translations update from MAA Weblate (#11524) @AlisaAkiron\n* ignore blame for e3d63894b28b2ef5e2405e144a32a6981de5e1b2 oxipng optimization @Constrat\n* disable link checker in issues and PRs (#11506) @Constrat\n* use API for cache-deletion @Constrat\n* 移除不再使用的代码 for 最小化启动模拟器 @status102\n* move `push tag` later in the workflow in case or errors (#11480) @Constrat\n* 上报添加 User-Agent @ABA2396\n* 修改上报抬头 @ABA2396\n* Use %B to consider header for skip changelog @Constrat\n* try setup dotnet cache @Constrat\n* EN duplicates in tasks.json + SSS Buffs @Constrat\n* YostarJP phantom roguelike game pass, SSS#6 (#11473) @Manicsteiner\n* battle_data 未实装干员添加字段提示 @ABA2396\n* 别用 1234567890ABCDEF 去连模拟器了 @ABA2396\n* Revert \"refactor: move resource copy to test script\" @Constrat\n* `启动 MAA 后直接运行` 和 `启动 MAA 后自动开启模拟器` 改为独立配置 @ABA2396\n* 只有一个配置的时候不显示 `此选项页为全局配置` @ABA2396\n* 当前配置不存在时尝试读取全局配置 @ABA2396\n* Config序列化参数不转义中文 @status102\n\n**Full Changelog**: [v5.11.1 -> v5.12.0-beta.1](https://github.com/MaaAssistantArknights/MaaAssistantArknights/compare/v5.11.1...v5.12.0-beta.1)\n", - "VersionUpdate.doNotShowUpdate": "False", - "VersionUpdate.HasAcknowledgedNightlyWarning": "False", - "VersionUpdate.isfirstboot": "False", - "VersionUpdate.name": "v5.12.0-beta.1", - "VersionUpdate.package": "", - "VersionUpdate.Proxy": "127.0.0.1:26561", - "VersionUpdate.ProxyType": "http", - "VersionUpdate.ResourceApi": "https://maa-ota.annangela.cn/MaaAssistantArknights/MaaAssistantArknights/", - "VersionUpdate.ScheduledUpdateCheck": "True", - "VersionUpdate.UpdateCheck": "True", - "VersionUpdate.VersionType": "Beta" - } -} \ No newline at end of file diff --git a/config/MaaConfig/脚本_2/config.json b/config/MaaConfig/脚本_2/config.json deleted file mode 100644 index 7e59546..0000000 --- a/config/MaaConfig/脚本_2/config.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "MaaSet": { - "Name": "132", - "Path": "D:/AUTO/MAA" - }, - "RunSet": { - "AnnihilationTimeLimit": 44, - "RoutineTimeLimit": 13, - "RunTimesLimit": 1 - }, - "QFluentWidgets": { - "ThemeColor": "#ff009faa", - "ThemeMode": "Auto" - } -} \ No newline at end of file diff --git a/config/MaaConfig/脚本_2/user_data.db b/config/MaaConfig/脚本_2/user_data.db deleted file mode 100644 index d426db89c3e1e493d91174404fe124c5af19cf9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 zcmWFz^vNtqRY=P(%1ta$FlG>7U}R))P*7lCU=RgjW*~+ECLn_a#sSidNNik8Q3k!T zZeE})6W=8Uel8#}3PwXZ6UWra|Nn%N9F+?mUvA9Gb zC9xz`Cp|GY6(R;=#Tz2AjUeoz{L+%lJgB0?yu8ee%$&p$pkE-;nR#hNK+}p!lS@jA zpsETIi;K(ii&7MlDuGty<(H&F?aeFAO#(Y6H$MfcwiM`Qpz}0AeRD>>oeX?C`F3(W z;(A1tC>S+lGz3ONU^E0qLtr!nMnhmU1V%$(Gz6d_(3H(0EFUk+$ge2O4+1Sb!W@!} z&!%m7K4rzTj_uDnyPwV3^|XKc^97CX_jEj6H{;oy-uHVt^_`xtp6TfV6mo(H_@||1 zCTAw*{I4`JFfh_YTYWKKN$w`q@3fJ1JHX&yVD2v$ZXoS*CuhvOthMWhT4qjEu9} z9)0L~@$E|Ej$`{L?(y?^duH9$i8rKjvpB?i!sp#nUMR0tapwD7!+k;*OkPL1-+y@F z?EyO#joVXxDN8&0|7B}${2eU+_Au8WiFtqeX3kpGx;R7S!;d6|6AY`JJ}r3m?pxrt zGgI$BO8dC8sIHUa>1kn^lRtAc9b=bfw?*=bd1iCe9ljBrw6eiqlF<9)r%~N!Sbxav zK4559dp6YVq<^{PO>be|CkE@2KrYQiX0dQrr8o!RBpIm^B-u9I5c*R7+3@w{8?`PJ>g;?()+dGiSbi+rH`i zOqpv^fvsM0m&JSQZg-x`{BH8}bGrJh%O8!}RTEb3oVB5|>-v#zUZpVtr+{a3Lyi8SZOQgomQ43QTRHVUm0q^a zF#O?!Ij>~bz4sL=JH24dx&MFCD%8|3DLO9pXcr54&tWT`d1acQ&o%9Lc^V40%Zu3R zCO+N$N?^+goBnq~^?{}{0iv}$9^kK?~{nj6+OmWr=6zwAtd6)EfRaBGO=~}77@PCXoEw{%fw%F)y;da9?O|{aJ^)ts^0%n>8_StVs>^49bxzF znAar>r|;>#!4&$V_O@{u+s@GU7wv^v*e^LfoypglVs-ya&a@-%Z617HuwVD2oxj)0 z>Qj*}D%|Nj3MF&ae0jPv<6GQ`drP%W2J_7{n)`KjeMiI1=kE2p?f70d2wb{-;7!>9 zL3lVexnRlGh+s4{HNux1QHzKXoUOtAfBqi~Kr{+QLtr!nMnhmU1V%$(Gz3ONU^E0q eLtr!nMnhmU1V%$(Gz5lO2(U3SiIy4a83O?E1r&Dx diff --git a/config/QueueConfig/调度队列_1.json b/config/QueueConfig/调度队列_1.json deleted file mode 100644 index 64c4d10..0000000 --- a/config/QueueConfig/调度队列_1.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "QueueSet": { - "Enabled": true, - "Name": "1121" - }, - "Queue": { - "Member_1": "脚本_2", - "Member_10": "禁用", - "Member_2": "脚本_1", - "Member_3": "脚本_2", - "Member_4": "禁用", - "Member_5": "禁用", - "Member_6": "禁用", - "Member_7": "禁用", - "Member_8": "禁用", - "Member_9": "禁用" - }, - "QFluentWidgets": { - "ThemeColor": "#ff009faa", - "ThemeMode": "Auto" - }, - "Time": { - "TimeEnabled_0": true, - "TimeEnabled_1": false, - "TimeEnabled_2": false, - "TimeEnabled_3": false, - "TimeEnabled_4": false, - "TimeEnabled_5": false, - "TimeEnabled_6": false, - "TimeEnabled_7": false, - "TimeEnabled_8": false, - "TimeEnabled_9": false, - "TimeSet_0": "20:33", - "TimeSet_1": "01:00", - "TimeSet_2": "00:00", - "TimeSet_3": "01:00", - "TimeSet_4": "00:00", - "TimeSet_5": "00:00", - "TimeSet_6": "00:00", - "TimeSet_7": "00:00", - "TimeSet_8": "00:00", - "TimeSet_9": "00:00" - } -} \ No newline at end of file diff --git a/config/QueueConfig/调度队列_2.json b/config/QueueConfig/调度队列_2.json deleted file mode 100644 index 5762b3a..0000000 --- a/config/QueueConfig/调度队列_2.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "QueueSet": { - "Enabled": true, - "Name": "" - }, - "Queue": { - "Member_1": "脚本_1", - "Member_10": "禁用", - "Member_2": "禁用", - "Member_3": "禁用", - "Member_4": "禁用", - "Member_5": "禁用", - "Member_6": "禁用", - "Member_7": "禁用", - "Member_8": "禁用", - "Member_9": "禁用" - }, - "QFluentWidgets": { - "ThemeColor": "#ff009faa", - "ThemeMode": "Auto" - }, - "Time": { - "TimeEnabled_0": true, - "TimeEnabled_1": false, - "TimeEnabled_2": false, - "TimeEnabled_3": false, - "TimeEnabled_4": false, - "TimeEnabled_5": false, - "TimeEnabled_6": false, - "TimeEnabled_7": false, - "TimeEnabled_8": false, - "TimeEnabled_9": false, - "TimeSet_0": "19:48", - "TimeSet_1": "04:00", - "TimeSet_2": "01:00", - "TimeSet_3": "00:00", - "TimeSet_4": "00:00", - "TimeSet_5": "00:00", - "TimeSet_6": "00:00", - "TimeSet_7": "00:00", - "TimeSet_8": "00:00", - "TimeSet_9": "00:00" - } -} \ No newline at end of file diff --git a/config/QueueConfig/调度队列_3.json b/config/QueueConfig/调度队列_3.json deleted file mode 100644 index ec81488..0000000 --- a/config/QueueConfig/调度队列_3.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "QueueSet": { - "Enabled": false, - "Name": "" - }, - "Queue": { - "Member_1": "禁用", - "Member_10": "禁用", - "Member_2": "禁用", - "Member_3": "禁用", - "Member_4": "禁用", - "Member_5": "禁用", - "Member_6": "禁用", - "Member_7": "禁用", - "Member_8": "禁用", - "Member_9": "禁用" - }, - "QFluentWidgets": { - "ThemeColor": "#ff009faa", - "ThemeMode": "Auto" - }, - "Time": { - "TimeEnabled_0": false, - "TimeEnabled_1": false, - "TimeEnabled_2": false, - "TimeEnabled_3": false, - "TimeEnabled_4": false, - "TimeEnabled_5": false, - "TimeEnabled_6": false, - "TimeEnabled_7": false, - "TimeEnabled_8": false, - "TimeEnabled_9": false, - "TimeSet_0": "02:00", - "TimeSet_1": "00:00", - "TimeSet_2": "00:00", - "TimeSet_3": "00:00", - "TimeSet_4": "00:00", - "TimeSet_5": "00:00", - "TimeSet_6": "00:00", - "TimeSet_7": "00:00", - "TimeSet_8": "00:00", - "TimeSet_9": "00:00" - } -} \ No newline at end of file diff --git a/config/config.json b/config/config.json deleted file mode 100644 index 6ca3d4c..0000000 --- a/config/config.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "Function": { - "BossKey": "", - "IfAllowSleep": false, - "IfSilence": false - }, - "Notify": { - "IfPushPlyer": false, - "IfSendErrorOnly": false, - "IfSendMail": false, - "MailAddress": "" - }, - "Start": { - "IfRunDirectly": false, - "IfSelfStart": false - }, - "QFluentWidgets": { - "ThemeColor": "#ff009faa", - "ThemeMode": "Auto" - }, - "UI": { - "IfShowTray": false, - "IfToTray": false, - "MainIndex": 0, - "location": "100x100", - "maximized": false, - "size": "1200x700" - }, - "Update": { - "IfAutoUpdate": false - } -} \ No newline at end of file diff --git a/config/history.json b/config/history.json deleted file mode 100644 index 526f1fa..0000000 --- a/config/history.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "脚本_1": { - "History": "任务开始时间:2025-01-25 17:49:28,结束时间:2025-01-25 17:50:50\n已完成数:0,未完成数:1\n\n代理未成功的用户:\n新用户\n", - "Time": "2025-01-25 17:49:28" - }, - "调度队列_2": { - "Time": "2025-01-24 19:35:19", - "History": "任务名称:脚本_1,任务开始时间:2025-01-24 19:35:19,结束时间:2025-01-24 19:36:21\n已完成数:0,未完成数:1\n\n代理未成功的用户:\n新用户\n\n" - }, - "脚本_2": { - "History": "任务开始时间:2025-01-26 07:56:52,结束时间:2025-01-26 07:56:56\n已完成数:0,未完成数:1\n\n代理未成功的用户:\n新用户\n", - "Time": "2025-01-26 07:56:52" - }, - "调度队列_1": { - "Time": "2025-01-26 07:56:52", - "History": "任务名称:脚本_2,任务开始时间:2025-01-26 07:56:52,结束时间:2025-01-26 07:56:56\n 已完成数:0,未完成数:1\n \n 代理未成功的用户:\n 新用户\n \n" - } -} \ No newline at end of file diff --git a/data/gameid.txt b/data/gameid.txt deleted file mode 100644 index 6c05329..0000000 --- a/data/gameid.txt +++ /dev/null @@ -1,5 +0,0 @@ -龙门币:CE-6 -技能:CA-5 -红票:AP-5 -经验:LS-6 -剿灭模式:Annihilation \ No newline at end of file diff --git a/data/key/AES_password_verify.bin b/data/key/AES_password_verify.bin deleted file mode 100644 index 559f670..0000000 --- a/data/key/AES_password_verify.bin +++ /dev/null @@ -1 +0,0 @@ -8hKOՎAH~KEUXDbH-, \ No newline at end of file diff --git a/data/key/PASSWORDsalt.txt b/data/key/PASSWORDsalt.txt deleted file mode 100644 index 1e0a4b0..0000000 --- a/data/key/PASSWORDsalt.txt +++ /dev/null @@ -1 +0,0 @@ -356125d2ad32e482fcc4fe7ad4a6027fc4c5dc1616664837960bd7faeafddf71450d3eb875ff76a5729c200d2365d899149cca47cc42e9910f356a019e366c2537597131ff398cb728c17459a8e08ef716d2824cc76d6a668e6dede654265bf226c9b6a20cb7ace2a4b0a7369284f1deb4cdcd8503085797ce612002d9bbe9b4230cd1288c20d0866cd36fc4bcde1da1dccfff579c31e735c6cb575f7e763a2e38f0a06bd493ed9ec2ae5156f01e2b8d0bd3b79d78e248c9d87480f1d8a1a5fd0b4313096d7879f805a2560e81a1918e85beb777fe01a30af532c76e93eea8cfdbbd3281d0cceea5025da6291492f6ea83ba51 \ No newline at end of file diff --git a/data/key/private_key.bin b/data/key/private_key.bin deleted file mode 100644 index c2175aef9b227c0d1bad8c6e8fc5c2fab19ecd0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1696 zcmV;R24DGuvuK6mcDeI-vLwN2c1*F@u2+P0;Li6x1#7_6MK~R;zMdC^2mu3#U)i^5R%v0SjFWWbJvy$|aNXG()RoXjbf- zvIanqV|i8hN$0lRk=V%cbF$%#zH06-DWoV1mA!{fB?+?0VU&e4$wt&!*2m((aN)TN zQoEygIR|g^pI~b}?tAzen$e2ipilK$_4!4c43`vZ6tLWOsLp?<|GOEyz?@2l$(lgY z&p+aZQ*}ea!&RJ_$yW#Pg14DXoca8Bg3`0s9UXBMw<=v|Xq8Hx5!q1^zBtHz&^847 zXs;c3;{Lm>2`<_73_{Fao6(^&m|ND`lWJiuj)(($X*i@Wojp!J#^xKSvq~>nVz>Q7mlF@w@Rn!XLOS&jl`}GBeKe!SV$7Yi>kkA+pY*@py&+XVv zwm*rNho@+3kF)=kdns!j> zWwwa^gI#^M?W0Fc`7e>X{2Utc7X~5n<7Z4Xr2Y#!m}!(RhZ;dsAMt0T9UWka_R+x~ z|KP*v9-V*^!X=POmwpu*Z??F?!l<-kLj}NTwL^V65fD7>*)P{!EN)4QhJ071nozHD z^Ib>SZ=io0RspaiaNBu-C4`%96?hr4uj;z&0<5Q!=lg6!;u1|J1ku8u4cQdGTgFd^ z>KW2O!mv9Odl0tyzqUN%1KL2A1=C16Mez;5`P5bum=1A$WaJhA{}iZrZ^x(oK8jV* zE}@n($?e0=mIalK^m+q-Ar64!qgp&FF)URQ>L_2W-5JtLTv;jU@2LGBSkG3ZYD7r! zxq$`>)LHM;HCf2WtxP{W2bM7VPumkt$iupBWl1CyS1-R4qQg6)Vy_#5&PJi*dP&7O z6+ldU0k9UgGq(q5reThmLxW(bz}stM^r2I4R6A?l0%xYQ$=CsMvCHoendO+ux(4z} zio_KcIvQ$F!{jT{dcwc>xv0e; zcgp7X=_Gn%Hlzu)MHj6x99CGtF{hrKH)%Q=cemnHgZLtD@Y+qml0dL}09xU{*EGcW z_jr6X9oP1!0WGha%U{j7Xlo?_8@&uD0iwL8&L=llq&=RjYHhK(9e3?GWWyf4w9wNf_w?{_7e!oC1SerWJnL}fWR z{>gtp~KukJOWGOii=)F>^Qb=|V}fCO=B1zihkty{ZDlFHo#TGEyp$#$-e~ zMXQp(2cE$HAGrmC`P7|zXGx{TVbZWEzwZ*zU--vx%y@H4ADk{5GN*yu*7f|SRk`cF zb7$nIIY`!G=|`(-2~8tlBDyXTrCB#xkai-z)u`sC?H?eGSW5)nJX4!#mADbLeCS|ht~pogMebf&?ZNx?JCAb1!xek zcGPlbP8b1-Tb!+Hffox{yDiZ?^8! zyVE@ATiQfRs>M#nOZ^={V&kZ>q<0W0Hm$xp!$e}XSsfB?*6#kF8>{bQtxim} z<|AzIX^*v5o+CPxX0~&K$$R16cefkV1d~74qgB&bPk7Z^aZj1Ult$+8tUQf50k#+N qFB;YuaqLvCLGjp;1Es diff --git a/data/key/public_key.pem b/data/key/public_key.pem deleted file mode 100644 index c589fdb..0000000 --- a/data/key/public_key.pem +++ /dev/null @@ -1,9 +0,0 @@ ------BEGIN PUBLIC KEY----- -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAszLXtgtcSrV7gZ5I2Vu0 -aeTG41PE5A6XrrFp8xSA1Wvqaap9WSqr/pkUQr/jzkT27EKMHEc+hP15eh6xG3Oc -o7hC0up2CMC2vb00Lvy2FQ4wkKqjpgLQdLD8+RHz8ms6WvcJ5ipw39DI342BPAja -xpsqquU0PTqJ+1cZtLOx6pGL5IgvxFjgLYwlLzR/3htasH4z3zMhK1yNiew6ve+J -/BosWH42p5Tab9AL0xirnamHGJB1Djful+PUHjMRms8jt0t+0dDvPhphZsbnv2N+ -aTpa9EymC1tMowB++cfCmIO0QqWgp+ekr4tymLhpAkL/yBDOeNXNNbJWd4MqAVUE -ZQIDAQAB ------END PUBLIC KEY----- \ No newline at end of file diff --git a/data/key/verifysalt.txt b/data/key/verifysalt.txt deleted file mode 100644 index 87c8e1f..0000000 --- a/data/key/verifysalt.txt +++ /dev/null @@ -1 +0,0 @@ -12b6b63c4519307f4fb5868e171dbf0afd8d55a742a01e2eb251586073ecfb7b46836463 \ No newline at end of file diff --git a/debug/AUTO_MAA.log b/debug/AUTO_MAA.log deleted file mode 100644 index ee52458..0000000 --- a/debug/AUTO_MAA.log +++ /dev/null @@ -1,4701 +0,0 @@ -2025-01-21 11:49:20.329 | INFO | 日志记录器初始化完成 -2025-01-21 11:49:20.329 | DEBUG | A debug message. -2025-01-21 11:49:20.329 | INFO | An info message. -2025-01-21 11:49:20.329 | SUCCESS | A success message. -2025-01-21 11:49:20.329 | WARNING | A warning message. -2025-01-21 11:49:20.329 | ERROR | An error message. -2025-01-21 11:49:20.329 | CRITICAL | A critical message. -2025-01-21 11:54:49.797 | INFO | 日志记录器初始化完成 -2025-01-21 11:54:49.798 | INFO | 配置类初始化完成 -2025-01-21 12:12:30.514 | INFO | 日志记录器初始化完成 -2025-01-21 12:12:30.514 | INFO | 配置类初始化完成 -2025-01-21 12:12:41.007 | INFO | 用户数据库初始化完成 -2025-01-21 12:19:53.857 | INFO | 日志记录器初始化完成 -2025-01-21 12:19:53.858 | INFO | 配置类初始化完成 -2025-01-21 12:22:43.982 | INFO | 日志记录器初始化完成 -2025-01-21 12:22:43.983 | INFO | 配置类初始化完成 -2025-01-21 12:22:43.983 | INFO | 程序配置管理模块初始化完成 -2025-01-21 13:24:28.010 | INFO | 日志记录器初始化完成 -2025-01-21 13:24:28.011 | INFO | 配置类初始化完成 -2025-01-21 13:24:28.011 | INFO | 程序配置管理模块初始化完成 -2025-01-21 13:25:04.303 | INFO | 日志记录器初始化完成 -2025-01-21 13:25:04.303 | INFO | 配置类初始化完成 -2025-01-21 13:25:04.304 | INFO | 程序配置管理模块初始化完成 -2025-01-21 14:49:51.709 | INFO | 日志记录器初始化完成 -2025-01-21 14:49:51.710 | INFO | 配置类初始化完成 -2025-01-21 14:49:51.710 | INFO | 程序配置管理模块初始化完成 -2025-01-21 14:52:35.123 | INFO | 日志记录器初始化完成 -2025-01-21 14:52:35.124 | INFO | 配置类初始化完成 -2025-01-21 14:52:35.124 | INFO | 程序配置管理模块初始化完成 -2025-01-21 14:52:52.358 | INFO | 日志记录器初始化完成 -2025-01-21 14:52:52.359 | INFO | 配置类初始化完成 -2025-01-21 14:52:52.359 | INFO | 程序配置管理模块初始化完成 -2025-01-21 14:58:52.777 | INFO | 日志记录器初始化完成 -2025-01-21 14:58:52.778 | INFO | 配置类初始化完成 -2025-01-21 14:58:52.778 | INFO | 程序配置管理模块初始化完成 -2025-01-21 15:05:01.363 | INFO | 日志记录器初始化完成 -2025-01-21 15:05:01.365 | INFO | 配置类初始化完成 -2025-01-21 15:05:01.365 | INFO | 程序配置管理模块初始化完成 -2025-01-21 15:05:19.642 | INFO | 日志记录器初始化完成 -2025-01-21 15:05:19.643 | INFO | 配置类初始化完成 -2025-01-21 15:05:19.643 | INFO | 程序配置管理模块初始化完成 -2025-01-21 15:05:34.931 | INFO | 日志记录器初始化完成 -2025-01-21 15:05:34.932 | INFO | 配置类初始化完成 -2025-01-21 15:05:34.932 | INFO | 程序配置管理模块初始化完成 -2025-01-21 15:06:03.160 | INFO | 日志记录器初始化完成 -2025-01-21 15:06:03.161 | INFO | 配置类初始化完成 -2025-01-21 15:06:03.161 | INFO | 程序配置管理模块初始化完成 -2025-01-21 15:06:21.896 | INFO | 日志记录器初始化完成 -2025-01-21 15:06:21.897 | INFO | 配置类初始化完成 -2025-01-21 15:06:21.897 | INFO | 程序配置管理模块初始化完成 -2025-01-21 15:06:50.940 | INFO | 日志记录器初始化完成 -2025-01-21 15:06:50.942 | INFO | 配置类初始化完成 -2025-01-21 15:06:50.942 | INFO | 程序配置管理模块初始化完成 -2025-01-21 15:07:29.196 | INFO | 日志记录器初始化完成 -2025-01-21 15:07:29.197 | INFO | 配置类初始化完成 -2025-01-21 15:07:29.197 | INFO | 程序配置管理模块初始化完成 -2025-01-21 15:07:57.433 | INFO | 日志记录器初始化完成 -2025-01-21 15:07:57.434 | INFO | 配置类初始化完成 -2025-01-21 15:07:57.434 | INFO | 程序配置管理模块初始化完成 -2025-01-21 20:20:26.545 | INFO | 日志记录器初始化完成 -2025-01-21 20:20:26.546 | INFO | 配置类初始化完成 -2025-01-21 20:20:26.546 | INFO | 程序配置管理模块初始化完成 -2025-01-21 20:22:14.313 | INFO | 日志记录器初始化完成 -2025-01-21 20:22:14.314 | INFO | 配置类初始化完成 -2025-01-21 20:22:14.314 | INFO | 程序配置管理模块初始化完成 -2025-01-21 20:26:00.174 | INFO | 日志记录器初始化完成 -2025-01-21 20:26:00.177 | INFO | 配置类初始化完成 -2025-01-21 20:26:00.178 | INFO | 程序配置管理模块初始化完成 -2025-01-21 20:28:02.800 | INFO | 日志记录器初始化完成 -2025-01-21 20:28:02.802 | INFO | 配置类初始化完成 -2025-01-21 20:28:02.803 | INFO | 程序配置管理模块初始化完成 -2025-01-21 20:34:17.721 | INFO | 日志记录器初始化完成 -2025-01-21 20:34:17.721 | INFO | 配置类初始化完成 -2025-01-21 20:34:17.722 | INFO | 程序配置管理模块初始化完成 -2025-01-21 20:36:19.371 | INFO | 日志记录器初始化完成 -2025-01-21 20:36:19.371 | INFO | 配置类初始化完成 -2025-01-21 20:36:19.371 | INFO | 程序配置管理模块初始化完成 -2025-01-21 20:37:07.264 | INFO | 日志记录器初始化完成 -2025-01-21 20:37:07.265 | INFO | 配置类初始化完成 -2025-01-21 20:37:07.265 | INFO | 程序配置管理模块初始化完成 -2025-01-21 20:40:35.054 | INFO | 日志记录器初始化完成 -2025-01-21 20:40:35.055 | INFO | 配置类初始化完成 -2025-01-21 20:40:35.056 | INFO | 程序配置管理模块初始化完成 -2025-01-21 20:40:36.470 | INFO | 初始化信息通知栏 -2025-01-21 20:43:04.430 | INFO | 日志记录器初始化完成 -2025-01-21 20:43:04.431 | INFO | 配置类初始化完成 -2025-01-21 20:43:04.431 | INFO | 程序配置管理模块初始化完成 -2025-01-21 20:43:05.708 | INFO | 初始化信息通知栏 -2025-01-21 20:43:05.708 | DEBUG | -2025-01-21 20:44:23.996 | INFO | 日志记录器初始化完成 -2025-01-21 20:44:23.997 | INFO | 配置类初始化完成 -2025-01-21 20:44:23.998 | INFO | 程序配置管理模块初始化完成 -2025-01-21 20:44:25.117 | INFO | 初始化信息通知栏 -2025-01-21 20:44:25.117 | DEBUG | -2025-01-21 20:44:25.117 | DEBUG | -2025-01-21 20:47:40.358 | INFO | 日志记录器初始化完成 -2025-01-21 20:47:40.360 | INFO | 配置类初始化完成 -2025-01-21 20:47:40.360 | INFO | 程序配置管理模块初始化完成 -2025-01-21 20:47:40.988 | INFO | 初始化信息通知栏 -2025-01-21 20:47:40.988 | DEBUG | -2025-01-21 20:47:40.988 | DEBUG | -2025-01-21 20:47:40.988 | DEBUG | None初始化完成 -2025-01-21 20:53:51.035 | INFO | 日志记录器初始化完成 -2025-01-21 20:53:51.036 | INFO | 配置类初始化完成 -2025-01-21 20:53:51.036 | INFO | 程序配置管理模块初始化完成 -2025-01-21 20:53:51.793 | INFO | 初始化信息通知栏 -2025-01-21 20:53:51.793 | DEBUG | -2025-01-21 20:53:51.793 | DEBUG | -2025-01-21 21:22:25.169 | INFO | 日志记录器初始化完成 -2025-01-21 21:22:25.170 | INFO | 配置类初始化完成 -2025-01-21 21:22:25.170 | INFO | 程序配置管理模块初始化完成 -2025-01-21 21:22:51.905 | INFO | 日志记录器初始化完成 -2025-01-21 21:22:51.908 | INFO | 配置类初始化完成 -2025-01-21 21:22:51.908 | INFO | 程序配置管理模块初始化完成 -2025-01-21 21:24:43.789 | INFO | 日志记录器初始化完成 -2025-01-21 21:24:43.790 | INFO | 配置类初始化完成 -2025-01-21 21:24:43.790 | INFO | 程序配置管理模块初始化完成 -2025-01-21 21:25:03.329 | INFO | 日志记录器初始化完成 -2025-01-21 21:25:03.330 | INFO | 配置类初始化完成 -2025-01-21 21:25:03.330 | INFO | 程序配置管理模块初始化完成 -2025-01-21 21:25:04.779 | ERROR | 信息通知栏未找到父窗口 -2025-01-21 21:26:58.211 | INFO | 日志记录器初始化完成 -2025-01-21 21:26:58.212 | INFO | 配置类初始化完成 -2025-01-21 21:26:58.212 | INFO | 程序配置管理模块初始化完成 -2025-01-21 21:29:00.310 | INFO | 日志记录器初始化完成 -2025-01-21 21:29:00.311 | INFO | 配置类初始化完成 -2025-01-21 21:29:00.311 | INFO | 程序配置管理模块初始化完成 -2025-01-21 21:30:41.977 | INFO | 日志记录器初始化完成 -2025-01-21 21:30:41.977 | INFO | 配置类初始化完成 -2025-01-21 21:30:41.978 | INFO | 程序配置管理模块初始化完成 -2025-01-21 21:38:59.888 | INFO | 日志记录器初始化完成 -2025-01-21 21:38:59.889 | INFO | 配置类初始化完成 -2025-01-21 21:38:59.889 | INFO | 程序配置管理模块初始化完成 -2025-01-21 21:39:12.584 | INFO | 按时间调起任务:调度队列_1 -2025-01-21 21:39:12.584 | INFO | 添加任务:调度队列_1 -2025-01-21 21:39:12.601 | INFO | 开始任务:调度队列_1 -2025-01-21 21:39:54.293 | INFO | 日志记录器初始化完成 -2025-01-21 21:39:54.294 | INFO | 配置类初始化完成 -2025-01-21 21:39:54.295 | INFO | 程序配置管理模块初始化完成 -2025-01-21 21:40:00.965 | INFO | 按时间调起任务:调度队列_1 -2025-01-21 21:40:00.965 | INFO | 添加任务:调度队列_1 -2025-01-21 21:40:00.984 | INFO | 开始任务:调度队列_1 -2025-01-21 21:40:48.500 | INFO | 日志记录器初始化完成 -2025-01-21 21:40:48.501 | INFO | 配置类初始化完成 -2025-01-21 21:40:48.501 | INFO | 程序配置管理模块初始化完成 -2025-01-21 21:40:50.403 | INFO | 按时间调起任务:调度队列_1 -2025-01-21 21:40:50.403 | INFO | 添加任务:调度队列_1 -2025-01-21 21:40:50.428 | INFO | 开始任务:调度队列_1 -2025-01-21 21:41:23.344 | INFO | 日志记录器初始化完成 -2025-01-21 21:41:23.345 | INFO | 配置类初始化完成 -2025-01-21 21:41:23.345 | INFO | 程序配置管理模块初始化完成 -2025-01-21 21:41:34.943 | INFO | 按时间调起任务:调度队列_1 -2025-01-21 21:41:34.943 | INFO | 添加任务:调度队列_1 -2025-01-21 21:41:34.960 | INFO | 开始任务:调度队列_1 -2025-01-21 21:42:20.136 | INFO | 日志记录器初始化完成 -2025-01-21 21:42:20.137 | INFO | 配置类初始化完成 -2025-01-21 21:42:20.137 | INFO | 程序配置管理模块初始化完成 -2025-01-21 21:42:30.708 | INFO | 按时间调起任务:调度队列_1 -2025-01-21 21:42:30.708 | INFO | 添加任务:调度队列_1 -2025-01-21 21:42:30.725 | INFO | 开始任务:调度队列_1 -2025-01-21 21:42:30.728 | ERROR | 未正确配置MAA路径,MAA代理进程中止 -2025-01-21 21:43:11.135 | INFO | 日志记录器初始化完成 -2025-01-21 21:43:11.135 | INFO | 配置类初始化完成 -2025-01-21 21:43:11.135 | INFO | 程序配置管理模块初始化完成 -2025-01-21 21:43:17.728 | INFO | 按时间调起任务:调度队列_1 -2025-01-21 21:43:17.728 | INFO | 添加任务:调度队列_1 -2025-01-21 21:43:17.761 | INFO | 开始任务:调度队列_1 -2025-01-21 21:43:17.767 | ERROR | 未正确配置MAA路径,MAA代理进程中止 -2025-01-21 22:42:08.717 | INFO | 日志记录器初始化完成 -2025-01-21 22:42:08.718 | INFO | 配置类初始化完成 -2025-01-21 22:42:08.718 | INFO | 程序配置管理模块初始化完成 -2025-01-21 22:42:22.255 | INFO | 按时间调起任务:调度队列_1 -2025-01-21 22:42:22.256 | INFO | 添加任务:调度队列_1 -2025-01-21 22:42:22.277 | INFO | 开始任务:调度队列_1 -2025-01-21 22:42:22.281 | ERROR | 未正确配置MAA路径,MAA代理进程中止 -2025-01-21 22:44:26.098 | INFO | 日志记录器初始化完成 -2025-01-21 22:44:26.100 | INFO | 配置类初始化完成 -2025-01-21 22:44:26.101 | INFO | 程序配置管理模块初始化完成 -2025-01-21 22:44:27.633 | INFO | success: str, 更新检查: str, 已是最新版本~: str, 3000: int -2025-01-21 22:44:34.679 | INFO | 按时间调起任务:调度队列_1 -2025-01-21 22:44:34.680 | INFO | 添加任务:调度队列_1 -2025-01-21 22:44:34.701 | INFO | 开始任务:调度队列_1 -2025-01-21 22:44:34.705 | ERROR | 未正确配置MAA路径,MAA代理进程中止 -2025-01-21 22:47:00.836 | INFO | 日志记录器初始化完成 -2025-01-21 22:47:00.837 | INFO | 配置类初始化完成 -2025-01-21 22:47:00.837 | INFO | 程序配置管理模块初始化完成 -2025-01-21 22:47:02.376 | INFO | success: str, 更新检查: str, 已是最新版本~: str, 3000: int -2025-01-21 22:47:10.428 | INFO | 按时间调起任务:调度队列_1 -2025-01-21 22:47:10.428 | INFO | 添加任务:调度队列_1 -2025-01-21 22:47:10.447 | INFO | 开始任务:调度队列_1 -2025-01-21 22:47:10.451 | ERROR | 未正确配置MAA路径,MAA代理进程中止 -2025-01-21 22:49:09.406 | INFO | 日志记录器初始化完成 -2025-01-21 22:49:09.407 | INFO | 配置类初始化完成 -2025-01-21 22:49:09.407 | INFO | 程序配置管理模块初始化完成 -2025-01-21 22:49:10.915 | INFO | success: str, 更新检查: str, 已是最新版本~: str, 3000: int -2025-01-21 22:49:17.957 | INFO | 按时间调起任务:调度队列_1 -2025-01-21 22:49:17.957 | INFO | 添加任务:调度队列_1 -2025-01-21 22:49:17.980 | INFO | 开始任务:调度队列_1 -2025-01-21 22:49:17.983 | ERROR | 未正确配置MAA路径,MAA代理进程中止 -2025-01-21 22:51:14.257 | INFO | 日志记录器初始化完成 -2025-01-21 22:51:14.258 | INFO | 配置类初始化完成 -2025-01-21 22:51:14.258 | INFO | 程序配置管理模块初始化完成 -2025-01-21 22:51:15.743 | INFO | success: str, 更新检查: str, 已是最新版本~: str, 3000: int -2025-01-21 22:51:21.771 | INFO | 按时间调起任务:调度队列_1 -2025-01-21 22:51:21.771 | INFO | 添加任务:调度队列_1 -2025-01-21 22:51:21.792 | INFO | 开始任务:调度队列_1 -2025-01-21 22:51:21.796 | ERROR | 未正确配置MAA路径,MAA代理进程中止 -2025-01-21 23:00:44.967 | INFO | 日志记录器初始化完成 -2025-01-21 23:00:44.968 | INFO | 配置类初始化完成 -2025-01-21 23:00:44.968 | INFO | 程序配置管理模块初始化完成 -2025-01-21 23:00:46.525 | INFO | success: str, 更新检查: str, 已是最新版本~: str, 3000: int -2025-01-21 23:00:57.536 | INFO | 按时间调起任务:调度队列_1 -2025-01-21 23:00:57.538 | INFO | 添加任务:调度队列_1 -2025-01-21 23:00:57.561 | INFO | 开始任务:调度队列_1 -2025-01-21 23:00:57.565 | ERROR | 未正确配置MAA路径,MAA代理进程中止 -2025-01-21 23:01:27.108 | INFO | 日志记录器初始化完成 -2025-01-21 23:01:27.108 | INFO | 配置类初始化完成 -2025-01-21 23:01:27.110 | INFO | 程序配置管理模块初始化完成 -2025-01-21 23:01:28.556 | INFO | success: str, 更新检查: str, 已是最新版本~: str, 3000: int -2025-01-21 23:01:34.676 | INFO | 按时间调起任务:调度队列_1 -2025-01-21 23:01:34.676 | INFO | 添加任务:调度队列_1 -2025-01-21 23:01:34.694 | INFO | 开始任务:调度队列_1 -2025-01-21 23:01:34.699 | ERROR | 未正确配置MAA路径,MAA代理进程中止 -2025-01-21 23:02:57.092 | INFO | 日志记录器初始化完成 -2025-01-21 23:02:57.093 | INFO | 配置类初始化完成 -2025-01-21 23:02:57.093 | INFO | 程序配置管理模块初始化完成 -2025-01-21 23:02:58.668 | INFO | success: str, 更新检查: str, 已是最新版本~: str, 3000: int -2025-01-21 23:03:05.677 | INFO | 按时间调起任务:调度队列_1 -2025-01-21 23:03:05.678 | INFO | 添加任务:调度队列_1 -2025-01-21 23:03:05.701 | INFO | 开始任务:调度队列_1 -2025-01-21 23:03:05.704 | ERROR | 未正确配置MAA路径,MAA代理进程中止 -2025-01-21 23:04:36.314 | INFO | 日志记录器初始化完成 -2025-01-21 23:04:36.315 | INFO | 配置类初始化完成 -2025-01-21 23:04:36.315 | INFO | 程序配置管理模块初始化完成 -2025-01-21 23:04:37.792 | INFO | success: str, 更新检查: str, 已是最新版本~: str, 3000: int -2025-01-21 23:04:44.832 | INFO | 按时间调起任务:调度队列_1 -2025-01-21 23:04:44.832 | INFO | 添加任务:调度队列_1 -2025-01-21 23:04:44.848 | INFO | 开始任务:调度队列_1 -2025-01-21 23:04:44.852 | ERROR | 未正确配置MAA路径,MAA代理进程中止 -2025-01-21 23:08:19.216 | INFO | 日志记录器初始化完成 -2025-01-21 23:08:19.218 | INFO | 配置类初始化完成 -2025-01-21 23:08:19.218 | INFO | 程序配置管理模块初始化完成 -2025-01-21 23:08:20.835 | INFO | success: str, 更新检查: str, 已是最新版本~: str, 3000: int -2025-01-21 23:08:26.850 | INFO | 按时间调起任务:调度队列_1 -2025-01-21 23:08:26.851 | INFO | 添加任务:调度队列_1 -2025-01-21 23:08:26.872 | INFO | 开始任务:调度队列_1 -2025-01-21 23:08:26.876 | ERROR | 未正确配置MAA路径,MAA代理进程中止 -2025-01-21 23:10:30.786 | INFO | 日志记录器初始化完成 -2025-01-21 23:10:30.786 | INFO | 配置类初始化完成 -2025-01-21 23:10:30.787 | INFO | 程序配置管理模块初始化完成 -2025-01-21 23:10:32.373 | INFO | success: str, 更新检查: str, 已是最新版本~: str, 3000: int -2025-01-21 23:10:39.368 | INFO | 按时间调起任务:调度队列_1 -2025-01-21 23:10:39.368 | INFO | 添加任务:调度队列_1 -2025-01-21 23:11:07.648 | INFO | 日志记录器初始化完成 -2025-01-21 23:11:07.649 | INFO | 配置类初始化完成 -2025-01-21 23:11:07.649 | INFO | 程序配置管理模块初始化完成 -2025-01-21 23:11:09.115 | INFO | success: str, 更新检查: str, 已是最新版本~: str, 3000: int -2025-01-21 23:11:14.240 | INFO | 按时间调起任务:调度队列_1 -2025-01-21 23:11:14.240 | INFO | 添加任务:调度队列_1 -2025-01-21 23:11:14.258 | INFO | 开始任务:调度队列_1 -2025-01-21 23:11:14.260 | ERROR | 未正确配置MAA路径,MAA代理进程中止 -2025-01-21 23:11:57.232 | INFO | 日志记录器初始化完成 -2025-01-21 23:11:57.233 | INFO | 配置类初始化完成 -2025-01-21 23:11:57.233 | INFO | 程序配置管理模块初始化完成 -2025-01-21 23:11:58.722 | INFO | success: str, 更新检查: str, 已是最新版本~: str, 3000: int -2025-01-21 23:11:58.754 | INFO | 按时间调起任务:调度队列_1 -2025-01-21 23:11:58.754 | INFO | 添加任务:调度队列_1 -2025-01-21 23:11:58.770 | INFO | 开始任务:调度队列_1 -2025-01-21 23:11:58.772 | ERROR | 未正确配置MAA路径,MAA代理进程中止 -2025-01-21 23:15:37.689 | INFO | 日志记录器初始化完成 -2025-01-21 23:15:37.690 | INFO | 配置类初始化完成 -2025-01-21 23:15:37.690 | INFO | 程序配置管理模块初始化完成 -2025-01-21 23:15:39.243 | INFO | success: str, 更新检查: str, 已是最新版本~: str, 3000: int -2025-01-21 23:15:47.259 | INFO | 按时间调起任务:调度队列_1 -2025-01-21 23:15:47.260 | INFO | 添加任务:调度队列_1 -2025-01-21 23:15:47.275 | INFO | 开始任务:调度队列_1 -2025-01-21 23:15:47.279 | ERROR | 未正确配置MAA路径,MAA代理进程中止 -2025-01-22 11:01:17.938 | INFO | 日志记录器初始化完成 -2025-01-22 11:01:17.941 | INFO | 配置类初始化完成 -2025-01-22 11:01:17.941 | INFO | 程序配置管理模块初始化完成 -2025-01-22 11:01:20.351 | INFO | success: str, 更新检查: str, 已是最新版本~: str, 3000: int -2025-01-22 11:01:38.693 | INFO | 按时间调起任务:调度队列_1 -2025-01-22 11:01:38.694 | INFO | 添加任务:调度队列_1 -2025-01-22 11:01:38.715 | INFO | 开始任务:调度队列_1 -2025-01-22 11:01:38.720 | ERROR | 未正确配置MAA路径,MAA代理进程中止 -2025-01-22 11:02:58.919 | INFO | 日志记录器初始化完成 -2025-01-22 11:02:58.920 | INFO | 配置类初始化完成 -2025-01-22 11:02:58.920 | INFO | 程序配置管理模块初始化完成 -2025-01-22 11:03:00.740 | INFO | success: str, 更新检查: str, 已是最新版本~: str, 3000: int -2025-01-22 11:03:06.552 | INFO | 按时间调起任务:调度队列_1 -2025-01-22 11:03:06.554 | INFO | 添加任务:调度队列_1 -2025-01-22 11:03:06.572 | INFO | 开始任务:调度队列_1 -2025-01-22 11:03:06.575 | INFO | info: str, 开始任务: str, 脚本_1: str, 5000: int -2025-01-22 11:03:06.577 | INFO | self.task_list[name].push_info_bar -2025-01-22 11:03:06.577 | ERROR | 未正确配置MAA路径,MAA代理进程中止 -2025-01-22 12:20:56.979 | INFO | 日志记录器初始化完成 -2025-01-22 12:20:56.980 | INFO | 配置类初始化完成 -2025-01-22 12:20:56.980 | INFO | 程序配置管理模块初始化完成 -2025-01-22 12:20:59.014 | INFO | success: str, 更新检查: str, 已是最新版本~: str, 3000: int -2025-01-22 12:21:09.601 | INFO | 按时间调起任务:调度队列_1 -2025-01-22 12:21:09.602 | INFO | 添加任务:调度队列_1 -2025-01-22 12:21:09.621 | INFO | 开始任务:调度队列_1 -2025-01-22 12:21:09.624 | INFO | self.task.s -2025-01-22 12:21:09.624 | ERROR | 未正确配置MAA路径,MAA代理进程中止 -2025-01-22 12:21:09.625 | INFO | self.task.push_info_bar -2025-01-22 12:21:09.626 | INFO | info: str, 开始任务: str, 脚本_1: str, 5000: int -2025-01-22 12:21:09.628 | INFO | self.task_list[name].push_info_bar -2025-01-22 12:21:34.007 | INFO | 日志记录器初始化完成 -2025-01-22 12:21:34.009 | INFO | 配置类初始化完成 -2025-01-22 12:21:34.009 | INFO | 程序配置管理模块初始化完成 -2025-01-22 12:21:35.674 | INFO | success: str, 更新检查: str, 已是最新版本~: str, 3000: int -2025-01-22 12:21:35.703 | INFO | 按时间调起任务:调度队列_1 -2025-01-22 12:21:35.705 | INFO | 添加任务:调度队列_1 -2025-01-22 12:21:35.724 | INFO | 开始任务:调度队列_1 -2025-01-22 12:21:35.727 | INFO | self.task.s -2025-01-22 12:21:35.727 | ERROR | 未正确配置MAA路径,MAA代理进程中止 -2025-01-22 12:21:35.727 | INFO | self.task.push_info_bar -2025-01-22 12:21:35.730 | INFO | info: str, 开始任务: str, 脚本_1: str, 5000: int -2025-01-22 12:21:35.733 | INFO | self.task_list[name].push_info_bar -2025-01-22 12:23:27.598 | INFO | 日志记录器初始化完成 -2025-01-22 12:23:27.599 | INFO | 配置类初始化完成 -2025-01-22 12:23:27.599 | INFO | 程序配置管理模块初始化完成 -2025-01-22 12:23:29.401 | INFO | success: str, 更新检查: str, 已是最新版本~: str, 3000: int -2025-01-22 12:23:35.206 | INFO | 按时间调起任务:调度队列_1 -2025-01-22 12:23:35.207 | INFO | 添加任务:调度队列_1 -2025-01-22 12:23:35.223 | INFO | 开始任务:调度队列_1 -2025-01-22 12:23:35.226 | ERROR | 未正确配置MAA路径,MAA代理进程中止 -2025-01-22 12:23:35.228 | INFO | info: str, 开始任务: str, 脚本_1: str, 5000: int -2025-01-22 12:23:35.229 | INFO | self.task_list[name].push_info_bar -2025-01-22 12:23:35.231 | INFO | error: str, 启动MAA代理进程失败: str, 您还未正确配置MAA路径!: str, -1: int -2025-01-22 12:23:35.233 | INFO | self.task_list[name].push_info_bar -2025-01-22 12:24:52.168 | INFO | 日志记录器初始化完成 -2025-01-22 12:24:52.168 | INFO | 配置类初始化完成 -2025-01-22 12:24:52.169 | INFO | 程序配置管理模块初始化完成 -2025-01-22 12:24:54.004 | INFO | success: str, 更新检查: str, 已是最新版本~: str, 3000: int -2025-01-22 12:25:02.787 | INFO | 按时间调起任务:调度队列_1 -2025-01-22 12:25:02.788 | INFO | 添加任务:调度队列_1 -2025-01-22 12:25:02.806 | INFO | 开始任务:调度队列_1 -2025-01-22 12:25:02.809 | ERROR | 未正确配置MAA路径,MAA代理进程中止 -2025-01-22 12:25:02.809 | INFO | info: str, 开始任务: str, 脚本_1: str, 5000: int -2025-01-22 12:25:02.813 | INFO | self.task_list[name].push_info_bar -2025-01-22 12:25:02.813 | INFO | error: str, 启动MAA代理进程失败: str, 您还未正确配置MAA路径!: str, -1: int -2025-01-22 12:25:02.815 | INFO | self.task_list[name].push_info_bar -2025-01-22 12:27:34.433 | INFO | 日志记录器初始化完成 -2025-01-22 12:27:34.435 | INFO | 配置类初始化完成 -2025-01-22 12:27:34.435 | INFO | 程序配置管理模块初始化完成 -2025-01-22 12:28:58.036 | INFO | 按时间调起任务:调度队列_1 -2025-01-22 12:28:58.037 | INFO | 添加任务:调度队列_1 -2025-01-22 12:28:58.056 | INFO | 开始任务:调度队列_1 -2025-01-22 13:03:55.260 | INFO | 日志记录器初始化完成 -2025-01-22 13:03:55.261 | INFO | 配置类初始化完成 -2025-01-22 13:03:55.262 | INFO | 程序配置管理模块初始化完成 -2025-01-22 13:04:08.861 | INFO | 按时间调起任务:调度队列_1 -2025-01-22 13:04:08.861 | INFO | 添加任务:调度队列_1 -2025-01-22 13:04:08.881 | INFO | 开始任务:调度队列_1 -2025-01-22 13:05:08.162 | INFO | 日志记录器初始化完成 -2025-01-22 13:05:08.163 | INFO | 配置类初始化完成 -2025-01-22 13:05:08.163 | INFO | 程序配置管理模块初始化完成 -2025-01-22 13:05:14.815 | INFO | 按时间调起任务:调度队列_1 -2025-01-22 13:05:14.815 | INFO | 添加任务:调度队列_1 -2025-01-22 13:05:14.832 | INFO | 开始任务:调度队列_1 -2025-01-22 13:05:14.834 | DEBUG | 用户数据:[['新用户', '等待', 0]] -2025-01-22 13:06:42.031 | INFO | 日志记录器初始化完成 -2025-01-22 13:06:42.032 | INFO | 配置类初始化完成 -2025-01-22 13:06:42.032 | INFO | 程序配置管理模块初始化完成 -2025-01-22 13:06:49.646 | INFO | 按时间调起任务:调度队列_1 -2025-01-22 13:06:49.646 | INFO | 添加任务:调度队列_1 -2025-01-22 13:06:49.667 | INFO | 开始任务:调度队列_1 -2025-01-22 13:06:49.670 | DEBUG | 用户数据:[['新用户', '等待', 0]] -[('新用户', '123', 'Official', -1, 'y', '2000-01-01', '1-7', '-', '-', 'n', 'n', 'n', b'\x01i}Q\xc5\xfb\xf1zD\xb2\xe5\xcc\xbd-\x10\xa4*\x1c\x18\xc7\x8e\xef"\xbe\x00\xce\xa0\x8d\xd4\x82\x86\t\r\x81\x85[d\x98k\xc9X\x04\xd3\xbd8\x03\xd2\x10Fb8+\x86\xbe\xceR\x8e\xa0\xa4H\x9a\x96\x9cR\xd1G|\x9c-\xfa0\x1a\xa5\xf5;\x9a\xc4\x05\x9bhkq\xa5\xd6gNEv\xb3\x82\x16D\xd4T\nG\xf6\x91f^\xe0\xa12s\xfd\xeb\xde\x06\xea\xe7\xd8B\xae\xc5\xd3\x9dK\xc2\x9b\xcec\xb4x\x1e\'1\xcdv\xb7\x9e\x0f\xe5\x92\x98\xa0\x86I*\xde\xfbj~\xf1[\x04+\xc5\x15\x8a\xef\xee\xb5\xdf\t\xbd\x80y\xc15Y\xb7\x11\x13\xdb\xa0?\xdbh\xe9\xe7\x1f\x11\x06^\xd0]\xb8\xa1\xf0\x16h\xa0\xf5AP.OR\xfeLD\x1aC\n\x92+ZY\x9c\x13>\x8c\x96\xdeeiS\x84\xdd\xe2\xfb&\xean\xa9"=\x9aH\xb3t\x0b\x02\x8aX\x199|\xe6\x07\x18\xc0\x03q]\xcel\xd3\xdaV\xe2\xe2\xb0Hb\x88\xea\x8b\xe2\xcf)\xd7\x0c\xa2\xc5\x08', '无', 0, 'simple', 0)] -2025-01-22 16:54:23.442 | INFO | 日志记录器初始化完成 -2025-01-22 16:54:23.444 | INFO | 配置类初始化完成 -2025-01-22 16:54:23.444 | INFO | 程序配置管理模块初始化完成 -2025-01-22 16:55:30.947 | INFO | 日志记录器初始化完成 -2025-01-22 16:55:30.949 | INFO | 配置类初始化完成 -2025-01-22 16:55:30.949 | INFO | 程序配置管理模块初始化完成 -2025-01-22 16:55:45.523 | INFO | 按时间调起任务:调度队列_1 -2025-01-22 16:55:45.523 | INFO | 添加任务:调度队列_1 -2025-01-22 16:55:45.539 | INFO | 开始任务:调度队列_1 -2025-01-22 16:55:45.542 | DEBUG | 用户数据:[['新用户', '等待', 0]] -[['新用户', '123', 'Official', -1, 'y', '2000-01-01', '1-7', '-', '-', 'n', 'n', 'n', b'\x01i}Q\xc5\xfb\xf1zD\xb2\xe5\xcc\xbd-\x10\xa4*\x1c\x18\xc7\x8e\xef"\xbe\x00\xce\xa0\x8d\xd4\x82\x86\t\r\x81\x85[d\x98k\xc9X\x04\xd3\xbd8\x03\xd2\x10Fb8+\x86\xbe\xceR\x8e\xa0\xa4H\x9a\x96\x9cR\xd1G|\x9c-\xfa0\x1a\xa5\xf5;\x9a\xc4\x05\x9bhkq\xa5\xd6gNEv\xb3\x82\x16D\xd4T\nG\xf6\x91f^\xe0\xa12s\xfd\xeb\xde\x06\xea\xe7\xd8B\xae\xc5\xd3\x9dK\xc2\x9b\xcec\xb4x\x1e\'1\xcdv\xb7\x9e\x0f\xe5\x92\x98\xa0\x86I*\xde\xfbj~\xf1[\x04+\xc5\x15\x8a\xef\xee\xb5\xdf\t\xbd\x80y\xc15Y\xb7\x11\x13\xdb\xa0?\xdbh\xe9\xe7\x1f\x11\x06^\xd0]\xb8\xa1\xf0\x16h\xa0\xf5AP.OR\xfeLD\x1aC\n\x92+ZY\x9c\x13>\x8c\x96\xdeeiS\x84\xdd\xe2\xfb&\xean\xa9"=\x9aH\xb3t\x0b\x02\x8aX\x199|\xe6\x07\x18\xc0\x03q]\xcel\xd3\xdaV\xe2\xe2\xb0Hb\x88\xea\x8b\xe2\xcf)\xd7\x0c\xa2\xc5\x08', '无', 0, 'simple', 0]] -2025-01-22 17:30:16.661 | INFO | 日志记录器初始化完成 -2025-01-22 17:30:16.662 | INFO | 配置类初始化完成 -2025-01-22 17:30:16.663 | INFO | 程序配置管理模块初始化完成 -2025-01-22 17:30:25.733 | WARNING | 选择MAA目录时未找到MAA程序或配置文件 -2025-01-22 17:30:31.126 | WARNING | 选择MAA目录时未选择文件夹或未更改文件夹 -2025-01-22 17:30:51.245 | WARNING | 选择MAA目录时未选择文件夹或未更改文件夹 -2025-01-22 17:31:04.200 | WARNING | 选择MAA目录时未选择文件夹或未更改文件夹 -2025-01-22 17:43:38.687 | INFO | 日志记录器初始化完成 -2025-01-22 17:43:38.688 | INFO | 配置类初始化完成 -2025-01-22 17:43:38.688 | INFO | 程序配置管理模块初始化完成 -2025-01-22 17:43:54.876 | DEBUG | D:\程序开发\AUTO_MAA\config\gui.json -2025-01-22 17:43:54.876 | DEBUG | D:\程序开发\AUTO_MAA\MAA.exe -2025-01-22 17:43:54.876 | WARNING | 选择MAA目录时未找到MAA程序或配置文件 -2025-01-22 17:44:06.492 | WARNING | 选择MAA目录时未选择文件夹或未更改文件夹 -2025-01-22 17:44:15.893 | WARNING | 选择MAA目录时未选择文件夹或未更改文件夹 -2025-01-22 17:44:33.005 | DEBUG | D:\程序开发\AUTO_MAA\config\gui.json -2025-01-22 17:44:33.005 | DEBUG | D:\程序开发\AUTO_MAA\MAA.exe -2025-01-22 17:44:33.005 | WARNING | 选择MAA目录时未找到MAA程序或配置文件 -2025-01-22 17:44:51.667 | INFO | 日志记录器初始化完成 -2025-01-22 17:44:51.668 | INFO | 配置类初始化完成 -2025-01-22 17:44:51.669 | INFO | 程序配置管理模块初始化完成 -2025-01-22 17:45:01.352 | WARNING | 选择MAA目录时未选择文件夹或未更改文件夹 -2025-01-22 17:46:06.889 | INFO | 日志记录器初始化完成 -2025-01-22 17:46:06.890 | INFO | 配置类初始化完成 -2025-01-22 17:46:06.890 | INFO | 程序配置管理模块初始化完成 -2025-01-22 17:47:43.139 | INFO | 日志记录器初始化完成 -2025-01-22 17:47:43.140 | INFO | 配置类初始化完成 -2025-01-22 17:47:43.140 | INFO | 程序配置管理模块初始化完成 -2025-01-22 17:47:59.121 | WARNING | 选择MAA目录时未选择文件夹或未更改文件夹 -2025-01-22 17:48:12.205 | INFO | 用户数据库初始化完成 -2025-01-22 17:50:38.393 | INFO | 日志记录器初始化完成 -2025-01-22 17:50:38.394 | INFO | 配置类初始化完成 -2025-01-22 17:50:38.394 | INFO | 程序配置管理模块初始化完成 -2025-01-22 17:50:40.310 | DEBUG | D:/AUTO/MAA -2025-01-22 17:50:41.071 | DEBUG | D:/AUTO/MAA -2025-01-22 17:50:42.066 | DEBUG | D:/AUTO/MAA -2025-01-22 17:50:43.068 | DEBUG | D:/AUTO/MAA -2025-01-22 17:50:44.068 | DEBUG | D:/AUTO/MAA -2025-01-22 17:50:45.069 | DEBUG | D:/AUTO/MAA -2025-01-22 17:50:46.064 | DEBUG | D:/AUTO/MAA -2025-01-22 17:50:47.070 | DEBUG | D:/AUTO/MAA -2025-01-22 17:50:48.071 | DEBUG | D:/AUTO/MAA -2025-01-22 17:50:49.068 | DEBUG | D:/AUTO/MAA -2025-01-22 17:50:50.072 | DEBUG | D:/AUTO/MAA -2025-01-22 17:54:44.088 | INFO | 日志记录器初始化完成 -2025-01-22 17:54:44.089 | INFO | 配置类初始化完成 -2025-01-22 17:54:44.090 | INFO | 程序配置管理模块初始化完成 -2025-01-22 17:54:46.072 | DEBUG | D:/AUTO/MAA -2025-01-22 17:54:46.805 | DEBUG | D:/AUTO/MAA -2025-01-22 17:54:47.804 | DEBUG | D:/AUTO/MAA -2025-01-22 17:54:48.806 | DEBUG | D:/AUTO/MAA -2025-01-22 17:54:49.804 | DEBUG | D:/AUTO/MAA -2025-01-22 17:54:50.804 | DEBUG | D:/AUTO/MAA -2025-01-22 17:54:51.800 | DEBUG | D:/AUTO/MAA -2025-01-22 17:54:52.808 | DEBUG | D:/AUTO/MAA -2025-01-22 17:54:53.804 | DEBUG | D:/AUTO/MAA -2025-01-22 17:54:54.799 | DEBUG | D:/AUTO/MAA -2025-01-22 17:54:55.805 | DEBUG | D:/程序开发/AUTO_MAA -2025-01-22 17:54:56.805 | DEBUG | D:/程序开发/AUTO_MAA -2025-01-22 17:54:57.806 | DEBUG | D:/AUTO/MAA -2025-01-22 17:54:58.808 | DEBUG | D:/程序开发/AUTO_MAA -2025-01-22 17:54:59.806 | DEBUG | D:/程序开发/AUTO_MAA -2025-01-22 17:55:01.189 | DEBUG | D:/程序开发/AUTO_MAA -2025-01-22 17:55:01.804 | DEBUG | D:/程序开发/AUTO_MAA -2025-01-22 17:55:02.807 | DEBUG | D:/程序开发/AUTO_MAA -2025-01-22 17:55:03.803 | DEBUG | D:/程序开发/AUTO_MAA -2025-01-22 17:55:04.805 | DEBUG | D:/程序开发/AUTO_MAA -2025-01-22 17:55:05.096 | WARNING | 选择MAA目录时未选择文件夹或未更改文件夹 -2025-01-22 17:55:05.804 | DEBUG | D:/程序开发/AUTO_MAA -2025-01-22 17:55:06.806 | DEBUG | D:/程序开发/AUTO_MAA -2025-01-22 17:55:07.806 | DEBUG | D:/程序开发/AUTO_MAA -2025-01-22 17:55:08.803 | DEBUG | D:/程序开发/AUTO_MAA -2025-01-22 17:55:09.806 | DEBUG | D:/程序开发/AUTO_MAA -2025-01-22 17:55:10.809 | DEBUG | D:/程序开发/AUTO_MAA -2025-01-22 17:55:11.810 | DEBUG | D:/程序开发/AUTO_MAA -2025-01-22 17:55:12.799 | DEBUG | D:/程序开发/AUTO_MAA -2025-01-22 17:55:13.806 | DEBUG | D:/程序开发/AUTO_MAA -2025-01-22 17:55:14.805 | DEBUG | D:/程序开发/AUTO_MAA -2025-01-22 17:55:15.805 | DEBUG | D:/程序开发/AUTO_MAA -2025-01-22 17:55:16.805 | DEBUG | D:/程序开发/AUTO_MAA -2025-01-22 17:55:17.809 | DEBUG | D:/程序开发/AUTO_MAA -2025-01-22 17:55:18.805 | DEBUG | D:/程序开发/AUTO_MAA -2025-01-22 17:55:19.808 | DEBUG | D:/程序开发/AUTO_MAA -2025-01-22 17:55:20.803 | DEBUG | D:/AUTO/MAA -2025-01-22 17:55:21.805 | DEBUG | D:/AUTO/MAA -2025-01-22 17:55:22.801 | DEBUG | D:/AUTO/MAA -2025-01-22 17:55:23.806 | DEBUG | D:/AUTO/MAA -2025-01-22 17:55:24.799 | DEBUG | D:/AUTO/MAA -2025-01-22 17:55:25.800 | DEBUG | D:/AUTO/MAA -2025-01-22 17:55:26.806 | DEBUG | D:/AUTO/MAA -2025-01-22 17:55:27.804 | DEBUG | D:/AUTO/MAA -2025-01-22 17:55:28.805 | DEBUG | D:/AUTO/MAA -2025-01-22 17:55:29.801 | DEBUG | D:/AUTO/MAA -2025-01-22 17:55:30.813 | DEBUG | D:/AUTO/MAA -2025-01-22 17:55:31.808 | DEBUG | D:/AUTO/MAA -2025-01-22 17:55:32.802 | DEBUG | D:/AUTO/MAA -2025-01-22 17:55:33.805 | DEBUG | D:/AUTO/MAA -2025-01-22 17:55:34.805 | DEBUG | D:/AUTO/MAA -2025-01-22 17:55:35.807 | DEBUG | D:/AUTO/MAA_for_AUTO -2025-01-22 17:55:36.800 | DEBUG | D:/AUTO/MAA_for_AUTO -2025-01-22 17:55:37.802 | DEBUG | D:/AUTO/MAA_for_AUTO -2025-01-22 17:55:38.804 | DEBUG | D:/AUTO/MAA_for_AUTO -2025-01-22 17:55:39.806 | DEBUG | D:/AUTO/MAA_for_AUTO -2025-01-22 17:55:40.802 | DEBUG | D:/AUTO/MAA_for_AUTO -2025-01-22 17:55:41.805 | DEBUG | D:/AUTO/MAA_for_AUTO -2025-01-22 17:55:42.804 | DEBUG | D:/AUTO/MAA_for_AUTO -2025-01-22 17:55:43.799 | DEBUG | D:/AUTO/MAA_for_AUTO -2025-01-22 17:55:44.806 | DEBUG | D:/AUTO/MAA_for_AUTO -2025-01-22 17:55:45.799 | DEBUG | D:/AUTO/MAA_for_AUTO -2025-01-22 17:55:46.805 | DEBUG | D:/AUTO/MAA_for_AUTO -2025-01-22 17:55:47.803 | DEBUG | D:/AUTO/MAA_for_AUTO -2025-01-22 17:55:48.805 | DEBUG | D:/AUTO/MAA_for_AUTO -2025-01-22 17:55:49.804 | DEBUG | D:/AUTO/MAA_for_AUTO -2025-01-22 17:55:50.804 | DEBUG | D:/AUTO/MAA_for_AUTO -2025-01-22 17:55:51.800 | DEBUG | D:/AUTO/MAA -2025-01-22 17:55:52.804 | DEBUG | D:/AUTO/MAA -2025-01-22 17:55:53.804 | DEBUG | D:/AUTO/MAA -2025-01-22 17:56:45.300 | INFO | 日志记录器初始化完成 -2025-01-22 17:56:45.301 | INFO | 配置类初始化完成 -2025-01-22 17:56:45.301 | INFO | 程序配置管理模块初始化完成 -2025-01-22 17:57:09.003 | INFO | 按时间调起任务:调度队列_1 -2025-01-22 17:57:09.004 | INFO | 添加任务:调度队列_1 -2025-01-22 17:57:09.020 | INFO | 开始任务:调度队列_1 -2025-01-22 17:57:09.022 | DEBUG | 用户数据:[['新用户', '等待', 0]] -[['新用户', '123', 'Official', -1, 'y', '2000-01-01', '1-7', '-', '-', 'n', 'n', 'n', b'\x01i}Q\xc5\xfb\xf1zD\xb2\xe5\xcc\xbd-\x10\xa4*\x1c\x18\xc7\x8e\xef"\xbe\x00\xce\xa0\x8d\xd4\x82\x86\t\r\x81\x85[d\x98k\xc9X\x04\xd3\xbd8\x03\xd2\x10Fb8+\x86\xbe\xceR\x8e\xa0\xa4H\x9a\x96\x9cR\xd1G|\x9c-\xfa0\x1a\xa5\xf5;\x9a\xc4\x05\x9bhkq\xa5\xd6gNEv\xb3\x82\x16D\xd4T\nG\xf6\x91f^\xe0\xa12s\xfd\xeb\xde\x06\xea\xe7\xd8B\xae\xc5\xd3\x9dK\xc2\x9b\xcec\xb4x\x1e\'1\xcdv\xb7\x9e\x0f\xe5\x92\x98\xa0\x86I*\xde\xfbj~\xf1[\x04+\xc5\x15\x8a\xef\xee\xb5\xdf\t\xbd\x80y\xc15Y\xb7\x11\x13\xdb\xa0?\xdbh\xe9\xe7\x1f\x11\x06^\xd0]\xb8\xa1\xf0\x16h\xa0\xf5AP.OR\xfeLD\x1aC\n\x92+ZY\x9c\x13>\x8c\x96\xdeeiS\x84\xdd\xe2\xfb&\xean\xa9"=\x9aH\xb3t\x0b\x02\x8aX\x199|\xe6\x07\x18\xc0\x03q]\xcel\xd3\xdaV\xe2\xe2\xb0Hb\x88\xea\x8b\xe2\xcf)\xd7\x0c\xa2\xc5\x08', '无', 0, 'simple', 0]] -2025-01-22 18:08:56.162 | INFO | 日志记录器初始化完成 -2025-01-22 18:08:56.163 | INFO | 配置类初始化完成 -2025-01-22 18:08:56.163 | INFO | 程序配置管理模块初始化完成 -2025-01-22 18:09:08.129 | WARNING | 选择MAA目录时未选择文件夹或未更改文件夹 -2025-01-22 18:10:53.264 | INFO | 日志记录器初始化完成 -2025-01-22 18:10:53.266 | INFO | 配置类初始化完成 -2025-01-22 18:10:53.266 | INFO | 程序配置管理模块初始化完成 -2025-01-22 19:02:57.544 | INFO | 日志记录器初始化完成 -2025-01-22 19:02:57.545 | INFO | 配置类初始化完成 -2025-01-22 19:02:57.545 | INFO | 程序配置管理模块初始化完成 -2025-01-22 19:03:10.241 | INFO | 按时间调起任务:调度队列_1 -2025-01-22 19:03:10.241 | INFO | 添加任务:调度队列_1 -2025-01-22 19:03:10.259 | INFO | 开始任务:调度队列_1 -2025-01-22 19:03:10.266 | DEBUG | 用户数据:[['新用户', '等待', 0]] -[['新用户', '123', 'Official', -1, 'y', '2000-01-01', '1-7', '-', '-', 'n', 'n', 'n', b'\x01i}Q\xc5\xfb\xf1zD\xb2\xe5\xcc\xbd-\x10\xa4*\x1c\x18\xc7\x8e\xef"\xbe\x00\xce\xa0\x8d\xd4\x82\x86\t\r\x81\x85[d\x98k\xc9X\x04\xd3\xbd8\x03\xd2\x10Fb8+\x86\xbe\xceR\x8e\xa0\xa4H\x9a\x96\x9cR\xd1G|\x9c-\xfa0\x1a\xa5\xf5;\x9a\xc4\x05\x9bhkq\xa5\xd6gNEv\xb3\x82\x16D\xd4T\nG\xf6\x91f^\xe0\xa12s\xfd\xeb\xde\x06\xea\xe7\xd8B\xae\xc5\xd3\x9dK\xc2\x9b\xcec\xb4x\x1e\'1\xcdv\xb7\x9e\x0f\xe5\x92\x98\xa0\x86I*\xde\xfbj~\xf1[\x04+\xc5\x15\x8a\xef\xee\xb5\xdf\t\xbd\x80y\xc15Y\xb7\x11\x13\xdb\xa0?\xdbh\xe9\xe7\x1f\x11\x06^\xd0]\xb8\xa1\xf0\x16h\xa0\xf5AP.OR\xfeLD\x1aC\n\x92+ZY\x9c\x13>\x8c\x96\xdeeiS\x84\xdd\xe2\xfb&\xean\xa9"=\x9aH\xb3t\x0b\x02\x8aX\x199|\xe6\x07\x18\xc0\x03q]\xcel\xd3\xdaV\xe2\xe2\xb0Hb\x88\xea\x8b\xe2\xcf)\xd7\x0c\xa2\xc5\x08', '无', 0, 'simple', 0]] -2025-01-22 22:10:23.119 | INFO | 日志记录器初始化完成 -2025-01-22 22:10:23.120 | INFO | 配置类初始化完成 -2025-01-22 22:10:23.120 | INFO | 程序配置管理模块初始化完成 -2025-01-22 22:10:43.975 | INFO | 日志记录器初始化完成 -2025-01-22 22:10:43.976 | INFO | 配置类初始化完成 -2025-01-22 22:10:43.976 | INFO | 程序配置管理模块初始化完成 -2025-01-22 22:15:17.678 | INFO | 日志记录器初始化完成 -2025-01-22 22:15:17.679 | INFO | 配置类初始化完成 -2025-01-22 22:15:17.679 | INFO | 程序配置管理模块初始化完成 -2025-01-22 22:15:57.887 | INFO | 日志记录器初始化完成 -2025-01-22 22:15:57.888 | INFO | 配置类初始化完成 -2025-01-22 22:15:57.888 | INFO | 程序配置管理模块初始化完成 -2025-01-22 22:17:20.781 | INFO | 日志记录器初始化完成 -2025-01-22 22:17:20.782 | INFO | 配置类初始化完成 -2025-01-22 22:17:20.782 | INFO | 程序配置管理模块初始化完成 -2025-01-22 22:18:11.381 | INFO | 日志记录器初始化完成 -2025-01-22 22:18:11.382 | INFO | 配置类初始化完成 -2025-01-22 22:18:11.382 | INFO | 程序配置管理模块初始化完成 -2025-01-22 22:18:54.438 | INFO | 日志记录器初始化完成 -2025-01-22 22:18:54.439 | INFO | 配置类初始化完成 -2025-01-22 22:18:54.439 | INFO | 程序配置管理模块初始化完成 -2025-01-22 22:19:20.261 | INFO | 日志记录器初始化完成 -2025-01-22 22:19:20.264 | INFO | 配置类初始化完成 -2025-01-22 22:19:20.264 | INFO | 程序配置管理模块初始化完成 -2025-01-22 22:19:42.044 | INFO | 日志记录器初始化完成 -2025-01-22 22:19:42.045 | INFO | 配置类初始化完成 -2025-01-22 22:19:42.046 | INFO | 程序配置管理模块初始化完成 -2025-01-22 22:20:10.651 | INFO | 日志记录器初始化完成 -2025-01-22 22:20:10.652 | INFO | 配置类初始化完成 -2025-01-22 22:20:10.652 | INFO | 程序配置管理模块初始化完成 -2025-01-22 22:21:27.056 | INFO | 日志记录器初始化完成 -2025-01-22 22:21:27.057 | INFO | 配置类初始化完成 -2025-01-22 22:21:27.058 | INFO | 程序配置管理模块初始化完成 -2025-01-23 08:54:48.904 | INFO | 日志记录器初始化完成 -2025-01-23 08:54:48.905 | INFO | 配置类初始化完成 -2025-01-23 08:54:48.906 | INFO | 程序配置管理模块初始化完成 -2025-01-23 08:55:05.651 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 08:55:05.651 | INFO | 添加任务:调度队列_1 -2025-01-23 08:55:05.672 | INFO | 开始任务:调度队列_1 -2025-01-23 08:55:05.675 | DEBUG | 用户数据:[['新用户', '等待', 0]] -[['新用户', '123', 'Official', -1, 'y', '2000-01-01', '1-7', '-', '-', 'n', 'n', 'n', b'\x01i}Q\xc5\xfb\xf1zD\xb2\xe5\xcc\xbd-\x10\xa4*\x1c\x18\xc7\x8e\xef"\xbe\x00\xce\xa0\x8d\xd4\x82\x86\t\r\x81\x85[d\x98k\xc9X\x04\xd3\xbd8\x03\xd2\x10Fb8+\x86\xbe\xceR\x8e\xa0\xa4H\x9a\x96\x9cR\xd1G|\x9c-\xfa0\x1a\xa5\xf5;\x9a\xc4\x05\x9bhkq\xa5\xd6gNEv\xb3\x82\x16D\xd4T\nG\xf6\x91f^\xe0\xa12s\xfd\xeb\xde\x06\xea\xe7\xd8B\xae\xc5\xd3\x9dK\xc2\x9b\xcec\xb4x\x1e\'1\xcdv\xb7\x9e\x0f\xe5\x92\x98\xa0\x86I*\xde\xfbj~\xf1[\x04+\xc5\x15\x8a\xef\xee\xb5\xdf\t\xbd\x80y\xc15Y\xb7\x11\x13\xdb\xa0?\xdbh\xe9\xe7\x1f\x11\x06^\xd0]\xb8\xa1\xf0\x16h\xa0\xf5AP.OR\xfeLD\x1aC\n\x92+ZY\x9c\x13>\x8c\x96\xdeeiS\x84\xdd\xe2\xfb&\xean\xa9"=\x9aH\xb3t\x0b\x02\x8aX\x199|\xe6\x07\x18\xc0\x03q]\xcel\xd3\xdaV\xe2\xe2\xb0Hb\x88\xea\x8b\xe2\xcf)\xd7\x0c\xa2\xc5\x08', '无', 0, 'simple', 0]] -2025-01-23 09:42:08.716 | INFO | 日志记录器初始化完成 -2025-01-23 09:42:08.717 | INFO | 配置类初始化完成 -2025-01-23 09:42:08.717 | INFO | 程序配置管理模块初始化完成 -2025-01-23 09:42:31.553 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 09:42:31.553 | INFO | 添加任务:调度队列_1 -2025-01-23 09:42:31.570 | INFO | 开始任务:调度队列_1 -2025-01-23 09:43:49.601 | INFO | 日志记录器初始化完成 -2025-01-23 09:43:49.603 | INFO | 配置类初始化完成 -2025-01-23 09:43:49.603 | INFO | 程序配置管理模块初始化完成 -2025-01-23 09:43:58.254 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 09:43:58.256 | INFO | 添加任务:调度队列_1 -2025-01-23 09:43:58.274 | INFO | 开始任务:调度队列_1 -2025-01-23 10:27:29.663 | INFO | 日志记录器初始化完成 -2025-01-23 10:27:29.665 | INFO | 配置类初始化完成 -2025-01-23 10:27:29.666 | INFO | 程序配置管理模块初始化完成 -2025-01-23 10:27:41.334 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 10:27:41.334 | INFO | 添加任务:调度队列_1 -2025-01-23 10:27:41.350 | INFO | 开始任务:调度队列_1 -2025-01-23 10:30:26.124 | INFO | 日志记录器初始化完成 -2025-01-23 10:30:26.126 | INFO | 配置类初始化完成 -2025-01-23 10:30:26.127 | INFO | 程序配置管理模块初始化完成 -2025-01-23 10:30:34.789 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 10:30:34.789 | INFO | 添加任务:调度队列_1 -2025-01-23 10:30:34.809 | INFO | 开始任务:调度队列_1 -2025-01-23 10:31:55.789 | INFO | 日志记录器初始化完成 -2025-01-23 10:31:55.791 | INFO | 配置类初始化完成 -2025-01-23 10:31:55.791 | INFO | 程序配置管理模块初始化完成 -2025-01-23 10:32:03.447 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 10:32:03.447 | INFO | 添加任务:调度队列_1 -2025-01-23 10:32:03.465 | INFO | 开始任务:调度队列_1 -2025-01-23 10:32:54.721 | INFO | 日志记录器初始化完成 -2025-01-23 10:32:54.722 | INFO | 配置类初始化完成 -2025-01-23 10:32:54.722 | INFO | 程序配置管理模块初始化完成 -2025-01-23 10:32:56.365 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 10:32:56.365 | INFO | 添加任务:调度队列_1 -2025-01-23 10:32:56.383 | INFO | 开始任务:调度队列_1 -2025-01-23 10:33:45.152 | INFO | 日志记录器初始化完成 -2025-01-23 10:33:45.153 | INFO | 配置类初始化完成 -2025-01-23 10:33:45.153 | INFO | 程序配置管理模块初始化完成 -2025-01-23 10:36:51.821 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 10:36:51.821 | INFO | 添加任务:调度队列_1 -2025-01-23 10:36:51.844 | INFO | 开始任务:调度队列_1 -2025-01-23 10:37:36.223 | INFO | 日志记录器初始化完成 -2025-01-23 10:37:36.225 | INFO | 配置类初始化完成 -2025-01-23 10:37:36.225 | INFO | 程序配置管理模块初始化完成 -2025-01-23 10:38:49.974 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 10:38:49.974 | INFO | 添加任务:调度队列_1 -2025-01-23 10:38:50.000 | INFO | 开始任务:调度队列_1 -2025-01-23 10:43:12.539 | INFO | 日志记录器初始化完成 -2025-01-23 10:43:12.539 | INFO | 配置类初始化完成 -2025-01-23 10:43:12.539 | INFO | 程序配置管理模块初始化完成 -2025-01-23 10:43:22.241 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 10:43:22.241 | INFO | 添加任务:调度队列_1 -2025-01-23 10:43:22.265 | INFO | 开始任务:调度队列_1 -2025-01-23 10:43:38.602 | INFO | 日志记录器初始化完成 -2025-01-23 10:43:38.603 | INFO | 配置类初始化完成 -2025-01-23 10:43:38.603 | INFO | 程序配置管理模块初始化完成 -2025-01-23 10:43:40.262 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 10:43:40.262 | INFO | 添加任务:调度队列_1 -2025-01-23 10:43:40.299 | INFO | 开始任务:调度队列_1 -2025-01-23 10:44:21.242 | INFO | 日志记录器初始化完成 -2025-01-23 10:44:21.243 | INFO | 配置类初始化完成 -2025-01-23 10:44:21.244 | INFO | 程序配置管理模块初始化完成 -2025-01-23 10:47:43.823 | INFO | 日志记录器初始化完成 -2025-01-23 10:47:43.823 | INFO | 配置类初始化完成 -2025-01-23 10:47:43.824 | INFO | 程序配置管理模块初始化完成 -2025-01-23 10:49:13.781 | INFO | 日志记录器初始化完成 -2025-01-23 10:49:13.782 | INFO | 配置类初始化完成 -2025-01-23 10:49:13.782 | INFO | 程序配置管理模块初始化完成 -2025-01-23 11:01:46.678 | INFO | 日志记录器初始化完成 -2025-01-23 11:01:46.680 | INFO | 配置类初始化完成 -2025-01-23 11:01:46.680 | INFO | 程序配置管理模块初始化完成 -2025-01-23 11:05:20.961 | INFO | 日志记录器初始化完成 -2025-01-23 11:05:20.962 | INFO | 配置类初始化完成 -2025-01-23 11:05:20.963 | INFO | 程序配置管理模块初始化完成 -2025-01-23 11:06:16.593 | INFO | 日志记录器初始化完成 -2025-01-23 11:06:16.594 | INFO | 配置类初始化完成 -2025-01-23 11:06:16.594 | INFO | 程序配置管理模块初始化完成 -2025-01-23 11:08:24.590 | INFO | 日志记录器初始化完成 -2025-01-23 11:08:24.591 | INFO | 配置类初始化完成 -2025-01-23 11:08:24.591 | INFO | 程序配置管理模块初始化完成 -2025-01-23 11:23:55.424 | INFO | 日志记录器初始化完成 -2025-01-23 11:23:55.424 | INFO | 配置类初始化完成 -2025-01-23 11:23:55.424 | INFO | 程序配置管理模块初始化完成 -2025-01-23 11:24:18.892 | INFO | 日志记录器初始化完成 -2025-01-23 11:24:18.892 | INFO | 配置类初始化完成 -2025-01-23 11:24:18.893 | INFO | 程序配置管理模块初始化完成 -2025-01-23 11:24:33.521 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 11:24:33.522 | INFO | 添加任务:调度队列_1 -2025-01-23 11:24:33.542 | INFO | 开始任务:调度队列_1 -2025-01-23 11:24:57.294 | INFO | 日志记录器初始化完成 -2025-01-23 11:24:57.294 | INFO | 配置类初始化完成 -2025-01-23 11:24:57.294 | INFO | 程序配置管理模块初始化完成 -2025-01-23 11:24:58.897 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 11:24:58.897 | INFO | 添加任务:调度队列_1 -2025-01-23 11:24:58.915 | INFO | 开始任务:调度队列_1 -2025-01-23 11:26:51.602 | INFO | 日志记录器初始化完成 -2025-01-23 11:26:51.603 | INFO | 配置类初始化完成 -2025-01-23 11:26:51.603 | INFO | 程序配置管理模块初始化完成 -2025-01-23 11:27:09.209 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 11:27:09.209 | INFO | 添加任务:调度队列_1 -2025-01-23 11:27:09.226 | INFO | 开始任务:调度队列_1 -2025-01-23 11:37:01.970 | INFO | 日志记录器初始化完成 -2025-01-23 11:37:01.970 | INFO | 配置类初始化完成 -2025-01-23 11:37:01.970 | INFO | 程序配置管理模块初始化完成 -2025-01-23 11:39:13.210 | INFO | 日志记录器初始化完成 -2025-01-23 11:39:13.211 | INFO | 配置类初始化完成 -2025-01-23 11:39:13.212 | INFO | 程序配置管理模块初始化完成 -2025-01-23 11:48:46.980 | INFO | 日志记录器初始化完成 -2025-01-23 11:48:46.980 | INFO | 配置类初始化完成 -2025-01-23 11:48:46.981 | INFO | 程序配置管理模块初始化完成 -2025-01-23 11:48:55.695 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 11:48:55.696 | INFO | 添加任务:调度队列_1 -2025-01-23 11:48:55.721 | INFO | 开始任务:调度队列_1 -2025-01-23 12:11:28.117 | INFO | 日志记录器初始化完成 -2025-01-23 12:11:28.117 | INFO | 配置类初始化完成 -2025-01-23 12:11:28.117 | INFO | 程序配置管理模块初始化完成 -2025-01-23 12:11:56.760 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 12:11:56.760 | INFO | 添加任务:调度队列_1 -2025-01-23 12:11:56.780 | INFO | 开始任务:调度队列_1 -2025-01-23 12:13:28.531 | INFO | 日志记录器初始化完成 -2025-01-23 12:13:28.531 | INFO | 配置类初始化完成 -2025-01-23 12:13:28.531 | INFO | 程序配置管理模块初始化完成 -2025-01-23 12:20:58.160 | INFO | 日志记录器初始化完成 -2025-01-23 12:20:58.160 | INFO | 配置类初始化完成 -2025-01-23 12:20:58.160 | INFO | 程序配置管理模块初始化完成 -2025-01-23 12:20:59.934 | DEBUG | [] -2025-01-23 12:21:00.929 | DEBUG | [] -2025-01-23 12:21:01.927 | DEBUG | [] -2025-01-23 12:21:02.929 | DEBUG | [] -2025-01-23 12:21:03.929 | DEBUG | [] -2025-01-23 12:21:04.929 | DEBUG | [] -2025-01-23 12:21:05.929 | DEBUG | [] -2025-01-23 12:21:06.934 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 12:21:06.934 | INFO | 添加任务:调度队列_1 -2025-01-23 12:21:06.953 | DEBUG | ['调度队列_1'] -2025-01-23 12:21:06.954 | INFO | 开始任务:调度队列_1 -2025-01-23 12:21:07.929 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 12:21:08.938 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 12:21:09.949 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 12:21:10.928 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 12:21:11.929 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 12:21:12.959 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 12:21:13.928 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 12:21:14.928 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 12:21:15.928 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 12:21:16.928 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 12:21:17.926 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 12:21:18.927 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 12:21:19.930 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 12:21:20.927 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 12:33:23.304 | INFO | 日志记录器初始化完成 -2025-01-23 12:33:23.304 | INFO | 配置类初始化完成 -2025-01-23 12:33:23.304 | INFO | 程序配置管理模块初始化完成 -2025-01-23 12:33:24.991 | DEBUG | [] -2025-01-23 12:33:25.989 | DEBUG | [] -2025-01-23 12:33:26.990 | DEBUG | [] -2025-01-23 12:33:27.993 | DEBUG | [] -2025-01-23 12:33:28.996 | DEBUG | [] -2025-01-23 12:33:29.989 | DEBUG | [] -2025-01-23 12:33:30.996 | DEBUG | [] -2025-01-23 12:33:31.993 | DEBUG | [] -2025-01-23 12:33:32.997 | DEBUG | [] -2025-01-23 12:33:33.993 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 12:33:33.993 | INFO | 添加任务:调度队列_1 -2025-01-23 12:33:34.018 | DEBUG | ['调度队列_1'] -2025-01-23 12:33:34.019 | INFO | 开始任务:调度队列_1 -2025-01-23 12:33:34.994 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 12:33:36.015 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 12:33:36.990 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 12:33:37.996 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 12:33:38.991 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 12:33:40.019 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 12:33:40.993 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 12:33:41.708 | INFO | 移除任务:调度队列_1 -2025-01-23 12:37:02.491 | INFO | 日志记录器初始化完成 -2025-01-23 12:37:02.492 | INFO | 配置类初始化完成 -2025-01-23 12:37:02.492 | INFO | 程序配置管理模块初始化完成 -2025-01-23 12:37:04.279 | DEBUG | [] -2025-01-23 12:37:05.272 | DEBUG | [] -2025-01-23 12:37:06.270 | DEBUG | [] -2025-01-23 12:37:07.279 | DEBUG | [] -2025-01-23 12:37:08.271 | DEBUG | [] -2025-01-23 12:37:09.271 | DEBUG | [] -2025-01-23 12:37:10.271 | DEBUG | [] -2025-01-23 12:37:11.270 | DEBUG | [] -2025-01-23 12:37:12.270 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 12:37:12.270 | INFO | 添加任务:调度队列_1 -2025-01-23 12:37:12.290 | DEBUG | ['调度队列_1'] -2025-01-23 12:37:12.294 | INFO | 开始任务:调度队列_1 -2025-01-23 12:37:13.270 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 12:37:14.329 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 12:37:15.183 | INFO | 移除任务:调度队列_1 -2025-01-23 12:43:33.299 | INFO | 日志记录器初始化完成 -2025-01-23 12:43:33.300 | INFO | 配置类初始化完成 -2025-01-23 12:43:33.300 | INFO | 程序配置管理模块初始化完成 -2025-01-23 12:43:34.993 | DEBUG | [] -2025-01-23 12:43:35.995 | DEBUG | [] -2025-01-23 12:43:36.990 | DEBUG | [] -2025-01-23 12:43:37.995 | DEBUG | [] -2025-01-23 12:43:38.997 | DEBUG | [] -2025-01-23 12:43:39.991 | DEBUG | [] -2025-01-23 12:43:40.999 | DEBUG | [] -2025-01-23 12:43:41.993 | DEBUG | [] -2025-01-23 12:43:42.993 | DEBUG | [] -2025-01-23 12:43:43.990 | DEBUG | [] -2025-01-23 12:43:44.991 | DEBUG | [] -2025-01-23 12:43:45.991 | DEBUG | [] -2025-01-23 12:43:46.990 | DEBUG | [] -2025-01-23 12:43:47.991 | DEBUG | [] -2025-01-23 12:43:48.993 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 12:43:48.993 | INFO | 添加任务:调度队列_1 -2025-01-23 12:43:49.024 | DEBUG | ['调度队列_1'] -2025-01-23 12:43:49.027 | INFO | 开始任务:调度队列_1 -2025-01-23 12:43:49.994 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 12:43:51.051 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 12:43:51.990 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 12:43:52.998 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 12:43:53.995 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 12:43:55.038 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 12:43:55.945 | INFO | 移除任务:调度队列_1 -2025-01-23 13:20:16.750 | INFO | 日志记录器初始化完成 -2025-01-23 13:20:16.750 | INFO | 配置类初始化完成 -2025-01-23 13:20:16.750 | INFO | 程序配置管理模块初始化完成 -2025-01-23 13:20:18.490 | DEBUG | [] -2025-01-23 13:20:19.490 | DEBUG | [] -2025-01-23 13:20:20.491 | DEBUG | [] -2025-01-23 13:20:21.490 | DEBUG | [] -2025-01-23 13:20:22.491 | DEBUG | [] -2025-01-23 13:20:23.490 | DEBUG | [] -2025-01-23 13:20:24.491 | DEBUG | [] -2025-01-23 13:20:25.489 | DEBUG | [] -2025-01-23 13:20:26.489 | DEBUG | [] -2025-01-23 13:20:27.491 | DEBUG | [] -2025-01-23 13:20:28.489 | DEBUG | [] -2025-01-23 13:20:29.492 | DEBUG | [] -2025-01-23 13:20:30.489 | DEBUG | [] -2025-01-23 13:20:31.490 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 13:20:31.490 | INFO | 添加任务:调度队列_1 -2025-01-23 13:20:31.522 | DEBUG | ['调度队列_1'] -2025-01-23 13:20:31.524 | INFO | 开始任务:调度队列_1 -2025-01-23 13:20:32.490 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 13:20:33.549 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 13:20:34.497 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 13:20:35.489 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 13:20:36.492 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 13:20:37.490 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 13:20:38.489 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 13:20:39.490 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 13:20:40.518 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 13:20:40.525 | INFO | 添加任务:调度队列_1 -2025-01-23 13:20:40.824 | INFO | 开始任务:调度队列_1 -2025-01-23 13:20:40.827 | DEBUG | ['脚本_2', '调度队列_1'] -2025-01-23 13:20:41.491 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 13:20:41.491 | INFO | 添加任务:调度队列_1 -2025-01-23 13:20:41.516 | DEBUG | ['脚本_2', '调度队列_1'] -2025-01-23 13:20:41.517 | INFO | 开始任务:调度队列_1 -2025-01-23 13:20:42.492 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 13:20:42.492 | INFO | 添加任务:调度队列_1 -2025-01-23 13:20:42.517 | DEBUG | ['脚本_2', '调度队列_1'] -2025-01-23 13:20:42.518 | INFO | 开始任务:调度队列_1 -2025-01-23 13:20:43.655 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 13:20:43.659 | INFO | 添加任务:调度队列_1 -2025-01-23 13:20:43.908 | DEBUG | ['脚本_2', '调度队列_1'] -2025-01-23 13:20:43.910 | INFO | 开始任务:调度队列_1 -2025-01-23 13:20:44.492 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 13:20:44.492 | INFO | 添加任务:调度队列_1 -2025-01-23 13:20:44.515 | DEBUG | ['脚本_2', '调度队列_1'] -2025-01-23 13:20:44.515 | INFO | 开始任务:调度队列_1 -2025-01-23 13:20:45.491 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 13:20:45.493 | INFO | 添加任务:调度队列_1 -2025-01-23 13:20:45.513 | DEBUG | ['脚本_2', '调度队列_1'] -2025-01-23 13:20:45.513 | INFO | 开始任务:调度队列_1 -2025-01-23 13:20:46.532 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 13:20:46.535 | INFO | 添加任务:调度队列_1 -2025-01-23 13:20:46.829 | DEBUG | ['脚本_2', '调度队列_1'] -2025-01-23 13:20:46.830 | INFO | 开始任务:调度队列_1 -2025-01-23 13:20:47.490 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 13:20:47.490 | INFO | 添加任务:调度队列_1 -2025-01-23 13:20:47.516 | DEBUG | ['脚本_2', '调度队列_1'] -2025-01-23 13:20:47.517 | INFO | 开始任务:调度队列_1 -2025-01-23 13:20:48.500 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 13:20:48.500 | INFO | 添加任务:调度队列_1 -2025-01-23 13:20:48.525 | DEBUG | ['脚本_2', '调度队列_1'] -2025-01-23 13:20:48.526 | INFO | 开始任务:调度队列_1 -2025-01-23 13:20:49.521 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 13:20:49.521 | INFO | 添加任务:调度队列_1 -2025-01-23 13:20:49.780 | DEBUG | ['脚本_2', '调度队列_1'] -2025-01-23 13:20:49.781 | INFO | 开始任务:调度队列_1 -2025-01-23 13:20:50.493 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 13:20:50.494 | INFO | 添加任务:调度队列_1 -2025-01-23 13:20:50.515 | DEBUG | ['脚本_2', '调度队列_1'] -2025-01-23 13:20:50.515 | INFO | 开始任务:调度队列_1 -2025-01-23 13:20:51.490 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 13:20:51.492 | INFO | 添加任务:调度队列_1 -2025-01-23 13:20:51.517 | DEBUG | ['脚本_2', '调度队列_1'] -2025-01-23 13:20:51.519 | INFO | 开始任务:调度队列_1 -2025-01-23 13:20:52.542 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 13:20:52.544 | INFO | 添加任务:调度队列_1 -2025-01-23 13:20:52.724 | DEBUG | ['脚本_2', '调度队列_1'] -2025-01-23 13:20:52.725 | INFO | 开始任务:调度队列_1 -2025-01-23 13:20:53.494 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 13:20:53.494 | INFO | 添加任务:调度队列_1 -2025-01-23 13:20:53.519 | DEBUG | ['脚本_2', '调度队列_1'] -2025-01-23 13:20:53.521 | INFO | 开始任务:调度队列_1 -2025-01-23 13:20:54.492 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 13:20:54.492 | INFO | 添加任务:调度队列_1 -2025-01-23 13:20:54.514 | DEBUG | ['脚本_2', '调度队列_1'] -2025-01-23 13:20:54.515 | INFO | 开始任务:调度队列_1 -2025-01-23 13:20:55.529 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 13:20:55.531 | INFO | 添加任务:调度队列_1 -2025-01-23 13:20:55.670 | DEBUG | ['脚本_2', '调度队列_1'] -2025-01-23 13:20:55.670 | INFO | 开始任务:调度队列_1 -2025-01-23 13:20:56.493 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 13:20:56.493 | INFO | 添加任务:调度队列_1 -2025-01-23 13:20:56.515 | DEBUG | ['脚本_2', '调度队列_1'] -2025-01-23 13:20:56.517 | INFO | 开始任务:调度队列_1 -2025-01-23 13:20:57.492 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 13:20:57.492 | INFO | 添加任务:调度队列_1 -2025-01-23 13:20:57.515 | DEBUG | ['脚本_2', '调度队列_1'] -2025-01-23 13:20:57.515 | INFO | 开始任务:调度队列_1 -2025-01-23 13:20:58.527 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 13:20:58.531 | INFO | 添加任务:调度队列_1 -2025-01-23 13:20:58.613 | DEBUG | ['脚本_2', '调度队列_1'] -2025-01-23 13:20:58.614 | INFO | 开始任务:调度队列_1 -2025-01-23 13:20:59.492 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 13:20:59.492 | INFO | 添加任务:调度队列_1 -2025-01-23 13:20:59.512 | DEBUG | ['脚本_2', '调度队列_1'] -2025-01-23 13:20:59.513 | INFO | 开始任务:调度队列_1 -2025-01-23 13:21:00.493 | DEBUG | ['脚本_2'] -2025-01-23 13:21:01.519 | DEBUG | ['脚本_2'] -2025-01-23 13:21:03.235 | DEBUG | ['脚本_2'] -2025-01-23 13:21:03.492 | DEBUG | ['脚本_2'] -2025-01-23 13:21:04.518 | DEBUG | ['脚本_2'] -2025-01-23 13:21:05.490 | DEBUG | ['脚本_2'] -2025-01-23 13:21:06.490 | DEBUG | ['脚本_2'] -2025-01-23 13:52:30.879 | INFO | 日志记录器初始化完成 -2025-01-23 13:52:30.879 | INFO | 配置类初始化完成 -2025-01-23 13:52:30.879 | INFO | 程序配置管理模块初始化完成 -2025-01-23 13:52:32.584 | DEBUG | [] -2025-01-23 13:52:33.588 | DEBUG | [] -2025-01-23 13:52:34.585 | DEBUG | [] -2025-01-23 13:52:35.588 | DEBUG | [] -2025-01-23 13:52:36.588 | DEBUG | [] -2025-01-23 13:52:37.585 | DEBUG | [] -2025-01-23 13:52:38.584 | DEBUG | [] -2025-01-23 13:52:39.592 | DEBUG | [] -2025-01-23 13:52:40.587 | DEBUG | [] -2025-01-23 13:52:41.583 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 13:52:41.584 | INFO | 添加任务:调度队列_1 -2025-01-23 13:52:41.607 | DEBUG | ['调度队列_1'] -2025-01-23 13:52:41.608 | INFO | 开始任务:调度队列_1 -2025-01-23 13:52:42.584 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 13:52:43.609 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 13:52:44.584 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 13:52:45.588 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 13:52:46.589 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 13:52:47.792 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 13:52:48.584 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 13:52:49.589 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 13:52:50.609 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 13:52:51.589 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 13:52:52.591 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 13:52:53.636 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 13:52:54.588 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 13:52:55.587 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 13:52:56.618 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 13:52:57.588 | DEBUG | ['脚本_2'] -2025-01-23 13:52:58.588 | DEBUG | ['脚本_2'] -2025-01-23 13:52:59.618 | DEBUG | ['脚本_2'] -2025-01-23 13:53:00.587 | DEBUG | ['脚本_2'] -2025-01-23 13:53:01.587 | DEBUG | ['脚本_2'] -2025-01-23 13:53:02.591 | DEBUG | ['脚本_2'] -2025-01-23 13:53:03.614 | DEBUG | ['脚本_2'] -2025-01-23 13:53:04.587 | DEBUG | ['脚本_2'] -2025-01-23 13:53:05.586 | DEBUG | ['脚本_2'] -2025-01-23 13:53:06.603 | DEBUG | ['脚本_2'] -2025-01-23 13:53:07.587 | DEBUG | ['脚本_2'] -2025-01-23 13:53:08.594 | DEBUG | ['脚本_2'] -2025-01-23 13:53:09.586 | DEBUG | ['脚本_2'] -2025-01-23 13:53:10.595 | DEBUG | ['脚本_2'] -2025-01-23 13:53:11.586 | DEBUG | ['脚本_2'] -2025-01-23 13:53:12.597 | DEBUG | ['脚本_2'] -2025-01-23 13:53:13.585 | DEBUG | ['脚本_2'] -2025-01-23 13:53:14.612 | DEBUG | ['脚本_2'] -2025-01-23 13:53:15.585 | DEBUG | ['脚本_2'] -2025-01-23 13:53:16.619 | DEBUG | ['脚本_2'] -2025-01-23 13:53:17.590 | DEBUG | ['脚本_2'] -2025-01-23 13:53:18.612 | DEBUG | ['脚本_2'] -2025-01-23 13:53:19.592 | DEBUG | ['脚本_2'] -2025-01-23 13:53:20.592 | DEBUG | ['脚本_2'] -2025-01-23 13:53:21.592 | DEBUG | ['脚本_2'] -2025-01-23 13:53:22.676 | DEBUG | ['脚本_2'] -2025-01-23 13:53:23.587 | DEBUG | ['脚本_2'] -2025-01-23 13:53:24.636 | DEBUG | ['脚本_2'] -2025-01-23 13:53:25.586 | DEBUG | ['脚本_2'] -2025-01-23 13:53:26.611 | DEBUG | ['脚本_2'] -2025-01-23 13:53:27.585 | DEBUG | ['脚本_2'] -2025-01-23 13:53:28.652 | DEBUG | ['脚本_2'] -2025-01-23 13:53:29.587 | DEBUG | ['脚本_2'] -2025-01-23 13:53:30.590 | DEBUG | ['脚本_2'] -2025-01-23 13:53:31.584 | DEBUG | ['脚本_2'] -2025-01-23 13:53:32.610 | DEBUG | ['脚本_2'] -2025-01-23 13:53:33.585 | DEBUG | ['脚本_2'] -2025-01-23 13:53:34.599 | DEBUG | ['脚本_2'] -2025-01-23 13:53:35.584 | DEBUG | ['脚本_2'] -2025-01-23 13:53:36.612 | DEBUG | ['脚本_2'] -2025-01-23 13:53:37.585 | DEBUG | ['脚本_2'] -2025-01-23 13:53:38.624 | DEBUG | ['脚本_2'] -2025-01-23 13:53:39.584 | DEBUG | ['脚本_2'] -2025-01-23 13:53:40.604 | DEBUG | ['脚本_2'] -2025-01-23 13:53:41.602 | DEBUG | ['脚本_2'] -2025-01-23 13:53:42.585 | DEBUG | ['脚本_2'] -2025-01-23 13:53:43.622 | DEBUG | ['脚本_2'] -2025-01-23 13:53:44.589 | DEBUG | ['脚本_2'] -2025-01-23 13:53:45.621 | DEBUG | ['脚本_2'] -2025-01-23 13:53:46.586 | DEBUG | ['脚本_2'] -2025-01-23 13:53:47.620 | DEBUG | ['脚本_2'] -2025-01-23 13:53:48.589 | DEBUG | ['脚本_2'] -2025-01-23 13:53:49.597 | DEBUG | ['脚本_2'] -2025-01-23 13:53:50.584 | DEBUG | ['脚本_2'] -2025-01-23 13:53:51.590 | DEBUG | ['脚本_2'] -2025-01-23 13:53:52.588 | DEBUG | ['脚本_2'] -2025-01-23 13:53:53.630 | DEBUG | ['脚本_2'] -2025-01-23 13:53:54.586 | DEBUG | ['脚本_2'] -2025-01-23 13:53:55.594 | DEBUG | ['脚本_2'] -2025-01-23 13:53:56.584 | DEBUG | ['脚本_2'] -2025-01-23 13:53:57.589 | DEBUG | ['脚本_2'] -2025-01-23 13:53:58.590 | DEBUG | ['脚本_2'] -2025-01-23 13:53:59.588 | DEBUG | ['脚本_2'] -2025-01-23 13:54:00.587 | DEBUG | ['脚本_2'] -2025-01-23 13:54:01.592 | DEBUG | ['脚本_2'] -2025-01-23 13:54:02.584 | DEBUG | ['脚本_2'] -2025-01-23 13:54:03.593 | DEBUG | ['脚本_2'] -2025-01-23 13:54:04.586 | DEBUG | ['脚本_2'] -2025-01-23 13:54:05.595 | DEBUG | ['脚本_2'] -2025-01-23 13:54:06.584 | DEBUG | ['脚本_2'] -2025-01-23 13:54:07.650 | DEBUG | ['脚本_2'] -2025-01-23 13:54:08.588 | DEBUG | ['脚本_2'] -2025-01-23 13:54:09.621 | DEBUG | ['脚本_2'] -2025-01-23 13:54:10.589 | DEBUG | ['脚本_2'] -2025-01-23 13:54:11.609 | DEBUG | ['脚本_2'] -2025-01-23 13:54:12.584 | DEBUG | ['脚本_2'] -2025-01-23 13:54:13.596 | DEBUG | ['脚本_2'] -2025-01-23 13:54:14.594 | DEBUG | ['脚本_2'] -2025-01-23 13:54:15.584 | DEBUG | ['脚本_2'] -2025-01-23 13:54:16.631 | DEBUG | ['脚本_2'] -2025-01-23 13:54:17.589 | DEBUG | ['脚本_2'] -2025-01-23 13:54:18.587 | DEBUG | ['脚本_2'] -2025-01-23 13:54:19.647 | DEBUG | ['脚本_2'] -2025-01-23 13:54:20.588 | DEBUG | ['脚本_2'] -2025-01-23 13:54:21.584 | DEBUG | ['脚本_2'] -2025-01-23 13:54:22.598 | DEBUG | ['脚本_2'] -2025-01-23 13:54:23.590 | DEBUG | ['脚本_2'] -2025-01-23 13:54:24.592 | DEBUG | ['脚本_2'] -2025-01-23 13:54:25.588 | DEBUG | ['脚本_2'] -2025-01-23 13:54:26.594 | DEBUG | ['脚本_2'] -2025-01-23 13:54:27.586 | DEBUG | ['脚本_2'] -2025-01-23 13:54:28.590 | DEBUG | ['脚本_2'] -2025-01-23 13:54:29.587 | DEBUG | ['脚本_2'] -2025-01-23 13:54:30.595 | DEBUG | ['脚本_2'] -2025-01-23 13:54:31.588 | DEBUG | ['脚本_2'] -2025-01-23 13:54:32.614 | DEBUG | ['脚本_2'] -2025-01-23 13:54:33.588 | DEBUG | ['脚本_2'] -2025-01-23 13:54:34.600 | DEBUG | ['脚本_2'] -2025-01-23 13:54:35.586 | DEBUG | ['脚本_2'] -2025-01-23 13:54:36.592 | DEBUG | ['脚本_2'] -2025-01-23 13:54:37.588 | DEBUG | ['脚本_2'] -2025-01-23 13:54:38.589 | DEBUG | ['脚本_2'] -2025-01-23 13:54:39.586 | DEBUG | ['脚本_2'] -2025-01-23 13:54:40.587 | DEBUG | ['脚本_2'] -2025-01-23 13:54:41.584 | DEBUG | ['脚本_2'] -2025-01-23 13:54:42.593 | DEBUG | ['脚本_2'] -2025-01-23 13:54:43.584 | DEBUG | ['脚本_2'] -2025-01-23 13:54:44.603 | DEBUG | ['脚本_2'] -2025-01-23 13:54:45.584 | DEBUG | ['脚本_2'] -2025-01-23 13:54:46.593 | DEBUG | ['脚本_2'] -2025-01-23 13:54:47.587 | DEBUG | ['脚本_2'] -2025-01-23 13:54:48.621 | DEBUG | ['脚本_2'] -2025-01-23 13:54:49.586 | DEBUG | ['脚本_2'] -2025-01-23 13:54:50.591 | DEBUG | ['脚本_2'] -2025-01-23 13:54:51.590 | DEBUG | ['脚本_2'] -2025-01-23 13:54:52.593 | DEBUG | ['脚本_2'] -2025-01-23 13:54:53.588 | DEBUG | ['脚本_2'] -2025-01-23 13:54:54.587 | DEBUG | ['脚本_2'] -2025-01-23 13:54:55.590 | DEBUG | ['脚本_2'] -2025-01-23 13:54:56.586 | DEBUG | ['脚本_2'] -2025-01-23 13:54:57.596 | DEBUG | ['脚本_2'] -2025-01-23 13:54:58.598 | DEBUG | ['脚本_2'] -2025-01-23 13:54:59.590 | DEBUG | ['脚本_2'] -2025-01-23 13:55:00.596 | DEBUG | ['脚本_2'] -2025-01-23 13:55:01.597 | DEBUG | ['脚本_2'] -2025-01-23 13:55:02.586 | DEBUG | ['脚本_2'] -2025-01-23 13:55:03.589 | DEBUG | ['脚本_2'] -2025-01-23 13:55:04.595 | DEBUG | ['脚本_2'] -2025-01-23 13:55:05.585 | DEBUG | ['脚本_2'] -2025-01-23 13:55:06.604 | DEBUG | ['脚本_2'] -2025-01-23 13:55:07.611 | DEBUG | ['脚本_2'] -2025-01-23 13:55:08.591 | DEBUG | ['脚本_2'] -2025-01-23 13:55:09.602 | DEBUG | ['脚本_2'] -2025-01-23 13:55:10.587 | DEBUG | ['脚本_2'] -2025-01-23 13:55:11.601 | DEBUG | ['脚本_2'] -2025-01-23 13:55:12.588 | DEBUG | ['脚本_2'] -2025-01-23 13:55:13.609 | DEBUG | ['脚本_2'] -2025-01-23 15:52:23.200 | INFO | 日志记录器初始化完成 -2025-01-23 15:52:23.200 | INFO | 配置类初始化完成 -2025-01-23 15:52:23.200 | INFO | 程序配置管理模块初始化完成 -2025-01-23 15:52:25.154 | DEBUG | [] -2025-01-23 15:52:26.136 | DEBUG | [] -2025-01-23 15:52:27.131 | DEBUG | [] -2025-01-23 15:52:28.131 | DEBUG | [] -2025-01-23 15:52:29.131 | DEBUG | [] -2025-01-23 15:52:30.131 | DEBUG | [] -2025-01-23 15:52:31.133 | DEBUG | [] -2025-01-23 15:52:32.134 | DEBUG | [] -2025-01-23 15:52:33.133 | DEBUG | [] -2025-01-23 15:52:34.131 | DEBUG | [] -2025-01-23 15:52:35.134 | DEBUG | [] -2025-01-23 15:52:36.135 | DEBUG | [] -2025-01-23 15:52:37.136 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 15:52:37.136 | INFO | 添加任务:调度队列_1 -2025-01-23 15:52:37.163 | DEBUG | ['调度队列_1'] -2025-01-23 15:52:37.165 | INFO | 开始任务:调度队列_1 -2025-01-23 15:52:38.133 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 15:52:39.166 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 15:52:40.137 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 15:52:41.133 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 15:52:42.135 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 15:52:43.160 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 15:52:44.134 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 15:52:45.130 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 15:52:46.179 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 15:52:47.131 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 15:52:47.131 | INFO | 添加任务:调度队列_1 -2025-01-23 15:52:47.151 | DEBUG | ['脚本_2', '调度队列_1'] -2025-01-23 15:52:47.153 | INFO | 开始任务:调度队列_1 -2025-01-23 15:52:48.131 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 15:52:48.131 | INFO | 添加任务:调度队列_1 -2025-01-23 15:52:48.153 | DEBUG | ['脚本_2', '调度队列_1'] -2025-01-23 15:52:48.154 | INFO | 开始任务:调度队列_1 -2025-01-23 15:52:49.155 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 15:52:49.161 | INFO | 添加任务:调度队列_1 -2025-01-23 15:52:49.383 | DEBUG | ['脚本_2', '调度队列_1'] -2025-01-23 15:52:49.384 | INFO | 开始任务:调度队列_1 -2025-01-23 15:52:50.131 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 15:52:50.131 | INFO | 添加任务:调度队列_1 -2025-01-23 15:52:50.154 | DEBUG | ['脚本_2', '调度队列_1'] -2025-01-23 15:52:50.155 | INFO | 开始任务:调度队列_1 -2025-01-23 15:52:51.134 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 15:52:51.134 | INFO | 添加任务:调度队列_1 -2025-01-23 15:52:51.157 | DEBUG | ['脚本_2', '调度队列_1'] -2025-01-23 15:52:51.158 | INFO | 开始任务:调度队列_1 -2025-01-23 15:52:52.185 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 15:52:52.191 | INFO | 添加任务:调度队列_1 -2025-01-23 15:52:52.299 | DEBUG | ['脚本_2', '调度队列_1'] -2025-01-23 15:52:52.299 | INFO | 开始任务:调度队列_1 -2025-01-23 15:52:53.134 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 15:52:53.134 | INFO | 添加任务:调度队列_1 -2025-01-23 15:52:53.156 | DEBUG | ['脚本_2', '调度队列_1'] -2025-01-23 15:52:53.159 | INFO | 开始任务:调度队列_1 -2025-01-23 15:52:54.133 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 15:52:54.133 | INFO | 添加任务:调度队列_1 -2025-01-23 15:52:54.154 | DEBUG | ['脚本_2', '调度队列_1'] -2025-01-23 15:52:54.156 | INFO | 开始任务:调度队列_1 -2025-01-23 15:53:04.253 | INFO | 日志记录器初始化完成 -2025-01-23 15:53:04.253 | INFO | 配置类初始化完成 -2025-01-23 15:53:04.253 | INFO | 程序配置管理模块初始化完成 -2025-01-23 15:53:05.929 | DEBUG | [] -2025-01-23 15:53:06.929 | DEBUG | [] -2025-01-23 15:53:07.928 | DEBUG | [] -2025-01-23 15:53:08.929 | DEBUG | [] -2025-01-23 15:53:09.929 | DEBUG | [] -2025-01-23 15:53:10.928 | DEBUG | [] -2025-01-23 15:53:11.929 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 15:53:11.929 | INFO | 添加任务:调度队列_1 -2025-01-23 15:53:11.953 | DEBUG | ['调度队列_1'] -2025-01-23 15:53:11.954 | INFO | 开始任务:调度队列_1 -2025-01-23 15:53:12.928 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 15:53:14.020 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 15:53:14.928 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 15:53:15.928 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 15:53:16.929 | DEBUG | ['脚本_2'] -2025-01-23 15:53:17.965 | DEBUG | ['脚本_2'] -2025-01-23 15:53:18.929 | DEBUG | ['脚本_2'] -2025-01-23 15:53:19.928 | DEBUG | ['脚本_2'] -2025-01-23 15:53:20.954 | DEBUG | ['脚本_2'] -2025-01-23 15:53:21.927 | DEBUG | ['脚本_2'] -2025-01-23 15:53:22.935 | DEBUG | ['脚本_2'] -2025-01-23 15:55:42.345 | INFO | 日志记录器初始化完成 -2025-01-23 15:55:42.346 | INFO | 配置类初始化完成 -2025-01-23 15:55:42.346 | INFO | 程序配置管理模块初始化完成 -2025-01-23 15:55:44.054 | DEBUG | [] -2025-01-23 15:55:45.057 | DEBUG | [] -2025-01-23 15:55:46.054 | DEBUG | [] -2025-01-23 15:55:47.257 | DEBUG | [] -2025-01-23 15:55:48.055 | DEBUG | [] -2025-01-23 15:55:49.054 | DEBUG | [] -2025-01-23 15:55:50.053 | DEBUG | [] -2025-01-23 15:55:51.055 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 15:55:51.055 | INFO | 添加任务:调度队列_1 -2025-01-23 15:55:51.081 | DEBUG | ['调度队列_1'] -2025-01-23 15:55:51.086 | INFO | 开始任务:调度队列_1 -2025-01-23 15:55:52.058 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 15:55:53.086 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 15:55:54.060 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 15:55:55.054 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 15:55:56.053 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 15:55:57.119 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 15:55:58.059 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 15:55:59.052 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 15:56:00.079 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 15:56:00.558 | INFO | 移除任务:调度队列_1 -2025-01-23 15:56:08.509 | DEBUG | [] -2025-01-23 15:56:09.051 | DEBUG | [] -2025-01-23 15:56:10.056 | DEBUG | [] -2025-01-23 15:56:11.051 | DEBUG | [] -2025-01-23 15:56:12.054 | DEBUG | [] -2025-01-23 15:56:13.056 | DEBUG | [] -2025-01-23 15:56:14.057 | DEBUG | [] -2025-01-23 15:56:15.058 | DEBUG | [] -2025-01-23 15:56:16.055 | DEBUG | [] -2025-01-23 15:56:17.053 | DEBUG | [] -2025-01-23 15:56:18.054 | DEBUG | [] -2025-01-23 15:56:19.057 | DEBUG | [] -2025-01-23 15:56:20.055 | DEBUG | [] -2025-01-23 16:13:23.260 | INFO | 日志记录器初始化完成 -2025-01-23 16:13:23.261 | INFO | 配置类初始化完成 -2025-01-23 16:13:23.261 | INFO | 程序配置管理模块初始化完成 -2025-01-23 16:13:24.921 | DEBUG | [] -2025-01-23 16:13:25.912 | DEBUG | [] -2025-01-23 16:13:26.910 | DEBUG | [] -2025-01-23 16:13:27.912 | DEBUG | [] -2025-01-23 16:13:28.911 | DEBUG | [] -2025-01-23 16:13:29.911 | DEBUG | [] -2025-01-23 16:13:30.911 | DEBUG | [] -2025-01-23 16:13:31.913 | DEBUG | [] -2025-01-23 16:13:32.912 | DEBUG | [] -2025-01-23 16:13:33.913 | DEBUG | [] -2025-01-23 16:13:34.914 | DEBUG | [] -2025-01-23 16:13:35.910 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 16:13:35.911 | INFO | 添加任务:调度队列_1 -2025-01-23 16:13:35.932 | DEBUG | ['调度队列_1'] -2025-01-23 16:13:35.933 | INFO | 开始任务:调度队列_1 -2025-01-23 16:13:36.911 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 16:13:37.910 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 16:13:38.977 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 16:13:39.913 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 16:13:40.912 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 16:13:41.943 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 16:13:42.910 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 16:13:43.911 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 16:13:44.222 | INFO | 移除任务:调度队列_1 -2025-01-23 16:13:51.809 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 16:13:51.809 | INFO | 添加任务:调度队列_1 -2025-01-23 16:13:51.832 | DEBUG | ['调度队列_1'] -2025-01-23 16:13:51.834 | INFO | 开始任务:调度队列_1 -2025-01-23 16:13:52.039 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 16:13:52.043 | INFO | 添加任务:调度队列_1 -2025-01-23 16:13:52.311 | DEBUG | ['脚本_2', '调度队列_1'] -2025-01-23 16:13:52.311 | INFO | 开始任务:调度队列_1 -2025-01-23 16:13:52.914 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 16:13:52.914 | INFO | 添加任务:调度队列_1 -2025-01-23 16:13:52.936 | DEBUG | ['脚本_2', '调度队列_1'] -2025-01-23 16:13:52.937 | INFO | 开始任务:调度队列_1 -2025-01-23 16:13:53.911 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 16:13:53.911 | INFO | 添加任务:调度队列_1 -2025-01-23 16:13:53.932 | DEBUG | ['脚本_2', '调度队列_1'] -2025-01-23 16:13:53.932 | INFO | 开始任务:调度队列_1 -2025-01-23 16:13:54.936 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 16:13:54.938 | INFO | 添加任务:调度队列_1 -2025-01-23 16:13:55.176 | DEBUG | ['脚本_2', '调度队列_1'] -2025-01-23 16:13:55.179 | INFO | 开始任务:调度队列_1 -2025-01-23 16:13:55.913 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 16:13:55.913 | INFO | 添加任务:调度队列_1 -2025-01-23 16:13:55.935 | DEBUG | ['脚本_2', '调度队列_1'] -2025-01-23 16:13:55.935 | INFO | 开始任务:调度队列_1 -2025-01-23 16:13:56.916 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 16:13:56.916 | INFO | 添加任务:调度队列_1 -2025-01-23 16:13:56.939 | DEBUG | ['脚本_2', '调度队列_1'] -2025-01-23 16:13:56.940 | INFO | 开始任务:调度队列_1 -2025-01-23 16:13:58.308 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 16:13:58.308 | INFO | 添加任务:调度队列_1 -2025-01-23 16:13:58.332 | DEBUG | ['脚本_2', '调度队列_1'] -2025-01-23 16:13:58.334 | INFO | 开始任务:调度队列_1 -2025-01-23 16:13:58.915 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 16:13:58.915 | INFO | 添加任务:调度队列_1 -2025-01-23 16:13:58.937 | DEBUG | ['脚本_2', '调度队列_1'] -2025-01-23 16:13:58.938 | INFO | 开始任务:调度队列_1 -2025-01-23 16:13:59.918 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 16:13:59.918 | INFO | 添加任务:调度队列_1 -2025-01-23 16:13:59.938 | DEBUG | ['脚本_2', '调度队列_1'] -2025-01-23 16:13:59.941 | INFO | 开始任务:调度队列_1 -2025-01-23 16:14:00.911 | DEBUG | ['脚本_2'] -2025-01-23 16:14:01.928 | DEBUG | ['脚本_2'] -2025-01-23 16:14:02.911 | DEBUG | ['脚本_2'] -2025-01-23 16:14:03.913 | DEBUG | ['脚本_2'] -2025-01-23 16:14:04.950 | DEBUG | ['脚本_2'] -2025-01-23 16:14:15.714 | INFO | 日志记录器初始化完成 -2025-01-23 16:14:15.714 | INFO | 配置类初始化完成 -2025-01-23 16:14:15.714 | INFO | 程序配置管理模块初始化完成 -2025-01-23 16:14:17.363 | DEBUG | [] -2025-01-23 16:14:18.365 | DEBUG | [] -2025-01-23 16:14:19.366 | DEBUG | [] -2025-01-23 16:14:20.368 | DEBUG | [] -2025-01-23 16:14:21.366 | DEBUG | [] -2025-01-23 16:14:22.369 | DEBUG | [] -2025-01-23 16:14:23.368 | DEBUG | [] -2025-01-23 16:14:24.368 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 16:14:24.368 | INFO | 添加任务:调度队列_1 -2025-01-23 16:14:24.390 | DEBUG | ['调度队列_1'] -2025-01-23 16:14:24.392 | INFO | 开始任务:调度队列_1 -2025-01-23 16:14:25.365 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 16:14:26.371 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 16:14:27.406 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 16:14:28.365 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 16:14:28.810 | INFO | 移除任务:调度队列_1 -2025-01-23 16:14:42.004 | DEBUG | [] -2025-01-23 16:14:42.365 | DEBUG | [] -2025-01-23 16:14:43.364 | DEBUG | [] -2025-01-23 16:14:44.365 | DEBUG | [] -2025-01-23 16:14:45.365 | DEBUG | [] -2025-01-23 16:14:46.365 | DEBUG | [] -2025-01-23 16:14:47.365 | DEBUG | [] -2025-01-23 16:14:48.364 | DEBUG | [] -2025-01-23 16:14:49.366 | DEBUG | [] -2025-01-23 16:14:50.369 | DEBUG | [] -2025-01-23 16:16:38.077 | INFO | 日志记录器初始化完成 -2025-01-23 16:16:38.078 | INFO | 配置类初始化完成 -2025-01-23 16:16:38.078 | INFO | 程序配置管理模块初始化完成 -2025-01-23 16:16:39.708 | DEBUG | [] -2025-01-23 16:16:40.707 | DEBUG | [] -2025-01-23 16:16:41.708 | DEBUG | [] -2025-01-23 16:16:42.707 | DEBUG | [] -2025-01-23 16:16:43.708 | DEBUG | [] -2025-01-23 16:16:44.710 | DEBUG | [] -2025-01-23 16:16:45.708 | DEBUG | [] -2025-01-23 16:16:46.709 | DEBUG | [] -2025-01-23 16:16:47.710 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 16:16:47.711 | INFO | 添加任务:调度队列_1 -2025-01-23 16:16:47.736 | DEBUG | ['调度队列_1'] -2025-01-23 16:16:47.737 | INFO | 开始任务:调度队列_1 -2025-01-23 16:16:48.710 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 16:16:49.710 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 16:16:50.758 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 16:16:51.709 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 16:16:52.708 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 16:16:53.555 | INFO | 移除任务:调度队列_1 -2025-01-23 16:17:06.786 | INFO | {'调度队列_1': } -2025-01-23 16:17:06.808 | DEBUG | [] -2025-01-23 16:17:06.811 | INFO | {'调度队列_1': } -2025-01-23 16:17:07.710 | DEBUG | [] -2025-01-23 16:17:08.710 | DEBUG | [] -2025-01-23 16:17:09.709 | DEBUG | [] -2025-01-23 16:17:10.708 | DEBUG | [] -2025-01-23 16:17:11.709 | DEBUG | [] -2025-01-23 16:17:12.707 | DEBUG | [] -2025-01-23 16:34:38.206 | INFO | 日志记录器初始化完成 -2025-01-23 16:34:38.207 | INFO | 配置类初始化完成 -2025-01-23 16:34:38.207 | INFO | 程序配置管理模块初始化完成 -2025-01-23 16:34:39.858 | DEBUG | [] -2025-01-23 16:34:40.849 | DEBUG | [] -2025-01-23 16:34:41.849 | DEBUG | [] -2025-01-23 16:34:42.850 | DEBUG | [] -2025-01-23 16:34:43.848 | DEBUG | [] -2025-01-23 16:34:44.850 | DEBUG | [] -2025-01-23 16:34:45.853 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 16:34:45.853 | INFO | 添加任务:调度队列_1 -2025-01-23 16:34:45.881 | DEBUG | ['调度队列_1'] -2025-01-23 16:34:45.883 | INFO | 开始任务:调度队列_1 -2025-01-23 16:34:46.849 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 16:34:47.877 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 16:34:49.013 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 16:34:49.849 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 16:34:50.851 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 16:34:51.892 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 16:34:52.850 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 16:34:52.948 | INFO | 移除任务:调度队列_1 -2025-01-23 16:35:00.795 | INFO | {'调度队列_1': } -2025-01-23 16:35:00.852 | DEBUG | [] -2025-01-23 16:35:00.853 | INFO | {'调度队列_1': } -2025-01-23 16:35:01.849 | DEBUG | [] -2025-01-23 16:35:02.849 | DEBUG | [] -2025-01-23 16:35:03.849 | DEBUG | [] -2025-01-23 16:37:10.627 | INFO | 日志记录器初始化完成 -2025-01-23 16:37:10.627 | INFO | 配置类初始化完成 -2025-01-23 16:37:10.628 | INFO | 程序配置管理模块初始化完成 -2025-01-23 16:37:12.257 | DEBUG | [] -2025-01-23 16:37:13.259 | DEBUG | [] -2025-01-23 16:37:14.257 | DEBUG | [] -2025-01-23 16:37:15.257 | DEBUG | [] -2025-01-23 16:37:16.255 | DEBUG | [] -2025-01-23 16:37:17.257 | DEBUG | [] -2025-01-23 16:37:18.257 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 16:37:18.257 | INFO | 添加任务:调度队列_1 -2025-01-23 16:37:18.284 | DEBUG | ['调度队列_1'] -2025-01-23 16:37:18.285 | INFO | 开始任务:调度队列_1 -2025-01-23 16:37:19.256 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 16:37:20.261 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 16:37:21.302 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 16:37:22.121 | INFO | 移除任务:调度队列_1 -2025-01-23 16:37:27.973 | DEBUG | ['调度队列_1'] -2025-01-23 16:37:28.256 | DEBUG | [] -2025-01-23 16:37:29.261 | DEBUG | [] -2025-01-23 16:37:30.256 | DEBUG | [] -2025-01-23 16:37:31.259 | DEBUG | [] -2025-01-23 16:37:32.260 | DEBUG | [] -2025-01-23 16:37:33.256 | DEBUG | [] -2025-01-23 16:37:34.257 | DEBUG | [] -2025-01-23 16:37:35.261 | DEBUG | [] -2025-01-23 16:37:36.259 | DEBUG | [] -2025-01-23 16:37:37.260 | DEBUG | [] -2025-01-23 16:37:38.259 | DEBUG | [] -2025-01-23 16:38:58.079 | INFO | 日志记录器初始化完成 -2025-01-23 16:38:58.079 | INFO | 配置类初始化完成 -2025-01-23 16:38:58.080 | INFO | 程序配置管理模块初始化完成 -2025-01-23 16:38:59.746 | DEBUG | [] -2025-01-23 16:39:00.742 | DEBUG | [] -2025-01-23 16:39:01.750 | DEBUG | [] -2025-01-23 16:39:02.741 | DEBUG | [] -2025-01-23 16:39:03.741 | DEBUG | [] -2025-01-23 16:39:04.741 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 16:39:04.743 | INFO | 添加任务:调度队列_1 -2025-01-23 16:39:04.767 | DEBUG | ['调度队列_1'] -2025-01-23 16:39:04.768 | INFO | 开始任务:调度队列_1 -2025-01-23 16:39:05.740 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 16:39:06.741 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 16:39:07.771 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 16:39:08.144 | INFO | 移除任务:调度队列_1 -2025-01-23 16:39:12.957 | DEBUG | ['调度队列_1'] -2025-01-23 16:39:13.740 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 16:39:13.740 | INFO | 添加任务:调度队列_1 -2025-01-23 16:39:13.761 | DEBUG | ['调度队列_1'] -2025-01-23 16:39:13.762 | INFO | 开始任务:调度队列_1 -2025-01-23 16:39:14.739 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 16:39:15.739 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 16:39:16.775 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 16:39:17.739 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 16:39:18.740 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 16:39:19.770 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 16:39:20.739 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 16:39:21.740 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 16:39:22.739 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 16:39:23.767 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 16:39:24.739 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 16:39:25.739 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 16:39:26.763 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 16:39:27.739 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 18:29:17.183 | INFO | 日志记录器初始化完成 -2025-01-23 18:29:17.183 | INFO | 配置类初始化完成 -2025-01-23 18:29:17.184 | INFO | 程序配置管理模块初始化完成 -2025-01-23 18:29:31.185 | INFO | 日志记录器初始化完成 -2025-01-23 18:29:31.185 | INFO | 配置类初始化完成 -2025-01-23 18:29:31.185 | INFO | 程序配置管理模块初始化完成 -2025-01-23 18:30:37.349 | INFO | 日志记录器初始化完成 -2025-01-23 18:30:37.349 | INFO | 配置类初始化完成 -2025-01-23 18:30:37.350 | INFO | 程序配置管理模块初始化完成 -2025-01-23 18:30:39.000 | DEBUG | [] -2025-01-23 18:30:39.899 | DEBUG | [] -2025-01-23 18:30:40.901 | DEBUG | [] -2025-01-23 18:30:41.906 | DEBUG | [] -2025-01-23 18:30:42.902 | DEBUG | [] -2025-01-23 18:30:43.902 | DEBUG | [] -2025-01-23 18:30:44.903 | DEBUG | [] -2025-01-23 18:30:45.899 | DEBUG | [] -2025-01-23 18:30:46.899 | DEBUG | [] -2025-01-23 18:30:47.917 | DEBUG | [] -2025-01-23 18:30:48.908 | DEBUG | [] -2025-01-23 18:30:49.900 | DEBUG | [] -2025-01-23 18:30:50.902 | DEBUG | [] -2025-01-23 18:30:51.902 | DEBUG | [] -2025-01-23 18:30:52.903 | DEBUG | [] -2025-01-23 18:30:53.900 | DEBUG | [] -2025-01-23 18:30:54.901 | DEBUG | [] -2025-01-23 18:30:55.908 | DEBUG | [] -2025-01-23 18:30:56.899 | DEBUG | [] -2025-01-23 18:30:57.898 | DEBUG | [] -2025-01-23 18:30:58.898 | DEBUG | [] -2025-01-23 18:30:59.901 | DEBUG | [] -2025-01-23 18:31:00.905 | DEBUG | [] -2025-01-23 18:31:01.900 | DEBUG | [] -2025-01-23 18:31:02.901 | DEBUG | [] -2025-01-23 18:31:03.905 | DEBUG | [] -2025-01-23 18:31:04.899 | DEBUG | [] -2025-01-23 18:31:05.901 | DEBUG | [] -2025-01-23 18:31:06.899 | DEBUG | [] -2025-01-23 18:31:07.908 | DEBUG | [] -2025-01-23 18:31:08.900 | DEBUG | [] -2025-01-23 18:31:22.432 | INFO | 日志记录器初始化完成 -2025-01-23 18:31:22.432 | INFO | 配置类初始化完成 -2025-01-23 18:31:22.433 | INFO | 程序配置管理模块初始化完成 -2025-01-23 18:31:24.270 | DEBUG | [] -2025-01-23 18:31:25.103 | DEBUG | [] -2025-01-23 18:31:26.105 | DEBUG | [] -2025-01-23 18:31:27.104 | DEBUG | [] -2025-01-23 18:31:28.144 | DEBUG | [] -2025-01-23 18:31:29.102 | DEBUG | [] -2025-01-23 18:31:30.103 | DEBUG | [] -2025-01-23 18:31:31.102 | DEBUG | [] -2025-01-23 18:31:32.102 | DEBUG | [] -2025-01-23 18:31:33.108 | DEBUG | [] -2025-01-23 18:31:34.102 | DEBUG | [] -2025-01-23 18:31:35.106 | DEBUG | [] -2025-01-23 18:31:36.107 | DEBUG | [] -2025-01-23 18:31:37.102 | DEBUG | [] -2025-01-23 18:31:38.105 | DEBUG | [] -2025-01-23 18:31:39.107 | DEBUG | [] -2025-01-23 18:31:40.108 | DEBUG | [] -2025-01-23 18:31:41.107 | DEBUG | [] -2025-01-23 18:33:24.010 | INFO | 日志记录器初始化完成 -2025-01-23 18:33:24.010 | INFO | 配置类初始化完成 -2025-01-23 18:33:24.010 | INFO | 程序配置管理模块初始化完成 -2025-01-23 18:33:25.798 | DEBUG | [] -2025-01-23 18:33:26.665 | DEBUG | [] -2025-01-23 18:33:27.665 | DEBUG | [] -2025-01-23 18:33:28.666 | DEBUG | [] -2025-01-23 18:45:24.202 | INFO | 日志记录器初始化完成 -2025-01-23 18:45:24.204 | INFO | 配置类初始化完成 -2025-01-23 18:45:24.204 | INFO | 程序配置管理模块初始化完成 -2025-01-23 18:45:26.313 | DEBUG | [] -2025-01-23 18:45:27.119 | DEBUG | [] -2025-01-23 18:45:28.125 | DEBUG | [] -2025-01-23 18:45:29.118 | DEBUG | [] -2025-01-23 18:45:30.160 | DEBUG | [] -2025-01-23 18:45:31.122 | DEBUG | [] -2025-01-23 18:45:32.116 | DEBUG | [] -2025-01-23 18:45:33.118 | DEBUG | [] -2025-01-23 18:45:34.117 | DEBUG | [] -2025-01-23 18:45:35.124 | DEBUG | [] -2025-01-23 18:45:36.123 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 18:45:36.124 | INFO | 添加任务:调度队列_1 -2025-01-23 18:45:36.148 | DEBUG | ['调度队列_1'] -2025-01-23 18:45:36.150 | INFO | 开始任务:调度队列_1 -2025-01-23 18:45:37.117 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 18:45:38.164 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 18:45:39.119 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 18:45:40.121 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 18:45:41.213 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 18:45:41.933 | INFO | 移除任务:调度队列_1 -2025-01-23 18:45:41.938 | INFO | 申请中止本次任务 -2025-01-23 18:45:48.784 | DEBUG | ['调度队列_1'] -2025-01-23 18:45:49.119 | DEBUG | ['调度队列_1'] -2025-01-23 18:45:50.120 | DEBUG | ['调度队列_1'] -2025-01-23 18:45:51.118 | DEBUG | ['调度队列_1'] -2025-01-23 18:45:52.119 | DEBUG | ['调度队列_1'] -2025-01-23 18:45:53.120 | DEBUG | ['调度队列_1'] -2025-01-23 18:45:54.120 | DEBUG | ['调度队列_1'] -2025-01-23 18:45:55.123 | DEBUG | ['调度队列_1'] -2025-01-23 18:45:56.119 | DEBUG | ['调度队列_1'] -2025-01-23 18:46:33.392 | INFO | 日志记录器初始化完成 -2025-01-23 18:46:33.394 | INFO | 配置类初始化完成 -2025-01-23 18:46:33.394 | INFO | 程序配置管理模块初始化完成 -2025-01-23 18:46:35.319 | DEBUG | [] -2025-01-23 18:46:36.089 | DEBUG | [] -2025-01-23 18:46:37.090 | DEBUG | [] -2025-01-23 18:46:38.087 | DEBUG | [] -2025-01-23 18:46:39.090 | DEBUG | [] -2025-01-23 18:46:40.088 | DEBUG | [] -2025-01-23 18:46:41.089 | DEBUG | [] -2025-01-23 18:46:42.090 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 18:46:42.091 | INFO | 添加任务:调度队列_1 -2025-01-23 18:46:42.118 | DEBUG | ['调度队列_1'] -2025-01-23 18:46:42.122 | INFO | 开始任务:调度队列_1 -2025-01-23 18:46:43.089 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 18:46:44.115 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 18:46:45.086 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 18:46:45.640 | INFO | 移除任务:调度队列_1 -2025-01-23 18:46:45.662 | INFO | 申请中止本次任务 -2025-01-23 18:46:56.055 | DEBUG | ['调度队列_1'] -2025-01-23 18:46:56.089 | DEBUG | ['调度队列_1'] -2025-01-23 18:46:57.088 | DEBUG | ['调度队列_1'] -2025-01-23 18:46:58.086 | DEBUG | ['调度队列_1'] -2025-01-23 18:46:59.087 | DEBUG | ['调度队列_1'] -2025-01-23 18:47:00.090 | DEBUG | ['调度队列_1'] -2025-01-23 18:47:01.088 | DEBUG | ['调度队列_1'] -2025-01-23 18:47:02.088 | DEBUG | ['调度队列_1'] -2025-01-23 18:56:03.206 | INFO | 日志记录器初始化完成 -2025-01-23 18:56:03.206 | INFO | 配置类初始化完成 -2025-01-23 18:56:03.206 | INFO | 程序配置管理模块初始化完成 -2025-01-23 18:56:05.157 | DEBUG | [] -2025-01-23 18:56:05.932 | DEBUG | [] -2025-01-23 18:56:06.933 | DEBUG | [] -2025-01-23 18:56:07.935 | DEBUG | [] -2025-01-23 18:56:08.935 | DEBUG | [] -2025-01-23 18:56:09.931 | DEBUG | [] -2025-01-23 18:56:10.935 | DEBUG | [] -2025-01-23 18:56:11.936 | DEBUG | [] -2025-01-23 18:56:12.936 | DEBUG | [] -2025-01-23 18:56:13.930 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 18:56:13.931 | INFO | 添加任务:调度队列_1 -2025-01-23 18:56:13.954 | DEBUG | ['调度队列_1'] -2025-01-23 18:56:13.957 | INFO | 开始任务:调度队列_1 -2025-01-23 18:56:14.933 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 18:56:16.023 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 18:56:16.931 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 18:56:17.936 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 18:56:18.995 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 18:56:19.937 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 18:56:20.931 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 18:56:21.632 | INFO | 移除任务:调度队列_1 -2025-01-23 18:56:21.653 | INFO | 申请中止本次任务 -2025-01-23 18:56:33.734 | DEBUG | ['调度队列_1'] -2025-01-23 18:56:33.933 | DEBUG | ['调度队列_1'] -2025-01-23 18:56:34.929 | DEBUG | ['调度队列_1'] -2025-01-23 18:56:35.933 | DEBUG | ['调度队列_1'] -2025-01-23 18:56:36.932 | DEBUG | ['调度队列_1'] -2025-01-23 18:56:37.930 | DEBUG | ['调度队列_1'] -2025-01-23 18:56:38.932 | DEBUG | ['调度队列_1'] -2025-01-23 18:56:39.929 | DEBUG | ['调度队列_1'] -2025-01-23 18:56:40.930 | DEBUG | ['调度队列_1'] -2025-01-23 18:56:41.931 | DEBUG | ['调度队列_1'] -2025-01-23 18:57:34.358 | INFO | 日志记录器初始化完成 -2025-01-23 18:57:34.359 | INFO | 配置类初始化完成 -2025-01-23 18:57:34.359 | INFO | 程序配置管理模块初始化完成 -2025-01-23 18:57:36.241 | DEBUG | [] -2025-01-23 18:57:37.040 | DEBUG | [] -2025-01-23 18:57:38.043 | DEBUG | [] -2025-01-23 18:57:39.039 | DEBUG | [] -2025-01-23 18:57:40.041 | DEBUG | [] -2025-01-23 18:57:41.045 | INFO | 按时间调起任务:调度队列_1 -2025-01-23 18:57:41.046 | INFO | 添加任务:调度队列_1 -2025-01-23 18:57:41.072 | DEBUG | ['调度队列_1'] -2025-01-23 18:57:41.076 | INFO | 开始任务:调度队列_1 -2025-01-23 18:57:42.040 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 18:57:43.083 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 18:57:44.044 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-23 18:57:44.594 | INFO | 移除任务:调度队列_1 -2025-01-23 18:57:44.615 | INFO | 申请中止本次任务 -2025-01-23 18:57:50.559 | DEBUG | ['调度队列_1'] -2025-01-23 18:57:51.041 | DEBUG | ['调度队列_1'] -2025-01-23 18:57:52.040 | DEBUG | ['调度队列_1'] -2025-01-23 18:57:53.042 | DEBUG | ['调度队列_1'] -2025-01-23 18:57:54.044 | DEBUG | ['调度队列_1'] -2025-01-23 18:57:55.041 | DEBUG | ['调度队列_1'] -2025-01-23 18:57:56.050 | DEBUG | ['调度队列_1'] -2025-01-24 15:10:24.079 | INFO | 日志记录器初始化完成 -2025-01-24 15:10:24.081 | INFO | 配置类初始化完成 -2025-01-24 15:10:24.081 | INFO | 程序配置管理模块初始化完成 -2025-01-24 15:10:25.931 | DEBUG | [] -2025-01-24 15:10:26.840 | DEBUG | [] -2025-01-24 15:10:27.841 | DEBUG | [] -2025-01-24 15:10:28.839 | DEBUG | [] -2025-01-24 15:10:29.840 | DEBUG | [] -2025-01-24 15:10:30.837 | DEBUG | [] -2025-01-24 15:10:31.839 | DEBUG | [] -2025-01-24 15:10:33.046 | DEBUG | [] -2025-01-24 15:10:33.839 | DEBUG | [] -2025-01-24 15:10:34.840 | DEBUG | [] -2025-01-24 15:10:35.839 | DEBUG | [] -2025-01-24 15:10:36.839 | DEBUG | [] -2025-01-24 15:10:37.837 | DEBUG | [] -2025-01-24 15:10:38.836 | DEBUG | [] -2025-01-24 15:10:39.839 | DEBUG | [] -2025-01-24 15:10:40.837 | DEBUG | [] -2025-01-24 15:10:41.837 | DEBUG | [] -2025-01-24 15:10:42.838 | DEBUG | [] -2025-01-24 15:10:43.837 | DEBUG | [] -2025-01-24 15:10:44.836 | DEBUG | [] -2025-01-24 15:10:45.837 | DEBUG | [] -2025-01-24 15:10:46.837 | DEBUG | [] -2025-01-24 15:10:47.836 | DEBUG | [] -2025-01-24 15:10:48.844 | DEBUG | [] -2025-01-24 15:10:49.836 | DEBUG | [] -2025-01-24 15:10:50.836 | DEBUG | [] -2025-01-24 15:10:51.836 | DEBUG | [] -2025-01-24 15:10:52.837 | DEBUG | [] -2025-01-24 15:10:53.837 | DEBUG | [] -2025-01-24 15:10:54.838 | DEBUG | [] -2025-01-24 15:10:55.836 | DEBUG | [] -2025-01-24 15:10:56.837 | DEBUG | [] -2025-01-24 15:10:57.836 | DEBUG | [] -2025-01-24 15:10:58.837 | DEBUG | [] -2025-01-24 15:10:59.836 | DEBUG | [] -2025-01-24 15:11:00.837 | DEBUG | [] -2025-01-24 15:11:01.838 | DEBUG | [] -2025-01-24 15:11:02.837 | DEBUG | [] -2025-01-24 15:11:03.838 | DEBUG | [] -2025-01-24 15:11:04.842 | DEBUG | [] -2025-01-24 15:11:05.837 | DEBUG | [] -2025-01-24 15:11:06.838 | DEBUG | [] -2025-01-24 15:11:07.840 | DEBUG | [] -2025-01-24 15:11:08.844 | DEBUG | [] -2025-01-24 15:11:09.837 | DEBUG | [] -2025-01-24 15:11:10.838 | DEBUG | [] -2025-01-24 15:11:11.837 | DEBUG | [] -2025-01-24 15:11:12.838 | DEBUG | [] -2025-01-24 15:11:13.838 | DEBUG | [] -2025-01-24 15:11:14.844 | DEBUG | [] -2025-01-24 15:11:15.838 | DEBUG | [] -2025-01-24 15:11:16.839 | DEBUG | [] -2025-01-24 15:11:17.840 | DEBUG | [] -2025-01-24 15:11:18.838 | DEBUG | [] -2025-01-24 15:11:19.837 | DEBUG | [] -2025-01-24 15:11:20.836 | DEBUG | [] -2025-01-24 15:11:21.836 | DEBUG | [] -2025-01-24 15:11:22.837 | DEBUG | [] -2025-01-24 15:11:23.837 | DEBUG | [] -2025-01-24 15:11:24.850 | DEBUG | [] -2025-01-24 15:11:25.838 | DEBUG | [] -2025-01-24 15:11:26.836 | DEBUG | [] -2025-01-24 15:11:27.836 | DEBUG | [] -2025-01-24 15:11:28.838 | DEBUG | [] -2025-01-24 15:11:29.836 | DEBUG | [] -2025-01-24 15:11:30.837 | DEBUG | [] -2025-01-24 15:11:31.839 | DEBUG | [] -2025-01-24 15:11:32.837 | DEBUG | [] -2025-01-24 15:11:33.836 | DEBUG | [] -2025-01-24 15:11:34.839 | DEBUG | [] -2025-01-24 15:11:35.836 | DEBUG | [] -2025-01-24 15:11:36.840 | DEBUG | [] -2025-01-24 15:11:37.839 | DEBUG | [] -2025-01-24 15:11:38.839 | DEBUG | [] -2025-01-24 15:11:39.840 | DEBUG | [] -2025-01-24 15:11:40.842 | DEBUG | [] -2025-01-24 15:11:41.840 | DEBUG | [] -2025-01-24 15:11:42.838 | DEBUG | [] -2025-01-24 15:11:43.838 | DEBUG | [] -2025-01-24 15:11:44.839 | DEBUG | [] -2025-01-24 15:11:45.839 | DEBUG | [] -2025-01-24 15:11:46.839 | DEBUG | [] -2025-01-24 15:11:47.837 | DEBUG | [] -2025-01-24 15:11:48.839 | DEBUG | [] -2025-01-24 15:11:49.839 | DEBUG | [] -2025-01-24 15:11:50.838 | DEBUG | [] -2025-01-24 15:11:51.839 | DEBUG | [] -2025-01-24 15:11:52.838 | DEBUG | [] -2025-01-24 15:11:53.838 | DEBUG | [] -2025-01-24 15:11:54.836 | DEBUG | [] -2025-01-24 15:11:55.838 | DEBUG | [] -2025-01-24 15:11:56.838 | DEBUG | [] -2025-01-24 15:11:57.836 | DEBUG | [] -2025-01-24 15:11:58.844 | DEBUG | [] -2025-01-24 15:11:59.836 | DEBUG | [] -2025-01-24 15:12:00.836 | INFO | 按时间调起任务:调度队列_2 -2025-01-24 15:12:00.837 | INFO | 添加任务:调度队列_2 -2025-01-24 15:12:00.860 | DEBUG | ['调度队列_2'] -2025-01-24 15:12:00.862 | INFO | 开始任务:调度队列_2 -2025-01-24 15:12:01.843 | DEBUG | ['调度队列_2'] -2025-01-24 15:12:02.837 | DEBUG | ['调度队列_2'] -2025-01-24 15:12:03.843 | DEBUG | ['调度队列_2'] -2025-01-24 15:12:04.837 | DEBUG | ['调度队列_2'] -2025-01-24 15:12:05.838 | DEBUG | ['调度队列_2'] -2025-01-24 15:12:06.843 | DEBUG | ['调度队列_2'] -2025-01-24 15:12:07.842 | DEBUG | ['调度队列_2'] -2025-01-24 15:12:08.842 | DEBUG | ['调度队列_2'] -2025-01-24 15:12:09.842 | DEBUG | ['调度队列_2'] -2025-01-24 15:12:10.842 | DEBUG | ['调度队列_2'] -2025-01-24 15:12:11.837 | DEBUG | ['调度队列_2'] -2025-01-24 15:12:12.842 | DEBUG | ['调度队列_2'] -2025-01-24 15:12:13.841 | DEBUG | ['调度队列_2'] -2025-01-24 15:12:14.841 | DEBUG | ['调度队列_2'] -2025-01-24 15:12:15.842 | DEBUG | ['调度队列_2'] -2025-01-24 15:12:16.843 | DEBUG | ['调度队列_2'] -2025-01-24 15:12:17.842 | DEBUG | ['调度队列_2'] -2025-01-24 15:12:18.840 | DEBUG | ['调度队列_2'] -2025-01-24 15:12:19.841 | DEBUG | ['调度队列_2'] -2025-01-24 15:12:20.841 | DEBUG | ['调度队列_2'] -2025-01-24 15:12:21.841 | DEBUG | ['调度队列_2'] -2025-01-24 15:12:22.837 | DEBUG | ['调度队列_2'] -2025-01-24 15:12:23.838 | DEBUG | ['调度队列_2'] -2025-01-24 15:12:24.836 | DEBUG | ['调度队列_2'] -2025-01-24 15:12:25.836 | DEBUG | ['调度队列_2'] -2025-01-24 15:12:26.838 | DEBUG | ['调度队列_2'] -2025-01-24 15:12:27.838 | DEBUG | ['调度队列_2'] -2025-01-24 15:12:28.837 | DEBUG | ['调度队列_2'] -2025-01-24 15:12:29.837 | DEBUG | ['调度队列_2'] -2025-01-24 15:12:30.839 | DEBUG | ['调度队列_2'] -2025-01-24 15:12:31.839 | DEBUG | ['调度队列_2'] -2025-01-24 15:12:32.837 | DEBUG | ['调度队列_2'] -2025-01-24 15:12:33.837 | DEBUG | ['调度队列_2'] -2025-01-24 15:12:34.837 | DEBUG | ['调度队列_2'] -2025-01-24 15:12:35.837 | DEBUG | ['调度队列_2'] -2025-01-24 15:12:36.837 | DEBUG | ['调度队列_2'] -2025-01-24 15:12:37.837 | DEBUG | ['调度队列_2'] -2025-01-24 15:12:38.838 | DEBUG | ['调度队列_2'] -2025-01-24 15:12:39.837 | DEBUG | ['调度队列_2'] -2025-01-24 15:12:40.838 | DEBUG | ['调度队列_2'] -2025-01-24 15:12:41.840 | DEBUG | ['调度队列_2'] -2025-01-24 17:18:49.491 | INFO | 日志记录器初始化完成 -2025-01-24 17:18:49.492 | INFO | 配置类初始化完成 -2025-01-24 17:18:49.492 | INFO | 程序配置管理模块初始化完成 -2025-01-24 17:18:51.233 | DEBUG | [] -2025-01-24 17:18:52.182 | DEBUG | [] -2025-01-24 17:18:53.282 | DEBUG | [] -2025-01-24 17:18:54.182 | DEBUG | [] -2025-01-24 17:18:55.179 | DEBUG | [] -2025-01-24 17:18:56.182 | DEBUG | [] -2025-01-24 17:18:57.180 | DEBUG | [] -2025-01-24 17:18:58.182 | DEBUG | [] -2025-01-24 17:18:59.182 | DEBUG | [] -2025-01-24 17:19:00.181 | DEBUG | [] -2025-01-24 17:19:01.182 | DEBUG | [] -2025-01-24 17:19:02.181 | DEBUG | [] -2025-01-24 17:19:03.181 | DEBUG | [] -2025-01-24 17:19:04.180 | INFO | 按时间调起任务:调度队列_1 -2025-01-24 17:19:04.180 | INFO | 任务开始:调度队列_1 -2025-01-24 17:19:04.201 | DEBUG | ['调度队列_1'] -2025-01-24 17:19:04.203 | INFO | 任务开始:脚本_2 -2025-01-24 17:19:05.182 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 17:19:06.181 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 17:19:07.226 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 17:19:08.181 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 17:19:09.181 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 17:19:10.271 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 17:19:11.187 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 17:19:12.182 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 17:19:13.180 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 17:19:14.254 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 17:19:15.181 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 17:19:16.186 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 17:19:17.246 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 17:19:18.182 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 17:19:19.184 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 17:19:20.184 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 17:19:21.239 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 17:19:22.184 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 17:19:23.185 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 17:19:24.275 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 17:19:25.184 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 17:19:26.184 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 17:19:27.183 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 17:19:28.216 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 17:19:29.183 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 17:19:30.183 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 17:19:31.218 | INFO | 按时间调起任务:调度队列_2 -2025-01-24 17:19:31.220 | INFO | 任务开始:调度队列_2 -2025-01-24 17:19:31.305 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2'] -2025-01-24 17:19:31.306 | INFO | 任务开始:脚本_1 -2025-01-24 17:19:31.308 | INFO | 任务完成:脚本_1 -2025-01-24 17:19:31.316 | INFO | 任务结束:调度队列_2 -2025-01-24 17:19:32.183 | INFO | 按时间调起任务:调度队列_2 -2025-01-24 17:19:32.184 | INFO | 任务开始:调度队列_2 -2025-01-24 17:19:32.204 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2'] -2025-01-24 17:19:32.206 | INFO | 任务开始:脚本_1 -2025-01-24 17:19:32.207 | INFO | 任务完成:脚本_1 -2025-01-24 17:19:32.213 | INFO | 任务结束:调度队列_2 -2025-01-24 17:19:33.180 | INFO | 按时间调起任务:调度队列_2 -2025-01-24 17:19:33.181 | INFO | 任务开始:调度队列_2 -2025-01-24 17:19:33.202 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2'] -2025-01-24 17:19:33.203 | INFO | 任务开始:脚本_1 -2025-01-24 17:19:33.204 | INFO | 任务完成:脚本_1 -2025-01-24 17:19:33.211 | INFO | 任务结束:调度队列_2 -2025-01-24 17:19:34.191 | INFO | 按时间调起任务:调度队列_2 -2025-01-24 17:19:34.191 | INFO | 任务开始:调度队列_2 -2025-01-24 17:19:34.210 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2'] -2025-01-24 17:19:34.211 | INFO | 任务开始:脚本_1 -2025-01-24 17:19:34.213 | INFO | 任务完成:脚本_1 -2025-01-24 17:19:34.231 | INFO | 任务结束:调度队列_2 -2025-01-24 17:19:35.213 | INFO | 按时间调起任务:调度队列_2 -2025-01-24 17:19:35.214 | INFO | 任务开始:调度队列_2 -2025-01-24 17:19:35.505 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2'] -2025-01-24 17:19:35.506 | INFO | 任务开始:脚本_1 -2025-01-24 17:19:35.508 | INFO | 任务完成:脚本_1 -2025-01-24 17:19:35.515 | INFO | 任务结束:调度队列_2 -2025-01-24 17:19:36.183 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 17:19:37.183 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 17:19:38.310 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 17:19:39.182 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 17:19:40.182 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 17:19:41.179 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 17:19:42.229 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 17:19:43.015 | INFO | 中止任务:调度队列_1 -2025-01-24 17:19:43.018 | INFO | 申请中止本次任务 -2025-01-24 17:19:45.715 | INFO | 任务完成:脚本_2 -2025-01-24 17:19:45.720 | DEBUG | ['调度队列_1'] -2025-01-24 17:19:45.724 | INFO | 任务结束:调度队列_1 -2025-01-24 17:19:46.181 | INFO | 按时间调起任务:调度队列_1 -2025-01-24 17:19:46.182 | INFO | 任务开始:调度队列_1 -2025-01-24 17:19:46.202 | DEBUG | ['调度队列_1'] -2025-01-24 17:19:46.203 | INFO | 任务开始:脚本_2 -2025-01-24 17:19:47.181 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 17:19:48.502 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 17:19:49.211 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 17:19:50.180 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 17:19:51.181 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 17:19:52.210 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 17:19:53.180 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 17:19:54.180 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 17:19:55.181 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 17:19:56.225 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 17:19:57.181 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 17:19:58.181 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 17:19:59.219 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 17:20:00.181 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 17:20:00.358 | INFO | 中止任务:调度队列_1 -2025-01-24 17:20:00.362 | INFO | 申请中止本次任务 -2025-01-24 17:20:02.567 | INFO | 任务完成:脚本_2 -2025-01-24 17:20:02.569 | DEBUG | ['调度队列_1'] -2025-01-24 17:20:02.574 | INFO | 任务结束:调度队列_1 -2025-01-24 17:20:03.183 | DEBUG | [] -2025-01-24 17:20:04.182 | DEBUG | [] -2025-01-24 17:20:05.180 | DEBUG | [] -2025-01-24 17:20:06.180 | DEBUG | [] -2025-01-24 17:20:07.181 | DEBUG | [] -2025-01-24 17:20:08.181 | DEBUG | [] -2025-01-24 17:20:09.180 | DEBUG | [] -2025-01-24 17:20:10.181 | DEBUG | [] -2025-01-24 17:20:11.181 | DEBUG | [] -2025-01-24 17:20:12.180 | DEBUG | [] -2025-01-24 17:20:13.180 | DEBUG | [] -2025-01-24 17:20:14.182 | DEBUG | [] -2025-01-24 17:20:15.179 | DEBUG | [] -2025-01-24 17:20:16.181 | DEBUG | [] -2025-01-24 17:20:17.183 | DEBUG | [] -2025-01-24 17:20:18.180 | DEBUG | [] -2025-01-24 17:20:19.181 | DEBUG | [] -2025-01-24 17:20:20.181 | DEBUG | [] -2025-01-24 17:20:21.180 | DEBUG | [] -2025-01-24 17:20:22.183 | DEBUG | [] -2025-01-24 17:20:23.182 | DEBUG | [] -2025-01-24 17:20:24.181 | DEBUG | [] -2025-01-24 17:20:25.183 | INFO | 按时间调起任务:调度队列_2 -2025-01-24 17:20:25.183 | INFO | 任务开始:调度队列_2 -2025-01-24 17:20:25.203 | DEBUG | ['调度队列_2'] -2025-01-24 17:20:25.204 | INFO | 任务开始:脚本_1 -2025-01-24 17:20:25.205 | INFO | 任务完成:脚本_1 -2025-01-24 17:20:25.211 | INFO | 任务结束:调度队列_2 -2025-01-24 17:20:26.182 | INFO | 按时间调起任务:调度队列_2 -2025-01-24 17:20:26.183 | INFO | 任务开始:调度队列_2 -2025-01-24 17:20:26.203 | DEBUG | ['调度队列_2'] -2025-01-24 17:20:26.204 | INFO | 任务开始:脚本_1 -2025-01-24 17:20:26.206 | INFO | 任务完成:脚本_1 -2025-01-24 17:20:26.212 | INFO | 任务结束:调度队列_2 -2025-01-24 17:20:27.182 | INFO | 按时间调起任务:调度队列_2 -2025-01-24 17:20:27.182 | INFO | 任务开始:调度队列_2 -2025-01-24 17:20:27.201 | DEBUG | ['调度队列_2'] -2025-01-24 17:20:27.202 | INFO | 任务开始:脚本_1 -2025-01-24 17:20:27.204 | INFO | 任务完成:脚本_1 -2025-01-24 17:20:27.224 | INFO | 任务结束:调度队列_2 -2025-01-24 17:20:28.181 | INFO | 按时间调起任务:调度队列_2 -2025-01-24 17:20:28.181 | INFO | 任务开始:调度队列_2 -2025-01-24 17:20:28.202 | DEBUG | ['调度队列_2'] -2025-01-24 17:20:28.203 | INFO | 任务开始:脚本_1 -2025-01-24 17:20:28.204 | INFO | 任务完成:脚本_1 -2025-01-24 17:20:28.209 | INFO | 任务结束:调度队列_2 -2025-01-24 17:20:29.181 | INFO | 按时间调起任务:调度队列_2 -2025-01-24 17:20:29.182 | INFO | 任务开始:调度队列_2 -2025-01-24 17:20:29.202 | DEBUG | ['调度队列_2'] -2025-01-24 17:20:29.203 | INFO | 任务开始:脚本_1 -2025-01-24 17:20:29.205 | INFO | 任务完成:脚本_1 -2025-01-24 17:20:29.211 | INFO | 任务结束:调度队列_2 -2025-01-24 17:20:30.182 | INFO | 按时间调起任务:调度队列_2 -2025-01-24 17:20:30.183 | INFO | 任务开始:调度队列_2 -2025-01-24 17:20:30.205 | DEBUG | ['调度队列_2'] -2025-01-24 17:20:30.206 | INFO | 任务开始:脚本_1 -2025-01-24 17:20:30.208 | INFO | 任务完成:脚本_1 -2025-01-24 17:20:30.213 | INFO | 任务结束:调度队列_2 -2025-01-24 17:20:31.181 | DEBUG | [] -2025-01-24 17:20:32.182 | DEBUG | [] -2025-01-24 17:26:13.182 | INFO | 日志记录器初始化完成 -2025-01-24 17:26:13.182 | INFO | 配置类初始化完成 -2025-01-24 17:26:13.182 | INFO | 程序配置管理模块初始化完成 -2025-01-24 17:26:14.985 | DEBUG | [] -2025-01-24 17:26:15.963 | DEBUG | [] -2025-01-24 17:26:16.967 | DEBUG | [] -2025-01-24 17:26:17.963 | DEBUG | [] -2025-01-24 17:26:18.962 | DEBUG | [] -2025-01-24 17:26:19.966 | DEBUG | [] -2025-01-24 17:26:20.966 | DEBUG | [] -2025-01-24 17:26:21.964 | DEBUG | [] -2025-01-24 17:26:22.963 | DEBUG | [] -2025-01-24 17:26:23.963 | DEBUG | [] -2025-01-24 17:26:24.962 | DEBUG | [] -2025-01-24 17:26:25.962 | DEBUG | [] -2025-01-24 17:26:26.962 | INFO | 按时间调起任务:调度队列_2 -2025-01-24 17:26:26.962 | INFO | 任务开始:调度队列_2 -2025-01-24 17:26:26.983 | DEBUG | ['调度队列_2'] -2025-01-24 17:26:26.984 | INFO | 任务开始:脚本_1 -2025-01-24 17:26:26.988 | INFO | 任务完成:脚本_1 -2025-01-24 17:26:26.992 | INFO | 任务结束:调度队列_2 -2025-01-24 17:26:27.963 | INFO | 按时间调起任务:调度队列_2 -2025-01-24 17:26:27.963 | INFO | 任务开始:调度队列_2 -2025-01-24 17:26:27.981 | DEBUG | ['调度队列_2'] -2025-01-24 17:26:27.983 | INFO | 任务开始:脚本_1 -2025-01-24 17:26:27.984 | INFO | 任务完成:脚本_1 -2025-01-24 17:26:27.990 | INFO | 任务结束:调度队列_2 -2025-01-24 17:26:28.962 | INFO | 按时间调起任务:调度队列_2 -2025-01-24 17:26:28.963 | INFO | 任务开始:调度队列_2 -2025-01-24 17:26:28.986 | DEBUG | ['调度队列_2'] -2025-01-24 17:26:28.987 | INFO | 任务开始:脚本_1 -2025-01-24 17:26:28.989 | INFO | 任务完成:脚本_1 -2025-01-24 17:26:28.994 | INFO | 任务结束:调度队列_2 -2025-01-24 17:26:29.963 | INFO | 按时间调起任务:调度队列_2 -2025-01-24 17:26:29.963 | INFO | 任务开始:调度队列_2 -2025-01-24 17:26:29.984 | DEBUG | ['调度队列_2'] -2025-01-24 17:26:29.985 | INFO | 任务开始:脚本_1 -2025-01-24 17:26:29.988 | INFO | 任务完成:脚本_1 -2025-01-24 17:26:29.992 | INFO | 任务结束:调度队列_2 -2025-01-24 17:26:30.963 | INFO | 按时间调起任务:调度队列_2 -2025-01-24 17:26:30.964 | INFO | 任务开始:调度队列_2 -2025-01-24 17:26:30.984 | DEBUG | ['调度队列_2'] -2025-01-24 17:26:30.986 | INFO | 任务开始:脚本_1 -2025-01-24 17:26:30.987 | INFO | 任务完成:脚本_1 -2025-01-24 17:26:31.015 | INFO | 任务结束:调度队列_2 -2025-01-24 17:26:31.963 | INFO | 按时间调起任务:调度队列_2 -2025-01-24 17:26:31.964 | INFO | 任务开始:调度队列_2 -2025-01-24 17:26:31.985 | DEBUG | ['调度队列_2'] -2025-01-24 17:26:31.986 | INFO | 任务开始:脚本_1 -2025-01-24 17:26:31.988 | INFO | 任务完成:脚本_1 -2025-01-24 17:26:31.994 | INFO | 任务结束:调度队列_2 -2025-01-24 17:26:32.963 | INFO | 按时间调起任务:调度队列_2 -2025-01-24 17:26:32.963 | INFO | 任务开始:调度队列_2 -2025-01-24 17:26:32.987 | DEBUG | ['调度队列_2'] -2025-01-24 17:26:32.989 | INFO | 任务开始:脚本_1 -2025-01-24 17:26:32.991 | INFO | 任务完成:脚本_1 -2025-01-24 17:26:32.998 | INFO | 任务结束:调度队列_2 -2025-01-24 17:26:33.962 | INFO | 按时间调起任务:调度队列_2 -2025-01-24 17:26:33.963 | INFO | 任务开始:调度队列_2 -2025-01-24 17:26:33.983 | DEBUG | ['调度队列_2'] -2025-01-24 17:26:33.985 | INFO | 任务开始:脚本_1 -2025-01-24 17:26:33.987 | INFO | 任务完成:脚本_1 -2025-01-24 17:26:33.992 | INFO | 任务结束:调度队列_2 -2025-01-24 17:26:34.968 | INFO | 按时间调起任务:调度队列_2 -2025-01-24 17:26:34.969 | INFO | 任务开始:调度队列_2 -2025-01-24 17:26:34.989 | DEBUG | ['调度队列_2'] -2025-01-24 17:26:34.990 | INFO | 任务开始:脚本_1 -2025-01-24 17:26:34.992 | INFO | 任务完成:脚本_1 -2025-01-24 17:26:35.000 | INFO | 任务结束:调度队列_2 -2025-01-24 17:26:35.965 | INFO | 按时间调起任务:调度队列_2 -2025-01-24 17:26:35.965 | INFO | 任务开始:调度队列_2 -2025-01-24 17:26:35.984 | DEBUG | ['调度队列_2'] -2025-01-24 17:26:35.986 | INFO | 任务开始:脚本_1 -2025-01-24 17:26:35.988 | INFO | 任务完成:脚本_1 -2025-01-24 17:26:36.013 | INFO | 任务结束:调度队列_2 -2025-01-24 17:26:36.963 | INFO | 按时间调起任务:调度队列_2 -2025-01-24 17:26:36.963 | INFO | 任务开始:调度队列_2 -2025-01-24 17:26:36.991 | DEBUG | ['调度队列_2'] -2025-01-24 17:26:36.993 | INFO | 任务开始:脚本_1 -2025-01-24 17:26:36.994 | INFO | 任务完成:脚本_1 -2025-01-24 17:26:37.006 | INFO | 任务结束:调度队列_2 -2025-01-24 17:26:37.968 | INFO | 按时间调起任务:调度队列_2 -2025-01-24 17:26:37.969 | INFO | 任务开始:调度队列_2 -2025-01-24 17:26:37.991 | DEBUG | ['调度队列_2'] -2025-01-24 17:26:37.993 | INFO | 任务开始:脚本_1 -2025-01-24 17:26:37.998 | INFO | 任务完成:脚本_1 -2025-01-24 17:26:38.005 | INFO | 任务结束:调度队列_2 -2025-01-24 17:26:38.964 | INFO | 按时间调起任务:调度队列_2 -2025-01-24 17:26:38.964 | INFO | 任务开始:调度队列_2 -2025-01-24 17:26:38.983 | DEBUG | ['调度队列_2'] -2025-01-24 17:26:38.985 | INFO | 任务开始:脚本_1 -2025-01-24 17:26:38.988 | INFO | 任务完成:脚本_1 -2025-01-24 17:26:39.018 | INFO | 任务结束:调度队列_2 -2025-01-24 17:26:39.963 | INFO | 按时间调起任务:调度队列_2 -2025-01-24 17:26:39.963 | INFO | 任务开始:调度队列_2 -2025-01-24 17:26:39.988 | DEBUG | ['调度队列_2'] -2025-01-24 17:26:39.989 | INFO | 任务开始:脚本_1 -2025-01-24 17:26:39.991 | INFO | 任务完成:脚本_1 -2025-01-24 17:26:40.011 | INFO | 任务结束:调度队列_2 -2025-01-24 17:26:40.967 | INFO | 按时间调起任务:调度队列_2 -2025-01-24 17:26:40.968 | INFO | 任务开始:调度队列_2 -2025-01-24 17:26:40.990 | DEBUG | ['调度队列_2'] -2025-01-24 17:26:40.992 | INFO | 任务开始:脚本_1 -2025-01-24 17:26:40.993 | INFO | 任务完成:脚本_1 -2025-01-24 17:26:41.003 | INFO | 任务结束:调度队列_2 -2025-01-24 17:26:41.967 | DEBUG | [] -2025-01-24 17:26:42.967 | DEBUG | [] -2025-01-24 17:26:43.964 | DEBUG | [] -2025-01-24 17:26:44.962 | DEBUG | [] -2025-01-24 17:26:45.961 | DEBUG | [] -2025-01-24 17:26:46.966 | DEBUG | [] -2025-01-24 17:27:42.978 | INFO | 日志记录器初始化完成 -2025-01-24 17:27:42.979 | INFO | 配置类初始化完成 -2025-01-24 17:27:42.979 | INFO | 程序配置管理模块初始化完成 -2025-01-24 17:27:44.715 | DEBUG | [] -2025-01-24 17:27:45.713 | DEBUG | [] -2025-01-24 17:27:46.711 | DEBUG | [] -2025-01-24 17:27:47.711 | DEBUG | [] -2025-01-24 17:27:48.711 | DEBUG | [] -2025-01-24 17:27:49.713 | DEBUG | [] -2025-01-24 17:27:50.712 | DEBUG | [] -2025-01-24 17:27:51.713 | INFO | 按时间调起任务:调度队列_2 -2025-01-24 17:27:51.713 | DEBUG | 当前时间:2025-01-24 17:27, 历史时间:2025-01-24 17:26:40 -2025-01-24 17:27:51.713 | INFO | 任务开始:调度队列_2 -2025-01-24 17:27:51.739 | DEBUG | ['调度队列_2'] -2025-01-24 17:27:51.741 | INFO | 任务开始:脚本_1 -2025-01-24 17:27:51.743 | INFO | 任务完成:脚本_1 -2025-01-24 17:27:51.751 | INFO | 任务结束:调度队列_2 -2025-01-24 17:27:52.712 | INFO | 按时间调起任务:调度队列_2 -2025-01-24 17:27:52.713 | DEBUG | 当前时间:2025-01-24 17:27, 历史时间:2025-01-24 17:27:51 -2025-01-24 17:27:52.713 | INFO | 任务开始:调度队列_2 -2025-01-24 17:27:52.732 | DEBUG | ['调度队列_2'] -2025-01-24 17:27:52.733 | INFO | 任务开始:脚本_1 -2025-01-24 17:27:52.734 | INFO | 任务完成:脚本_1 -2025-01-24 17:27:52.741 | INFO | 任务结束:调度队列_2 -2025-01-24 17:27:53.713 | INFO | 按时间调起任务:调度队列_2 -2025-01-24 17:27:53.713 | DEBUG | 当前时间:2025-01-24 17:27, 历史时间:2025-01-24 17:27:52 -2025-01-24 17:27:53.713 | INFO | 任务开始:调度队列_2 -2025-01-24 17:27:53.733 | DEBUG | ['调度队列_2'] -2025-01-24 17:27:53.736 | INFO | 任务开始:脚本_1 -2025-01-24 17:27:53.737 | INFO | 任务完成:脚本_1 -2025-01-24 17:27:53.742 | INFO | 任务结束:调度队列_2 -2025-01-24 17:27:54.711 | DEBUG | [] -2025-01-24 17:27:55.712 | DEBUG | [] -2025-01-24 17:27:56.712 | DEBUG | [] -2025-01-24 17:27:57.717 | DEBUG | [] -2025-01-24 17:27:58.714 | DEBUG | [] -2025-01-24 17:27:59.713 | DEBUG | [] -2025-01-24 17:28:00.713 | DEBUG | [] -2025-01-24 17:28:01.713 | DEBUG | [] -2025-01-24 17:28:02.713 | DEBUG | [] -2025-01-24 17:28:03.712 | DEBUG | [] -2025-01-24 17:28:04.713 | DEBUG | [] -2025-01-24 17:28:05.713 | DEBUG | [] -2025-01-24 17:31:12.067 | INFO | 日志记录器初始化完成 -2025-01-24 17:31:12.067 | INFO | 配置类初始化完成 -2025-01-24 17:31:12.067 | INFO | 程序配置管理模块初始化完成 -2025-01-24 17:31:13.697 | DEBUG | [] -2025-01-24 17:31:14.697 | DEBUG | [] -2025-01-24 17:31:15.696 | DEBUG | [] -2025-01-24 17:31:17.094 | DEBUG | [] -2025-01-24 17:31:17.697 | DEBUG | [] -2025-01-24 17:31:18.696 | DEBUG | [] -2025-01-24 17:31:19.696 | DEBUG | [] -2025-01-24 17:31:20.700 | DEBUG | [] -2025-01-24 17:31:21.702 | DEBUG | [] -2025-01-24 17:31:22.701 | DEBUG | [] -2025-01-24 17:31:23.702 | DEBUG | [] -2025-01-24 17:31:24.698 | INFO | 按时间调起任务:调度队列_2 -2025-01-24 17:31:24.698 | DEBUG | 当前时间:2025-01-24 17:31, 历史时间:2025-01-24 17:27:53 -2025-01-24 17:31:24.698 | INFO | 任务开始:调度队列_2 -2025-01-24 17:31:24.721 | DEBUG | ['调度队列_2'] -2025-01-24 17:31:24.722 | INFO | 任务开始:脚本_1 -2025-01-24 17:31:24.723 | INFO | 任务完成:脚本_1 -2025-01-24 17:31:24.729 | INFO | 任务结束:调度队列_2 -2025-01-24 17:31:25.700 | DEBUG | [] -2025-01-24 17:31:26.702 | DEBUG | [] -2025-01-24 17:31:27.699 | DEBUG | [] -2025-01-24 17:31:28.700 | DEBUG | [] -2025-01-24 17:31:29.701 | DEBUG | [] -2025-01-24 17:31:30.701 | DEBUG | [] -2025-01-24 17:31:31.700 | DEBUG | [] -2025-01-24 17:31:32.700 | DEBUG | [] -2025-01-24 17:31:33.699 | DEBUG | [] -2025-01-24 17:31:34.701 | DEBUG | [] -2025-01-24 17:31:35.699 | DEBUG | [] -2025-01-24 17:31:36.700 | DEBUG | [] -2025-01-24 17:31:37.700 | DEBUG | [] -2025-01-24 17:31:38.699 | DEBUG | [] -2025-01-24 17:31:39.699 | DEBUG | [] -2025-01-24 17:31:40.699 | DEBUG | [] -2025-01-24 17:31:41.699 | DEBUG | [] -2025-01-24 17:31:42.699 | DEBUG | [] -2025-01-24 17:31:43.699 | DEBUG | [] -2025-01-24 17:31:44.698 | DEBUG | [] -2025-01-24 17:31:45.699 | DEBUG | [] -2025-01-24 17:31:46.697 | DEBUG | [] -2025-01-24 17:31:47.697 | DEBUG | [] -2025-01-24 17:31:48.696 | DEBUG | [] -2025-01-24 17:31:49.697 | DEBUG | [] -2025-01-24 17:34:16.301 | INFO | 日志记录器初始化完成 -2025-01-24 17:34:16.301 | INFO | 配置类初始化完成 -2025-01-24 17:34:16.301 | INFO | 程序配置管理模块初始化完成 -2025-01-24 17:34:18.097 | DEBUG | [] -2025-01-24 17:34:18.962 | DEBUG | [] -2025-01-24 17:34:19.961 | DEBUG | [] -2025-01-24 17:34:20.962 | DEBUG | [] -2025-01-24 17:34:21.962 | DEBUG | [] -2025-01-24 17:34:22.963 | DEBUG | [] -2025-01-24 17:34:23.962 | DEBUG | [] -2025-01-24 17:34:24.976 | DEBUG | [] -2025-01-24 17:34:25.962 | DEBUG | [] -2025-01-24 17:34:26.961 | DEBUG | [] -2025-01-24 17:34:27.962 | DEBUG | [] -2025-01-24 17:34:28.963 | DEBUG | [] -2025-01-24 17:34:29.962 | DEBUG | [] -2025-01-24 17:34:30.962 | DEBUG | [] -2025-01-24 17:34:31.962 | DEBUG | [] -2025-01-24 17:34:32.961 | DEBUG | [] -2025-01-24 17:34:33.961 | DEBUG | [] -2025-01-24 17:34:34.962 | DEBUG | [] -2025-01-24 17:34:35.962 | DEBUG | [] -2025-01-24 17:34:36.962 | DEBUG | [] -2025-01-24 17:34:37.963 | DEBUG | [] -2025-01-24 17:34:38.964 | DEBUG | [] -2025-01-24 17:34:39.964 | DEBUG | [] -2025-01-24 17:34:40.962 | DEBUG | [] -2025-01-24 17:34:41.972 | DEBUG | [] -2025-01-24 17:34:42.961 | DEBUG | [] -2025-01-24 17:34:43.961 | DEBUG | [] -2025-01-24 17:34:44.962 | DEBUG | [] -2025-01-24 17:34:45.962 | DEBUG | [] -2025-01-24 17:34:46.963 | DEBUG | [] -2025-01-24 17:34:47.962 | DEBUG | [] -2025-01-24 17:34:48.963 | DEBUG | [] -2025-01-24 17:34:49.962 | DEBUG | [] -2025-01-24 17:34:50.964 | DEBUG | [] -2025-01-24 17:34:51.963 | DEBUG | [] -2025-01-24 17:34:52.963 | DEBUG | [] -2025-01-24 17:34:53.963 | DEBUG | [] -2025-01-24 17:34:54.962 | DEBUG | [] -2025-01-24 17:34:55.963 | DEBUG | [] -2025-01-24 17:34:56.961 | DEBUG | [] -2025-01-24 17:34:57.963 | DEBUG | [] -2025-01-24 17:34:58.963 | DEBUG | [] -2025-01-24 17:34:59.963 | DEBUG | [] -2025-01-24 17:35:00.962 | DEBUG | [] -2025-01-24 17:35:01.962 | DEBUG | [] -2025-01-24 17:35:02.962 | DEBUG | [] -2025-01-24 17:35:03.962 | DEBUG | [] -2025-01-24 17:35:04.962 | DEBUG | [] -2025-01-24 17:35:05.963 | DEBUG | [] -2025-01-24 17:35:06.962 | DEBUG | [] -2025-01-24 17:35:07.962 | DEBUG | [] -2025-01-24 17:35:08.963 | DEBUG | [] -2025-01-24 17:35:09.961 | DEBUG | [] -2025-01-24 17:35:10.964 | DEBUG | [] -2025-01-24 17:35:11.961 | DEBUG | [] -2025-01-24 17:35:12.963 | DEBUG | [] -2025-01-24 17:35:13.962 | DEBUG | [] -2025-01-24 17:35:14.962 | DEBUG | [] -2025-01-24 17:35:16.252 | DEBUG | [] -2025-01-24 17:35:16.961 | DEBUG | [] -2025-01-24 17:35:17.961 | DEBUG | [] -2025-01-24 17:35:18.962 | DEBUG | [] -2025-01-24 17:35:19.970 | DEBUG | [] -2025-01-24 17:35:20.963 | DEBUG | [] -2025-01-24 17:35:21.962 | DEBUG | [] -2025-01-24 17:35:22.962 | DEBUG | [] -2025-01-24 17:35:23.961 | DEBUG | [] -2025-01-24 17:35:24.962 | DEBUG | [] -2025-01-24 17:35:25.961 | DEBUG | [] -2025-01-24 17:35:26.962 | DEBUG | [] -2025-01-24 17:35:27.962 | DEBUG | [] -2025-01-24 17:35:28.962 | DEBUG | [] -2025-01-24 17:35:29.961 | DEBUG | [] -2025-01-24 17:35:30.962 | DEBUG | [] -2025-01-24 17:35:31.961 | DEBUG | [] -2025-01-24 17:35:32.962 | DEBUG | [] -2025-01-24 17:35:33.961 | DEBUG | [] -2025-01-24 17:35:34.963 | DEBUG | [] -2025-01-24 17:35:35.964 | DEBUG | [] -2025-01-24 17:35:36.962 | DEBUG | [] -2025-01-24 17:35:37.961 | DEBUG | [] -2025-01-24 17:35:38.963 | DEBUG | [] -2025-01-24 17:35:39.964 | INFO | 按时间调起任务:调度队列_2 -2025-01-24 17:35:39.964 | INFO | 任务开始:调度队列_2 -2025-01-24 17:35:39.983 | DEBUG | ['调度队列_2'] -2025-01-24 17:35:39.985 | INFO | 任务开始:脚本_1 -2025-01-24 19:29:43.140 | INFO | 日志记录器初始化完成 -2025-01-24 19:29:43.141 | INFO | 配置类初始化完成 -2025-01-24 19:29:43.141 | INFO | 程序配置管理模块初始化完成 -2025-01-24 19:29:44.824 | DEBUG | [] -2025-01-24 19:29:45.825 | DEBUG | [] -2025-01-24 19:29:46.823 | DEBUG | [] -2025-01-24 19:29:47.823 | DEBUG | [] -2025-01-24 19:29:48.829 | DEBUG | [] -2025-01-24 19:29:49.826 | DEBUG | [] -2025-01-24 19:29:50.825 | DEBUG | [] -2025-01-24 19:29:51.823 | DEBUG | [] -2025-01-24 19:29:52.825 | DEBUG | [] -2025-01-24 19:29:53.823 | DEBUG | [] -2025-01-24 19:29:54.823 | DEBUG | [] -2025-01-24 19:29:55.823 | DEBUG | [] -2025-01-24 19:29:56.823 | DEBUG | [] -2025-01-24 19:29:57.823 | DEBUG | [] -2025-01-24 19:29:58.823 | DEBUG | [] -2025-01-24 19:29:59.823 | DEBUG | [] -2025-01-24 19:30:00.822 | DEBUG | [] -2025-01-24 19:30:01.827 | DEBUG | [] -2025-01-24 19:30:02.824 | DEBUG | [] -2025-01-24 19:30:03.823 | DEBUG | [] -2025-01-24 19:30:04.823 | DEBUG | [] -2025-01-24 19:30:05.821 | DEBUG | [] -2025-01-24 19:30:06.822 | DEBUG | [] -2025-01-24 19:30:07.829 | DEBUG | [] -2025-01-24 19:30:08.821 | DEBUG | [] -2025-01-24 19:30:09.822 | DEBUG | [] -2025-01-24 19:30:10.821 | DEBUG | [] -2025-01-24 19:30:12.156 | DEBUG | [] -2025-01-24 19:30:12.827 | DEBUG | [] -2025-01-24 19:30:13.826 | DEBUG | [] -2025-01-24 19:30:14.826 | DEBUG | [] -2025-01-24 19:30:15.823 | DEBUG | [] -2025-01-24 19:30:16.827 | DEBUG | [] -2025-01-24 19:30:17.827 | DEBUG | [] -2025-01-24 19:30:18.822 | DEBUG | [] -2025-01-24 19:30:19.824 | INFO | 按时间调起任务:调度队列_2 -2025-01-24 19:30:19.825 | INFO | 任务开始:调度队列_2 -2025-01-24 19:30:19.849 | DEBUG | ['调度队列_2'] -2025-01-24 19:30:19.850 | INFO | 任务开始:脚本_1 -2025-01-24 19:30:31.167 | DEBUG | ['调度队列_2', '脚本_1'] -2025-01-24 19:30:31.824 | DEBUG | ['调度队列_2', '脚本_1'] -2025-01-24 19:30:32.823 | DEBUG | ['调度队列_2', '脚本_1'] -2025-01-24 19:30:33.823 | DEBUG | ['调度队列_2', '脚本_1'] -2025-01-24 19:30:34.823 | DEBUG | ['调度队列_2', '脚本_1'] -2025-01-24 19:30:49.200 | INFO | 日志记录器初始化完成 -2025-01-24 19:30:49.200 | INFO | 配置类初始化完成 -2025-01-24 19:30:49.200 | INFO | 程序配置管理模块初始化完成 -2025-01-24 19:30:50.821 | INFO | 按时间调起任务:调度队列_2 -2025-01-24 19:30:50.822 | INFO | 任务开始:调度队列_2 -2025-01-24 19:30:50.842 | DEBUG | ['调度队列_2'] -2025-01-24 19:30:50.843 | INFO | 任务开始:脚本_1 -2025-01-24 19:34:42.818 | INFO | 日志记录器初始化完成 -2025-01-24 19:34:42.819 | INFO | 配置类初始化完成 -2025-01-24 19:34:42.819 | INFO | 程序配置管理模块初始化完成 -2025-01-24 19:34:44.402 | DEBUG | [] -2025-01-24 19:34:45.402 | DEBUG | [] -2025-01-24 19:34:46.526 | DEBUG | [] -2025-01-24 19:34:47.402 | DEBUG | [] -2025-01-24 19:34:48.403 | DEBUG | [] -2025-01-24 19:34:49.402 | DEBUG | [] -2025-01-24 19:34:50.404 | DEBUG | [] -2025-01-24 19:34:51.062 | WARNING | 选择MAA目录时未选择文件夹或未更改文件夹 -2025-01-24 19:34:51.400 | DEBUG | [] -2025-01-24 19:34:52.402 | DEBUG | [] -2025-01-24 19:34:53.401 | DEBUG | [] -2025-01-24 19:34:54.403 | DEBUG | [] -2025-01-24 19:34:55.401 | DEBUG | [] -2025-01-24 19:34:56.400 | DEBUG | [] -2025-01-24 19:34:57.402 | DEBUG | [] -2025-01-24 19:34:58.400 | DEBUG | [] -2025-01-24 19:34:59.399 | DEBUG | [] -2025-01-24 19:35:00.402 | DEBUG | [] -2025-01-24 19:35:01.400 | DEBUG | [] -2025-01-24 19:35:02.611 | DEBUG | [] -2025-01-24 19:35:03.400 | DEBUG | [] -2025-01-24 19:35:04.400 | DEBUG | [] -2025-01-24 19:35:05.400 | DEBUG | [] -2025-01-24 19:35:06.400 | DEBUG | [] -2025-01-24 19:35:07.407 | DEBUG | [] -2025-01-24 19:35:08.400 | DEBUG | [] -2025-01-24 19:35:09.402 | DEBUG | [] -2025-01-24 19:35:10.406 | DEBUG | [] -2025-01-24 19:35:11.473 | DEBUG | [] -2025-01-24 19:35:12.400 | DEBUG | [] -2025-01-24 19:35:13.400 | DEBUG | [] -2025-01-24 19:35:14.399 | DEBUG | [] -2025-01-24 19:35:15.402 | DEBUG | [] -2025-01-24 19:35:16.402 | DEBUG | [] -2025-01-24 19:35:17.406 | DEBUG | [] -2025-01-24 19:35:18.402 | DEBUG | [] -2025-01-24 19:35:19.401 | INFO | 按时间调起任务:调度队列_2 -2025-01-24 19:35:19.401 | INFO | 任务开始:调度队列_2 -2025-01-24 19:35:19.422 | DEBUG | ['调度队列_2'] -2025-01-24 19:35:19.423 | INFO | 任务开始:脚本_1 -2025-01-24 19:35:20.412 | DEBUG | ['调度队列_2', '脚本_1'] -2025-01-24 19:35:21.400 | DEBUG | ['调度队列_2', '脚本_1'] -2025-01-24 19:35:22.404 | INFO | 按时间调起任务:调度队列_1 -2025-01-24 19:35:22.404 | INFO | 任务开始:调度队列_1 -2025-01-24 19:35:22.426 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1'] -2025-01-24 19:35:22.428 | INFO | 任务开始:脚本_2 -2025-01-24 19:35:23.403 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:35:24.400 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:35:25.530 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:35:26.400 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:35:27.399 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:35:28.464 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:35:29.403 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:35:30.401 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:35:31.543 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:35:32.399 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:35:33.398 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:35:34.450 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:35:35.401 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:35:36.399 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:35:37.515 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:35:38.447 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:35:39.401 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:35:40.402 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:35:41.471 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:35:42.400 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:35:43.406 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:35:44.511 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:35:45.407 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:35:46.401 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:35:47.466 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:35:48.400 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:35:49.400 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:35:50.509 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:35:51.490 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:35:52.400 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:35:53.400 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:35:54.460 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:35:55.401 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:35:56.399 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:35:57.545 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:35:58.400 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:35:59.399 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:36:00.406 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:36:01.488 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:36:02.405 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:36:03.405 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:36:04.536 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:36:05.405 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:36:06.404 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:36:07.421 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:36:08.404 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:36:09.401 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:36:10.480 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:36:11.478 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:36:12.402 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:36:13.405 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:36:14.196 | INFO | 中止任务:调度队列_1 -2025-01-24 19:36:14.200 | INFO | 申请中止本次任务 -2025-01-24 19:36:16.870 | INFO | 任务完成:脚本_2 -2025-01-24 19:36:16.874 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1'] -2025-01-24 19:36:16.879 | INFO | 任务结束:调度队列_1 -2025-01-24 19:36:17.402 | DEBUG | ['调度队列_2', '脚本_1'] -2025-01-24 19:36:18.190 | INFO | 中止任务:调度队列_2 -2025-01-24 19:36:18.194 | INFO | 申请中止本次任务 -2025-01-24 19:36:21.068 | INFO | 任务完成:脚本_1 -2025-01-24 19:36:21.070 | DEBUG | ['调度队列_2'] -2025-01-24 19:36:21.075 | INFO | 任务结束:调度队列_2 -2025-01-24 19:36:21.402 | DEBUG | [] -2025-01-24 19:36:22.402 | DEBUG | [] -2025-01-24 19:36:23.400 | DEBUG | [] -2025-01-24 19:36:24.401 | DEBUG | [] -2025-01-24 19:36:25.400 | DEBUG | [] -2025-01-24 19:36:26.403 | DEBUG | [] -2025-01-24 19:36:27.402 | DEBUG | [] -2025-01-24 19:36:28.400 | DEBUG | [] -2025-01-24 19:36:29.401 | DEBUG | [] -2025-01-24 19:36:30.402 | DEBUG | [] -2025-01-24 19:36:31.402 | DEBUG | [] -2025-01-24 19:36:32.400 | DEBUG | [] -2025-01-24 19:36:33.805 | DEBUG | [] -2025-01-24 19:36:34.400 | DEBUG | [] -2025-01-24 19:36:35.413 | DEBUG | [] -2025-01-24 19:36:36.401 | DEBUG | [] -2025-01-24 19:36:37.400 | DEBUG | [] -2025-01-24 19:36:38.410 | DEBUG | [] -2025-01-24 19:36:39.401 | DEBUG | [] -2025-01-24 19:36:40.400 | DEBUG | [] -2025-01-24 19:36:41.399 | DEBUG | [] -2025-01-24 19:36:42.399 | DEBUG | [] -2025-01-24 19:36:43.403 | DEBUG | [] -2025-01-24 19:36:44.399 | DEBUG | [] -2025-01-24 19:36:45.401 | DEBUG | [] -2025-01-24 19:36:46.405 | DEBUG | [] -2025-01-24 19:36:47.399 | DEBUG | [] -2025-01-24 19:36:48.403 | DEBUG | [] -2025-01-24 19:36:49.406 | DEBUG | [] -2025-01-24 19:36:50.405 | INFO | 按时间调起任务:调度队列_1 -2025-01-24 19:36:50.406 | INFO | 任务开始:调度队列_1 -2025-01-24 19:36:50.429 | DEBUG | ['调度队列_1'] -2025-01-24 19:36:50.430 | INFO | 任务开始:脚本_2 -2025-01-24 19:36:51.407 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 19:36:52.403 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 19:36:53.427 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 19:36:54.401 | INFO | 按时间调起任务:调度队列_2 -2025-01-24 19:36:54.401 | INFO | 任务开始:调度队列_2 -2025-01-24 19:36:54.420 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2'] -2025-01-24 19:36:54.422 | INFO | 任务开始:脚本_1 -2025-01-24 19:36:55.403 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:36:56.445 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:36:57.400 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:36:58.398 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:36:59.707 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:37:00.405 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:37:01.400 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:37:02.399 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:37:03.495 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:37:04.401 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:37:05.405 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:37:06.719 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:37:07.400 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:37:08.400 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:37:09.463 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:37:10.398 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:37:11.400 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:37:12.416 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:37:13.823 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:37:14.399 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:37:15.401 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:37:16.503 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:37:17.400 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:37:18.400 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:37:19.541 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:37:20.400 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:37:21.400 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:37:22.452 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:37:23.400 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:37:24.400 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:37:25.413 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:37:26.574 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:37:27.400 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:37:28.400 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:37:29.462 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:37:30.403 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:37:31.400 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:37:32.400 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:37:33.429 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:37:34.398 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:37:35.399 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:37:36.498 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:37:37.400 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:37:38.400 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:37:39.403 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:37:40.457 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:37:41.405 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:37:42.404 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:37:43.404 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:37:44.398 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:37:45.400 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:37:46.400 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:37:47.400 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:37:48.400 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:37:49.512 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:37:50.401 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:37:51.401 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:37:52.399 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:37:53.054 | INFO | 任务完成:脚本_2 -2025-01-24 19:37:53.055 | INFO | 跳过任务:脚本_1 -2025-01-24 19:37:53.064 | INFO | 任务结束:调度队列_1 -2025-01-24 19:37:53.400 | DEBUG | ['调度队列_2', '脚本_1'] -2025-01-24 19:37:54.399 | DEBUG | ['调度队列_2', '脚本_1'] -2025-01-24 19:37:55.400 | DEBUG | ['调度队列_2', '脚本_1'] -2025-01-24 19:37:56.430 | DEBUG | ['调度队列_2', '脚本_1'] -2025-01-24 19:37:57.401 | DEBUG | ['调度队列_2', '脚本_1'] -2025-01-24 19:37:58.400 | DEBUG | ['调度队列_2', '脚本_1'] -2025-01-24 19:37:59.400 | DEBUG | ['调度队列_2', '脚本_1'] -2025-01-24 19:38:00.399 | DEBUG | ['调度队列_2', '脚本_1'] -2025-01-24 19:38:01.401 | DEBUG | ['调度队列_2', '脚本_1'] -2025-01-24 19:38:02.399 | DEBUG | ['调度队列_2', '脚本_1'] -2025-01-24 19:38:03.399 | DEBUG | ['调度队列_2', '脚本_1'] -2025-01-24 19:38:04.513 | DEBUG | ['调度队列_2', '脚本_1'] -2025-01-24 19:38:05.400 | DEBUG | ['调度队列_2', '脚本_1'] -2025-01-24 19:38:06.399 | DEBUG | ['调度队列_2', '脚本_1'] -2025-01-24 19:38:07.401 | DEBUG | ['调度队列_2', '脚本_1'] -2025-01-24 19:38:08.452 | DEBUG | ['调度队列_2', '脚本_1'] -2025-01-24 19:38:09.399 | DEBUG | ['调度队列_2', '脚本_1'] -2025-01-24 19:38:10.407 | DEBUG | ['调度队列_2', '脚本_1'] -2025-01-24 19:38:11.453 | DEBUG | ['调度队列_2', '脚本_1'] -2025-01-24 19:38:12.401 | DEBUG | ['调度队列_2', '脚本_1'] -2025-01-24 19:38:13.399 | DEBUG | ['调度队列_2', '脚本_1'] -2025-01-24 19:38:14.400 | DEBUG | ['调度队列_2', '脚本_1'] -2025-01-24 19:38:15.400 | DEBUG | ['调度队列_2', '脚本_1'] -2025-01-24 19:38:16.399 | DEBUG | ['调度队列_2', '脚本_1'] -2025-01-24 19:38:17.399 | DEBUG | ['调度队列_2', '脚本_1'] -2025-01-24 19:38:18.398 | INFO | 按时间调起任务:调度队列_1 -2025-01-24 19:38:18.399 | INFO | 任务开始:调度队列_1 -2025-01-24 19:38:18.423 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1'] -2025-01-24 19:38:18.423 | INFO | 任务开始:脚本_2 -2025-01-24 19:38:19.507 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:38:20.398 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:38:21.484 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:38:22.401 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:38:23.401 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:38:24.499 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:38:25.466 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:38:26.401 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:38:27.456 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:38:28.405 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:38:29.402 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:38:30.438 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:38:31.401 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:38:32.403 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:38:33.402 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:38:34.402 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:38:35.402 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:38:36.403 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:38:37.403 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:38:38.496 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:38:39.402 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:38:40.402 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:38:41.401 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:38:42.402 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:38:43.401 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:38:44.307 | INFO | 任务完成:脚本_2 -2025-01-24 19:38:44.308 | INFO | 跳过任务:脚本_1 -2025-01-24 19:38:44.308 | INFO | 任务开始:脚本_2 -2025-01-24 19:38:44.526 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:38:45.437 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:38:46.402 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:38:47.483 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:38:48.401 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:38:49.400 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:38:50.482 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:38:51.400 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:38:52.513 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:38:53.401 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:38:54.439 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:38:55.405 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:38:56.401 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:38:57.488 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:38:58.428 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:38:59.405 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:39:00.403 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:39:01.440 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:39:02.400 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:39:03.399 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:39:04.458 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:39:05.490 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:39:06.401 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:39:07.455 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:39:08.399 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:39:09.400 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:39:10.468 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:39:11.454 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:39:12.399 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:39:13.401 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:39:14.460 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:39:15.400 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:45:24.775 | INFO | 日志记录器初始化完成 -2025-01-24 19:45:24.775 | INFO | 配置类初始化完成 -2025-01-24 19:45:24.775 | INFO | 程序配置管理模块初始化完成 -2025-01-24 19:45:26.388 | DEBUG | [] -2025-01-24 19:45:27.386 | DEBUG | [] -2025-01-24 19:45:28.392 | DEBUG | [] -2025-01-24 19:45:29.387 | DEBUG | [] -2025-01-24 19:45:30.384 | DEBUG | [] -2025-01-24 19:45:31.389 | DEBUG | [] -2025-01-24 19:45:32.393 | DEBUG | [] -2025-01-24 19:45:33.388 | INFO | 按时间调起任务:调度队列_1 -2025-01-24 19:45:33.388 | INFO | 任务开始:调度队列_1 -2025-01-24 19:45:33.413 | DEBUG | ['调度队列_1'] -2025-01-24 19:45:33.415 | INFO | 任务开始:脚本_2 -2025-01-24 19:45:33.422 | DEBUG | [] -2025-01-24 19:45:33.422 | DEBUG | [] -2025-01-24 19:45:34.385 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 19:45:35.385 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 19:45:36.418 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 19:45:37.387 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 19:45:38.387 | INFO | 按时间调起任务:调度队列_2 -2025-01-24 19:45:38.389 | INFO | 任务开始:调度队列_2 -2025-01-24 19:45:38.409 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2'] -2025-01-24 19:45:38.410 | INFO | 任务开始:脚本_1 -2025-01-24 19:45:38.417 | DEBUG | [] -2025-01-24 19:45:38.417 | DEBUG | [] -2025-01-24 19:45:39.416 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:45:40.386 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:45:41.386 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:45:42.386 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:45:43.442 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:45:44.383 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:45:45.387 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:45:46.437 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:45:47.386 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:45:48.388 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:45:49.533 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:45:50.395 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:45:51.383 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:45:52.385 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:45:53.445 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:45:54.385 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:45:55.385 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:45:56.385 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:45:57.384 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:45:58.385 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:45:59.385 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:46:00.385 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:46:01.386 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:46:02.383 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:46:03.383 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:46:04.384 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:46:05.390 | DEBUG | ['调度队列_1', '脚本_2', '调度队列_2', '脚本_1'] -2025-01-24 19:46:06.185 | INFO | 任务完成:脚本_2 -2025-01-24 19:46:06.198 | INFO | 跳过任务:脚本_1 -2025-01-24 19:46:06.207 | INFO | 任务开始:脚本_2 -2025-01-24 19:46:06.233 | DEBUG | [] -2025-01-24 19:46:06.235 | DEBUG | [] -2025-01-24 19:46:06.463 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:46:07.384 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:46:08.535 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:46:09.420 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:46:10.383 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:46:11.387 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:46:12.463 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:46:13.386 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:46:14.383 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:46:15.383 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:46:16.445 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:46:17.385 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:46:18.389 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:46:19.450 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:46:20.471 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:46:21.388 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:46:22.393 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:46:23.536 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:46:24.385 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:46:25.511 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:46:26.388 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:46:27.403 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:46:28.459 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:46:29.387 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:46:30.478 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:46:31.385 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:46:32.411 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:46:33.398 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:46:34.384 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:46:35.404 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:46:36.387 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:46:37.393 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:46:38.388 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:46:39.388 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:46:40.390 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:46:41.385 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:46:42.394 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:46:43.399 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:46:44.399 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:46:45.387 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:46:46.387 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:46:47.387 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:46:48.389 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:46:49.384 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:46:50.391 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:46:51.385 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:46:52.394 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:46:53.388 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:46:54.386 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:46:55.402 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:46:56.383 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:46:57.422 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:46:58.393 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:46:59.405 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:47:00.407 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:47:01.397 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:47:02.386 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:47:03.388 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:47:04.424 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:47:05.389 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:47:06.388 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:47:07.397 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:47:08.391 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:47:09.393 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:47:10.397 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:47:11.387 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:47:12.393 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:47:13.393 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:47:14.385 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:47:15.406 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:47:16.406 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:47:17.387 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:47:18.547 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:47:19.389 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:47:20.385 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:47:21.423 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:47:22.385 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:47:23.429 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:47:24.390 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:47:25.397 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:47:26.406 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:47:27.439 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:47:28.384 | DEBUG | ['调度队列_1', '调度队列_2', '脚本_1', '脚本_2'] -2025-01-24 19:47:53.400 | INFO | 日志记录器初始化完成 -2025-01-24 19:47:53.400 | INFO | 配置类初始化完成 -2025-01-24 19:47:53.401 | INFO | 程序配置管理模块初始化完成 -2025-01-24 19:47:54.962 | DEBUG | [] -2025-01-24 19:47:55.961 | DEBUG | [] -2025-01-24 19:47:56.962 | DEBUG | [] -2025-01-24 19:47:57.963 | DEBUG | [] -2025-01-24 19:47:58.965 | DEBUG | [] -2025-01-24 19:47:59.963 | DEBUG | [] -2025-01-24 19:48:00.961 | DEBUG | [] -2025-01-24 19:48:01.967 | DEBUG | [] -2025-01-24 19:48:02.969 | DEBUG | [] -2025-01-24 19:48:03.963 | INFO | 按时间调起任务:调度队列_2 -2025-01-24 19:48:03.963 | INFO | 任务开始:调度队列_2 -2025-01-24 19:48:03.986 | DEBUG | ['调度队列_2'] -2025-01-24 19:48:03.987 | INFO | 任务开始:脚本_1 -2025-01-24 19:48:03.992 | DEBUG | [] -2025-01-24 19:48:03.992 | DEBUG | [] -2025-01-24 19:48:04.963 | DEBUG | ['调度队列_2', '脚本_1'] -2025-01-24 19:48:05.963 | DEBUG | ['调度队列_2', '脚本_1'] -2025-01-24 19:48:06.966 | DEBUG | ['调度队列_2', '脚本_1'] -2025-01-24 19:48:07.965 | DEBUG | ['调度队列_2', '脚本_1'] -2025-01-24 19:48:08.965 | DEBUG | ['调度队列_2', '脚本_1'] -2025-01-24 19:48:09.963 | DEBUG | ['调度队列_2', '脚本_1'] -2025-01-24 19:48:10.967 | DEBUG | ['调度队列_2', '脚本_1'] -2025-01-24 19:48:11.967 | DEBUG | ['调度队列_2', '脚本_1'] -2025-01-24 19:48:12.967 | DEBUG | ['调度队列_2', '脚本_1'] -2025-01-24 19:48:13.963 | DEBUG | ['调度队列_2', '脚本_1'] -2025-01-24 19:48:14.963 | DEBUG | ['调度队列_2', '脚本_1'] -2025-01-24 19:48:16.026 | DEBUG | ['调度队列_2', '脚本_1'] -2025-01-24 19:48:16.967 | DEBUG | ['调度队列_2', '脚本_1'] -2025-01-24 19:48:17.965 | DEBUG | ['调度队列_2', '脚本_1'] -2025-01-24 19:48:18.966 | DEBUG | ['调度队列_2', '脚本_1'] -2025-01-24 19:48:19.965 | INFO | 按时间调起任务:调度队列_1 -2025-01-24 19:48:19.967 | INFO | 任务开始:调度队列_1 -2025-01-24 19:48:19.988 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1'] -2025-01-24 19:48:19.990 | INFO | 任务开始:脚本_2 -2025-01-24 19:48:19.998 | DEBUG | [] -2025-01-24 19:48:19.998 | DEBUG | [] -2025-01-24 19:48:20.965 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:48:21.964 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:48:23.032 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:48:23.963 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:48:24.966 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:48:26.069 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:48:26.965 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:48:27.962 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:48:28.965 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:48:29.963 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:48:30.963 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:48:31.965 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:48:32.971 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:48:33.964 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:48:34.964 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:48:35.966 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:48:36.965 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:48:37.963 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:48:38.965 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:48:39.874 | INFO | 任务完成:脚本_2 -2025-01-24 19:48:39.877 | INFO | 跳过任务:脚本_1 -2025-01-24 19:48:39.877 | INFO | 任务开始:脚本_2 -2025-01-24 19:48:39.902 | DEBUG | [] -2025-01-24 19:48:39.902 | DEBUG | [] -2025-01-24 19:48:40.042 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:48:41.047 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:48:41.962 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:48:43.019 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:48:43.966 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:48:44.963 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:48:46.022 | DEBUG | ['调度队列_2', '脚本_1', '调度队列_1', '脚本_2'] -2025-01-24 19:49:00.228 | INFO | 日志记录器初始化完成 -2025-01-24 19:49:00.228 | INFO | 配置类初始化完成 -2025-01-24 19:49:00.228 | INFO | 程序配置管理模块初始化完成 -2025-01-24 19:49:01.806 | DEBUG | [] -2025-01-24 19:49:02.808 | DEBUG | [] -2025-01-24 19:49:03.806 | DEBUG | [] -2025-01-24 19:49:04.807 | DEBUG | [] -2025-01-24 19:49:05.810 | DEBUG | [] -2025-01-24 19:49:06.808 | DEBUG | [] -2025-01-24 19:49:07.806 | DEBUG | [] -2025-01-24 19:49:08.807 | DEBUG | [] -2025-01-24 19:49:09.807 | DEBUG | [] -2025-01-24 19:49:10.806 | DEBUG | [] -2025-01-24 19:49:11.807 | INFO | 按时间调起任务:调度队列_1 -2025-01-24 19:49:11.808 | INFO | 任务开始:调度队列_1 -2025-01-24 19:49:11.832 | DEBUG | ['调度队列_1'] -2025-01-24 19:49:11.833 | INFO | 任务开始:脚本_2 -2025-01-24 19:49:11.841 | DEBUG | [] -2025-01-24 19:49:11.841 | DEBUG | [] -2025-01-24 19:49:12.808 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 19:49:13.811 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 19:49:14.933 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 19:49:15.807 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 19:49:16.808 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 19:49:17.806 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 19:49:18.807 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 19:49:19.808 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 19:49:20.808 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 19:49:21.807 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 19:49:22.808 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 19:49:23.806 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 19:49:24.806 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 19:49:25.806 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 19:49:26.807 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 19:49:27.434 | INFO | 任务完成:脚本_2 -2025-01-24 19:49:27.435 | INFO | 任务开始:脚本_1 -2025-01-24 19:49:27.448 | DEBUG | [] -2025-01-24 19:49:27.449 | DEBUG | [] -2025-01-24 19:49:27.805 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:49:28.807 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:49:29.922 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:49:30.806 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:49:31.807 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:49:32.807 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:49:33.808 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:49:34.807 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:49:35.806 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:49:36.863 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:49:37.806 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:49:38.809 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:49:39.808 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:49:40.810 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:49:41.808 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:49:42.807 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:49:43.807 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:49:44.871 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:49:45.807 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:49:46.807 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:49:47.807 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:49:48.807 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:49:49.807 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:49:50.808 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:49:51.835 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:49:52.808 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:49:53.808 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:49:54.809 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:49:55.806 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:51:23.102 | INFO | 日志记录器初始化完成 -2025-01-24 19:51:23.102 | INFO | 配置类初始化完成 -2025-01-24 19:51:23.102 | INFO | 程序配置管理模块初始化完成 -2025-01-24 19:51:24.717 | DEBUG | [] -2025-01-24 19:51:25.714 | DEBUG | [] -2025-01-24 19:51:26.712 | DEBUG | [] -2025-01-24 19:51:27.893 | DEBUG | [] -2025-01-24 19:51:28.714 | DEBUG | [] -2025-01-24 19:51:29.714 | DEBUG | [] -2025-01-24 19:51:30.713 | DEBUG | [] -2025-01-24 19:51:31.713 | INFO | 按时间调起任务:调度队列_1 -2025-01-24 19:51:31.714 | INFO | 任务开始:调度队列_1 -2025-01-24 19:51:31.735 | DEBUG | ['调度队列_1'] -2025-01-24 19:51:31.735 | INFO | 任务开始:脚本_2 -2025-01-24 19:51:32.712 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 19:51:33.713 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 19:51:34.774 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 19:51:35.715 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 19:51:36.715 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 19:51:37.716 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 19:51:38.712 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 19:51:39.716 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 19:51:40.715 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 19:51:41.716 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 19:51:42.713 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 19:51:43.715 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 19:51:44.714 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 19:51:45.715 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 19:51:46.715 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-24 19:51:47.382 | INFO | 任务完成:脚本_2 -2025-01-24 19:51:47.383 | INFO | 任务开始:脚本_1 -2025-01-24 19:51:47.713 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:51:48.718 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:51:49.712 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:51:50.713 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:51:51.713 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:51:52.713 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:51:53.713 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:51:54.713 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:51:55.712 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:51:56.796 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:51:57.716 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:51:58.716 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:51:59.712 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:52:00.712 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:52:01.716 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:52:02.715 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:52:03.742 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:52:04.713 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:52:05.712 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:52:06.714 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:52:07.713 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:52:08.712 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:52:09.715 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:52:10.716 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:52:11.715 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:52:12.713 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:52:13.713 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:52:14.712 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:52:15.715 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:52:16.713 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:52:17.715 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:52:18.715 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:52:19.714 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:52:20.711 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:52:21.772 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:52:22.715 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:52:23.713 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:52:24.715 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:52:25.715 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:52:26.712 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:52:27.714 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:52:28.721 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:52:29.808 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:52:30.715 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:52:31.714 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:52:32.714 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:52:33.715 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:52:34.714 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:52:35.713 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:52:36.713 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:52:37.714 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-24 19:52:38.544 | INFO | 中止任务:调度队列_1 -2025-01-24 19:52:38.547 | INFO | 申请中止本次任务 -2025-01-24 19:52:41.592 | INFO | 任务完成:脚本_1 -2025-01-24 19:52:41.594 | DEBUG | ['调度队列_1'] -2025-01-24 19:52:41.597 | INFO | 任务结束:调度队列_1 -2025-01-24 19:52:41.715 | DEBUG | [] -2025-01-24 19:52:42.713 | DEBUG | [] -2025-01-24 19:52:43.718 | DEBUG | [] -2025-01-24 19:52:44.712 | DEBUG | [] -2025-01-24 19:52:45.713 | DEBUG | [] -2025-01-24 19:52:46.716 | DEBUG | [] -2025-01-24 19:52:47.713 | DEBUG | [] -2025-01-24 19:52:48.715 | DEBUG | [] -2025-01-24 19:52:49.712 | DEBUG | [] -2025-01-24 19:52:50.714 | DEBUG | [] -2025-01-24 19:52:51.715 | DEBUG | [] -2025-01-24 19:52:52.713 | DEBUG | [] -2025-01-24 19:52:53.717 | DEBUG | [] -2025-01-24 19:52:54.715 | DEBUG | [] -2025-01-24 19:52:55.715 | DEBUG | [] -2025-01-24 19:52:56.715 | DEBUG | [] -2025-01-24 19:52:57.712 | DEBUG | [] -2025-01-24 19:52:58.714 | DEBUG | [] -2025-01-24 19:52:59.715 | DEBUG | [] -2025-01-24 19:53:00.712 | DEBUG | [] -2025-01-24 19:53:01.715 | DEBUG | [] -2025-01-24 19:53:02.712 | DEBUG | [] -2025-01-24 19:53:03.714 | DEBUG | [] -2025-01-24 19:53:04.716 | DEBUG | [] -2025-01-24 19:53:05.715 | DEBUG | [] -2025-01-24 19:53:06.716 | DEBUG | [] -2025-01-24 19:53:07.715 | DEBUG | [] -2025-01-24 19:53:08.716 | DEBUG | [] -2025-01-24 19:53:09.715 | DEBUG | [] -2025-01-24 19:53:10.713 | DEBUG | [] -2025-01-24 19:53:11.713 | DEBUG | [] -2025-01-24 19:53:12.714 | DEBUG | [] -2025-01-24 19:53:13.713 | DEBUG | [] -2025-01-24 19:53:14.715 | DEBUG | [] -2025-01-24 19:53:15.713 | DEBUG | [] -2025-01-24 19:53:16.715 | DEBUG | [] -2025-01-24 19:53:17.715 | DEBUG | [] -2025-01-24 19:53:18.715 | DEBUG | [] -2025-01-24 19:53:19.715 | DEBUG | [] -2025-01-24 19:53:20.715 | DEBUG | [] -2025-01-24 19:53:21.716 | DEBUG | [] -2025-01-24 19:53:22.712 | DEBUG | [] -2025-01-24 19:53:23.714 | DEBUG | [] -2025-01-24 19:53:24.712 | DEBUG | [] -2025-01-24 19:53:25.713 | DEBUG | [] -2025-01-24 19:53:26.713 | DEBUG | [] -2025-01-24 19:53:27.713 | DEBUG | [] -2025-01-24 19:53:28.719 | DEBUG | [] -2025-01-24 19:53:29.712 | DEBUG | [] -2025-01-24 19:57:18.926 | INFO | 日志记录器初始化完成 -2025-01-24 19:57:18.926 | INFO | 配置类初始化完成 -2025-01-24 19:57:18.927 | INFO | 程序配置管理模块初始化完成 -2025-01-24 19:57:20.525 | DEBUG | [] -2025-01-24 19:57:21.525 | DEBUG | [] -2025-01-24 19:57:22.671 | DEBUG | [] -2025-01-24 19:57:23.523 | DEBUG | [] -2025-01-24 19:57:24.525 | DEBUG | [] -2025-01-24 19:57:25.525 | DEBUG | [] -2025-01-24 19:57:26.527 | DEBUG | [] -2025-01-24 19:57:27.527 | DEBUG | [] -2025-01-24 19:57:28.523 | DEBUG | [] -2025-01-24 19:57:29.526 | DEBUG | [] -2025-01-24 19:57:30.523 | DEBUG | [] -2025-01-24 19:57:31.526 | DEBUG | [] -2025-01-24 19:57:32.526 | DEBUG | [] -2025-01-24 19:57:33.532 | DEBUG | [] -2025-01-24 19:57:34.526 | DEBUG | [] -2025-01-24 19:57:35.527 | DEBUG | [] -2025-01-24 19:57:36.523 | DEBUG | [] -2025-01-24 19:57:37.525 | DEBUG | [] -2025-01-24 19:57:38.525 | DEBUG | [] -2025-01-24 19:57:39.526 | DEBUG | [] -2025-01-24 19:57:40.523 | DEBUG | [] -2025-01-24 19:57:41.525 | DEBUG | [] -2025-01-24 19:57:42.525 | DEBUG | [] -2025-01-24 19:57:43.527 | DEBUG | [] -2025-01-24 19:57:44.526 | DEBUG | [] -2025-01-24 19:57:45.526 | DEBUG | [] -2025-01-24 19:57:46.523 | DEBUG | [] -2025-01-24 19:57:47.527 | DEBUG | [] -2025-01-24 19:57:48.525 | DEBUG | [] -2025-01-24 19:57:49.526 | DEBUG | [] -2025-01-24 19:57:50.525 | DEBUG | [] -2025-01-24 19:57:51.526 | DEBUG | [] -2025-01-24 19:57:52.527 | DEBUG | [] -2025-01-24 19:57:53.526 | DEBUG | [] -2025-01-24 19:57:54.526 | DEBUG | [] -2025-01-24 19:57:55.526 | DEBUG | [] -2025-01-24 19:57:56.525 | DEBUG | [] -2025-01-24 19:57:57.523 | DEBUG | [] -2025-01-24 19:57:58.525 | DEBUG | [] -2025-01-24 19:57:59.526 | DEBUG | [] -2025-01-24 19:58:00.524 | DEBUG | [] -2025-01-24 19:58:01.523 | DEBUG | [] -2025-01-24 19:58:02.525 | DEBUG | [] -2025-01-24 19:58:03.525 | DEBUG | [] -2025-01-24 19:58:04.525 | DEBUG | [] -2025-01-24 19:58:05.523 | DEBUG | [] -2025-01-24 19:58:06.526 | DEBUG | [] -2025-01-24 19:58:07.526 | DEBUG | [] -2025-01-24 19:58:08.527 | DEBUG | [] -2025-01-24 19:58:09.527 | DEBUG | [] -2025-01-24 19:58:10.527 | DEBUG | [] -2025-01-24 19:58:11.524 | DEBUG | [] -2025-01-24 19:58:12.527 | DEBUG | [] -2025-01-24 19:58:13.527 | DEBUG | [] -2025-01-24 19:58:14.526 | DEBUG | [] -2025-01-24 19:58:15.527 | DEBUG | [] -2025-01-24 19:58:16.526 | DEBUG | [] -2025-01-24 19:58:17.527 | DEBUG | [] -2025-01-24 19:58:18.526 | DEBUG | [] -2025-01-24 19:58:19.526 | DEBUG | [] -2025-01-24 19:58:20.527 | DEBUG | [] -2025-01-24 19:58:21.526 | DEBUG | [] -2025-01-24 19:58:22.526 | DEBUG | [] -2025-01-24 19:58:23.527 | DEBUG | [] -2025-01-24 19:58:24.527 | DEBUG | [] -2025-01-24 19:58:25.525 | DEBUG | [] -2025-01-24 19:58:26.526 | DEBUG | [] -2025-01-24 19:58:27.526 | DEBUG | [] -2025-01-24 19:58:28.528 | DEBUG | [] -2025-01-24 19:58:29.526 | DEBUG | [] -2025-01-24 19:58:30.524 | DEBUG | [] -2025-01-24 19:58:31.527 | DEBUG | [] -2025-01-24 19:58:32.527 | DEBUG | [] -2025-01-24 19:58:33.527 | DEBUG | [] -2025-01-25 08:21:33.215 | INFO | 日志记录器初始化完成 -2025-01-25 08:21:33.215 | INFO | 配置类初始化完成 -2025-01-25 08:21:33.215 | INFO | 程序配置管理模块初始化完成 -2025-01-25 08:21:35.327 | DEBUG | [] -2025-01-25 08:21:36.165 | DEBUG | [] -2025-01-25 08:21:37.165 | DEBUG | [] -2025-01-25 08:21:38.165 | DEBUG | [] -2025-01-25 08:21:39.165 | DEBUG | [] -2025-01-25 08:21:40.165 | DEBUG | [] -2025-01-25 08:21:41.167 | DEBUG | [] -2025-01-25 08:21:42.165 | DEBUG | [] -2025-01-25 08:21:43.166 | DEBUG | [] -2025-01-25 08:21:44.164 | DEBUG | [] -2025-01-25 08:21:45.165 | DEBUG | [] -2025-01-25 08:21:46.165 | DEBUG | [] -2025-01-25 08:21:47.167 | DEBUG | [] -2025-01-25 08:21:48.164 | DEBUG | [] -2025-01-25 08:21:49.165 | DEBUG | [] -2025-01-25 08:21:50.164 | DEBUG | [] -2025-01-25 08:21:51.165 | DEBUG | [] -2025-01-25 08:21:52.168 | DEBUG | [] -2025-01-25 08:21:53.165 | DEBUG | [] -2025-01-25 08:21:54.164 | DEBUG | [] -2025-01-25 08:21:55.170 | DEBUG | [] -2025-01-25 08:21:56.164 | DEBUG | [] -2025-01-25 08:21:57.165 | DEBUG | [] -2025-01-25 08:21:58.169 | DEBUG | [] -2025-01-25 08:21:59.164 | DEBUG | [] -2025-01-25 08:22:00.164 | DEBUG | [] -2025-01-25 08:22:01.165 | DEBUG | [] -2025-01-25 08:22:02.168 | DEBUG | [] -2025-01-25 08:22:03.167 | DEBUG | [] -2025-01-25 08:22:04.167 | DEBUG | [] -2025-01-25 08:22:05.167 | DEBUG | [] -2025-01-25 08:22:06.167 | DEBUG | [] -2025-01-25 08:22:07.565 | DEBUG | [] -2025-01-25 08:22:08.173 | DEBUG | [] -2025-01-25 08:22:09.165 | DEBUG | [] -2025-01-25 08:22:10.164 | DEBUG | [] -2025-01-25 08:22:11.164 | DEBUG | [] -2025-01-25 08:22:12.166 | DEBUG | [] -2025-01-25 08:22:13.166 | DEBUG | [] -2025-01-25 08:22:14.165 | DEBUG | [] -2025-01-25 08:22:15.164 | DEBUG | [] -2025-01-25 17:43:27.532 | INFO | 日志记录器初始化完成 -2025-01-25 17:43:27.533 | INFO | 配置类初始化完成 -2025-01-25 17:43:27.533 | INFO | 程序配置管理模块初始化完成 -2025-01-25 17:43:29.275 | DEBUG | [] -2025-01-25 17:43:30.275 | DEBUG | [] -2025-01-25 17:43:31.277 | DEBUG | [] -2025-01-25 17:43:32.276 | DEBUG | [] -2025-01-25 17:43:33.279 | DEBUG | [] -2025-01-25 17:43:34.275 | DEBUG | [] -2025-01-25 17:43:35.278 | DEBUG | [] -2025-01-25 17:43:36.277 | DEBUG | [] -2025-01-25 17:43:37.277 | DEBUG | [] -2025-01-25 17:43:38.276 | DEBUG | [] -2025-01-25 17:43:39.276 | DEBUG | [] -2025-01-25 17:43:40.275 | DEBUG | [] -2025-01-25 17:43:41.276 | DEBUG | [] -2025-01-25 17:43:42.276 | DEBUG | [] -2025-01-25 17:43:43.278 | DEBUG | [] -2025-01-25 17:43:44.276 | DEBUG | [] -2025-01-25 17:43:45.277 | DEBUG | [] -2025-01-25 17:43:46.275 | DEBUG | [] -2025-01-25 17:43:47.275 | DEBUG | [] -2025-01-25 17:43:48.277 | DEBUG | [] -2025-01-25 17:43:49.276 | DEBUG | [] -2025-01-25 17:43:50.276 | DEBUG | [] -2025-01-25 17:43:51.275 | DEBUG | [] -2025-01-25 17:43:52.276 | DEBUG | [] -2025-01-25 17:43:53.274 | DEBUG | [] -2025-01-25 17:43:54.275 | DEBUG | [] -2025-01-25 17:43:55.275 | DEBUG | [] -2025-01-25 17:43:56.277 | DEBUG | [] -2025-01-25 17:43:57.276 | DEBUG | [] -2025-01-25 17:43:58.274 | DEBUG | [] -2025-01-25 17:43:59.274 | DEBUG | [] -2025-01-25 17:44:00.275 | DEBUG | [] -2025-01-25 17:44:01.276 | DEBUG | [] -2025-01-25 17:44:02.276 | DEBUG | [] -2025-01-25 17:44:03.276 | DEBUG | [] -2025-01-25 17:44:04.275 | DEBUG | [] -2025-01-25 17:44:05.275 | DEBUG | [] -2025-01-25 17:44:06.277 | DEBUG | [] -2025-01-25 17:44:07.275 | DEBUG | [] -2025-01-25 17:44:08.274 | DEBUG | [] -2025-01-25 17:44:09.277 | DEBUG | [] -2025-01-25 17:44:10.276 | DEBUG | [] -2025-01-25 17:44:11.274 | DEBUG | [] -2025-01-25 17:44:12.274 | DEBUG | [] -2025-01-25 17:44:13.275 | DEBUG | [] -2025-01-25 17:44:14.276 | DEBUG | [] -2025-01-25 17:44:15.277 | DEBUG | [] -2025-01-25 17:44:16.276 | DEBUG | [] -2025-01-25 17:44:17.274 | DEBUG | [] -2025-01-25 17:44:18.278 | DEBUG | [] -2025-01-25 17:44:19.277 | DEBUG | [] -2025-01-25 17:44:20.276 | DEBUG | [] -2025-01-25 17:44:21.276 | DEBUG | [] -2025-01-25 17:44:22.277 | DEBUG | [] -2025-01-25 17:44:23.277 | DEBUG | [] -2025-01-25 17:44:24.275 | DEBUG | [] -2025-01-25 17:44:25.275 | DEBUG | [] -2025-01-25 17:44:26.275 | DEBUG | [] -2025-01-25 17:44:27.278 | DEBUG | [] -2025-01-25 17:44:28.277 | DEBUG | [] -2025-01-25 17:44:29.277 | DEBUG | [] -2025-01-25 17:44:30.275 | DEBUG | [] -2025-01-25 17:44:31.278 | DEBUG | [] -2025-01-25 17:44:32.275 | DEBUG | [] -2025-01-25 17:44:33.275 | DEBUG | [] -2025-01-25 17:44:34.276 | DEBUG | [] -2025-01-25 17:44:35.276 | DEBUG | [] -2025-01-25 17:44:36.276 | DEBUG | [] -2025-01-25 17:44:37.275 | DEBUG | [] -2025-01-25 17:44:38.276 | DEBUG | [] -2025-01-25 17:44:39.275 | DEBUG | [] -2025-01-25 17:44:40.275 | DEBUG | [] -2025-01-25 17:44:41.275 | DEBUG | [] -2025-01-25 17:44:42.276 | DEBUG | [] -2025-01-25 17:44:43.277 | DEBUG | [] -2025-01-25 17:44:44.277 | DEBUG | [] -2025-01-25 17:44:45.275 | DEBUG | [] -2025-01-25 17:44:46.277 | DEBUG | [] -2025-01-25 17:44:47.276 | DEBUG | [] -2025-01-25 17:44:48.276 | DEBUG | [] -2025-01-25 17:44:49.275 | DEBUG | [] -2025-01-25 17:44:50.275 | DEBUG | [] -2025-01-25 17:44:51.275 | DEBUG | [] -2025-01-25 17:44:52.275 | DEBUG | [] -2025-01-25 17:44:53.278 | DEBUG | [] -2025-01-25 17:44:54.277 | DEBUG | [] -2025-01-25 17:44:55.275 | DEBUG | [] -2025-01-25 17:44:56.276 | DEBUG | [] -2025-01-25 17:44:57.275 | DEBUG | [] -2025-01-25 17:44:58.274 | DEBUG | [] -2025-01-25 17:44:59.275 | DEBUG | [] -2025-01-25 17:45:00.275 | DEBUG | [] -2025-01-25 17:45:01.277 | DEBUG | [] -2025-01-25 17:45:02.276 | DEBUG | [] -2025-01-25 17:45:03.274 | DEBUG | [] -2025-01-25 17:45:04.278 | DEBUG | [] -2025-01-25 17:45:05.277 | DEBUG | [] -2025-01-25 17:45:06.276 | DEBUG | [] -2025-01-25 17:45:07.276 | DEBUG | [] -2025-01-25 17:45:08.276 | DEBUG | [] -2025-01-25 17:45:09.282 | DEBUG | [] -2025-01-25 17:45:10.275 | DEBUG | [] -2025-01-25 17:45:11.277 | DEBUG | [] -2025-01-25 17:45:12.278 | DEBUG | [] -2025-01-25 17:45:13.277 | DEBUG | [] -2025-01-25 17:45:14.276 | DEBUG | [] -2025-01-25 17:45:15.277 | DEBUG | [] -2025-01-25 17:45:16.277 | DEBUG | [] -2025-01-25 17:45:17.276 | DEBUG | [] -2025-01-25 17:45:18.277 | DEBUG | [] -2025-01-25 17:45:19.276 | DEBUG | [] -2025-01-25 17:45:20.275 | DEBUG | [] -2025-01-25 17:45:21.277 | DEBUG | [] -2025-01-25 17:45:22.278 | DEBUG | [] -2025-01-25 17:45:23.278 | DEBUG | [] -2025-01-25 17:45:24.275 | DEBUG | [] -2025-01-25 17:45:25.277 | DEBUG | [] -2025-01-25 17:45:26.277 | DEBUG | [] -2025-01-25 17:45:27.275 | DEBUG | [] -2025-01-25 17:45:28.275 | DEBUG | [] -2025-01-25 17:45:29.277 | DEBUG | [] -2025-01-25 17:45:30.276 | DEBUG | [] -2025-01-25 17:45:31.276 | DEBUG | [] -2025-01-25 17:45:32.274 | DEBUG | [] -2025-01-25 17:45:33.276 | DEBUG | [] -2025-01-25 17:45:34.275 | DEBUG | [] -2025-01-25 17:45:35.275 | DEBUG | [] -2025-01-25 17:45:36.276 | DEBUG | [] -2025-01-25 17:45:37.274 | DEBUG | [] -2025-01-25 17:45:38.278 | DEBUG | [] -2025-01-25 17:45:39.275 | DEBUG | [] -2025-01-25 17:45:40.275 | DEBUG | [] -2025-01-25 17:45:41.275 | DEBUG | [] -2025-01-25 17:45:42.275 | DEBUG | [] -2025-01-25 17:45:43.277 | DEBUG | [] -2025-01-25 17:45:44.276 | DEBUG | [] -2025-01-25 17:45:45.275 | DEBUG | [] -2025-01-25 17:45:46.277 | DEBUG | [] -2025-01-25 17:45:47.275 | DEBUG | [] -2025-01-25 17:45:48.276 | DEBUG | [] -2025-01-25 17:45:49.277 | DEBUG | [] -2025-01-25 17:45:50.279 | DEBUG | [] -2025-01-25 17:45:51.278 | DEBUG | [] -2025-01-25 17:45:52.279 | DEBUG | [] -2025-01-25 17:45:53.276 | DEBUG | [] -2025-01-25 17:45:54.275 | DEBUG | [] -2025-01-25 17:45:55.277 | DEBUG | [] -2025-01-25 17:45:56.277 | DEBUG | [] -2025-01-25 17:45:57.274 | DEBUG | [] -2025-01-25 17:45:58.274 | DEBUG | [] -2025-01-25 17:45:59.277 | DEBUG | [] -2025-01-25 17:46:00.276 | DEBUG | [] -2025-01-25 17:46:01.277 | DEBUG | [] -2025-01-25 17:46:02.277 | DEBUG | [] -2025-01-25 17:46:03.276 | DEBUG | [] -2025-01-25 17:46:04.277 | DEBUG | [] -2025-01-25 17:46:05.278 | DEBUG | [] -2025-01-25 17:46:06.276 | DEBUG | [] -2025-01-25 17:46:07.277 | DEBUG | [] -2025-01-25 17:46:08.275 | DEBUG | [] -2025-01-25 17:46:09.275 | DEBUG | [] -2025-01-25 17:46:10.275 | DEBUG | [] -2025-01-25 17:46:11.275 | DEBUG | [] -2025-01-25 17:46:12.278 | DEBUG | [] -2025-01-25 17:46:13.276 | DEBUG | [] -2025-01-25 17:46:14.277 | DEBUG | [] -2025-01-25 17:46:15.276 | DEBUG | [] -2025-01-25 17:46:16.275 | DEBUG | [] -2025-01-25 17:46:17.277 | DEBUG | [] -2025-01-25 17:46:18.275 | DEBUG | [] -2025-01-25 17:46:19.275 | DEBUG | [] -2025-01-25 17:46:20.274 | DEBUG | [] -2025-01-25 17:46:21.274 | DEBUG | [] -2025-01-25 17:46:22.274 | DEBUG | [] -2025-01-25 17:46:23.276 | DEBUG | [] -2025-01-25 17:46:24.275 | DEBUG | [] -2025-01-25 17:46:25.275 | DEBUG | [] -2025-01-25 17:46:26.276 | DEBUG | [] -2025-01-25 17:46:27.275 | DEBUG | [] -2025-01-25 17:46:28.275 | DEBUG | [] -2025-01-25 17:46:29.275 | DEBUG | [] -2025-01-25 17:46:30.275 | DEBUG | [] -2025-01-25 17:46:31.277 | DEBUG | [] -2025-01-25 17:46:32.277 | DEBUG | [] -2025-01-25 17:46:33.275 | DEBUG | [] -2025-01-25 17:46:34.278 | DEBUG | [] -2025-01-25 17:46:35.277 | DEBUG | [] -2025-01-25 17:46:36.279 | DEBUG | [] -2025-01-25 17:46:37.275 | DEBUG | [] -2025-01-25 17:46:38.275 | DEBUG | [] -2025-01-25 17:46:39.276 | DEBUG | [] -2025-01-25 17:46:40.275 | DEBUG | [] -2025-01-25 17:46:41.275 | DEBUG | [] -2025-01-25 17:46:42.275 | DEBUG | [] -2025-01-25 17:46:43.275 | DEBUG | [] -2025-01-25 17:46:44.276 | DEBUG | [] -2025-01-25 17:46:45.276 | DEBUG | [] -2025-01-25 17:46:46.275 | DEBUG | [] -2025-01-25 17:46:47.278 | DEBUG | [] -2025-01-25 17:46:48.276 | DEBUG | [] -2025-01-25 17:46:49.275 | DEBUG | [] -2025-01-25 17:46:50.276 | DEBUG | [] -2025-01-25 17:46:51.275 | DEBUG | [] -2025-01-25 17:46:52.277 | DEBUG | [] -2025-01-25 17:46:53.277 | DEBUG | [] -2025-01-25 17:46:54.275 | DEBUG | [] -2025-01-25 17:46:55.278 | DEBUG | [] -2025-01-25 17:46:56.275 | DEBUG | [] -2025-01-25 17:46:57.274 | DEBUG | [] -2025-01-25 17:46:58.277 | DEBUG | [] -2025-01-25 17:46:59.276 | DEBUG | [] -2025-01-25 17:47:00.276 | DEBUG | [] -2025-01-25 17:47:01.277 | DEBUG | [] -2025-01-25 17:47:02.275 | DEBUG | [] -2025-01-25 17:47:03.274 | DEBUG | [] -2025-01-25 17:47:04.275 | DEBUG | [] -2025-01-25 17:47:05.276 | DEBUG | [] -2025-01-25 17:47:06.275 | DEBUG | [] -2025-01-25 17:47:07.276 | DEBUG | [] -2025-01-25 17:47:08.274 | DEBUG | [] -2025-01-25 17:47:09.276 | DEBUG | [] -2025-01-25 17:47:10.276 | DEBUG | [] -2025-01-25 17:47:11.276 | DEBUG | [] -2025-01-25 17:47:12.277 | DEBUG | [] -2025-01-25 17:47:13.275 | DEBUG | [] -2025-01-25 17:47:14.274 | DEBUG | [] -2025-01-25 17:47:15.276 | DEBUG | [] -2025-01-25 17:47:16.275 | DEBUG | [] -2025-01-25 17:47:17.276 | DEBUG | [] -2025-01-25 17:47:18.276 | DEBUG | [] -2025-01-25 17:47:19.275 | DEBUG | [] -2025-01-25 17:47:20.277 | DEBUG | [] -2025-01-25 17:47:21.273 | DEBUG | [] -2025-01-25 17:47:22.276 | DEBUG | [] -2025-01-25 17:47:23.277 | DEBUG | [] -2025-01-25 17:47:24.277 | DEBUG | [] -2025-01-25 17:47:25.281 | DEBUG | [] -2025-01-25 17:47:26.275 | DEBUG | [] -2025-01-25 17:49:00.586 | INFO | 日志记录器初始化完成 -2025-01-25 17:49:00.587 | INFO | 配置类初始化完成 -2025-01-25 17:49:00.587 | INFO | 程序配置管理模块初始化完成 -2025-01-25 17:49:02.151 | DEBUG | [] -2025-01-25 17:49:03.150 | DEBUG | [] -2025-01-25 17:49:04.150 | DEBUG | [] -2025-01-25 17:49:05.150 | DEBUG | [] -2025-01-25 17:49:06.151 | DEBUG | [] -2025-01-25 17:49:07.150 | DEBUG | [] -2025-01-25 17:49:08.148 | DEBUG | [] -2025-01-25 17:49:09.152 | DEBUG | [] -2025-01-25 17:49:10.150 | DEBUG | [] -2025-01-25 17:49:11.149 | INFO | 按时间调起任务:调度队列_1 -2025-01-25 17:49:11.149 | INFO | 任务开始:调度队列_1 -2025-01-25 17:49:11.172 | DEBUG | ['调度队列_1'] -2025-01-25 17:49:11.173 | INFO | 任务开始:脚本_2 -2025-01-25 17:49:12.150 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 17:49:13.150 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 17:49:14.204 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 17:49:15.150 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 17:49:16.150 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 17:49:17.149 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 17:49:18.150 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 17:49:19.152 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 17:49:20.150 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 17:49:21.149 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 17:49:22.151 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 17:49:23.150 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 17:49:24.153 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 17:49:25.150 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 17:49:26.151 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 17:49:27.150 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 17:49:28.105 | INFO | 任务完成:脚本_2 -2025-01-25 17:49:28.106 | INFO | 任务开始:脚本_1 -2025-01-25 17:49:28.225 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:49:29.149 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:49:30.150 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:49:31.150 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:49:32.150 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:49:33.152 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:49:34.151 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:49:35.149 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:49:36.151 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:49:37.151 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:49:38.150 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:49:39.152 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:49:40.154 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:49:41.150 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:49:42.149 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:49:43.152 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:49:44.153 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:49:45.152 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:49:46.150 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:49:47.149 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:49:48.152 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:49:49.151 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:49:50.212 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:49:51.151 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:49:52.150 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:49:53.150 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:49:54.149 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:49:55.150 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:49:56.151 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:49:57.252 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:49:58.150 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:49:59.150 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:50:00.152 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:50:01.149 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:50:02.150 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:50:03.150 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:50:04.311 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:50:05.149 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:50:06.151 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:50:07.150 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:50:08.150 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:50:09.150 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:50:10.191 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:50:11.150 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:50:12.152 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:50:13.151 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:50:14.153 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:50:15.151 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:50:16.152 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:50:17.233 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:50:18.149 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:50:19.152 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:50:20.152 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:50:21.153 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:50:22.151 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:50:23.152 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:50:24.150 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:50:25.150 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:50:26.152 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:50:27.151 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:50:28.152 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:50:29.153 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:50:30.150 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:50:31.158 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:50:32.152 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:50:33.151 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:50:34.151 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:50:35.151 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:50:36.151 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:50:37.151 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:50:38.188 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:50:39.150 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:50:40.150 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:50:41.151 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:50:42.148 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:50:43.150 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:50:44.150 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:50:45.152 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:50:46.151 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:50:47.152 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:50:48.151 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:50:49.150 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:50:50.150 | DEBUG | ['调度队列_1', '脚本_1'] -2025-01-25 17:50:50.447 | INFO | 任务完成:脚本_1 -2025-01-25 17:50:50.448 | INFO | 任务开始:脚本_2 -2025-01-25 17:50:51.150 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 17:50:52.218 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 17:50:53.150 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 17:50:54.150 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 17:50:55.152 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 17:50:56.243 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 17:50:57.155 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 17:50:58.152 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 17:50:59.151 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 17:51:00.152 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 17:51:01.150 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 17:51:02.150 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 17:51:03.150 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 17:51:04.153 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 17:51:05.150 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 17:51:06.150 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 17:51:07.149 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 17:51:08.151 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 17:51:08.893 | INFO | 任务完成:脚本_2 -2025-01-25 17:51:08.896 | INFO | 任务结束:调度队列_1 -2025-01-25 17:51:09.151 | DEBUG | [] -2025-01-25 17:51:10.151 | DEBUG | [] -2025-01-25 17:51:11.152 | DEBUG | [] -2025-01-25 17:51:12.151 | DEBUG | [] -2025-01-25 17:51:13.151 | DEBUG | [] -2025-01-25 17:51:14.151 | DEBUG | [] -2025-01-25 17:51:15.151 | DEBUG | [] -2025-01-25 17:51:16.152 | DEBUG | [] -2025-01-25 17:51:17.152 | DEBUG | [] -2025-01-25 17:51:18.152 | DEBUG | [] -2025-01-25 17:51:19.151 | DEBUG | [] -2025-01-25 17:51:20.152 | DEBUG | [] -2025-01-25 17:51:21.151 | DEBUG | [] -2025-01-25 17:51:22.150 | DEBUG | [] -2025-01-25 17:51:23.150 | DEBUG | [] -2025-01-25 17:51:24.151 | DEBUG | [] -2025-01-25 17:51:25.149 | DEBUG | [] -2025-01-25 17:51:26.151 | DEBUG | [] -2025-01-25 17:51:27.148 | DEBUG | [] -2025-01-25 17:51:28.151 | DEBUG | [] -2025-01-25 17:51:29.151 | DEBUG | [] -2025-01-25 17:51:30.150 | DEBUG | [] -2025-01-25 17:51:31.150 | DEBUG | [] -2025-01-25 17:51:32.150 | DEBUG | [] -2025-01-25 17:51:33.149 | DEBUG | [] -2025-01-25 17:51:34.149 | DEBUG | [] -2025-01-25 17:51:35.149 | DEBUG | [] -2025-01-25 17:51:36.149 | DEBUG | [] -2025-01-25 17:51:37.149 | DEBUG | [] -2025-01-25 17:51:38.152 | DEBUG | [] -2025-01-25 17:51:39.150 | DEBUG | [] -2025-01-25 17:51:40.152 | DEBUG | [] -2025-01-25 17:51:41.151 | DEBUG | [] -2025-01-25 17:51:42.149 | DEBUG | [] -2025-01-25 17:51:43.152 | DEBUG | [] -2025-01-25 17:51:44.151 | DEBUG | [] -2025-01-25 17:51:45.152 | DEBUG | [] -2025-01-25 17:51:46.150 | DEBUG | [] -2025-01-25 17:51:47.151 | DEBUG | [] -2025-01-25 17:51:48.153 | DEBUG | [] -2025-01-25 17:51:49.151 | DEBUG | [] -2025-01-25 17:51:50.151 | DEBUG | [] -2025-01-25 17:51:51.151 | DEBUG | [] -2025-01-25 17:51:52.151 | DEBUG | [] -2025-01-25 17:51:53.149 | DEBUG | [] -2025-01-25 17:51:54.151 | DEBUG | [] -2025-01-25 17:51:55.149 | DEBUG | [] -2025-01-25 17:52:21.111 | INFO | 日志记录器初始化完成 -2025-01-25 17:52:21.111 | INFO | 配置类初始化完成 -2025-01-25 17:52:21.111 | INFO | 程序配置管理模块初始化完成 -2025-01-25 17:52:22.716 | DEBUG | [] -2025-01-25 17:52:23.712 | DEBUG | [] -2025-01-25 17:52:24.713 | DEBUG | [] -2025-01-25 17:52:25.716 | DEBUG | [] -2025-01-25 17:52:26.716 | DEBUG | [] -2025-01-25 17:52:27.712 | DEBUG | [] -2025-01-25 17:52:28.712 | DEBUG | [] -2025-01-25 17:52:29.713 | DEBUG | [] -2025-01-25 17:52:30.714 | DEBUG | [] -2025-01-25 17:52:31.716 | DEBUG | [] -2025-01-25 17:52:32.715 | DEBUG | [] -2025-01-25 17:52:33.716 | DEBUG | [] -2025-01-25 17:52:34.716 | DEBUG | [] -2025-01-25 17:52:35.715 | DEBUG | [] -2025-01-25 17:52:36.716 | DEBUG | [] -2025-01-25 17:52:37.715 | DEBUG | [] -2025-01-25 17:52:38.715 | DEBUG | [] -2025-01-25 17:52:39.714 | DEBUG | [] -2025-01-25 17:52:40.715 | DEBUG | [] -2025-01-25 17:52:41.716 | DEBUG | [] -2025-01-25 17:52:42.714 | DEBUG | [] -2025-01-25 17:52:43.716 | DEBUG | [] -2025-01-25 17:52:44.714 | DEBUG | [] -2025-01-25 17:52:45.715 | DEBUG | [] -2025-01-25 17:52:46.713 | DEBUG | [] -2025-01-25 17:52:47.715 | DEBUG | [] -2025-01-25 17:52:48.716 | DEBUG | [] -2025-01-25 17:52:49.715 | DEBUG | [] -2025-01-25 17:52:50.716 | DEBUG | [] -2025-01-25 17:52:51.715 | DEBUG | [] -2025-01-25 17:52:52.714 | DEBUG | [] -2025-01-25 17:52:53.715 | DEBUG | [] -2025-01-25 17:52:54.715 | DEBUG | [] -2025-01-25 17:52:55.714 | DEBUG | [] -2025-01-25 17:52:56.714 | DEBUG | [] -2025-01-25 17:52:57.714 | DEBUG | [] -2025-01-25 17:52:58.714 | DEBUG | [] -2025-01-25 17:52:59.713 | DEBUG | [] -2025-01-25 17:53:00.713 | DEBUG | [] -2025-01-25 17:53:01.713 | DEBUG | [] -2025-01-25 17:53:02.714 | DEBUG | [] -2025-01-25 17:53:03.714 | DEBUG | [] -2025-01-25 17:53:04.714 | DEBUG | [] -2025-01-25 17:53:05.714 | DEBUG | [] -2025-01-25 17:53:06.713 | DEBUG | [] -2025-01-25 17:53:07.715 | DEBUG | [] -2025-01-25 17:53:08.712 | DEBUG | [] -2025-01-25 17:53:09.713 | DEBUG | [] -2025-01-25 17:53:10.714 | DEBUG | [] -2025-01-25 17:53:11.713 | DEBUG | [] -2025-01-25 17:53:12.716 | DEBUG | [] -2025-01-25 17:53:13.712 | DEBUG | [] -2025-01-25 17:53:14.712 | DEBUG | [] -2025-01-25 17:53:15.712 | DEBUG | [] -2025-01-25 17:53:16.713 | DEBUG | [] -2025-01-25 17:53:17.712 | DEBUG | [] -2025-01-25 17:53:18.713 | DEBUG | [] -2025-01-25 17:53:19.714 | DEBUG | [] -2025-01-25 17:53:20.717 | DEBUG | [] -2025-01-25 17:53:21.714 | DEBUG | [] -2025-01-25 17:53:22.714 | DEBUG | [] -2025-01-25 17:53:23.715 | DEBUG | [] -2025-01-25 17:53:24.715 | DEBUG | [] -2025-01-25 17:53:25.714 | DEBUG | [] -2025-01-25 17:53:26.716 | DEBUG | [] -2025-01-25 17:53:27.714 | DEBUG | [] -2025-01-25 17:53:28.714 | DEBUG | [] -2025-01-25 17:53:29.713 | DEBUG | [] -2025-01-25 17:53:30.714 | DEBUG | [] -2025-01-25 17:53:31.714 | DEBUG | [] -2025-01-25 17:53:32.716 | DEBUG | [] -2025-01-25 17:53:33.715 | DEBUG | [] -2025-01-25 17:53:34.714 | DEBUG | [] -2025-01-25 17:53:35.714 | DEBUG | [] -2025-01-25 17:53:36.715 | DEBUG | [] -2025-01-25 17:53:37.713 | DEBUG | [] -2025-01-25 17:53:38.716 | DEBUG | [] -2025-01-25 17:53:39.713 | DEBUG | [] -2025-01-25 17:53:40.715 | DEBUG | [] -2025-01-25 17:53:41.715 | DEBUG | [] -2025-01-25 17:53:42.715 | DEBUG | [] -2025-01-25 17:53:43.712 | DEBUG | [] -2025-01-25 17:53:44.714 | DEBUG | [] -2025-01-25 17:53:45.714 | DEBUG | [] -2025-01-25 17:53:46.714 | DEBUG | [] -2025-01-25 17:53:47.713 | DEBUG | [] -2025-01-25 17:53:48.713 | DEBUG | [] -2025-01-25 17:53:49.712 | DEBUG | [] -2025-01-25 17:53:50.712 | DEBUG | [] -2025-01-25 17:53:51.712 | DEBUG | [] -2025-01-25 17:53:52.716 | DEBUG | [] -2025-01-25 17:53:53.712 | DEBUG | [] -2025-01-25 17:53:54.712 | DEBUG | [] -2025-01-25 17:53:55.714 | DEBUG | [] -2025-01-25 17:53:56.712 | DEBUG | [] -2025-01-25 17:53:57.715 | DEBUG | [] -2025-01-25 17:53:58.713 | DEBUG | [] -2025-01-25 17:53:59.713 | DEBUG | [] -2025-01-25 17:54:00.713 | DEBUG | [] -2025-01-25 17:54:01.713 | DEBUG | [] -2025-01-25 17:54:02.713 | DEBUG | [] -2025-01-25 17:54:03.716 | DEBUG | [] -2025-01-25 17:54:04.716 | DEBUG | [] -2025-01-25 17:54:05.715 | DEBUG | [] -2025-01-25 17:54:06.716 | DEBUG | [] -2025-01-25 17:54:07.715 | DEBUG | [] -2025-01-25 17:54:08.712 | DEBUG | [] -2025-01-25 17:54:09.712 | DEBUG | [] -2025-01-25 17:54:10.716 | DEBUG | [] -2025-01-25 17:54:11.714 | DEBUG | [] -2025-01-25 17:54:12.714 | DEBUG | [] -2025-01-25 17:54:13.713 | DEBUG | [] -2025-01-25 17:54:14.716 | DEBUG | [] -2025-01-25 17:54:15.714 | DEBUG | [] -2025-01-25 17:54:16.714 | DEBUG | [] -2025-01-25 17:54:17.714 | DEBUG | [] -2025-01-25 17:54:18.715 | DEBUG | [] -2025-01-25 17:54:19.713 | DEBUG | [] -2025-01-25 17:54:20.714 | DEBUG | [] -2025-01-25 17:54:21.714 | DEBUG | [] -2025-01-25 17:54:22.822 | DEBUG | [] -2025-01-25 17:54:23.714 | DEBUG | [] -2025-01-25 17:54:24.714 | DEBUG | [] -2025-01-25 17:54:25.711 | DEBUG | [] -2025-01-25 17:54:26.714 | INFO | 按时间调起任务:调度队列_1 -2025-01-25 17:54:26.715 | INFO | 任务开始:调度队列_1 -2025-01-25 17:54:26.740 | DEBUG | ['调度队列_1'] -2025-01-25 17:54:26.741 | INFO | 任务开始:脚本_2 -2025-01-25 17:54:27.714 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 17:54:28.713 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 17:54:29.791 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 17:54:30.712 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 17:54:31.713 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 17:54:32.724 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 17:54:33.713 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 17:54:34.080 | INFO | 中止任务:调度队列_1 -2025-01-25 17:54:34.083 | INFO | 申请中止本次任务 -2025-01-25 17:54:37.360 | INFO | 任务完成:脚本_2 -2025-01-25 17:54:37.362 | DEBUG | ['调度队列_1'] -2025-01-25 17:54:37.364 | INFO | 任务结束:调度队列_1 -2025-01-25 17:54:37.713 | DEBUG | [] -2025-01-25 17:54:38.712 | DEBUG | [] -2025-01-25 17:54:39.714 | DEBUG | [] -2025-01-25 17:54:40.721 | DEBUG | [] -2025-01-25 17:54:41.713 | DEBUG | [] -2025-01-25 17:54:42.712 | DEBUG | [] -2025-01-25 17:54:43.713 | DEBUG | [] -2025-01-25 17:54:44.713 | DEBUG | [] -2025-01-25 17:54:45.713 | DEBUG | [] -2025-01-25 17:54:46.716 | DEBUG | [] -2025-01-25 17:54:47.716 | DEBUG | [] -2025-01-25 17:54:48.711 | DEBUG | [] -2025-01-25 17:54:49.716 | DEBUG | [] -2025-01-25 17:54:50.715 | DEBUG | [] -2025-01-25 17:54:51.714 | DEBUG | [] -2025-01-25 17:54:52.713 | DEBUG | [] -2025-01-25 17:54:53.715 | DEBUG | [] -2025-01-25 17:54:54.716 | DEBUG | [] -2025-01-25 17:54:55.715 | DEBUG | [] -2025-01-25 17:54:56.716 | DEBUG | [] -2025-01-25 17:54:57.712 | DEBUG | [] -2025-01-25 17:54:58.714 | DEBUG | [] -2025-01-25 17:54:59.714 | DEBUG | [] -2025-01-25 18:09:40.335 | INFO | 日志记录器初始化完成 -2025-01-25 18:09:40.335 | INFO | 配置类初始化完成 -2025-01-25 18:09:40.335 | INFO | 程序配置管理模块初始化完成 -2025-01-25 18:09:40.764 | INFO | 日志记录器初始化完成 -2025-01-25 18:09:40.765 | INFO | 配置类初始化完成 -2025-01-25 18:09:40.765 | INFO | 程序配置管理模块初始化完成 -2025-01-25 18:09:40.764 | INFO | 日志记录器初始化完成 -2025-01-25 18:09:40.765 | INFO | 配置类初始化完成 -2025-01-25 18:09:40.765 | INFO | 程序配置管理模块初始化完成 -2025-01-25 18:09:42.324 | DEBUG | [] -2025-01-25 18:09:42.324 | DEBUG | [] -2025-01-25 18:09:43.324 | DEBUG | [] -2025-01-25 18:09:43.324 | DEBUG | [] -2025-01-25 18:09:44.325 | DEBUG | [] -2025-01-25 18:09:44.325 | DEBUG | [] -2025-01-25 18:09:45.325 | DEBUG | [] -2025-01-25 18:09:45.325 | DEBUG | [] -2025-01-25 18:09:46.325 | DEBUG | [] -2025-01-25 18:09:46.325 | DEBUG | [] -2025-01-25 18:09:47.325 | DEBUG | [] -2025-01-25 18:09:47.325 | DEBUG | [] -2025-01-25 18:16:01.090 | INFO | 日志记录器初始化完成 -2025-01-25 18:16:01.091 | INFO | 配置类初始化完成 -2025-01-25 18:16:01.091 | INFO | 程序配置管理模块初始化完成 -2025-01-25 18:16:01.509 | INFO | 日志记录器初始化完成 -2025-01-25 18:16:01.509 | INFO | 配置类初始化完成 -2025-01-25 18:16:01.510 | INFO | 程序配置管理模块初始化完成 -2025-01-25 18:16:01.509 | INFO | 日志记录器初始化完成 -2025-01-25 18:16:01.509 | INFO | 配置类初始化完成 -2025-01-25 18:16:01.510 | INFO | 程序配置管理模块初始化完成 -2025-01-25 18:16:03.135 | DEBUG | [] -2025-01-25 18:16:03.135 | DEBUG | [] -2025-01-25 18:16:04.136 | DEBUG | [] -2025-01-25 18:16:04.136 | DEBUG | [] -2025-01-25 18:16:05.135 | DEBUG | [] -2025-01-25 18:16:05.135 | DEBUG | [] -2025-01-25 18:16:06.135 | DEBUG | [] -2025-01-25 18:16:06.135 | DEBUG | [] -2025-01-25 18:16:07.135 | DEBUG | [] -2025-01-25 18:16:07.135 | DEBUG | [] -2025-01-25 18:16:08.135 | DEBUG | [] -2025-01-25 18:16:08.135 | DEBUG | [] -2025-01-25 18:16:09.135 | DEBUG | [] -2025-01-25 18:16:09.135 | DEBUG | [] -2025-01-25 18:16:10.135 | DEBUG | [] -2025-01-25 18:16:10.135 | DEBUG | [] -2025-01-25 18:16:11.134 | DEBUG | [] -2025-01-25 18:16:11.134 | DEBUG | [] -2025-01-25 18:16:12.135 | DEBUG | [] -2025-01-25 18:16:12.135 | DEBUG | [] -2025-01-25 18:16:13.134 | DEBUG | [] -2025-01-25 18:16:13.134 | DEBUG | [] -2025-01-25 18:16:14.134 | DEBUG | [] -2025-01-25 18:16:14.134 | DEBUG | [] -2025-01-25 18:16:15.134 | DEBUG | [] -2025-01-25 18:16:15.134 | DEBUG | [] -2025-01-25 18:16:16.134 | DEBUG | [] -2025-01-25 18:16:16.134 | DEBUG | [] -2025-01-25 18:16:17.139 | DEBUG | [] -2025-01-25 18:16:17.139 | DEBUG | [] -2025-01-25 18:16:18.139 | DEBUG | [] -2025-01-25 18:16:18.139 | DEBUG | [] -2025-01-25 18:16:19.136 | DEBUG | [] -2025-01-25 18:16:19.136 | DEBUG | [] -2025-01-25 18:16:20.133 | DEBUG | [] -2025-01-25 18:16:20.133 | DEBUG | [] -2025-01-25 18:16:21.141 | DEBUG | [] -2025-01-25 18:16:21.141 | DEBUG | [] -2025-01-25 18:16:22.141 | DEBUG | [] -2025-01-25 18:16:22.141 | DEBUG | [] -2025-01-25 18:16:23.138 | INFO | 按时间调起任务:调度队列_1 -2025-01-25 18:16:23.138 | INFO | 按时间调起任务:调度队列_1 -2025-01-25 18:16:23.140 | INFO | 任务开始:调度队列_1 -2025-01-25 18:16:23.140 | INFO | 任务开始:调度队列_1 -2025-01-25 18:16:23.166 | DEBUG | ['调度队列_1'] -2025-01-25 18:16:23.166 | DEBUG | ['调度队列_1'] -2025-01-25 18:16:23.167 | INFO | 任务开始:脚本_2 -2025-01-25 18:16:23.167 | INFO | 任务开始:脚本_2 -2025-01-25 18:16:24.137 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 18:16:24.137 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 18:16:25.134 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 18:16:25.134 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 18:16:26.213 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 18:16:26.213 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 18:16:26.243 | INFO | 中止任务:调度队列_1 -2025-01-25 18:16:26.243 | INFO | 中止任务:调度队列_1 -2025-01-25 18:16:26.279 | INFO | 申请中止本次任务 -2025-01-25 18:16:26.279 | INFO | 申请中止本次任务 -2025-01-25 18:16:30.407 | INFO | 任务完成:脚本_2 -2025-01-25 18:16:30.407 | INFO | 任务完成:脚本_2 -2025-01-25 18:16:30.410 | DEBUG | ['调度队列_1'] -2025-01-25 18:16:30.410 | DEBUG | ['调度队列_1'] -2025-01-25 18:16:30.414 | INFO | 任务结束:调度队列_1 -2025-01-25 18:16:30.414 | INFO | 任务结束:调度队列_1 -2025-01-25 18:16:31.137 | DEBUG | [] -2025-01-25 18:16:31.137 | DEBUG | [] -2025-01-25 18:16:32.137 | DEBUG | [] -2025-01-25 18:16:32.137 | DEBUG | [] -2025-01-25 18:16:33.139 | DEBUG | [] -2025-01-25 18:16:33.139 | DEBUG | [] -2025-01-25 18:16:34.137 | DEBUG | [] -2025-01-25 18:16:34.137 | DEBUG | [] -2025-01-25 18:16:35.137 | DEBUG | [] -2025-01-25 18:16:35.137 | DEBUG | [] -2025-01-25 18:16:36.137 | DEBUG | [] -2025-01-25 18:16:36.137 | DEBUG | [] -2025-01-25 18:16:37.138 | DEBUG | [] -2025-01-25 18:16:37.138 | DEBUG | [] -2025-01-25 18:16:38.137 | DEBUG | [] -2025-01-25 18:16:38.137 | DEBUG | [] -2025-01-25 18:26:09.413 | INFO | 日志记录器初始化完成 -2025-01-25 18:26:09.413 | INFO | 配置类初始化完成 -2025-01-25 18:26:09.413 | INFO | 程序配置管理模块初始化完成 -2025-01-25 18:26:09.835 | INFO | 日志记录器初始化完成 -2025-01-25 18:26:09.835 | INFO | 配置类初始化完成 -2025-01-25 18:26:09.836 | INFO | 程序配置管理模块初始化完成 -2025-01-25 18:26:09.835 | INFO | 日志记录器初始化完成 -2025-01-25 18:26:09.835 | INFO | 配置类初始化完成 -2025-01-25 18:26:09.836 | INFO | 程序配置管理模块初始化完成 -2025-01-25 18:26:11.400 | DEBUG | [] -2025-01-25 18:26:11.400 | DEBUG | [] -2025-01-25 18:26:12.398 | DEBUG | [] -2025-01-25 18:26:12.398 | DEBUG | [] -2025-01-25 18:26:13.802 | DEBUG | [] -2025-01-25 18:26:13.802 | DEBUG | [] -2025-01-25 18:26:14.399 | DEBUG | [] -2025-01-25 18:26:14.399 | DEBUG | [] -2025-01-25 18:26:15.403 | DEBUG | [] -2025-01-25 18:26:15.403 | DEBUG | [] -2025-01-25 18:26:16.404 | DEBUG | [] -2025-01-25 18:26:16.404 | DEBUG | [] -2025-01-25 18:26:17.405 | DEBUG | [] -2025-01-25 18:26:17.405 | DEBUG | [] -2025-01-25 18:26:18.405 | DEBUG | [] -2025-01-25 18:26:18.405 | DEBUG | [] -2025-01-25 18:26:19.405 | INFO | 按时间调起任务:调度队列_1 -2025-01-25 18:26:19.405 | INFO | 按时间调起任务:调度队列_1 -2025-01-25 18:26:19.406 | INFO | 任务开始:调度队列_1 -2025-01-25 18:26:19.406 | INFO | 任务开始:调度队列_1 -2025-01-25 18:26:19.425 | DEBUG | ['调度队列_1'] -2025-01-25 18:26:19.425 | DEBUG | ['调度队列_1'] -2025-01-25 18:26:19.426 | INFO | 任务开始:脚本_2 -2025-01-25 18:26:19.426 | INFO | 任务开始:脚本_2 -2025-01-25 18:26:20.414 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 18:26:20.414 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 18:26:21.405 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 18:26:21.405 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 18:26:22.468 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 18:26:22.468 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 18:26:22.478 | INFO | 中止任务:调度队列_1 -2025-01-25 18:26:22.478 | INFO | 中止任务:调度队列_1 -2025-01-25 18:26:22.518 | INFO | 申请中止本次任务 -2025-01-25 18:26:22.518 | INFO | 申请中止本次任务 -2025-01-25 18:26:26.024 | INFO | 任务完成:脚本_2 -2025-01-25 18:26:26.024 | INFO | 任务完成:脚本_2 -2025-01-25 18:26:26.027 | DEBUG | ['调度队列_1'] -2025-01-25 18:26:26.027 | DEBUG | ['调度队列_1'] -2025-01-25 18:26:26.031 | INFO | 任务结束:调度队列_1 -2025-01-25 18:26:26.031 | INFO | 任务结束:调度队列_1 -2025-01-25 18:26:26.446 | DEBUG | [] -2025-01-25 18:26:26.446 | DEBUG | [] -2025-01-25 18:26:27.404 | DEBUG | [] -2025-01-25 18:26:27.404 | DEBUG | [] -2025-01-25 18:26:28.404 | DEBUG | [] -2025-01-25 18:26:28.404 | DEBUG | [] -2025-01-25 18:26:29.402 | DEBUG | [] -2025-01-25 18:26:29.402 | DEBUG | [] -2025-01-25 18:26:30.400 | DEBUG | [] -2025-01-25 18:26:30.400 | DEBUG | [] -2025-01-25 18:26:31.403 | DEBUG | [] -2025-01-25 18:26:31.403 | DEBUG | [] -2025-01-25 18:26:32.405 | DEBUG | [] -2025-01-25 18:26:32.405 | DEBUG | [] -2025-01-25 18:26:33.403 | DEBUG | [] -2025-01-25 18:26:33.403 | DEBUG | [] -2025-01-25 18:26:34.403 | DEBUG | [] -2025-01-25 18:26:34.403 | DEBUG | [] -2025-01-25 18:33:13.458 | INFO | 日志记录器初始化完成 -2025-01-25 18:33:13.459 | INFO | 配置类初始化完成 -2025-01-25 18:33:13.459 | INFO | 程序配置管理模块初始化完成 -2025-01-25 19:54:36.822 | INFO | 日志记录器初始化完成 -2025-01-25 19:54:36.822 | INFO | 配置类初始化完成 -2025-01-25 19:54:36.822 | INFO | 程序配置管理模块初始化完成 -2025-01-25 19:56:27.107 | INFO | 日志记录器初始化完成 -2025-01-25 19:56:27.107 | INFO | 配置类初始化完成 -2025-01-25 19:56:27.107 | INFO | 程序配置管理模块初始化完成 -2025-01-25 19:56:50.749 | INFO | 日志记录器初始化完成 -2025-01-25 19:56:50.749 | INFO | 配置类初始化完成 -2025-01-25 19:56:50.749 | INFO | 程序配置管理模块初始化完成 -2025-01-25 19:58:05.103 | INFO | 日志记录器初始化完成 -2025-01-25 19:58:05.103 | INFO | 配置类初始化完成 -2025-01-25 19:58:05.104 | INFO | 程序配置管理模块初始化完成 -2025-01-25 19:59:44.416 | INFO | 日志记录器初始化完成 -2025-01-25 19:59:44.417 | INFO | 配置类初始化完成 -2025-01-25 19:59:44.417 | INFO | 程序配置管理模块初始化完成 -2025-01-25 20:00:18.237 | INFO | 日志记录器初始化完成 -2025-01-25 20:00:18.237 | INFO | 配置类初始化完成 -2025-01-25 20:00:18.237 | INFO | 程序配置管理模块初始化完成 -2025-01-25 20:01:05.945 | INFO | 日志记录器初始化完成 -2025-01-25 20:01:05.945 | INFO | 配置类初始化完成 -2025-01-25 20:01:05.945 | INFO | 程序配置管理模块初始化完成 -2025-01-25 20:01:38.131 | INFO | 日志记录器初始化完成 -2025-01-25 20:01:38.131 | INFO | 配置类初始化完成 -2025-01-25 20:01:38.131 | INFO | 程序配置管理模块初始化完成 -2025-01-25 20:02:37.816 | INFO | 日志记录器初始化完成 -2025-01-25 20:02:37.816 | INFO | 配置类初始化完成 -2025-01-25 20:02:37.816 | INFO | 程序配置管理模块初始化完成 -2025-01-25 20:29:29.801 | INFO | 日志记录器初始化完成 -2025-01-25 20:29:29.801 | INFO | 配置类初始化完成 -2025-01-25 20:29:29.801 | INFO | 程序配置管理模块初始化完成 -2025-01-25 20:29:52.719 | INFO | 日志记录器初始化完成 -2025-01-25 20:29:52.719 | INFO | 配置类初始化完成 -2025-01-25 20:29:52.720 | INFO | 程序配置管理模块初始化完成 -2025-01-25 20:30:13.394 | INFO | 日志记录器初始化完成 -2025-01-25 20:30:13.394 | INFO | 配置类初始化完成 -2025-01-25 20:30:13.395 | INFO | 程序配置管理模块初始化完成 -2025-01-25 20:30:31.331 | INFO | 日志记录器初始化完成 -2025-01-25 20:30:31.331 | INFO | 配置类初始化完成 -2025-01-25 20:30:31.332 | INFO | 程序配置管理模块初始化完成 -2025-01-25 20:30:58.949 | INFO | 日志记录器初始化完成 -2025-01-25 20:30:58.950 | INFO | 配置类初始化完成 -2025-01-25 20:30:58.950 | INFO | 程序配置管理模块初始化完成 -2025-01-25 20:31:19.002 | INFO | 日志记录器初始化完成 -2025-01-25 20:31:19.002 | INFO | 配置类初始化完成 -2025-01-25 20:31:19.002 | INFO | 程序配置管理模块初始化完成 -2025-01-25 20:31:35.661 | INFO | 日志记录器初始化完成 -2025-01-25 20:31:35.661 | INFO | 配置类初始化完成 -2025-01-25 20:31:35.662 | INFO | 程序配置管理模块初始化完成 -2025-01-25 20:31:37.764 | DEBUG | [] -2025-01-25 20:31:38.743 | DEBUG | [] -2025-01-25 20:31:39.742 | DEBUG | [] -2025-01-25 20:31:40.749 | DEBUG | [] -2025-01-25 20:31:41.748 | DEBUG | [] -2025-01-25 20:31:42.746 | DEBUG | [] -2025-01-25 20:31:43.822 | DEBUG | [] -2025-01-25 20:31:44.748 | DEBUG | [] -2025-01-25 20:31:45.747 | DEBUG | [] -2025-01-25 20:31:46.743 | DEBUG | [] -2025-01-25 20:31:47.747 | DEBUG | [] -2025-01-25 20:31:48.748 | DEBUG | [] -2025-01-25 20:31:49.748 | DEBUG | [] -2025-01-25 20:31:50.747 | DEBUG | [] -2025-01-25 20:31:51.747 | INFO | 按时间调起任务:调度队列_1 -2025-01-25 20:31:51.747 | INFO | 任务开始:调度队列_1 -2025-01-25 20:31:51.753 | DEBUG | ['调度队列_1'] -2025-01-25 20:31:52.743 | DEBUG | ['调度队列_1'] -2025-01-25 20:31:53.747 | DEBUG | ['调度队列_1'] -2025-01-25 20:31:54.747 | DEBUG | ['调度队列_1'] -2025-01-25 20:32:23.144 | INFO | 日志记录器初始化完成 -2025-01-25 20:32:23.146 | INFO | 配置类初始化完成 -2025-01-25 20:32:23.146 | INFO | 程序配置管理模块初始化完成 -2025-01-25 20:32:25.221 | DEBUG | [] -2025-01-25 20:32:25.232 | DEBUG | [] -2025-01-25 20:32:26.228 | DEBUG | [] -2025-01-25 20:32:27.609 | DEBUG | [] -2025-01-25 20:32:28.226 | DEBUG | [] -2025-01-25 20:32:29.233 | DEBUG | [] -2025-01-25 20:32:30.228 | INFO | 按时间调起任务:调度队列_1 -2025-01-25 20:32:30.229 | INFO | 任务开始:调度队列_1 -2025-01-25 20:32:30.251 | DEBUG | ['调度队列_1'] -2025-01-25 20:32:30.252 | INFO | 任务开始:脚本_2 -2025-01-25 20:32:39.557 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 20:32:40.232 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 20:32:41.232 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 20:32:42.236 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 20:32:43.231 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 20:32:44.230 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 20:33:26.084 | INFO | 日志记录器初始化完成 -2025-01-25 20:33:26.084 | INFO | 配置类初始化完成 -2025-01-25 20:33:26.085 | INFO | 程序配置管理模块初始化完成 -2025-01-25 20:33:28.172 | DEBUG | [] -2025-01-25 20:33:29.165 | DEBUG | [] -2025-01-25 20:33:30.167 | DEBUG | [] -2025-01-25 20:33:31.166 | DEBUG | [] -2025-01-25 20:33:32.170 | DEBUG | [] -2025-01-25 20:33:33.170 | DEBUG | [] -2025-01-25 20:33:34.170 | INFO | 按时间调起任务:调度队列_1 -2025-01-25 20:33:34.170 | INFO | 任务开始:调度队列_1 -2025-01-25 20:33:34.192 | DEBUG | ['调度队列_1'] -2025-01-25 20:33:34.194 | INFO | 任务开始:脚本_2 -2025-01-25 20:33:35.171 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 20:33:36.166 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 20:33:37.230 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 20:33:38.168 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 20:33:39.172 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 20:33:40.216 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 20:33:41.171 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 20:33:42.169 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 20:33:43.169 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-25 20:33:43.184 | INFO | 中止任务:调度队列_1 -2025-01-25 20:33:43.187 | INFO | 申请中止本次任务 -2025-01-25 20:33:46.901 | INFO | 任务完成:脚本_2 -2025-01-25 20:33:46.903 | DEBUG | ['调度队列_1'] -2025-01-25 20:33:46.906 | INFO | 任务结束:调度队列_1 -2025-01-25 20:33:47.170 | DEBUG | [] -2025-01-25 20:33:48.169 | DEBUG | [] -2025-01-25 20:33:49.169 | DEBUG | [] -2025-01-25 20:33:50.170 | DEBUG | [] -2025-01-25 20:33:51.169 | DEBUG | [] -2025-01-25 20:33:52.167 | DEBUG | [] -2025-01-25 20:33:53.446 | DEBUG | [] -2025-01-25 20:33:54.167 | DEBUG | [] -2025-01-25 20:33:55.168 | DEBUG | [] -2025-01-25 20:33:56.168 | DEBUG | [] -2025-01-25 20:33:57.167 | DEBUG | [] -2025-01-25 20:41:49.496 | INFO | 日志记录器初始化完成 -2025-01-25 20:41:49.496 | INFO | 配置类初始化完成 -2025-01-25 20:41:49.497 | INFO | 程序配置管理模块初始化完成 -2025-01-25 20:41:51.450 | DEBUG | [] -2025-01-25 20:41:51.575 | DEBUG | [] -2025-01-25 20:41:52.574 | DEBUG | [] -2025-01-25 20:41:53.575 | DEBUG | [] -2025-01-25 20:41:54.574 | DEBUG | [] -2025-01-25 20:41:55.575 | DEBUG | [] -2025-01-25 20:41:56.574 | DEBUG | [] -2025-01-25 20:41:57.574 | DEBUG | [] -2025-01-25 20:41:58.575 | DEBUG | [] -2025-01-25 20:41:59.574 | DEBUG | [] -2025-01-25 20:42:00.574 | DEBUG | [] -2025-01-25 20:42:01.573 | DEBUG | [] -2025-01-25 20:42:02.573 | DEBUG | [] -2025-01-25 20:42:03.573 | DEBUG | [] -2025-01-25 20:42:04.573 | DEBUG | [] -2025-01-25 20:42:05.574 | DEBUG | [] -2025-01-25 20:42:06.574 | DEBUG | [] -2025-01-25 20:42:07.574 | DEBUG | [] -2025-01-25 20:42:08.573 | DEBUG | [] -2025-01-25 20:42:09.572 | DEBUG | [] -2025-01-25 20:42:10.573 | DEBUG | [] -2025-01-25 20:42:11.573 | DEBUG | [] -2025-01-25 20:42:12.571 | DEBUG | [] -2025-01-25 20:42:13.572 | DEBUG | [] -2025-01-25 20:42:14.573 | DEBUG | [] -2025-01-25 20:42:15.572 | DEBUG | [] -2025-01-25 20:42:16.572 | DEBUG | [] -2025-01-25 20:42:17.574 | DEBUG | [] -2025-01-25 20:42:18.575 | DEBUG | [] -2025-01-25 20:42:19.573 | DEBUG | [] -2025-01-25 20:42:20.580 | DEBUG | [] -2025-01-25 20:42:21.579 | DEBUG | [] -2025-01-25 20:42:22.577 | DEBUG | [] -2025-01-25 20:42:23.576 | DEBUG | [] -2025-01-25 20:42:24.576 | DEBUG | [] -2025-01-25 20:42:25.577 | DEBUG | [] -2025-01-25 20:42:26.574 | DEBUG | [] -2025-01-25 20:42:27.571 | DEBUG | [] -2025-01-25 20:42:28.577 | DEBUG | [] -2025-01-25 20:42:29.576 | DEBUG | [] -2025-01-25 20:42:30.572 | DEBUG | [] -2025-01-25 20:42:31.572 | DEBUG | [] -2025-01-25 20:42:32.572 | DEBUG | [] -2025-01-25 20:42:33.572 | DEBUG | [] -2025-01-25 20:42:34.572 | DEBUG | [] -2025-01-25 20:42:35.577 | DEBUG | [] -2025-01-25 20:42:36.574 | DEBUG | [] -2025-01-25 20:42:37.575 | DEBUG | [] -2025-01-25 20:42:38.578 | DEBUG | [] -2025-01-25 20:42:39.574 | DEBUG | [] -2025-01-25 20:42:40.577 | DEBUG | [] -2025-01-25 20:42:41.574 | DEBUG | [] -2025-01-25 20:42:42.574 | DEBUG | [] -2025-01-25 20:42:43.577 | DEBUG | [] -2025-01-25 20:42:44.572 | DEBUG | [] -2025-01-25 20:42:45.576 | DEBUG | [] -2025-01-25 20:42:46.574 | DEBUG | [] -2025-01-25 20:42:47.573 | DEBUG | [] -2025-01-25 20:42:48.575 | DEBUG | [] -2025-01-25 20:42:49.574 | DEBUG | [] -2025-01-25 20:42:50.575 | DEBUG | [] -2025-01-25 20:42:51.574 | DEBUG | [] -2025-01-25 20:42:52.574 | DEBUG | [] -2025-01-25 20:42:53.573 | DEBUG | [] -2025-01-25 20:42:54.573 | DEBUG | [] -2025-01-25 20:42:55.582 | DEBUG | [] -2025-01-25 20:42:56.573 | DEBUG | [] -2025-01-25 20:42:57.580 | DEBUG | [] -2025-01-25 20:42:58.572 | DEBUG | [] -2025-01-25 20:42:59.573 | DEBUG | [] -2025-01-25 20:43:00.575 | DEBUG | [] -2025-01-25 20:43:01.571 | DEBUG | [] -2025-01-25 20:43:02.574 | DEBUG | [] -2025-01-25 20:43:03.578 | DEBUG | [] -2025-01-25 20:43:04.573 | DEBUG | [] -2025-01-25 20:43:05.574 | DEBUG | [] -2025-01-25 20:43:06.577 | DEBUG | [] -2025-01-25 20:43:07.577 | DEBUG | [] -2025-01-25 20:43:08.572 | DEBUG | [] -2025-01-25 20:43:09.573 | DEBUG | [] -2025-01-25 20:43:10.578 | DEBUG | [] -2025-01-25 20:43:11.578 | DEBUG | [] -2025-01-25 20:43:12.579 | DEBUG | [] -2025-01-25 20:43:13.577 | DEBUG | [] -2025-01-25 20:43:14.576 | DEBUG | [] -2025-01-25 20:43:15.577 | DEBUG | [] -2025-01-25 20:43:16.575 | DEBUG | [] -2025-01-25 20:43:17.577 | DEBUG | [] -2025-01-25 20:43:18.576 | DEBUG | [] -2025-01-25 20:43:19.577 | DEBUG | [] -2025-01-25 20:43:20.577 | DEBUG | [] -2025-01-25 20:43:21.574 | DEBUG | [] -2025-01-25 20:43:22.575 | DEBUG | [] -2025-01-25 20:43:23.575 | DEBUG | [] -2025-01-25 20:43:24.575 | DEBUG | [] -2025-01-25 20:43:25.576 | DEBUG | [] -2025-01-25 20:43:26.574 | DEBUG | [] -2025-01-25 20:43:27.576 | DEBUG | [] -2025-01-25 20:43:28.575 | DEBUG | [] -2025-01-25 20:43:29.574 | DEBUG | [] -2025-01-25 20:43:30.575 | DEBUG | [] -2025-01-25 20:43:31.574 | DEBUG | [] -2025-01-25 20:43:32.572 | DEBUG | [] -2025-01-25 20:43:33.573 | DEBUG | [] -2025-01-25 20:43:34.573 | DEBUG | [] -2025-01-25 20:43:35.572 | DEBUG | [] -2025-01-25 20:43:36.572 | DEBUG | [] -2025-01-25 20:43:37.573 | DEBUG | [] -2025-01-25 20:43:38.573 | DEBUG | [] -2025-01-25 20:43:39.574 | DEBUG | [] -2025-01-25 20:43:40.573 | DEBUG | [] -2025-01-25 20:43:41.572 | DEBUG | [] -2025-01-25 20:43:42.573 | DEBUG | [] -2025-01-25 20:43:43.572 | DEBUG | [] -2025-01-25 20:43:44.575 | DEBUG | [] -2025-01-25 20:43:45.573 | DEBUG | [] -2025-01-25 20:43:46.572 | DEBUG | [] -2025-01-25 20:43:47.571 | DEBUG | [] -2025-01-25 20:43:48.571 | DEBUG | [] -2025-01-25 20:43:49.572 | DEBUG | [] -2025-01-25 20:43:50.578 | DEBUG | [] -2025-01-25 20:43:51.577 | DEBUG | [] -2025-01-25 20:43:52.575 | DEBUG | [] -2025-01-25 20:43:53.573 | DEBUG | [] -2025-01-25 20:43:54.575 | DEBUG | [] -2025-01-25 20:43:55.574 | DEBUG | [] -2025-01-25 20:43:56.573 | DEBUG | [] -2025-01-25 20:43:57.576 | DEBUG | [] -2025-01-25 20:43:58.577 | DEBUG | [] -2025-01-25 20:43:59.576 | DEBUG | [] -2025-01-25 20:44:00.576 | DEBUG | [] -2025-01-25 20:44:01.574 | DEBUG | [] -2025-01-25 20:44:02.575 | DEBUG | [] -2025-01-25 20:44:03.571 | DEBUG | [] -2025-01-25 20:44:04.577 | DEBUG | [] -2025-01-25 20:44:05.576 | DEBUG | [] -2025-01-25 20:44:06.577 | DEBUG | [] -2025-01-25 20:44:07.576 | DEBUG | [] -2025-01-25 20:44:08.576 | DEBUG | [] -2025-01-25 20:44:09.575 | DEBUG | [] -2025-01-25 20:44:10.575 | DEBUG | [] -2025-01-25 20:44:11.575 | DEBUG | [] -2025-01-25 20:44:12.575 | DEBUG | [] -2025-01-25 20:44:13.574 | DEBUG | [] -2025-01-25 20:44:14.575 | DEBUG | [] -2025-01-25 20:44:15.573 | DEBUG | [] -2025-01-25 20:44:16.574 | DEBUG | [] -2025-01-25 20:44:17.574 | DEBUG | [] -2025-01-25 20:44:18.575 | DEBUG | [] -2025-01-25 20:44:19.573 | DEBUG | [] -2025-01-25 20:44:20.574 | DEBUG | [] -2025-01-25 20:44:21.574 | DEBUG | [] -2025-01-25 20:44:22.576 | DEBUG | [] -2025-01-25 20:44:23.572 | DEBUG | [] -2025-01-25 20:44:24.573 | DEBUG | [] -2025-01-25 20:44:25.573 | DEBUG | [] -2025-01-25 20:44:26.573 | DEBUG | [] -2025-01-25 20:44:27.573 | DEBUG | [] -2025-01-25 20:44:28.575 | DEBUG | [] -2025-01-25 20:44:29.573 | DEBUG | [] -2025-01-25 20:44:30.572 | DEBUG | [] -2025-01-25 20:44:31.577 | DEBUG | [] -2025-01-25 20:44:32.577 | DEBUG | [] -2025-01-25 20:44:33.572 | DEBUG | [] -2025-01-25 20:44:34.579 | DEBUG | [] -2025-01-25 20:44:35.571 | DEBUG | [] -2025-01-25 20:44:36.572 | DEBUG | [] -2025-01-25 20:44:37.572 | DEBUG | [] -2025-01-25 20:44:38.571 | DEBUG | [] -2025-01-25 20:44:39.579 | DEBUG | [] -2025-01-25 20:44:40.578 | DEBUG | [] -2025-01-25 20:44:41.579 | DEBUG | [] -2025-01-25 20:44:42.575 | DEBUG | [] -2025-01-25 20:44:43.576 | DEBUG | [] -2025-01-25 20:44:44.575 | DEBUG | [] -2025-01-25 20:44:45.573 | DEBUG | [] -2025-01-25 20:44:46.578 | DEBUG | [] -2025-01-25 20:44:47.577 | DEBUG | [] -2025-01-25 20:44:48.577 | DEBUG | [] -2025-01-25 20:44:49.576 | DEBUG | [] -2025-01-25 20:44:50.576 | DEBUG | [] -2025-01-25 20:44:51.575 | DEBUG | [] -2025-01-25 20:44:52.576 | DEBUG | [] -2025-01-25 20:44:53.572 | DEBUG | [] -2025-01-25 20:44:54.575 | DEBUG | [] -2025-01-25 20:44:55.574 | DEBUG | [] -2025-01-25 20:44:56.576 | DEBUG | [] -2025-01-25 20:44:57.574 | DEBUG | [] -2025-01-25 20:44:58.574 | DEBUG | [] -2025-01-25 20:44:59.574 | DEBUG | [] -2025-01-25 20:45:00.574 | DEBUG | [] -2025-01-25 20:45:01.573 | DEBUG | [] -2025-01-25 20:45:02.575 | DEBUG | [] -2025-01-25 20:45:03.572 | DEBUG | [] -2025-01-25 20:45:04.574 | DEBUG | [] -2025-01-25 20:45:05.574 | DEBUG | [] -2025-01-25 20:45:06.572 | DEBUG | [] -2025-01-25 20:45:07.574 | DEBUG | [] -2025-01-25 20:45:08.573 | DEBUG | [] -2025-01-25 20:45:09.573 | DEBUG | [] -2025-01-25 20:45:10.573 | DEBUG | [] -2025-01-25 20:45:11.573 | DEBUG | [] -2025-01-25 20:45:12.573 | DEBUG | [] -2025-01-25 20:45:13.571 | DEBUG | [] -2025-01-25 20:45:14.578 | DEBUG | [] -2025-01-25 20:45:15.572 | DEBUG | [] -2025-01-25 20:45:16.571 | DEBUG | [] -2025-01-25 20:45:17.579 | DEBUG | [] -2025-01-25 20:45:18.577 | DEBUG | [] -2025-01-25 20:45:19.577 | DEBUG | [] -2025-01-25 20:45:20.571 | DEBUG | [] -2025-01-25 20:45:21.572 | DEBUG | [] -2025-01-25 20:45:22.577 | DEBUG | [] -2025-01-25 20:45:23.573 | DEBUG | [] -2025-01-25 20:45:24.578 | DEBUG | [] -2025-01-25 20:45:25.576 | DEBUG | [] -2025-01-25 20:45:26.576 | DEBUG | [] -2025-01-25 20:45:27.577 | DEBUG | [] -2025-01-25 20:45:28.576 | DEBUG | [] -2025-01-25 20:45:29.574 | DEBUG | [] -2025-01-25 20:45:30.575 | DEBUG | [] -2025-01-25 20:45:31.577 | DEBUG | [] -2025-01-25 20:45:32.577 | DEBUG | [] -2025-01-25 20:45:33.576 | DEBUG | [] -2025-01-25 20:45:34.574 | DEBUG | [] -2025-01-25 20:45:35.573 | DEBUG | [] -2025-01-25 20:45:36.574 | DEBUG | [] -2025-01-25 20:45:37.576 | DEBUG | [] -2025-01-25 20:45:38.574 | DEBUG | [] -2025-01-25 20:45:39.575 | DEBUG | [] -2025-01-25 20:45:40.576 | DEBUG | [] -2025-01-25 20:45:41.574 | DEBUG | [] -2025-01-25 20:45:42.574 | DEBUG | [] -2025-01-25 20:45:43.574 | DEBUG | [] -2025-01-25 20:45:44.574 | DEBUG | [] -2025-01-25 20:45:45.574 | DEBUG | [] -2025-01-25 20:45:46.574 | DEBUG | [] -2025-01-25 20:45:47.575 | DEBUG | [] -2025-01-25 20:45:48.575 | DEBUG | [] -2025-01-25 20:45:49.575 | DEBUG | [] -2025-01-25 20:45:50.575 | DEBUG | [] -2025-01-25 20:45:51.573 | DEBUG | [] -2025-01-25 20:45:52.573 | DEBUG | [] -2025-01-25 20:45:53.574 | DEBUG | [] -2025-01-25 20:45:54.575 | DEBUG | [] -2025-01-25 20:45:55.573 | DEBUG | [] -2025-01-25 20:45:56.573 | DEBUG | [] -2025-01-25 20:45:57.573 | DEBUG | [] -2025-01-25 20:45:58.573 | DEBUG | [] -2025-01-25 20:45:59.579 | DEBUG | [] -2025-01-25 20:46:00.573 | DEBUG | [] -2025-01-25 20:46:01.571 | DEBUG | [] -2025-01-25 20:46:02.572 | DEBUG | [] -2025-01-25 20:46:03.572 | DEBUG | [] -2025-01-25 20:46:04.573 | DEBUG | [] -2025-01-25 20:46:05.572 | DEBUG | [] -2025-01-25 20:46:06.572 | DEBUG | [] -2025-01-25 20:46:07.578 | DEBUG | [] -2025-01-25 20:46:08.578 | DEBUG | [] -2025-01-25 20:46:09.574 | DEBUG | [] -2025-01-25 20:46:10.575 | DEBUG | [] -2025-01-25 20:46:11.576 | DEBUG | [] -2025-01-25 20:46:12.576 | DEBUG | [] -2025-01-25 20:46:13.574 | DEBUG | [] -2025-01-25 20:46:14.575 | DEBUG | [] -2025-01-25 20:46:15.572 | DEBUG | [] -2025-01-25 20:46:16.577 | DEBUG | [] -2025-01-25 20:46:17.577 | DEBUG | [] -2025-01-25 20:46:18.578 | DEBUG | [] -2025-01-25 20:46:19.575 | DEBUG | [] -2025-01-25 20:46:20.574 | DEBUG | [] -2025-01-25 20:46:21.572 | DEBUG | [] -2025-01-25 20:46:22.577 | DEBUG | [] -2025-01-25 20:46:23.574 | DEBUG | [] -2025-01-25 20:46:24.575 | DEBUG | [] -2025-01-25 20:46:25.574 | DEBUG | [] -2025-01-25 20:46:26.573 | DEBUG | [] -2025-01-25 20:46:27.576 | DEBUG | [] -2025-01-25 20:46:28.575 | DEBUG | [] -2025-01-25 20:46:29.576 | DEBUG | [] -2025-01-25 20:46:30.574 | DEBUG | [] -2025-01-25 20:46:31.575 | DEBUG | [] -2025-01-25 20:46:32.575 | DEBUG | [] -2025-01-25 20:46:33.573 | DEBUG | [] -2025-01-25 20:46:34.576 | DEBUG | [] -2025-01-25 20:46:35.573 | DEBUG | [] -2025-01-25 20:46:36.574 | DEBUG | [] -2025-01-25 20:46:37.574 | DEBUG | [] -2025-01-25 20:46:38.572 | DEBUG | [] -2025-01-25 20:46:39.573 | DEBUG | [] -2025-01-25 20:46:40.574 | DEBUG | [] -2025-01-25 20:46:41.573 | DEBUG | [] -2025-01-25 20:46:42.579 | DEBUG | [] -2025-01-25 20:46:43.572 | DEBUG | [] -2025-01-25 20:46:44.573 | DEBUG | [] -2025-01-25 20:46:45.572 | DEBUG | [] -2025-01-25 20:46:46.573 | DEBUG | [] -2025-01-25 20:46:47.574 | DEBUG | [] -2025-01-25 20:46:48.573 | DEBUG | [] -2025-01-25 20:46:49.572 | DEBUG | [] -2025-01-25 20:46:50.573 | DEBUG | [] -2025-01-25 20:46:51.574 | DEBUG | [] -2025-01-25 20:46:52.571 | DEBUG | [] -2025-01-25 20:46:53.580 | DEBUG | [] -2025-01-25 20:46:54.580 | DEBUG | [] -2025-01-25 20:46:55.579 | DEBUG | [] -2025-01-25 20:46:56.572 | DEBUG | [] -2025-01-25 20:46:57.576 | DEBUG | [] -2025-01-25 20:46:58.577 | DEBUG | [] -2025-01-25 20:46:59.577 | DEBUG | [] -2025-01-25 20:47:00.576 | DEBUG | [] -2025-01-25 20:47:01.576 | DEBUG | [] -2025-01-25 20:47:02.574 | DEBUG | [] -2025-01-25 20:47:03.577 | DEBUG | [] -2025-01-25 20:47:04.577 | DEBUG | [] -2025-01-25 20:47:05.577 | DEBUG | [] -2025-01-25 20:47:06.575 | DEBUG | [] -2025-01-25 20:47:07.574 | DEBUG | [] -2025-01-25 20:47:08.573 | DEBUG | [] -2025-01-25 20:47:09.575 | DEBUG | [] -2025-01-25 20:47:10.576 | DEBUG | [] -2025-01-25 20:47:11.574 | DEBUG | [] -2025-01-25 20:47:12.574 | DEBUG | [] -2025-01-25 20:47:13.574 | DEBUG | [] -2025-01-25 20:47:14.576 | DEBUG | [] -2025-01-25 20:47:15.574 | DEBUG | [] -2025-01-25 20:47:16.573 | DEBUG | [] -2025-01-25 20:51:50.441 | INFO | 日志记录器初始化完成 -2025-01-25 20:51:50.441 | INFO | 配置类初始化完成 -2025-01-25 20:51:50.443 | INFO | 程序配置管理模块初始化完成 -2025-01-25 20:52:39.704 | INFO | 日志记录器初始化完成 -2025-01-25 20:52:39.705 | INFO | 配置类初始化完成 -2025-01-25 20:52:39.705 | INFO | 程序配置管理模块初始化完成 -2025-01-25 20:52:41.637 | DEBUG | D:\程序开发\AUTO_MAA, D:\程序开发\AUTO_MAA\main.py -2025-01-25 20:52:41.667 | DEBUG | [] -2025-01-25 20:52:41.779 | DEBUG | [] -2025-01-25 20:52:42.777 | DEBUG | [] -2025-01-25 20:52:43.777 | DEBUG | [] -2025-01-25 20:52:44.779 | DEBUG | [] -2025-01-25 20:59:03.259 | INFO | 日志记录器初始化完成 -2025-01-25 20:59:03.259 | INFO | 配置类初始化完成 -2025-01-25 20:59:03.260 | INFO | 程序配置管理模块初始化完成 -2025-01-25 20:59:05.168 | DEBUG | D:\程序开发\AUTO_MAA, D:\程序开发\AUTO_MAA\main.py -2025-01-25 20:59:05.194 | DEBUG | [] -2025-01-25 20:59:05.337 | DEBUG | [] -2025-01-25 20:59:06.342 | DEBUG | [] -2025-01-25 20:59:07.342 | DEBUG | [] -2025-01-25 20:59:08.338 | DEBUG | [] -2025-01-26 07:39:34.101 | INFO | 日志记录器初始化完成 -2025-01-26 07:39:34.102 | INFO | 配置类初始化完成 -2025-01-26 07:39:34.102 | INFO | 程序配置管理模块初始化完成 -2025-01-26 07:39:36.413 | DEBUG | D:\程序开发\AUTO_MAA, D:\程序开发\AUTO_MAA\main.py -2025-01-26 07:39:36.440 | DEBUG | [] -2025-01-26 07:39:37.196 | DEBUG | [] -2025-01-26 07:39:38.201 | DEBUG | [] -2025-01-26 07:39:39.196 | DEBUG | [] -2025-01-26 07:39:40.195 | DEBUG | [] -2025-01-26 07:39:41.197 | DEBUG | [] -2025-01-26 07:39:42.195 | DEBUG | [] -2025-01-26 07:39:43.074 | WARNING | 未选择调度模式 -2025-01-26 07:39:43.196 | DEBUG | [] -2025-01-26 07:39:44.196 | DEBUG | [] -2025-01-26 07:39:45.197 | DEBUG | [] -2025-01-26 07:39:46.198 | DEBUG | [] -2025-01-26 07:39:47.198 | DEBUG | [] -2025-01-26 07:39:48.198 | DEBUG | [] -2025-01-26 07:39:49.420 | DEBUG | [] -2025-01-26 07:39:50.417 | DEBUG | [] -2025-01-26 07:39:51.417 | DEBUG | [] -2025-01-26 07:39:52.417 | DEBUG | [] -2025-01-26 07:39:53.417 | DEBUG | [] -2025-01-26 07:39:54.417 | DEBUG | [] -2025-01-26 07:40:11.603 | INFO | 日志记录器初始化完成 -2025-01-26 07:40:11.603 | INFO | 配置类初始化完成 -2025-01-26 07:40:11.603 | INFO | 程序配置管理模块初始化完成 -2025-01-26 07:40:13.655 | DEBUG | D:\程序开发\AUTO_MAA, D:\程序开发\AUTO_MAA\main.py -2025-01-26 07:40:13.685 | DEBUG | [] -2025-01-26 07:40:14.682 | DEBUG | [] -2025-01-26 07:40:15.682 | DEBUG | [] -2025-01-26 07:40:16.682 | DEBUG | [] -2025-01-26 07:40:17.682 | DEBUG | [] -2025-01-26 07:40:18.681 | DEBUG | [] -2025-01-26 07:40:19.682 | DEBUG | [] -2025-01-26 07:40:20.682 | DEBUG | [] -2025-01-26 07:40:21.682 | DEBUG | [] -2025-01-26 07:40:22.682 | DEBUG | [] -2025-01-26 07:40:23.682 | DEBUG | [] -2025-01-26 07:40:24.681 | DEBUG | [] -2025-01-26 07:40:25.687 | DEBUG | [] -2025-01-26 07:40:26.682 | DEBUG | [] -2025-01-26 07:40:27.686 | DEBUG | [] -2025-01-26 07:40:28.681 | DEBUG | [] -2025-01-26 07:40:29.687 | DEBUG | [] -2025-01-26 07:40:30.686 | DEBUG | [] -2025-01-26 07:40:31.687 | DEBUG | [] -2025-01-26 07:40:32.679 | DEBUG | [] -2025-01-26 07:40:33.685 | DEBUG | [] -2025-01-26 07:40:34.684 | DEBUG | [] -2025-01-26 07:40:35.686 | DEBUG | [] -2025-01-26 07:40:36.686 | DEBUG | [] -2025-01-26 07:40:37.685 | DEBUG | [] -2025-01-26 07:40:38.685 | DEBUG | [] -2025-01-26 07:40:39.685 | DEBUG | [] -2025-01-26 07:40:40.685 | DEBUG | [] -2025-01-26 07:40:41.685 | DEBUG | [] -2025-01-26 07:40:42.685 | DEBUG | [] -2025-01-26 07:40:43.685 | DEBUG | [] -2025-01-26 07:40:44.684 | DEBUG | [] -2025-01-26 07:40:45.684 | DEBUG | [] -2025-01-26 07:40:46.684 | DEBUG | [] -2025-01-26 07:40:47.683 | DEBUG | [] -2025-01-26 07:40:48.682 | DEBUG | [] -2025-01-26 07:40:49.684 | DEBUG | [] -2025-01-26 07:40:50.684 | DEBUG | [] -2025-01-26 07:40:51.683 | DEBUG | [] -2025-01-26 07:40:52.683 | DEBUG | [] -2025-01-26 07:40:53.683 | DEBUG | [] -2025-01-26 07:40:54.684 | DEBUG | [] -2025-01-26 07:40:55.680 | DEBUG | [] -2025-01-26 07:40:56.682 | DEBUG | [] -2025-01-26 07:40:57.683 | DEBUG | [] -2025-01-26 07:40:58.681 | DEBUG | [] -2025-01-26 07:40:59.684 | DEBUG | [] -2025-01-26 07:41:00.679 | DEBUG | [] -2025-01-26 07:41:01.679 | DEBUG | [] -2025-01-26 07:41:02.681 | DEBUG | [] -2025-01-26 07:41:03.683 | DEBUG | [] -2025-01-26 07:41:04.682 | DEBUG | [] -2025-01-26 07:41:05.682 | DEBUG | [] -2025-01-26 07:41:06.680 | DEBUG | [] -2025-01-26 07:41:07.682 | DEBUG | [] -2025-01-26 07:41:08.681 | DEBUG | [] -2025-01-26 07:41:09.682 | DEBUG | [] -2025-01-26 07:41:10.681 | DEBUG | [] -2025-01-26 07:41:11.681 | DEBUG | [] -2025-01-26 07:41:12.687 | DEBUG | [] -2025-01-26 07:41:13.682 | DEBUG | [] -2025-01-26 07:41:14.694 | DEBUG | [] -2025-01-26 07:41:15.680 | DEBUG | [] -2025-01-26 07:41:16.679 | DEBUG | [] -2025-01-26 07:41:17.686 | DEBUG | [] -2025-01-26 07:41:18.682 | DEBUG | [] -2025-01-26 07:41:19.686 | DEBUG | [] -2025-01-26 07:41:20.686 | DEBUG | [] -2025-01-26 07:41:21.685 | DEBUG | [] -2025-01-26 07:41:22.686 | DEBUG | [] -2025-01-26 07:41:23.685 | DEBUG | [] -2025-01-26 07:41:24.686 | DEBUG | [] -2025-01-26 07:41:25.685 | DEBUG | [] -2025-01-26 07:41:26.686 | DEBUG | [] -2025-01-26 07:41:27.684 | DEBUG | [] -2025-01-26 07:41:28.695 | DEBUG | [] -2025-01-26 07:41:29.684 | DEBUG | [] -2025-01-26 07:41:30.684 | DEBUG | [] -2025-01-26 07:41:31.684 | DEBUG | [] -2025-01-26 07:41:32.684 | DEBUG | [] -2025-01-26 07:41:33.684 | DEBUG | [] -2025-01-26 07:41:34.684 | DEBUG | [] -2025-01-26 07:41:35.684 | DEBUG | [] -2025-01-26 07:41:36.683 | DEBUG | [] -2025-01-26 07:41:37.683 | DEBUG | [] -2025-01-26 07:41:38.683 | DEBUG | [] -2025-01-26 07:41:39.684 | DEBUG | [] -2025-01-26 07:41:40.683 | DEBUG | [] -2025-01-26 07:41:41.683 | DEBUG | [] -2025-01-26 07:41:42.684 | DEBUG | [] -2025-01-26 07:41:43.683 | DEBUG | [] -2025-01-26 07:41:44.697 | DEBUG | [] -2025-01-26 07:41:45.683 | DEBUG | [] -2025-01-26 07:41:46.682 | DEBUG | [] -2025-01-26 07:41:47.683 | DEBUG | [] -2025-01-26 07:41:48.684 | DEBUG | [] -2025-01-26 07:41:49.683 | DEBUG | [] -2025-01-26 07:41:50.681 | DEBUG | [] -2025-01-26 07:41:51.694 | DEBUG | [] -2025-01-26 07:41:52.682 | DEBUG | [] -2025-01-26 07:41:53.682 | DEBUG | [] -2025-01-26 07:43:24.872 | INFO | 日志记录器初始化完成 -2025-01-26 07:43:24.873 | INFO | 配置类初始化完成 -2025-01-26 07:43:24.874 | INFO | 程序配置管理模块初始化完成 -2025-01-26 07:43:26.989 | DEBUG | D:\程序开发\AUTO_MAA, D:\程序开发\AUTO_MAA\main.py -2025-01-26 07:43:27.017 | DEBUG | [] -2025-01-26 07:43:27.946 | DEBUG | [] -2025-01-26 07:43:28.948 | DEBUG | [] -2025-01-26 07:43:29.948 | DEBUG | [] -2025-01-26 07:43:30.951 | DEBUG | [] -2025-01-26 07:43:31.735 | INFO | 用户添加任务:调度队列_1 -2025-01-26 07:43:31.735 | INFO | 任务开始:调度队列_1 -2025-01-26 07:43:31.743 | INFO | 任务开始:脚本_2 -2025-01-26 07:43:32.055 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-26 07:43:32.948 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-26 07:43:33.948 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-26 07:43:35.032 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-26 07:43:35.948 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-26 07:43:36.947 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-26 07:43:37.956 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-26 07:43:38.947 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-26 07:43:39.946 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-26 07:43:40.946 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-26 07:43:42.024 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-26 07:43:42.946 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-26 07:43:43.952 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-26 07:43:44.996 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-26 07:43:45.804 | INFO | 中止任务:调度队列_1 -2025-01-26 07:43:45.809 | INFO | 申请中止本次任务 -2025-01-26 07:43:48.287 | INFO | 任务完成:脚本_2 -2025-01-26 07:43:48.294 | DEBUG | ['调度队列_1'] -2025-01-26 07:43:48.306 | INFO | 任务结束:调度队列_1 -2025-01-26 07:43:48.967 | DEBUG | [] -2025-01-26 07:43:49.963 | DEBUG | [] -2025-01-26 07:43:50.963 | DEBUG | [] -2025-01-26 07:43:51.963 | DEBUG | [] -2025-01-26 07:43:52.962 | DEBUG | [] -2025-01-26 07:43:53.962 | DEBUG | [] -2025-01-26 07:48:36.656 | INFO | 日志记录器初始化完成 -2025-01-26 07:48:36.657 | INFO | 配置类初始化完成 -2025-01-26 07:48:36.657 | INFO | 程序配置管理模块初始化完成 -2025-01-26 07:48:38.736 | DEBUG | D:\程序开发\AUTO_MAA, D:\程序开发\AUTO_MAA\main.py -2025-01-26 07:48:38.765 | DEBUG | [] -2025-01-26 07:48:39.748 | DEBUG | [] -2025-01-26 07:48:40.749 | DEBUG | [] -2025-01-26 07:48:41.743 | DEBUG | [] -2025-01-26 07:48:42.747 | DEBUG | [] -2025-01-26 07:48:43.744 | DEBUG | [] -2025-01-26 07:48:44.748 | DEBUG | [] -2025-01-26 07:48:45.748 | DEBUG | [] -2025-01-26 07:48:46.747 | DEBUG | [] -2025-01-26 07:48:47.748 | DEBUG | [] -2025-01-26 07:48:48.746 | DEBUG | [] -2025-01-26 07:48:49.747 | DEBUG | [] -2025-01-26 07:48:50.748 | DEBUG | [] -2025-01-26 07:48:51.745 | DEBUG | [] -2025-01-26 07:48:52.746 | DEBUG | [] -2025-01-26 07:48:53.746 | DEBUG | [] -2025-01-26 07:48:54.746 | DEBUG | [] -2025-01-26 07:48:55.746 | DEBUG | [] -2025-01-26 07:48:56.746 | DEBUG | [] -2025-01-26 07:48:57.747 | DEBUG | [] -2025-01-26 07:48:58.746 | DEBUG | [] -2025-01-26 07:48:59.746 | DEBUG | [] -2025-01-26 07:49:00.746 | DEBUG | [] -2025-01-26 07:49:01.745 | DEBUG | [] -2025-01-26 07:49:02.745 | DEBUG | [] -2025-01-26 07:49:03.745 | DEBUG | [] -2025-01-26 07:49:04.746 | DEBUG | [] -2025-01-26 07:49:05.744 | DEBUG | [] -2025-01-26 07:49:06.745 | DEBUG | [] -2025-01-26 07:49:07.744 | DEBUG | [] -2025-01-26 07:49:08.744 | DEBUG | [] -2025-01-26 07:49:09.746 | DEBUG | [] -2025-01-26 07:49:10.746 | DEBUG | [] -2025-01-26 07:49:11.745 | DEBUG | [] -2025-01-26 07:49:12.745 | DEBUG | [] -2025-01-26 07:49:13.744 | DEBUG | [] -2025-01-26 07:49:14.745 | DEBUG | [] -2025-01-26 07:49:15.744 | DEBUG | [] -2025-01-26 07:49:16.744 | DEBUG | [] -2025-01-26 07:49:17.744 | DEBUG | [] -2025-01-26 07:49:18.748 | DEBUG | [] -2025-01-26 07:49:19.750 | DEBUG | [] -2025-01-26 07:49:20.743 | DEBUG | [] -2025-01-26 07:49:21.749 | DEBUG | [] -2025-01-26 07:49:22.744 | DEBUG | [] -2025-01-26 07:49:23.749 | DEBUG | [] -2025-01-26 07:49:24.743 | DEBUG | [] -2025-01-26 07:49:25.748 | DEBUG | [] -2025-01-26 07:49:26.748 | DEBUG | [] -2025-01-26 07:49:27.748 | DEBUG | [] -2025-01-26 07:49:28.748 | DEBUG | [] -2025-01-26 07:49:29.749 | DEBUG | [] -2025-01-26 07:49:30.743 | DEBUG | [] -2025-01-26 07:49:31.743 | DEBUG | [] -2025-01-26 07:49:32.745 | DEBUG | [] -2025-01-26 07:49:33.745 | DEBUG | [] -2025-01-26 07:49:34.743 | DEBUG | [] -2025-01-26 07:49:35.743 | DEBUG | [] -2025-01-26 07:49:36.745 | DEBUG | [] -2025-01-26 07:49:37.745 | DEBUG | [] -2025-01-26 07:49:38.745 | DEBUG | [] -2025-01-26 07:49:39.744 | DEBUG | [] -2025-01-26 07:49:40.744 | DEBUG | [] -2025-01-26 07:49:41.745 | DEBUG | [] -2025-01-26 07:49:42.743 | DEBUG | [] -2025-01-26 07:49:43.746 | DEBUG | [] -2025-01-26 07:49:44.743 | DEBUG | [] -2025-01-26 07:49:45.745 | DEBUG | [] -2025-01-26 07:49:46.744 | DEBUG | [] -2025-01-26 07:49:47.746 | DEBUG | [] -2025-01-26 07:49:48.744 | DEBUG | [] -2025-01-26 07:49:49.745 | DEBUG | [] -2025-01-26 07:49:50.745 | DEBUG | [] -2025-01-26 07:49:51.743 | DEBUG | [] -2025-01-26 07:49:52.743 | DEBUG | [] -2025-01-26 07:49:53.744 | DEBUG | [] -2025-01-26 07:49:54.745 | DEBUG | [] -2025-01-26 07:49:55.751 | DEBUG | [] -2025-01-26 07:49:56.743 | DEBUG | [] -2025-01-26 07:49:57.744 | DEBUG | [] -2025-01-26 07:49:58.743 | DEBUG | [] -2025-01-26 07:49:59.744 | DEBUG | [] -2025-01-26 07:50:00.745 | DEBUG | [] -2025-01-26 07:50:01.744 | DEBUG | [] -2025-01-26 07:50:02.745 | DEBUG | [] -2025-01-26 07:50:03.744 | DEBUG | [] -2025-01-26 07:50:04.744 | DEBUG | [] -2025-01-26 07:50:05.744 | DEBUG | [] -2025-01-26 07:50:06.746 | DEBUG | [] -2025-01-26 07:50:07.742 | DEBUG | [] -2025-01-26 07:50:08.749 | DEBUG | [] -2025-01-26 07:50:09.750 | DEBUG | [] -2025-01-26 07:50:10.743 | DEBUG | [] -2025-01-26 07:50:11.748 | DEBUG | [] -2025-01-26 07:50:12.747 | DEBUG | [] -2025-01-26 07:50:13.744 | DEBUG | [] -2025-01-26 07:50:14.747 | DEBUG | [] -2025-01-26 07:50:15.745 | DEBUG | [] -2025-01-26 07:50:16.745 | DEBUG | [] -2025-01-26 07:50:17.889 | DEBUG | [] -2025-01-26 07:50:18.747 | DEBUG | [] -2025-01-26 07:50:19.747 | DEBUG | [] -2025-01-26 07:50:20.749 | DEBUG | [] -2025-01-26 07:50:21.749 | DEBUG | [] -2025-01-26 07:50:22.748 | DEBUG | [] -2025-01-26 07:50:23.747 | DEBUG | [] -2025-01-26 07:50:24.746 | DEBUG | [] -2025-01-26 07:50:25.744 | DEBUG | [] -2025-01-26 07:50:26.886 | DEBUG | [] -2025-01-26 07:50:27.886 | DEBUG | [] -2025-01-26 07:50:28.884 | DEBUG | [] -2025-01-26 07:50:29.885 | DEBUG | [] -2025-01-26 07:50:30.782 | INFO | 用户添加任务:调度队列_1 -2025-01-26 07:50:30.783 | INFO | 任务开始:调度队列_1 -2025-01-26 07:50:30.788 | INFO | 任务开始:脚本_2 -2025-01-26 07:50:30.997 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-26 07:50:31.885 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-26 07:50:32.885 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-26 07:50:34.041 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-26 07:50:34.883 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-26 07:50:35.884 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-26 07:50:36.878 | INFO | 中止任务:调度队列_1 -2025-01-26 07:50:36.880 | INFO | 申请中止本次任务 -2025-01-26 07:50:41.715 | INFO | 任务完成:脚本_2 -2025-01-26 07:50:41.717 | DEBUG | ['调度队列_1'] -2025-01-26 07:50:41.720 | INFO | 任务结束:调度队列_1 -2025-01-26 07:50:41.885 | DEBUG | [] -2025-01-26 07:50:42.884 | DEBUG | [] -2025-01-26 07:50:43.883 | DEBUG | [] -2025-01-26 07:50:44.885 | DEBUG | [] -2025-01-26 07:50:45.883 | DEBUG | [] -2025-01-26 07:50:46.883 | DEBUG | [] -2025-01-26 07:50:47.883 | DEBUG | [] -2025-01-26 07:50:48.884 | DEBUG | [] -2025-01-26 07:56:21.015 | INFO | 日志记录器初始化完成 -2025-01-26 07:56:21.016 | INFO | 配置类初始化完成 -2025-01-26 07:56:21.016 | INFO | 程序配置管理模块初始化完成 -2025-01-26 07:56:23.010 | DEBUG | D:\程序开发\AUTO_MAA, D:\程序开发\AUTO_MAA\main.py -2025-01-26 07:56:23.039 | DEBUG | [] -2025-01-26 07:56:23.087 | DEBUG | [] -2025-01-26 07:56:24.087 | DEBUG | [] -2025-01-26 07:56:25.092 | DEBUG | [] -2025-01-26 07:56:26.091 | DEBUG | [] -2025-01-26 07:56:27.088 | DEBUG | [] -2025-01-26 07:56:27.351 | INFO | 用户添加任务:调度队列_1 -2025-01-26 07:56:27.352 | INFO | 任务开始:调度队列_1 -2025-01-26 07:56:27.357 | INFO | 任务开始:脚本_2 -2025-01-26 07:56:28.092 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-26 07:56:29.189 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-26 07:56:30.087 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-26 07:56:30.863 | INFO | 中止任务:调度队列_1 -2025-01-26 07:56:30.866 | INFO | 申请中止本次任务 -2025-01-26 07:56:34.083 | INFO | 任务完成:脚本_2 -2025-01-26 07:56:34.084 | DEBUG | ['调度队列_1'] -2025-01-26 07:56:34.087 | INFO | 任务结束:调度队列_1 -2025-01-26 07:56:34.097 | DEBUG | [] -2025-01-26 07:56:35.091 | DEBUG | [] -2025-01-26 07:56:36.091 | DEBUG | [] -2025-01-26 07:56:37.090 | DEBUG | [] -2025-01-26 07:56:38.091 | DEBUG | [] -2025-01-26 07:56:39.091 | DEBUG | [] -2025-01-26 07:56:40.091 | DEBUG | [] -2025-01-26 07:56:41.090 | DEBUG | [] -2025-01-26 07:56:42.090 | DEBUG | [] -2025-01-26 07:56:43.089 | DEBUG | [] -2025-01-26 07:56:44.089 | DEBUG | [] -2025-01-26 07:56:45.090 | DEBUG | [] -2025-01-26 07:56:46.089 | DEBUG | [] -2025-01-26 07:56:47.088 | DEBUG | [] -2025-01-26 07:56:48.087 | DEBUG | [] -2025-01-26 07:56:49.088 | DEBUG | [] -2025-01-26 07:56:50.088 | DEBUG | [] -2025-01-26 07:56:51.089 | DEBUG | [] -2025-01-26 07:56:52.088 | DEBUG | [] -2025-01-26 07:56:52.580 | INFO | 用户添加任务:调度队列_1 -2025-01-26 07:56:52.580 | INFO | 任务开始:调度队列_1 -2025-01-26 07:56:52.585 | INFO | 任务开始:脚本_2 -2025-01-26 07:56:53.087 | DEBUG | ['调度队列_1', '脚本_2'] -2025-01-26 07:56:53.750 | INFO | 中止任务:调度队列_1 -2025-01-26 07:56:53.754 | INFO | 申请中止本次任务 -2025-01-26 07:56:56.417 | INFO | 任务完成:脚本_2 -2025-01-26 07:56:56.419 | DEBUG | ['调度队列_1'] -2025-01-26 07:56:56.422 | INFO | 任务结束:调度队列_1 -2025-01-26 07:56:57.086 | DEBUG | [] -2025-01-26 07:56:58.087 | DEBUG | [] -2025-01-26 07:56:59.088 | DEBUG | [] -2025-01-26 07:57:00.087 | DEBUG | [] -2025-01-26 07:57:01.087 | DEBUG | [] -2025-01-26 07:57:02.087 | DEBUG | [] -2025-01-26 07:57:03.088 | DEBUG | [] -2025-01-26 07:57:04.088 | DEBUG | [] -2025-01-26 07:57:05.093 | DEBUG | [] -2025-01-26 07:57:06.086 | DEBUG | [] diff --git a/log.txt b/log.txt deleted file mode 100644 index b9635d9..0000000 --- a/log.txt +++ /dev/null @@ -1,10 +0,0 @@ -任务开始时间:2025-01-23 16:39:04,结束时间:2025-01-23 16:39:12 -已完成数:0,未完成数:4 - -代理未成功的用户: -新用户 - -未开始代理的用户: -新用户 -新用户 -新用户 diff --git a/main.py b/main.py index f311092..ddc8e64 100644 --- a/main.py +++ b/main.py @@ -32,7 +32,8 @@ from qfluentwidgets import FluentTranslator import sys -if __name__ == "__main__": +# @logger.catch +def main(): application = QApplication(sys.argv) QApplication.setAttribute(Qt.AA_DontCreateNativeWidgetSiblings) @@ -46,3 +47,8 @@ if __name__ == "__main__": window.show_ui("显示主窗口") window.start_up_task() sys.exit(application.exec()) + + +if __name__ == "__main__": + + main() diff --git a/resources/gui/main.ui b/resources/gui/main.ui deleted file mode 100644 index 6bf706e..0000000 --- a/resources/gui/main.ui +++ /dev/null @@ -1,1545 +0,0 @@ - - - AUTO_MAA - - - - 0 - 0 - 1218 - 718 - - - - AUTO_MAA - - - - - - 0 - - - - true - - - 用户管理 - - - - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - - - - - 新建 - - - - - - - 删除 - - - - - - - 转为 - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - 显示密码 - - - - - - - 刷新 - - - - - - - - - 0 - - - - - 0 - 0 - 1156 - 542 - - - - 简洁 - - - - - - - 用户名 - - - - - 账号ID - - - - - 服务器 - - - - - 代理天数 - - - - - 状态 - - - - - 执行情况 - - - - - 关卡 - - - - - 备选关卡-1 - - - - - 备选关卡-2 - - - - - 剿灭 - - - - - 自定义基建 - - - - - 密码 - - - - - 备注 - - - - - - - - - - 0 - 0 - 98 - 74 - - - - 高级 - - - - - - - 用户名 - - - - - 代理天数 - - - - - 状态 - - - - - 执行情况 - - - - - 日常 - - - - - 剿灭 - - - - - 密码 - - - - - 备注 - - - - - - - - - - - - - - - - 执行 - - - - - - 定时执行 - - - - - - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - - - true - - - - 20 - 20 - - - - - 20 - 20 - - - - - - - - - - - - - - - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - - - true - - - - 20 - 20 - - - - - 20 - 20 - - - - - - - - - - - - - - - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - - - true - - - - 20 - 20 - - - - - 20 - 20 - - - - - - - - - - - - - - - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - - - true - - - - 20 - 20 - - - - - 20 - 20 - - - - - - - - - - - - - - - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - - - true - - - - 20 - 20 - - - - - 20 - 20 - - - - - - - - - - - - - - - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - - - true - - - - 20 - 20 - - - - - 20 - 20 - - - - - - - - - - - - - - - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - - - true - - - - 20 - 20 - - - - - 20 - 20 - - - - - - - - - - - - - - - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - - - true - - - - 20 - 20 - - - - - 20 - 20 - - - - - - - - - - - - - - - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - - - true - - - - 20 - 20 - - - - - 20 - 20 - - - - - - - - - - - - - - - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - - - true - - - - 20 - 20 - - - - - 20 - 20 - - - - - - - - - - - - - - - - - - - - - - 调度台 - - - - - - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - - - - - 调度器 - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - 开始排查 - - - - - - - 立即执行 - - - - - - - - - - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - - - 代理中 - - - - - - - - - - - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - - - 等待中 - - - - - - - - - - - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - - - 已完成 - - - - - - - - - - - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - - - 异常 - - - - - - - - - - - - - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - - - 日志 - - - - - - - - - - - - - - - - - 设置 - - - - - - MAA设置 - - - - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - - - MAA路径 - - - - - - - - - - 浏览 - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - 设置MAA - - - - - - - - - - - - - 执行限制 - - - - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - - - 日常限制 - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - 140 - 30 - - - - 1 - - - 1024 - - - - - - - 分钟 - - - - - - - - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - - - 剿灭限制 - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - 140 - 30 - - - - 1 - - - 1024 - - - - - - - 分钟 - - - - - - - - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - - - 运行失败重试次数上限 - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - 140 - 30 - - - - 1 - - - 1024 - - - - - - - - - - - - - - - - - - - - AUTO_MAA设置 - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - - - 后台静默代理 - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - 安卓模拟器老板键 - - - - - - - - - - Qt::Orientation::Horizontal - - - - 231 - 20 - - - - - - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - - - 通过邮件通知结果 - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - 收信邮箱地址 - - - - - - - 仅推送异常信息 - - - - - - - - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - - - 最小化到托盘 - - - - - - - Qt::Orientation::Horizontal - - - - 149 - 20 - - - - - - - - - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - - - 启动AUTO_MAA后直接代理 - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - - - Qt::Orientation::Horizontal - - - - 32 - 20 - - - - - - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - - - 开机自动启动AUTO_MAA - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - - - AUTO_MAA启动时禁止电脑休眠 - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - - - Qt::Orientation::Horizontal - - - - 311 - 20 - - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - 修改管理密钥 - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - 检查版本更新 - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - - - - - - tips - - - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> -p, li { white-space: pre-wrap; } -hr { height: 1px; border-width: 0; } -li.unchecked::marker { content: "\2610"; } -li.checked::marker { content: "\2612"; } -</style></head><body style=" font-family:'Microsoft YaHei UI'; font-size:9pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">致用户:</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 这是AUTO_MAA_v4.2.0-beta.1,项目初步进行界面美化。希望大家喜欢这个新年礼物!</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 使用本程序前,请先仔细阅读README.md。</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 对于B服用户,由于我们无权替您同意用户协议,若出现用户协议弹窗,您需要自行完成确认,否则可能造成MAA卡死,代理任务失败。</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 由于用户与项目贡献者的稀缺,我们无法确保正式版足够完善,还望谅解。遇到问题时,请先更新到最新版本试试。若仍无法解决,请在官方仓库发布Issues求助。</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 官方仓库:<a href="https://github.com/DLmaster361/AUTO_MAA/"><span style=" text-decoration: underline; color:#004194;">DLmaster361/AUTO_MAA</span></a></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 官方QQ交流群:<a href="https://qm.qq.com/cgi-bin/qm/qr?k=EET-OL_o52KPlDLEmbzaNkKUXuyQ4WZY&amp;jump_from=webapi&amp;authKey=6NxGwEu9JAOLHqfdEmNfrZy4tUvC/3ar2j5+Go7Hgf3j+ntAK1VS6SUOLOjYVKTt"><span style=" text-decoration: underline; color:#004194;">957750551</span></a></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 友情推荐项目:<a href="https://git.zhaozuohong.vip/mower-ng"><span style=" text-decoration: underline; color:#004194;">zhaozuohong/mower-ng</span></a> 、 <a href="https://github.com/AegirTech/ArkLights"><span style=" text-decoration: underline; color:#004194;">AegirTech/ArkLights</span></a></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> -<p align="right" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">DLmaster</p></body></html> - - - - - - - 注意:在设置页执行的所有更改,不会对正在执行的任务生效;正在执行任务时,用户管理页无法编辑。 - - - - - - - - - - Qt::Orientation::Vertical - - - - 20 - 40 - - - - - - - - - - - - - PushButton - QPushButton -

    qfluentwidgets
    - - - TimePicker - QTimeEdit -
    qfluentwidgets
    -
    - - TableWidget - QTableWidget -
    qfluentwidgets
    -
    - - LineEdit - QLineEdit -
    qfluentwidgets
    -
    - - SpinBox - QSpinBox -
    qfluentwidgets
    -
    - - CheckBox - QCheckBox -
    qfluentwidgets
    -
    - - TextBrowser - QTextBrowser -
    qfluentwidgets
    -
    - - BodyLabel - QLabel -
    qfluentwidgets
    -
    - - - - diff --git a/resources/version.json b/resources/version.json index cbceef2..9acd203 100644 --- a/resources/version.json +++ b/resources/version.json @@ -1,7 +1,8 @@ { - "main_version": "4.2.0.1", + "main_version": "4.2.1.1", "updater_version": "1.1.0.1", - "announcement": "\n# 这是一个预览版本!\n# 这个版本仅能进行用于展示页面,未实现任何功能!!!\n- 若不慎更新到此版本,请前往官方仓库,下载4.2.0版本压缩包替换本地文件即可回退版本", + "announcement": "\n## 新增功能\n- 调度队列上线,支持MAA多开\n## 修复BUG\n- 添加了一堆BUG(确信)\n## 程序优化\n- 界面重构,引入`QFluentWidgets`美化界面", + "notice": "公告系统测试中~", "proxy_list": [ "", "https://gitproxy.click/", From 8bbfdcbc04c1203a614d8810dfdc2a1f20c020e5 Mon Sep 17 00:00:00 2001 From: DLmaster Date: Mon, 27 Jan 2025 12:20:07 +0800 Subject: [PATCH 12/12] =?UTF-8?q?fix(utils):=20=E4=BF=AE=E5=A4=8D=20versio?= =?UTF-8?q?n=5Ftext=20=E5=BC=95=E8=B5=B7=E7=9A=84=E6=89=93=E5=8C=85?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/__init__.py | 3 +-- app/ui/setting.py | 14 +++++++++++++- app/utils/Updater.py | 12 +++++++++++- app/utils/__init__.py | 3 +-- app/utils/package.py | 15 +++++++++++++-- app/utils/version.py | 38 -------------------------------------- main.py | 2 +- 7 files changed, 40 insertions(+), 47 deletions(-) delete mode 100644 app/utils/version.py diff --git a/app/__init__.py b/app/__init__.py index 348605b..0c70453 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -33,7 +33,7 @@ from .core import AppConfig, QueueConfig, MaaConfig, Task, Task_manager, Main_ti from .models import MaaManager from .services import Notify, Crypto, System from .ui import AUTO_MAA -from .utils import Updater, version_text +from .utils import Updater __all__ = [ "AppConfig", @@ -48,5 +48,4 @@ __all__ = [ "System", "AUTO_MAA", "Updater", - "version_text", ] diff --git a/app/ui/setting.py b/app/ui/setting.py index 6ca4781..1562ff8 100644 --- a/app/ui/setting.py +++ b/app/ui/setting.py @@ -50,7 +50,7 @@ import requests from app.core import Config, MainInfoBar from app.services import Crypto, System -from app.utils import Updater, version_text +from app.utils import Updater from .Widget import InputMessageBox, LineEditSettingCard @@ -717,3 +717,15 @@ class OtherSettingCard(HeaderCardWidget): self.viewLayout.setContentsMargins(0, 0, 0, 0) self.viewLayout.setSpacing(0) self.addGroupWidget(widget) + + +def version_text(version_numb: list) -> str: + """将版本号列表转为可读的文本信息""" + + if version_numb[3] == 0: + version = f"v{'.'.join(str(_) for _ in version_numb[0:3])}" + else: + version = ( + f"v{'.'.join(str(_) for _ in version_numb[0:3])}-beta.{version_numb[3]}" + ) + return version diff --git a/app/utils/Updater.py b/app/utils/Updater.py index ffad9cb..364288f 100644 --- a/app/utils/Updater.py +++ b/app/utils/Updater.py @@ -42,7 +42,17 @@ from qfluentwidgets import ProgressBar, IndeterminateProgressBar, BodyLabel from PySide6.QtGui import QIcon from PySide6.QtCore import QObject, QThread, Signal -from .version import version_text + +def version_text(version_numb: list) -> str: + """将版本号列表转为可读的文本信息""" + + if version_numb[3] == 0: + version = f"v{'.'.join(str(_) for _ in version_numb[0:3])}" + else: + version = ( + f"v{'.'.join(str(_) for _ in version_numb[0:3])}-beta.{version_numb[3]}" + ) + return version class UpdateProcess(QThread): diff --git a/app/utils/__init__.py b/app/utils/__init__.py index 2f1ba20..3cbc288 100644 --- a/app/utils/__init__.py +++ b/app/utils/__init__.py @@ -30,6 +30,5 @@ __author__ = "DLmaster361 " __license__ = "GPL-3.0 license" from .Updater import Updater -from .version import version_text -__all__ = ["Updater", "version_text"] +__all__ = ["Updater"] diff --git a/app/utils/package.py b/app/utils/package.py index d960840..7c17754 100644 --- a/app/utils/package.py +++ b/app/utils/package.py @@ -26,16 +26,27 @@ v4.2 """ import os +import sys import json import shutil from pathlib import Path -from app import version_text + +def version_text(version_numb: list) -> str: + """将版本号列表转为可读的文本信息""" + + if version_numb[3] == 0: + version = f"v{'.'.join(str(_) for _ in version_numb[0:3])}" + else: + version = ( + f"v{'.'.join(str(_) for _ in version_numb[0:3])}-beta.{version_numb[3]}" + ) + return version if __name__ == "__main__": - root_path = Path.cwd() + root_path = Path(sys.argv[0]).resolve().parent with (root_path / "resources/version.json").open(mode="r", encoding="utf-8") as f: version = json.load(f) diff --git a/app/utils/version.py b/app/utils/version.py deleted file mode 100644 index 56cc393..0000000 --- a/app/utils/version.py +++ /dev/null @@ -1,38 +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 - -""" -AUTO_MAA -AUTO_MAA版本号工具 -v4.2 -作者:DLmaster_361 -""" - - -def version_text(version_numb: list) -> str: - """将版本号列表转为可读的文本信息""" - - if version_numb[3] == 0: - version = f"v{'.'.join(str(_) for _ in version_numb[0:3])}" - else: - version = ( - f"v{'.'.join(str(_) for _ in version_numb[0:3])}-beta.{version_numb[3]}" - ) - return version diff --git a/main.py b/main.py index ddc8e64..6e557e4 100644 --- a/main.py +++ b/main.py @@ -32,7 +32,7 @@ from qfluentwidgets import FluentTranslator import sys -# @logger.catch +@logger.catch def main(): application = QApplication(sys.argv)

    CBj#<1 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 tGb1D8M=e%HmJfUk{9+B=CLeb)d0 diff --git a/app/services/__pycache__/__init__.cpython-312.pyc b/app/services/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 84777a523acf876825d18f8e3266bc85bc4a413b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 517 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 diff --git a/app/services/__pycache__/system.cpython-312.pyc b/app/services/__pycache__/system.cpython-312.pyc deleted file mode 100644 index 3979e227f75f41ebdfc3d4d956992eb2fe4300b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4795 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 diff --git a/app/ui/__pycache__/Widget.cpython-312.pyc b/app/ui/__pycache__/Widget.cpython-312.pyc deleted file mode 100644 index c54c9a6b60bd2bcbb6ff52afb0acd2dbec55f177..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14323 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 F{SS;6Q78Za diff --git a/app/ui/__pycache__/__init__.cpython-312.pyc b/app/ui/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 2b95257e9252ab9da1191d214209c0c2c4e22d03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 431 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 PFs$qCzQw?UjPL&gFjJBB diff --git a/app/ui/__pycache__/main_window.cpython-312.pyc b/app/ui/__pycache__/main_window.cpython-312.pyc deleted file mode 100644 index fdf31dadb21ec507dfed046d561edc37958fd553..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13735 zcmcgTZB$&xb#Fg;?7sZ~79o~T2_#rRNJO$?DY7C2LdF(I7$mtH#hVpx5xd@H@!Pku zQKXcf$PL6wks3MR*oo!Dtx=`gq{&GXJBi(MdV1W`AK_(J=g}8@s-6mD`AxekL&Pbj&FOu)gCv>K8LB!>CMGC!zq-+kaixhc_2%HmMA1U@0N8Da_q{Lei zDfO0;dNy1ZDfgB~D!dhuN^d39WtJgE+^yI}q4<$?U(VoM;j^^exaQntPcV4`3_j^CEoZiv+ zIm_)|zVhMl^Z)gW@3tO__+w%~@NM7OWVwqSd31_796fa^Ab9i&*VQ~Y7!LOO#b9(m zaddSL0dk~A@DH{3Mh85cVs7pwO_n3^SpWXGC<2;Y!|DhO#1*c4Fzk=@clQc`z<^?D z3&#TkBGM~4?E`(${eD4lq<|yQSdjF`#sXqbe;^W2OloHD=vE1j2M74*v&y*iNOfKR)kZmc?^oVGb#rAhJa8Q8Wf|7SrzoIPMx-#?tmx;2Ts8twvIsL zWI*Up`-BRvD;|gkw6eW57#sA9z5Ok~RY2&)nWrfy1uQ-Vz&Bv^1{kjnRC^GL z^Q_mv+j!%7SiO*&AUE;m^NiOFr5q^b@OGXJuzYSHm)G-#J~MAQZ}M7rYrxv4=Q+UO zMwsVxURyWgaVRWZE4?TNO)LPot`#T3?ZD&;71O|RCDGCmt^2bwYpYdLS=jn_>SANdx`X{*mkA+d@=(058^=sV4~ zSd+CqEsa>8wS66}6}M7oMgQxy+R%0iYdJ_%t(7Pw?x0X;Cxx_}H?Q3;K1^{#yD6mQ z*HUYT{Jz;as@1S5v~0vZv`)+UoVDARakN*XqR<0y)If2yeA$Tmv|0-B?Aq<0nxk!W zBrRVy;(o1`LVWJp?Vo_7R@$eQhuSolLZNmFX*tnqmh&v#0b~_?+WxGcaev%r+@EcE zf8yhGHa;tjxk6WMroF??K15+H4;|KE3a!wnU0Usmem%4v`h9}JS{^#8!4wjYry)(B zJW1=coVSxz;W*D;Pun*u)#rn1pID32#-k6O;>f!ugRXQX>@oNea) z8Kh9mK9?(G&(_n))jeg~YtTEt8dK|C?4zxrehO*%J$lTdcS0eJib7dO3DZ_B{{*89 zXjBx^Mgdu~oMWLuimBxxL4zq25-FtR**GKXG=KSS{siNm*7~NfFfqvWnX`{(kP=udgsf(c~(CzePMvUet{e z1Vx{(aZfnf>kr5F0-z${c8K8=|6!Q9ap1kKw;!9>A(u2tC5>{)PN`&PqU7P}k|Xc8 z!e&3cBgNrnl=Rs%3YB z^$0X*dOcgpGv9 zxJNHM1es!w5AuF7;1i>RzLS38Q;0qU-Nn#50?}u7?R{^<+wO}-D))BDxjo^0XxiEF zz6(A?)c8u3L_!_CK%Y+OHG|d=t{G6E%N^bnBCn$=RMiuBf`DeriSs$A=!gsGPYM(C^_8+dV1PB4+`kJE9U)&dwLFcD5fV41Ed&w4j)l0`wt&}+}Hi+ zfkSPIp&e>%G11@qbbvn|btz+z7{ z8tw@W3M^K`lJF1tA{a!=1-{f+n}CO_Vr*${JD_mLZ2-jdi%~)0jvPLI;0fRUqrhFK zlKXTp90q+IgoqsKq$r5=oJb;axqgV+orbN-D|t}}cHt=LDgomMiUp!|xR+1GgJf*q z$*5o86>ExZQlC!?1blZu|&!7B>UtHVw6a1$;4wxw&phL zyj(c$zT{4_rMF9KCtYtg zEt#416%*pO&y5%_aI@w0ldXyJCL}4DE%QuPC(5>B!982CWs*-+Y{x<=VXstTOJ_Le z*rCxwv)nqFE0?(P8P1i4XSt0s=aD$ilGU7RS+Fy?HknNk$y|lRRS?utiGyz3X_%00 zmblGX$#4*YxDo4FU0WjmV1j!T zrg_n1D73&&l)JzJBV)Ovx$0z2c#~}HY;nz`WvVq%ybCbwgw-+os9k0&B^Kn)pLM#& z9hV$4&JDkHH!tO^;7LWSlGv&wyJ?{gJ6}$EdAD3pCl%C9H$3vb>(}M~Ql8|VR3)~g z`M^=GxZWs#tvtzY!-Yn;!^J7H*zuKCxq7!$y*tT%;Wq1%*$RoRkl7lEt(i2+wR@!6 zJu(Pe+m>Vx&SE?EC$qH@3kzBHJR*4>kv&Hw&yghCm0HGQj!}o&gUs%f*qt)FS7P`6 zmfNQN7`WP1v`rGbNoIFQ><*dTBe8pK^vI7KksiVB$U-ib*kX0io9sq%9w=rZAjXA( z&J~6nYH~c77Z1Ug#F*1Zawv<*CK>^kq!8-BjPx=%2Fox|fo7zaneQ3s@eYw`LHG#F zpllqLWDr1+a(GU67H-mr3sx+qW8a~4d|RW$C^+DnuB9Z>F+)~y18onX`Ja&xUqqXW zq!8L_87YJ(cSeHfGkPKsywhTfjW{Z%o zj#xf8?OA;&9r@Bmqg?11XvZ78jC6L{x&@3~8O>0nzYfmvkk!KxgLv-ZTXWx>oFD(` z?RVap`{rwB^bM79^a196_7C$DZ_U3lJpY}kJEJ4un|}@Lqj)d){4wI|%)k5-Xqx}w z@cgTP6TAT%rRVPdLh|G&CJ}8iV!nuATPfzK5X9UPjNvt#|0FcBgXwELJ`Sb{+#L#! z!>}YQpmyE6Tmn=9#5KXQJ7t?MZ%@J5JbPYuJ$?BD7Q3Od4J>IZi9-ZpI4~Fyhk#zO zfDz_X{gdn#Z*AI=0K-i{T%QQ{f~$S>Uqg2>+=XEFPVRVX&(%G0{eG!_|NHUj`u)lJ zqeS0zdddV8OEK|*lkro;#1-1Gf}?h>FE$ht@U}`ZhNFJfw1SIE)dsem3P(@+!#=RE zpiUJ*wW54Sn!CG?AAX`$F`!*pkn*|O`MggaVNCf*tR zsxUNZb|I+mf?x4b_&LvjrRWa}=q)H#)ztMJI?&c5;0A(U9`1v|mJ^O)$<&K?tHeS~ z8M;Pvl{`k(bOWs)i-$$wJQ?8VU<@_ES1KzjiSI;gWNoU?tjqor`~+xXb#OAkgoACB z>%fEP74xf(mmJeYwUhemJLUSlQvKfPx-U)_?n|=Gh~z}1%g5xx8mX}6`a1Q{OR{^_ zqa51QgA`6^z~=I0YlUR3kgZjcwd(aYx%y$L`eC{HkW_srY3-OPEFM2`>4aR^Bo#I# z3b&86%{U6DiyMFAXqV zy|ha%*(#N6ovEmrEo+d=9+t`;o++!CDXCa;uq_c6x=^D3RvQG#}=SGBcFXg^yUD(8MojS4xR~)rC z@wgxtjc~B8yw1&b)Mks0h(NBUtQ1*}WUAH#KO8ez4&)FzR~aeWVH`rYIU{Kb?^E`j zzA)AXAPOEX+A05_RP~>7ls~Zq*^l+*@^}n!G(*%VEgS`NQ)6=%zBB)wpU?mJ#q8P{ zPvZxUoTxF3?_T_Hd~9xH>b~&?kGAz!_=2m|uL4}eQel)Eu6Ij+UOL@&Jh|)1l-jkZ zs`hJuB@DwyvBrboil#hGmYiPr;=~O8=6-QN7(pBh#PU+Utg6;*sKh$J3ylQNfT~M} zNWP-Rd_q8Ursy6lC!sO+1Nf-w>R!5~RjO`HS`XX;f3IV-L*~$-lDS%mtChL!61P3c zJ%qmCskYv34r6oAA>6ia2LIXG>oi*|Xe2@gWk>rL{8T=|NYkn2bujx~s)x*2G&-$0c zIAKPj@(WJj2wBWX+7^KJHGE9)gR;M?GSLx0r{oOfpm#}hP~E76}kM1)I>Gxz>ANQfivO9qXy!^{Zl;co+ zMgtUS8$@XI_o2pH#Ehg-L-ZzfRzZ|x?bZCrCC##%@5AfX3`U`-@p@lLo7STKqe_}( z->$u`9(dNb-&-b(Y{cqeoHbWFv{$a~<9_=JHGzkXV;oDp-cp|=-1+8D=ZF7-m==oe zIRTdrx%U^E5xNAQPLCU$?_f++3=#jJVhF-z5$aJvGaqxne2jq+2-jKg5LzVWB;MMS zSISnnxHuSy!nK7kB)kBG3J2&B|8uI{2>vaak+dkF*+}de#YT)$dOsrIt0=|TALIiN zyNIO;;C2i=eD+jo1jY1hkcay*bAKRss$Ueok5sxLc%tAx9q^cl$1S{qV{9h<5w=;% zYz!}&!1Jbd(;g_Eai+}*8_rH>nKFn^YRxBCYODrb%|rv zm)@s~4rxnA!qq9edL&oR%=(f=gT8RxqRE7vKE3U+Y1iXRIO$6)lUH<)E_X<-9m~3`m5OQ;MRn8b>L;5fd*1r; z)h}Q3$y@eHTlOZl?3-?Ao_6i0UD^t$n^G-t)w3GYO_H-|YKOeNMcUqy*nR-64B!gJ z%xL(VByLlZtN9&BU7DJa%hr_>wUC3eT*KIFRKwL2zz6%iDTNPxcw}1K4hwr`&kAa9T z=@IZ`?u5t}?kx3A+fJfmK6n)2Kk0`snb{8^)8z#$y8m_?Obv@i zbOuxD?<~7a8zx#77|14fknBe5B9<0T>l~({E7spLkP#tC*PWg^CCBIEqrD&!{wGUZ zh^wL4ydy*1pkjA6cEK|Qyp)d-w@dXo?a%a)|4RWCOIpypAOTNu6Hne8kf#8G6&uhj z(%vNq7>*!M1Jrn~O&jQ7JV+io2slehPO3q0VF_P6G{Td*fO_WOu`FO*S&i0WoVYO- z5KadnDlecdE#QMb0j*{d4<^qV)Q1dctEvwf$diVLuvm#7oa?KMIyq=s!E-eA=iV#) zGZbMtF|lLtSup5yy5H5AbjFYEjL!Xgy+Nn{J!^vxLqCfIDrIzAK49E;nEeT6|GzU^ hC1&dfOz8)V=L4qZ1Ezk-{FG5wH1f5N8O+JJ{|ChYV7dSR diff --git a/app/ui/__pycache__/member_manager.cpython-312.pyc b/app/ui/__pycache__/member_manager.cpython-312.pyc deleted file mode 100644 index 8903c069e6f72b4ab3dd5997165eafb6c61daea0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68905 zcmeFaYgklQnkZaFU8sTr3MlTk;v!JU9aKaSQBd)MH`GW}8rh{nxag*cf#4)LlkRA@ z8L^XYAxV#Ace+z{XOeP~>5z1~Lwe>p?aZ9>e6=l{T~p2Tj57zkeBbvxZDQ=6&iCVd z@4Hs*OBEYX(@D?F>8-52YwdO0Yp?y@-*^3ER8)itj*fqR`Do7XRI2}lKZHXUxVX1Y ztx{c3F{(Bdqh`W-)V*PCVQReA^k{muZQ5R4o32;irtb}J3-2|w8G4OvMsi=<6VV&l z7TIfRGxbKbMfFCvMfb+E#q^rn%)PN~vAuC^alP?v@x7KdOK(D3LT_SQVsBDgQg3ow zGO4fYN$E{(OC{I(p0wWdwsdkG-jmUr*_KJJ4Lw=C);24-Huhwxp9yiFUzf9EcVJHVNAmF+P118qb+f8EwmER zu%~r<`?iJ#@#6OLuiSj?&0B9>x;6TZTi-c*=X>9ec(S^*GGgZEuibw3>%aN%mBy{T z9Rm(K+g`Q2BH|8?#HRM^d-{(awX-(8KYZuDF6OA+;g8(8p{vK<*wq2I{N|ml9fy1D z^j5RO-V3)k**h3JySK}J5`OGm*Zk=qa)3spD{OBilcCe7D`< z=;}L)RsAtL1_zGGGH@z(I@b5IcDM>Z-oZNH`QcK#qr-6w&s)0&94)pmzkYq-Nw#%# z^)>e$>4$DHyQSaJbz}%`vqQ%n{dZukt87|-OmpAyL5FPk@mst4>`hFUL)N!HZujx7 zK6p5JUKIS0>UHAl5)OUf;$9nEya3;nUDc+B?<&lwVxmr~j=|AZ=TVNs9uEcenkBfoCi46su5MU010RoNf}uQ zN4Rjqfo+qco4^&}7d=aDI--O-BPt>HRG1@1$o)y+Vno$0w&;i#?n-swzSs|p(=3#b z&fQ7UwQ%J~5wB8(tL}8+N;)%P&}OFeTex~tBfta2maIZK>C9-Mr5x$Ea3!^LG)$NW zGUG~5vP7sQorQUtx6Xq;eZJJDaK-3g%!R@)=`4*|@#%}ClEM|Ehn9+kU(#7>>5D$S z;z&xRo`fqVoH4*y%7x$3`Ay?bwDcFODRF&3S*16zOsXebLCH$tS~|<#X;}9PDPOo! zZvO#lS%em(vs7zHWs7LJZ-QHL)G`Z^AC%pBW%TxibF*)M z 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 K>M;^h-M;~KhBiz9 diff --git a/app/ui/__pycache__/queue_manager.cpython-312.pyc b/app/ui/__pycache__/queue_manager.cpython-312.pyc deleted file mode 100644 index d25e03d45a8367d340d5808c32cecaba366e4ca5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28044 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