feat: 通用调度适配

This commit is contained in:
DLmaster361
2025-08-11 22:40:42 +08:00
parent 91209ad9e2
commit 09371f0a5c
8 changed files with 1124 additions and 21 deletions

View File

@@ -24,7 +24,7 @@ __author__ = "DLmaster361 <DLmaster_361@163.com>"
__license__ = "GPL-3.0 license" __license__ = "GPL-3.0 license"
from .broadcast import Broadcast from .broadcast import Broadcast
from .config import Config, MaaConfig, GeneralConfig, MaaUserConfig from .config import Config, MaaConfig, GeneralConfig, MaaUserConfig, GeneralUserConfig
from .timer import MainTimer from .timer import MainTimer
from .task_manager import TaskManager from .task_manager import TaskManager
@@ -36,4 +36,5 @@ __all__ = [
"MainTimer", "MainTimer",
"TaskManager", "TaskManager",
"MaaUserConfig", "MaaUserConfig",
"GeneralUserConfig",
] ]

View File

@@ -22,7 +22,6 @@
import re import re
import shutil import shutil
import asyncio
import requests import requests
import truststore import truststore
import calendar import calendar
@@ -133,7 +132,7 @@ class TimeSet(ConfigBase):
super().__init__() super().__init__()
self.Info_Enabled = ConfigItem("Info", "Enabled", False, BoolValidator()) self.Info_Enabled = ConfigItem("Info", "Enabled", False, BoolValidator())
self.Info_Time = ConfigItem("Info", "Set", "00:00") self.Info_Time = ConfigItem("Info", "Time", "00:00")
class QueueConfig(ConfigBase): class QueueConfig(ConfigBase):

View File

