Windpicker-owo
310256e24d
feat(attention): 添加注意力优化器以增强提示词多样性和防止注意力退化
...
refactor(prompt): 使用 asyncio.gather 替代 as_completed 以提升并发性能
refactor(config): 添加注意力优化配置选项
refactor(prompt_params): 增加注意力优化开关
2025-11-12 22:37:35 +08:00
minecraft1024a
87cea527a3
Merge branch 'dev' of https://github.com/MoFox-Studio/MoFox_Bot into dev
2025-11-12 21:26:24 +08:00
minecraft1024a
89ca1651d9
1
2025-11-12 21:26:21 +08:00
Windpicker-owo
c1cda89d65
Merge branch 'dev' of https://github.com/MoFox-Studio/MoFox_Bot into dev
2025-11-12 21:19:27 +08:00
Windpicker-owo
17abfc74ae
refactor(prompt): 优化任务并发执行逻辑,使用 as_completed 提升性能和错误处理
2025-11-12 21:19:19 +08:00
minecraft1024a
6ef1829072
refactor(statistic): decouple statistics collection from report generation
...
Introduces a dedicated `HTMLReportGenerator` class in `report_generator.py` to handle all aspects of HTML and chart rendering. This decouples the report presentation logic from the data collection process within `StatisticOutputTask`.
Key changes include:
- Migrated all HTML and JavaScript generation into the new `HTMLReportGenerator`.
- Extracted all statistic key constants into a separate `statistic_keys.py` file for improved organization.
- Renamed `_generate_chart_data` to `_collect_chart_data` to better reflect its purpose.
- Improved data handling robustness by using `.get()` for dictionary access and safely handling database query results.
2025-11-12 20:34:36 +08:00
Windpicker-owo
09db6c0c88
refactor: 移除对机器人自身用户ID的特殊处理,统一使用QQ号进行比较
2025-11-12 17:33:51 +08:00
minecraft1024a
a6c2820dd9
fix(prompt): 通过延迟导入解决循环依赖问题
...
将 `global_prompt_manager` 的导入操作从模块顶部移动到具体使用它的方法内部。
此举旨在解决 `prompt_component_manager` 和 `prompt` 模块之间潜在的循环导入问题,确保在应用初始化时模块加载顺序的稳定性,避免可能因此引发的 `ImportError`。
2025-11-12 13:24:13 +08:00
minecraft1024a
daf8ea7e6a
refactor: 清理冗余代码并现代化导入语句
...
- 将 `typing.Awaitable` 和 `typing.Callable` 的导入更新为 `collections.abc`,以遵循 Python 3.9+ 的最佳实践。
- 移除了 `sorted()` 函数中不必要的 `set` 到 `list` 的转换。
- 清理了 `plugin_system/__init__.py` 中不再需要公开的 `__all__` 条目。
2025-11-12 12:47:55 +08:00
minecraft1024a
623cebf728
docs(prompt): 为 PromptComponentManager 植入详尽的代码文档与注释
...
为了让提示词注入系统的核心 `PromptComponentManager` 变得更加透明和易于理解,本次提交对代码进行了全面的文档化。此举旨在降低新接手者的认知门槛,并为未来的维护工作铺平道路。
具体而言,我们为类和所有公开方法添加了详细的文档字符串,阐明了其设计哲学、职责边界和参数约定。同时,在关键代码块(如规则数据结构、内容提供者闭包、并发锁的使用)旁增加了内联注释,揭示了其背后的实现考量和工作机制。
2025-11-12 12:46:07 +08:00
minecraft1024a
c76e1ff0e6
fix(prompt): 修复 PromptComponentManager 的方法定义在类外部的问题
...
将多个本应属于 `PromptComponentManager` 的实例方法(如 `get_injections_for_prompt`, `get_rules_for_target` 等)移回正确的类定义内。
这些方法之前因缩进错误被意外地定义在了类外部,导致它们无法作为实例方法被正确调用。本次提交修正了这个问题,确保了类的封装性和方法的正确作用域。
2025-11-12 12:39:51 +08:00
minecraft1024a
ebc74f2fe7
feat(prompt): 新增按目标和组件查询注入规则的功能
...
为了提供更灵活的注入规则审查和调试能力,本次提交重构了规则查询接口。
新增了两个功能更强大的查询方法:
- `get_rules_for_target`: 允许查询所有注入到特定核心提示词的规则。
- `get_rules_by_component`: 允许查询由特定注入组件定义的所有规则,无论其目标为何。
BREAKING CHANGE: 移除了原有的 `get_dynamic_rule` 方法,该方法只能通过组件和目标联合查询单个规则,使用场景有限。请根据查询需求,改用新增的 `get_rules_for_target` 或 `get_rules_by_component` 方法。
2025-11-12 12:35:14 +08:00
minecraft1024a
6438539412
feat(prompt): 为提示词注入系统添加预览和详情查询功能
...
新增了对提示词注入过程进行预览和详细查询的能力,极大地增强了开发和调试的便利性。
- 新增 `preview_prompt_injections` 方法,允许在不修改任何状态的情况下,模拟并预览应用所有注入规则后的最终提示词模板。
- 增强 `get_injections_for_prompt` 方法,使其返回更丰富的注入信息,包括注入来源、类型和具体内容,提高了系统的可观测性。
- 新增 `get_dynamic_rule` 辅助方法,用于查询单条动态注入规则。
BREAKING CHANGE: `get_injections_for_prompt` 方法的返回结构已更改,现包含更详细的注入信息。移除了 `get_full_injection_map` 方法,并重命名 `get_registered_prompt_components` 为 `get_registered_prompt_component_info`。
2025-11-12 12:33:44 +08:00
minecraft1024a
626114c593
feat(prompt): 重构提示词管理器为动态可观测的注入中心
...
本次提交对 `PromptComponentManager` 进行了彻底的重构,将其从一个无状态的、按需计算的工具转变为一个有状态的、支持动态配置和实时观测的统一管理中心。
核心改进包括:
- **统一规则存储**: 引入 `_dynamic_rules` 作为唯一的真实来源。系统启动时会加载所有组件的静态 `injection_rules` 作为默认配置,后续可动态修改。
- **动态API**: 新增 `add_injection_rule` 和 `remove_injection_rule` 方法,允许在运行时动态地添加、更新和移除注入规则,极大地提升了灵活性。
- **可观测性**: 提供了一套完整的状态查询API(如 `get_full_injection_map`, `get_injections_for_prompt`),使系统当前的注入状态完全透明,便于调试和监控。
- **性能优化**: `apply_injections` 流程被极大简化,它现在直接从预加载的规则集中获取内容并应用注入,避免了每次调用都重新扫描和实例化组件的开销。
2025-11-12 12:23:20 +08:00
Windpicker-owo
6203fca5f2
feat(main): 移除知识库初始化,简化主系统启动流程
2025-11-10 21:57:35 +08:00
Windpicker-owo
1b93cc3d63
feat(context_manager): 移除消息添加和标记已读的日志记录,简化代码
2025-11-10 21:55:16 +08:00
Windpicker-owo
b427960441
feat(reply): 引入统一格式过滤器,优化回复内容清理逻辑
2025-11-10 14:12:11 +08:00
Windpicker-owo
8c4a54c75d
feat(reply): 引入 reply 和 respond 动作,优化消息回复机制
...
- 增加 reply 动作,针对单条消息进行深度回复,使用 s4u 模板。
- 增加 respond 动作,统一回应未读消息,使用 normal 模板。
- 更新核心动作插件以支持新动作,确保配置选项可用。
- 优化动作执行逻辑,提升对话流畅性和响应准确性。
2025-11-10 13:24:45 +08:00
minecraft1024a
e418b83419
refactor(typo-generator): 调整词典文件路径获取方式以提高通用性
...
将 `dict.txt` 的路径获取方式从依赖 `rjieba` 包的相对路径改为基于项目根目录的相对路径。这避免了因 `rjieba` 包内部结构变化而导致路径失效的问题,增强了代码的健壮性和可移植性。
2025-11-08 20:11:39 +08:00
明天好像没什么
c8d7c09625
ruff
2025-11-07 21:01:45 +08:00
Windpicker-owo
f87e8627e5
feat(memory): 移除传统内存系统并优化内存图谱
...
- 移除整个传统内存系统,包括内存系统模块及所有相关组件
- 删除弃用的内存组件:增强型内存激活器、海马体采样器、内存构建器、内存块、内存遗忘引擎、内存格式器、内存融合器、内存管理器、内存元数据索引、内存查询规划器、内存系统、消息集合处理器、消息集合存储、向量内存存储_v2
- 更新内存图配置,采用增强型检索设置
- 优化内存管理器查询功能,以分析完整对话上下文
- 更新机器人配置模板版本至7.6.1,新增内存图表检索参数
重大变更:旧版内存系统已被完全移除。所有内存功能现依赖于内存图系统。请更新配置以包含新的内存图检索参数。
2025-11-06 09:18:59 +08:00
Windpicker-owo
cd15c51e6b
refactor(memory): 完全移除旧记忆系统,全面切换到新记忆图系统
...
重大变更:
- 移除 default_generator.py 中对旧增强记忆系统的所有调用
- 移除 prompt.py 中的记忆构建函数
- 记忆检索全面使用新记忆图系统
- 禁用旧记忆系统的自动存储逻辑
记忆构建流程:
- 记忆创建: LLM 通过 create_memory 工具主动创建
- 记忆检索: default_generator.py 自动检索
- 记忆传递: 通过 pre_built_params 传入 prompt
工具可用性:
- CreateMemoryTool: available_for_llm = True
- LinkMemoriesTool: available_for_llm = False
- SearchMemoriesTool: available_for_llm = False
技术细节:
- 提高记忆检索数量 top_k=10
- 降低重要性阈值 min_importance=0.3
- 修复类型错误和警告
2025-11-05 19:22:34 +08:00
Windpicker-owo
25c50f759f
fix(chat): 增强对自我身份的识别,支持将机器人用户标记为"SELF"
2025-11-05 14:45:36 +08:00
Windpicker-owo
b97470cf60
refactor(chat): 将用户引用处理从同步改为异步,优化性能
2025-11-03 23:11:49 +08:00
Windpicker-owo
a6d2aee781
feat(affinity-flow): 通过标签扩展与提及分类增强兴趣匹配
...
- 实施扩展标签描述以实现更精确的语义匹配
- 增加强/弱提及分类,并附带独立的兴趣评分
- 重构机器人兴趣管理器,采用动态嵌入生成与缓存机制
- 通过增强的@提及处理功能优化消息处理
- 更新配置以支持回帖提升机制
- 将亲和力流量聊天重新组织为模块化结构,包含核心、规划器、主动响应和工具子模块
- 移除已弃用的规划器组件并整合功能
- 为napcat适配器插件添加数据库表初始化功能
- 修复元事件处理器中的心跳监控
2025-11-03 22:24:51 +08:00
明天好像没什么
30658afdb4
ruff归零
2025-11-01 21:32:41 +08:00
明天好像没什么
cb97b2d8d3
rufffffff
2025-11-01 21:10:01 +08:00
Windpicker-owo
ca539a3ebd
fix: 修复在线时间记录的db_save调用
...
- db_save需要key_field和key_value参数用于get_or_create
- 创建新记录应使用db_query with query_type='create'
- 修复'db_save() missing 2 required positional arguments'错误
2025-11-01 14:53:53 +08:00
Windpicker-owo
ce1c3288fd
fix: 修复数据库导入错误
...
- 修复12处从错误位置导入get_db_session/get_engine的问题
- 函数应从core导入,模型应从core.models导入
- 修复bot.py使用check_and_migrate_database代替不存在的initialize_database
影响文件:
- bot.py: 使用正确的初始化函数
- schedule_manager.py: 修复get_db_session导入
- relationship_service.py: 修复get_db_session导入
- schedule_api.py: 修复get_db_session导入
- utils.py (llm_models): 修复get_db_session导入
- utils_image.py: 修复get_db_session导入
- utils_video.py: 修复get_db_session导入
- user_ban.py: 修复get_db_session导入
- statistics.py: 修复get_db_session导入
- storage.py: 修复get_db_session导入
- anti_injector.py: 修复2处get_db_session导入
- permission_manager.py: 修复get_engine导入
2025-11-01 14:44:13 +08:00
Windpicker-owo
a1dc03cacc
refactor: 完成数据库重构 - 批量更新导入路径
...
- 更新35个文件的导入路径 (共65处修改)
- sqlalchemy_models core.models (模型类)
- sqlalchemy_database_api compatibility (兼容函数)
- database.database core (初始化/关闭函数)
- 添加自动化导入更新工具 (scripts/update_database_imports.py)
- 所有兼容性层测试通过 (26/26)
- 数据库核心功能测试通过 (18/21)
2025-11-01 14:22:54 +08:00
明天好像没什么
0e129d385e
refactor: 统一类型注解风格并优化代码结构
...
- 将裸 except 改为显式 Exception 捕获
- 用列表推导式替换冗余 for 循环
- 为类属性添加 ClassVar 注解
- 统一 Union/Optional 写法为 |
- 移除未使用的导入
- 修复 SQLAlchemy 空值比较语法
- 优化字符串拼接与字典更新逻辑
- 补充缺失的 noqa 注释与异常链
BREAKING CHANGE: 所有插件基类的类级字段现要求显式 ClassVar 注解,自定义插件需同步更新
2025-10-31 22:42:39 +08:00
minecraft1024a
a29be48091
refactor(core): 优化类型提示与代码风格
...
本次提交对项目代码进行了广泛的重构,主要集中在以下几个方面:
1. **类型提示现代化**:
- 将 `typing` 模块中的 `Optional[T]`、`List[T]`、`Dict[K, V]` 等旧式类型提示更新为现代的 `T | None`、`list[T]`、`dict[K, V]` 语法。
- 这提高了代码的可读性,并与较新 Python 版本的风格保持一致。
2. **代码风格统一**:
- 移除了多余的空行和不必要的空格,使代码更加紧凑和规范。
- 统一了部分日志输出的格式,增强了日志的可读性。
3. **导入语句优化**:
- 调整了部分模块的 `import` 语句顺序,使其符合 PEP 8 规范。
这些更改不涉及任何功能性变动,旨在提升代码库的整体质量、可维护性和开发体验。
2025-10-31 20:56:17 +08:00
Windpicker-owo
371041c9db
重构消息处理并用DatabaseMessages替换MessageRecv
...
-更新PlusCommand以使用DatabaseMessages而不是MessageRecv。
-将消息处理逻辑重构到一个新模块message_processor.py中,以处理消息段并从消息字典中创建DatabaseMessages。
-删除了已弃用的MessageRecv类及其相关逻辑。
-调整了各种插件以适应新的DatabaseMessages结构。
-增强了消息处理功能中的错误处理和日志记录。
2025-10-31 19:24:58 +08:00
Windpicker-owo
ea7c1f22f9
feat(relationship): 重构关系信息提取系统并集成聊天流印象
...
- 在 RelationshipFetcher 中添加 build_chat_stream_impression 方法,支持聊天流印象信息构建
- 扩展数据库模型,为 ChatStreams 表添加聊天流印象相关字段(stream_impression_text、stream_chat_style、stream_topic_keywords、stream_interest_score)
- 为 UserRelationships 表添加用户别名和偏好关键词字段(user_aliases、preference_keywords)
- 在 DefaultReplyer、Prompt 和 S4U PromptBuilder 中集成用户关系信息和聊天流印象的组合输出
- 重构工具系统,为 BaseTool 添加 chat_stream 参数支持上下文感知
- 移除旧的 ChatterRelationshipTracker 及相关关系追踪逻辑,统一使用评分API
- 在 AffinityChatterPlugin 中添加 UserProfileTool 和 ChatStreamImpressionTool 支持
- 优化计划执行器,移除关系追踪相关代码并改进错误处理
BREAKING CHANGE: 移除了 ChatterRelationshipTracker 类及相关的关系追踪功能,现在统一使用 scoring_api 进行关系管理。BaseTool 构造函数现在需要 chat_stream 参数。
2025-10-30 16:58:26 +08:00
Windpicker-owo
f6349f278d
feat(expression): 添加表达方式选择模式支持与DatabaseMessages兼容性改进
...
- 新增统一的表达方式选择入口,支持classic和exp_model两种模式
- 添加StyleLearner模型预测模式,可基于机器学习模型选择表达风格
- 改进多个模块对DatabaseMessages数据模型的兼容性处理
- 优化消息处理逻辑,统一处理字典和DatabaseMessages对象
- 在配置中添加expression.mode字段控制表达选择模式
2025-10-29 22:52:32 +08:00
明天好像没什么
99d55c0b49
Merge branch 'dev' of https://github.com/MoFox-Studio/MoFox_Bot into dev
2025-10-26 13:10:38 +08:00
明天好像没什么
7b80d7c0b3
feat(plugin): 集成 MCP 协议支持并优化代码风格
...
- 新增 fastmcp 依赖,支持通过 Streamable HTTP 连接外部工具服务器
- 在 component_registry 与 tool_api 中实现 MCP 工具加载、注册及调用链路
- 补充 README 中的 MCP 特性说明
- 统一修复多处 import 顺序、空行、引号及类型注解,提升代码整洁度
- 在 pyproject.toml 中忽略 PERF203 规则,允许循环内异常处理
- 优化语音缓存与本地 ASR 调用逻辑,减少冗余代码
2025-10-26 13:10:31 +08:00
minecraft1024a
0ed35ff33b
refactor(chat): 简化回复分割逻辑
...
移除了对 `split_mode == "llm"` 的显式检查。现在,只要响应文本中存在 `[SPLIT]` 标记,就会使用该标记进行分割。如果不存在,则统一回退到基于标点的传统分割模式。这简化了代码
2025-10-26 11:52:55 +08:00
tt-P607
c61cc19eb6
feat(voice): 实现自身语音缓存以跳过ASR识别
...
当机器人通过TTS插件发送语音时,会自动将语音数据和对应的原始文本进行缓存。
当机器人接收到自己发送的语音消息时,会优先从缓存中直接读取文本,从而跳过调用ASR(自动语音识别)服务的步骤。
此项优化可以:
- 节省不必要的ASR资源开销和费用。
- 保证对机器人自身语音100%的识别准确性。
- 提升对自身消息的响应处理速度。
2025-10-26 01:14:23 +08:00
tt-P607
3ea56c55f1
Merge branch 'dev' of https://github.com/MoFox-Studio/MoFox_Bot into dev
2025-10-26 00:19:45 +08:00
tt-P607
ee7ec5a100
feat(voice): 新增本地语音识别(ASR)提供商选项
...
新增 `voice.asr_provider` 配置项,允许用户在 "api" 和 "local" 之间选择语音识别服务。
当设置为 "local" 时,系统将通过 `local_asr` 工具(由 `stt_whisper_plugin` 插件提供)调用本地 Whisper 模型进行语音转文字。这为用户提供了一个不依赖外部 API、注重隐私的备选方案。
- 默认值仍为 "api",保持现有行为不变。
- 添加 `openai-whisper` 作为新的依赖项以支持此功能。
2025-10-26 00:19:35 +08:00
minecraft1024a
ee7a37ce70
feat(plugin_system): 引入高级Prompt注入规则系统以取代旧注入点机制
...
引入了一套全新的、基于规则的Prompt注入系统,以取代原有的 `injection_point` 机制。这套新系统提供了更强大、更灵活的Prompt内容注入能力。
主要变更包括:
- **引入 `InjectionRule` 和 `InjectionType`**:定义了注入规则的数据结构和注入类型(如 `PREPEND`, `APPEND`, `REPLACE`, `REMOVE`, `INSERT_AFTER`),允许插件开发者精确控制注入行为。
- **重构 `PromptComponentManager`**:核心逻辑从简单地拼接字符串 (`execute_components_for`) 重构为按优先级应用注入规则 (`apply_injections`),支持正则表达式匹配和更复杂的注入操作。
- **向后兼容**:`PromptInfo` 中增加了兼容逻辑,能自动将旧的 `injection_point` 定义转换为新的 `injection_rules`,确保现有插件无需立即修改即可正常工作。
- **更新 `BasePrompt`**:废弃了 `injection_point` 属性,并推荐使用新的 `injection_rules` 属性。
- **更新示例插件**:`hello_world_plugin` 已更新,展示了新注入规则的使用方法。
BREAKING CHANGE: `BasePrompt` 中的 `injection_point` 属性已被废弃。虽然目前存在向后兼容逻辑,但未来版本将移除该属性。所有Prompt组件都应迁移至使用 `injection_rules` 以获得更强的控制力和未来的兼容性。
2025-10-25 21:24:51 +08:00
minecraft1024a
df4e638e76
~谁在写代码不加注释我就把它炒了 😡 😡 😡 😡 😡 ~
...
feat(prompt): 补全了prompt类的函数注释和内联注释
2025-10-25 17:48:21 +08:00
Eric-Terminal
e15573e9d6
feat(prompt): 添加主人认证提示词功能 ( #47 )
2025-10-25 15:55:12 +08:00
minecraft1024a
3c4a3b0428
chore: 统一代码风格并进行现代化改造
...
本次提交主要包含以下内容:
- **代码风格统一**:对多个文件进行了格式化,包括移除多余的空行、调整导入顺序、统一字符串引号等,以提高代码一致性和可读性。
- **类型提示现代化**:在多个文件中将旧的 `typing` 模块类型提示(如 `Optional[T]`、`List[T]`、`Union[T, U]`)更新为现代 Python 语法(`T | None`、`list[T]`、`T | U`)。
- **f-string 格式化**:在 `scripts/convert_manifest.py` 中,将 `.format()` 调用更新为更现代和易读的 f-string `!r` 表示法。
- **文件末尾换行符**:为多个文件添加或修正了文件末尾的换行符,遵循 POSIX 标准。
2025-10-25 13:31:22 +08:00
minecraft1024a
079a9a3fa0
refactor(prompt): 移除 normal 模式并强制使用 s4u 模式
...
删除了旧的 "normal" prompt 模式及其相关逻辑,包括 prompt 模板、上下文构建函数和配置选项。现在系统将统一并强制使用 "s4u" 模式进行回复生成。
主要变更:
- 从 `default_generator.py` 中移除了 `normal_style_prompt` 模板和模式选择逻辑。
- 从 `prompt.py` 中删除了 `_build_normal_chat_context` 和 `_prepare_normal_params` 等相关函数。
- 从 `official_configs.py` 中移除了 `prompt_mode` 配置项。
- 更新了 `bot_config_template.toml` 配置文件,移除了 `prompt_mode` 选项和相关的 normal 模式上下文共享组示例。
此重构简化了 prompt 生成流程,统一了上下文处理方式,减少了代码的复杂性和维护成本。
2025-10-25 09:56:14 +08:00
tt-P607
6a7118d331
chore(chat): 移除提示词注入中的冗余日志
2025-10-23 20:25:21 +08:00
tt-P607
2c5dc64e1f
feat(chat): 为知识库段落增加相关性阈值过滤
...
根据 `qa_paragraph_threshold` 配置,跳过相关性得分低于阈值的知识库段落。
这可以防止低相关性的知识污染上下文,从而提高生成回答的质量和准确性。
2025-10-23 02:25:15 +08:00
tt-P607
6a81fd40b5
refactor(chat): 简化 GIF 抽帧逻辑为均匀采样
...
旧的基于均方误差(MSE)的 GIF 抽帧逻辑过于复杂,其参数难以调整且结果不可预测。
现在,该逻辑被重构为一个简单的均匀采样算法,固定抽取 4 帧来代表整个动画。这不仅简化了代码、移除了不必要的参数,还确保了对于任何 GIF 都能生成一致且有代表性的预览图,同时提升了处理性能。
BREAKING CHANGE: `transform_gif` 函数签名已更改,移除了 `similarity_threshold` 和 `max_frames` 参数。
2025-10-22 01:54:13 +08:00
tt-P607
5bd59fe415
refactor(chat): 重构图片在聊天记录中的处理与表示方式
...
为了简化LLM的上下文并提高代码可维护性,对聊天记录中图片的处理方式进行了彻底重构。
旧系统使用 [图片1] 等占位符,并在消息头部附加一个独立的图片描述映射块。这种方式结构复杂,容易造成上下文分离。
新系统将图片描述直接内联到消息文本中,格式为 `[图片:一只猫]`,使聊天记录对LLM更加自然和易于理解。
主要变更:
- **消息构建 (`chat_message_builder`):** 在构建可读消息时,异步将数据库中的 `[picid:...]` 标签直接替换为完整的 `[图片:描述]`。
- **废弃映射:** 移除了独立的图片映射信息块 (`build_pic_mapping_info` 函数),所有信息都在消息内联。
- **图片处理 (`utils_image`):** `process_image` 流程现在同步返回完整的描述字符串,并增强了VLM调用的重试逻辑和缓存机制,提高了健壮性。
- **消息存储 (`storage`):** 在消息存入数据库前,将 `[图片:描述]` 转换为 `[picid:...]`,以保持存储规范化。
- **修复:** 增加了多处空值检查,提高了代码的稳定性。这不得之前稳定好用多了😋 😋 😋
2025-10-21 20:14:58 +08:00