style: 统一代码风格并进行现代化改进
对整个代码库进行了一次全面的风格统一和现代化改进。主要变更包括:
- 将 `hasattr` 等内置函数中的字符串参数从单引号 `'` 统一为双引号 `"`。
- 采用现代类型注解,例如将 `Optional[T]` 替换为 `T | None`,`List[T]` 替换为 `list[T]` 等。
- 移除不再需要的 Python 2 兼容性声明 `# -*- coding: utf-8 -*-`。
- 清理了多余的空行、注释和未使用的导入。
- 统一了文件末尾的换行符。
- 优化了部分日志输出和字符串格式化 (`f"{e!s}"`)。
这些改动旨在提升代码的可读性、一致性和可维护性,使其更符合现代 Python 编码规范。
This commit is contained in:
committed by
Windpicker-owo
parent
1fb2ab6450
commit
cd84373828
183
src/main.py
183
src/main.py
@@ -68,8 +68,175 @@ class MainSystem:
|
||||
self.app: MessageServer = get_global_api()
|
||||
self.server: Server = get_global_server()
|
||||
|
||||
# 信号处理现在由bot.py的KeyboardInterrupt处理
|
||||
pass
|
||||
# 设置信号处理器用于优雅退出
|
||||
self._setup_signal_handlers()
|
||||
|
||||
def _setup_signal_handlers(self):
|
||||
"""设置信号处理器"""
|
||||
|
||||
def signal_handler(signum, frame):
|
||||
logger.info("收到退出信号,正在优雅关闭系统...")
|
||||
|
||||
import asyncio
|
||||
|
||||
try:
|
||||
loop = asyncio.get_event_loop()
|
||||
if loop.is_running():
|
||||
# 如果事件循环正在运行,创建任务并设置回调
|
||||
async def cleanup_and_exit():
|
||||
await self._async_cleanup()
|
||||
sys.exit(0)
|
||||
|
||||
task = asyncio.create_task(cleanup_and_exit())
|
||||
# 添加任务完成回调,确保程序退出
|
||||
task.add_done_callback(lambda t: None)
|
||||
else:
|
||||
# 如果事件循环未运行,使用同步清理
|
||||
self._cleanup()
|
||||
sys.exit(0)
|
||||
except Exception as e:
|
||||
logger.error(f"信号处理失败: {e}")
|
||||
sys.exit(1)
|
||||
|
||||
signal.signal(signal.SIGINT, signal_handler)
|
||||
signal.signal(signal.SIGTERM, signal_handler)
|
||||
|
||||
async def _initialize_interest_calculator(self):
|
||||
"""初始化兴趣值计算组件 - 通过插件系统自动发现和加载"""
|
||||
try:
|
||||
logger.info("开始自动发现兴趣值计算组件...")
|
||||
|
||||
# 使用组件注册表自动发现兴趣计算器组件
|
||||
interest_calculators = {}
|
||||
try:
|
||||
from src.plugin_system.apis.component_manage_api import get_components_info_by_type
|
||||
from src.plugin_system.base.component_types import ComponentType
|
||||
interest_calculators = get_components_info_by_type(ComponentType.INTEREST_CALCULATOR)
|
||||
logger.info(f"通过组件注册表发现 {len(interest_calculators)} 个兴趣计算器组件")
|
||||
except Exception as e:
|
||||
logger.error(f"从组件注册表获取兴趣计算器失败: {e}")
|
||||
|
||||
if not interest_calculators:
|
||||
logger.warning("未发现任何兴趣计算器组件")
|
||||
return
|
||||
|
||||
logger.info("发现的兴趣计算器组件:")
|
||||
for calc_name, calc_info in interest_calculators.items():
|
||||
enabled = getattr(calc_info, "enabled", True)
|
||||
default_enabled = getattr(calc_info, "enabled_by_default", True)
|
||||
logger.info(f" - {calc_name}: 启用: {enabled}, 默认启用: {default_enabled}")
|
||||
|
||||
# 初始化兴趣度管理器
|
||||
from src.chat.interest_system.interest_manager import get_interest_manager
|
||||
interest_manager = get_interest_manager()
|
||||
await interest_manager.initialize()
|
||||
|
||||
# 尝试注册计算器(单例模式,只注册第一个可用的)
|
||||
registered_calculator = None
|
||||
|
||||
# 使用组件注册表获取组件类并注册
|
||||
for calc_name, calc_info in interest_calculators.items():
|
||||
enabled = getattr(calc_info, "enabled", True)
|
||||
default_enabled = getattr(calc_info, "enabled_by_default", True)
|
||||
|
||||
if not enabled or not default_enabled:
|
||||
logger.info(f"兴趣计算器 {calc_name} 未启用,跳过")
|
||||
continue
|
||||
|
||||
try:
|
||||
from src.plugin_system.core.component_registry import component_registry
|
||||
component_class = component_registry.get_component_class(calc_name, ComponentType.INTEREST_CALCULATOR)
|
||||
|
||||
if component_class:
|
||||
logger.info(f"成功获取 {calc_name} 的组件类: {component_class.__name__}")
|
||||
|
||||
# 创建组件实例
|
||||
calculator_instance = component_class()
|
||||
logger.info(f"成功创建兴趣计算器实例: {calc_name}")
|
||||
|
||||
# 初始化组件
|
||||
if await calculator_instance.initialize():
|
||||
# 注册到兴趣管理器
|
||||
success = await interest_manager.register_calculator(calculator_instance)
|
||||
if success:
|
||||
registered_calculator = calculator_instance
|
||||
logger.info(f"成功注册兴趣计算器: {calc_name}")
|
||||
break # 只注册一个成功的计算器
|
||||
else:
|
||||
logger.error(f"兴趣计算器 {calc_name} 注册失败")
|
||||
else:
|
||||
logger.error(f"兴趣计算器 {calc_name} 初始化失败")
|
||||
else:
|
||||
logger.warning(f"无法找到 {calc_name} 的组件类")
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"处理兴趣计算器 {calc_name} 时出错: {e}", exc_info=True)
|
||||
|
||||
if registered_calculator:
|
||||
logger.info(f"当前活跃的兴趣度计算器: {registered_calculator.component_name} v{registered_calculator.component_version}")
|
||||
else:
|
||||
logger.error("未能成功注册任何兴趣计算器")
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"初始化兴趣度计算器失败: {e}", exc_info=True)
|
||||
|
||||
async def _async_cleanup(self):
|
||||
"""异步清理资源"""
|
||||
try:
|
||||
|
||||
# 停止数据库服务
|
||||
try:
|
||||
from src.common.database.database import stop_database
|
||||
await stop_database()
|
||||
logger.info("🛑 数据库服务已停止")
|
||||
except Exception as e:
|
||||
logger.error(f"停止数据库服务时出错: {e}")
|
||||
|
||||
# 停止消息管理器
|
||||
try:
|
||||
from src.chat.message_manager import message_manager
|
||||
await message_manager.stop()
|
||||
logger.info("🛑 消息管理器已停止")
|
||||
except Exception as e:
|
||||
logger.error(f"停止消息管理器时出错: {e}")
|
||||
|
||||
# 停止消息重组器
|
||||
try:
|
||||
from src.plugin_system import EventType
|
||||
from src.plugin_system.core.event_manager import event_manager
|
||||
from src.utils.message_chunker import reassembler
|
||||
|
||||
await event_manager.trigger_event(EventType.ON_STOP, permission_group="SYSTEM")
|
||||
await reassembler.stop_cleanup_task()
|
||||
logger.info("🛑 消息重组器已停止")
|
||||
except Exception as e:
|
||||
logger.error(f"停止消息重组器时出错: {e}")
|
||||
|
||||
# 停止增强记忆系统
|
||||
try:
|
||||
if global_config.memory.enable_memory:
|
||||
await self.memory_manager.shutdown()
|
||||
logger.info("🛑 增强记忆系统已停止")
|
||||
except Exception as e:
|
||||
logger.error(f"停止增强记忆系统时出错: {e}")
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"异步清理资源时出错: {e}")
|
||||
|
||||
def _cleanup(self):
|
||||
"""同步清理资源(向后兼容)"""
|
||||
import asyncio
|
||||
|
||||
try:
|
||||
loop = asyncio.get_event_loop()
|
||||
if loop.is_running():
|
||||
# 如果循环正在运行,创建异步清理任务
|
||||
asyncio.create_task(self._async_cleanup())
|
||||
else:
|
||||
# 如果循环未运行,直接运行异步清理
|
||||
loop.run_until_complete(self._async_cleanup())
|
||||
except Exception as e:
|
||||
logger.error(f"同步清理资源时出错: {e}")
|
||||
|
||||
async def _message_process_wrapper(self, message_data: dict[str, Any]):
|
||||
"""并行处理消息的包装器"""
|
||||
@@ -176,8 +343,8 @@ MoFox_Bot(第三方修改版)
|
||||
# 初始化表情管理器
|
||||
get_emoji_manager().initialize()
|
||||
logger.info("表情包管理器初始化成功")
|
||||
|
||||
'''
|
||||
|
||||
"""
|
||||
# 初始化回复后关系追踪系统
|
||||
try:
|
||||
from src.plugins.built_in.affinity_flow_chatter.interest_scoring import chatter_interest_scoring_system
|
||||
@@ -189,8 +356,8 @@ MoFox_Bot(第三方修改版)
|
||||
except Exception as e:
|
||||
logger.error(f"回复后关系追踪系统初始化失败: {e}")
|
||||
relationship_tracker = None
|
||||
'''
|
||||
|
||||
"""
|
||||
|
||||
# 启动情绪管理器
|
||||
await mood_manager.start()
|
||||
logger.info("情绪管理器初始化成功")
|
||||
@@ -319,10 +486,10 @@ MoFox_Bot(第三方修改版)
|
||||
# 关闭应用 (MessageServer可能没有shutdown方法)
|
||||
try:
|
||||
if self.app:
|
||||
if hasattr(self.app, 'shutdown'):
|
||||
if hasattr(self.app, "shutdown"):
|
||||
await self.app.shutdown()
|
||||
logger.info("应用已关闭")
|
||||
elif hasattr(self.app, 'stop'):
|
||||
elif hasattr(self.app, "stop"):
|
||||
await self.app.stop()
|
||||
logger.info("应用已停止")
|
||||
else:
|
||||
|
||||
Reference in New Issue
Block a user