@@ -118,8 +118,8 @@ class _TaskManager:
if isinstance(Config.ScriptConfig[task_id], MaaConfig): if isinstance(Config.ScriptConfig[task_id], MaaConfig):
task_item = MaaManager(mode, task_id, actual_id, websocket) task_item = MaaManager(mode, task_id, actual_id, websocket)
# elif isinstance(Config.ScriptConfig[task_id], GeneralConfig): elif isinstance(Config.ScriptConfig[task_id], GeneralConfig):
# task_item = GeneralManager(mode, task_id, actual_id, websocket) task_item = GeneralManager(mode, task_id, actual_id, websocket)
else: else:
logger.error( logger.error(
f"不支持的脚本类型:{Config.ScriptConfig[task_id].__class__.__name__}" f"不支持的脚本类型:{Config.ScriptConfig[task_id].__class__.__name__}"
@@ -197,8 +197,8 @@ class _TaskManager:
if isinstance(Config.ScriptConfig[script_id], MaaConfig): if isinstance(Config.ScriptConfig[script_id], MaaConfig):
task_item = MaaManager(mode, script_id, None, websocket) task_item = MaaManager(mode, script_id, None, websocket)
# elif isinstance(Config.ScriptConfig[task_id], GeneralConfig): elif isinstance(Config.ScriptConfig[task_id], GeneralConfig):
# task_item = GeneralManager(mode, task_id, actual_id, websocket) task_item = GeneralManager(mode, task_id, actual_id, websocket)
else: else:
logger.error( logger.error(
f"不支持的脚本类型:{Config.ScriptConfig[script_id].__class__.__name__}" f"不支持的脚本类型:{Config.ScriptConfig[script_id].__class__.__name__}"

View File

@@ -183,12 +183,9 @@ class MaaManager:
self.cur_user_data = self.user_config[uuid.UUID(user["user_id"])] self.cur_user_data = self.user_config[uuid.UUID(user["user_id"])]
if self.script_config.get( if (self.script_config.get("Run", "ProxyTimesLimit") == 0) or (
"Run", "ProxyTimesLimit" self.cur_user_data.get("Data", "ProxyTimes")
) == 0 or self.cur_user_data.get( < self.script_config.get("Run", "ProxyTimesLimit")
"Data", "ProxyTimes"
) < self.script_config.get(
"Run", "ProxyTimesLimit"
): ):
user["status"] = "运行" user["status"] = "运行"
await self.websocket.send_json( await self.websocket.send_json(
@@ -848,6 +845,7 @@ class MaaManager:
self.log_start_time = datetime.now() self.log_start_time = datetime.now()
# 监测MAA运行状态 # 监测MAA运行状态
self.log_check_mode = "设置脚本"
await self.maa_log_monitor.start(self.maa_log_path, self.log_start_time) await self.maa_log_monitor.start(self.maa_log_path, self.log_start_time)
self.wait_event.clear() self.wait_event.clear()
await self.wait_event.wait() await self.wait_event.wait()
@@ -893,7 +891,7 @@ class MaaManager:
) )
self.user_list[self.index]["status"] = "完成" self.user_list[self.index]["status"] = "完成"
logger.success( logger.success(
f"用户 {self.user_list[self.index]['name']} 的自动代理任务已完成" f"用户 {self.user_list[self.index]['user_id']} 的自动代理任务已完成"
) )
Notify.push_plyer( Notify.push_plyer(
"成功完成一个自动代理任务!", "成功完成一个自动代理任务!",
@@ -904,7 +902,7 @@ class MaaManager:
else: else:
# 录入代理失败的用户 # 录入代理失败的用户
logger.error( logger.error(
f"用户 {self.user_list[self.index]['name']} 的自动代理任务未完成" f"用户 {self.user_list[self.index]['user_id']} 的自动代理任务未完成"
) )
self.user_list[self.index]["status"] = "异常" self.user_list[self.index]["status"] = "异常"
@@ -930,6 +928,7 @@ class MaaManager:
self.user_list[self.index]["status"] = "异常" self.user_list[self.index]["status"] = "异常"
async def final_task(self, task: asyncio.Task): async def final_task(self, task: asyncio.Task):
"""结束时的收尾工作"""
logger.info("MAA 主任务已结束,开始执行后续操作") logger.info("MAA 主任务已结束,开始执行后续操作")
@@ -1005,7 +1004,7 @@ class MaaManager:
title = ( title = (
f"{self.current_date} | {self.script_config.get("Info", "Name")}{self.mode}任务报告" f"{self.current_date} | {self.script_config.get("Info", "Name")}{self.mode}任务报告"
if self.script_config.get("Info", "Name") != "" if self.script_config.get("Info", "Name") != ""
else f"{self.current_date} | {self.mode[:4]}任务报告" else f"{self.current_date} | {self.mode}任务报告"
) )
result = { result = {
"title": f"{self.mode}任务报告", "title": f"{self.mode}任务报告",
@@ -1028,9 +1027,11 @@ class MaaManager:
f"已完成数:{result["completed_count"]},未完成数:{result["uncompleted_count"]}\n\n" f"已完成数:{result["completed_count"]},未完成数:{result["uncompleted_count"]}\n\n"
) )
if len(result["failed_user"]) > 0: if len(result["failed_user"]) > 0:
result_text += f"{self.mode[2:4]}未成功的用户:\n{"\n".join(result["failed_user"])}\n" result_text += (
f"{self.mode}未成功的用户:\n{"\n".join(result["failed_user"])}\n"
)
if len(result["waiting_user"]) > 0: if len(result["waiting_user"]) > 0:
result_text += f"\n未开始{self.mode[2:4]}的用户:\n{"\n".join(result["waiting_user"])}\n" result_text += f"\n未开始{self.mode}的用户:\n{"\n".join(result["waiting_user"])}\n"
# 推送代理结果通知 # 推送代理结果通知
Notify.push_plyer( Notify.push_plyer(
@@ -1040,6 +1041,7 @@ class MaaManager:
10, 10,
) )
await self.push_notification("代理结果", title, result) await self.push_notification("代理结果", title, result)
elif self.mode == "设置脚本": elif self.mode == "设置脚本":
( (
Path.cwd() Path.cwd()

View File

@@ -25,6 +25,7 @@ __license__ = "GPL-3.0 license"
from .skland import skland_sign_in from .skland import skland_sign_in
from .general import GeneralManager
from .MAA import MaaManager from .MAA import MaaManager
__all__ = ["skland_sign_in", "MaaManager"] __all__ = ["skland_sign_in", "GeneralManager", "MaaManager"]

1071
app/task/general.py Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -9,6 +9,33 @@ from .logger import get_logger
logger = get_logger("日志监控器") logger = get_logger("日志监控器")
TIME_FIELDS = {
"%Y": "year",
"%m": "month",
"%d": "day",
"%H": "hour",
"%M": "minute",
"%S": "second",
"%f": "microsecond",
}
"""时间字段映射表"""
def strptime(date_string: str, format: str, default_date: datetime) -> datetime:
"""根据指定格式解析日期字符串"""
date = datetime.strptime(date_string, format)
# 构建参数字典
datetime_kwargs = {}
for format_code, field_name in TIME_FIELDS.items():
if format_code in format:
datetime_kwargs[field_name] = getattr(date, field_name)
else:
datetime_kwargs[field_name] = getattr(default_date, field_name)
return datetime(**datetime_kwargs)
class LogMonitor: class LogMonitor:
def __init__( def __init__(
@@ -54,13 +81,14 @@ class LogMonitor:
async for line in f: async for line in f:
if not if_log_start: if not if_log_start:
try: try:
entry_time = datetime.strptime( entry_time = strptime(
line[ line[
self.time_stamp_range[ self.time_stamp_range[
0 0
] : self.time_stamp_range[1] ] : self.time_stamp_range[1]
], ],
self.time_format, self.time_format,
self.last_callback_time,
) )
if entry_time > self.log_start_time: if entry_time > self.log_start_time:
if_log_start = True if_log_start = True

View File

@@ -26,7 +26,7 @@ __license__ = "GPL-3.0 license"
from .logger import get_logger from .logger import get_logger
from .ImageUtils import ImageUtils from .ImageUtils import ImageUtils
from .LogMonitor import LogMonitor from .LogMonitor import LogMonitor, strptime
from .ProcessManager import ProcessManager from .ProcessManager import ProcessManager
from .security import dpapi_encrypt, dpapi_decrypt from .security import dpapi_encrypt, dpapi_decrypt
@@ -37,4 +37,5 @@ __all__ = [
"ProcessManager", "ProcessManager",
"dpapi_encrypt", "dpapi_encrypt",
"dpapi_decrypt", "dpapi_decrypt",
"strptime",
] ]