refactor: 重构代码结构和导入路径
fix(ws): 修复反向WebSocket管理器中的循环导入问题 docs: 删除不再使用的文档文件 style: 统一模型导入路径为neobot.models chore: 更新配置文件中的API密钥和连接地址
This commit is contained in:
@@ -4,6 +4,6 @@ NEO Bot Handlers Package
|
||||
事件处理器模块。
|
||||
"""
|
||||
|
||||
from .event_handler import matcher
|
||||
from .event_handler import MessageHandler, NoticeHandler, RequestHandler
|
||||
|
||||
__all__ = ["matcher"]
|
||||
__all__ = ["MessageHandler", "NoticeHandler", "RequestHandler"]
|
||||
|
||||
@@ -6,7 +6,7 @@ NEO Bot Managers Package
|
||||
|
||||
from .bot_manager import bot_manager
|
||||
from .browser_manager import browser_manager
|
||||
from .command_manager import command_manager
|
||||
from .command_manager import matcher as command_manager, matcher
|
||||
from .image_manager import image_manager
|
||||
from .mysql_manager import mysql_manager
|
||||
from .permission_manager import permission_manager
|
||||
@@ -21,6 +21,7 @@ __all__ = [
|
||||
"browser_manager",
|
||||
"command_manager",
|
||||
"image_manager",
|
||||
"matcher",
|
||||
"mysql_manager",
|
||||
"permission_manager",
|
||||
"plugin_manager",
|
||||
|
||||
@@ -433,3 +433,16 @@ def require_admin(func):
|
||||
"""
|
||||
from functools import wraps
|
||||
from neobot.models.events.message import MessageEvent
|
||||
from neobot.core.managers import permission_manager
|
||||
|
||||
@wraps(func)
|
||||
async def wrapper(event: MessageEvent, *args, **kwargs):
|
||||
pm = permission_manager
|
||||
if not await pm.is_admin(event.user_id):
|
||||
await event.reply("此命令仅限管理员使用")
|
||||
return
|
||||
return await func(event, *args, **kwargs)
|
||||
return wrapper
|
||||
|
||||
|
||||
permission_manager = PermissionManager()
|
||||
|
||||
@@ -13,6 +13,7 @@ from .command_manager import CommandManager
|
||||
from ..utils.exceptions import SyncHandlerError, PluginLoadError, PluginReloadError, PluginNotFoundError
|
||||
from ..utils.logger import logger, ModuleLogger
|
||||
from ..utils.singleton import Singleton
|
||||
from .command_manager import matcher as command_manager
|
||||
|
||||
# 确保logger在模块级别可见
|
||||
__all__ = ['PluginManager', 'logger']
|
||||
@@ -29,24 +30,31 @@ class PluginManager(Singleton):
|
||||
"""
|
||||
初始化插件管理器
|
||||
|
||||
:param command_manager: CommandManager的实例
|
||||
:param command_manager: CommandManager 的实例
|
||||
"""
|
||||
# 检查是否已经初始化
|
||||
if hasattr(self, '_command_manager'):
|
||||
if hasattr(self, '_initialized') and self._initialized:
|
||||
return
|
||||
|
||||
# 只有首次初始化时才执行
|
||||
self._initialized = True
|
||||
|
||||
# 始终创建 logger 和 loaded_plugins
|
||||
self.logger = ModuleLogger("PluginManager")
|
||||
self.loaded_plugins: Set[str] = set()
|
||||
|
||||
if command_manager:
|
||||
self._command_manager = command_manager
|
||||
self.loaded_plugins: Set[str] = set()
|
||||
# 创建模块专用日志记录器
|
||||
self.logger = ModuleLogger("PluginManager")
|
||||
else:
|
||||
self._command_manager = None
|
||||
|
||||
@property
|
||||
def command_manager(self):
|
||||
"""
|
||||
获取命令管理器实例
|
||||
"""
|
||||
if not hasattr(self, '_command_manager') or self._command_manager is None:
|
||||
raise AttributeError("'PluginManager' object has no attribute '_command_manager'")
|
||||
return self._command_manager
|
||||
|
||||
def load_all_plugins(self) -> None:
|
||||
@@ -54,20 +62,21 @@ class PluginManager(Singleton):
|
||||
扫描并加载 `plugins` 目录下的所有插件。
|
||||
"""
|
||||
# 使用 pathlib 获取更可靠的路径
|
||||
# 当前文件: core/managers/plugin_manager.py
|
||||
# 目标: plugins/
|
||||
# 当前文件:core/managers/plugin_manager.py
|
||||
# 目标:neobot/plugins/
|
||||
current_dir = os.path.dirname(os.path.abspath(__file__))
|
||||
# 回退两级到项目根目录 (core/managers -> core -> root)
|
||||
root_dir = os.path.dirname(os.path.dirname(current_dir))
|
||||
plugin_dir = os.path.join(root_dir, "plugins")
|
||||
|
||||
package_name = "plugins"
|
||||
# 使用完整的包名:neobot.plugins
|
||||
package_name = "neobot.plugins"
|
||||
|
||||
if not os.path.exists(plugin_dir):
|
||||
self.logger.error(f"插件目录不存在: {plugin_dir}")
|
||||
self.logger.error(f"插件目录不存在:{plugin_dir}")
|
||||
return
|
||||
|
||||
self.logger.info(f"正在从 {package_name} 加载插件 (路径: {plugin_dir})...")
|
||||
self.logger.info(f"正在从 {package_name} 加载插件 (路径:{plugin_dir})...")
|
||||
|
||||
for _, module_name, is_pkg in pkgutil.iter_modules([plugin_dir]):
|
||||
full_module_name = f"{package_name}.{module_name}"
|
||||
@@ -148,3 +157,6 @@ class PluginManager(Singleton):
|
||||
)
|
||||
self.logger.exception(f"重载插件 {full_module_name} 时发生错误: {error.message}")
|
||||
self.logger.log_custom_exception(error)
|
||||
|
||||
|
||||
plugin_manager = PluginManager(command_manager=command_manager)
|
||||
|
||||
@@ -8,16 +8,18 @@ import asyncio
|
||||
import orjson
|
||||
import websockets
|
||||
from websockets.server import WebSocketServerProtocol
|
||||
from typing import Dict, Any, Optional, Set
|
||||
from typing import Dict, Any, Optional, Set, TYPE_CHECKING
|
||||
from datetime import datetime
|
||||
import uuid
|
||||
import threading
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from ..bot import Bot
|
||||
|
||||
from ..utils.logger import ModuleLogger
|
||||
from ..utils.error_codes import ErrorCode, create_error_response
|
||||
from .command_manager import matcher
|
||||
from neobot.models.events.factory import EventFactory
|
||||
from ..bot import Bot
|
||||
from ..ws import ReverseWSClient as _ReverseWSClient
|
||||
|
||||
|
||||
@@ -74,7 +76,7 @@ class ReverseWSManager:
|
||||
self._cleanup_task = None
|
||||
|
||||
# Bot实例字典(每个前端独立的Bot实例)
|
||||
self.bots: Dict[str, Bot] = {}
|
||||
self.bots: Dict[str, "Bot"] = {}
|
||||
|
||||
# 正在处理的事件ID集合(用于防止重复处理)
|
||||
self._processing_events: Dict[str, Set[str]] = {} # client_id: set of event_ids
|
||||
@@ -315,11 +317,11 @@ class ReverseWSManager:
|
||||
with self._clients_lock:
|
||||
self.client_self_ids[client_id] = event.self_id
|
||||
|
||||
# 为事件注入Bot实例
|
||||
from ..ws import ReverseWSClient
|
||||
# 为事件注入 Bot 实例
|
||||
from .bot_manager import bot_manager
|
||||
from ..bot import Bot
|
||||
|
||||
# 为每个前端创建独立的Bot实例
|
||||
# 为每个前端创建独立的 Bot 实例
|
||||
with self._bots_lock:
|
||||
if client_id not in self.bots:
|
||||
# 使用 ReverseWSClient 代理
|
||||
|
||||
@@ -5,14 +5,12 @@ NEO Bot Utils Package
|
||||
"""
|
||||
|
||||
from .error_codes import exception_to_error_response, ErrorCodes
|
||||
from .exceptions import BotException
|
||||
from .logger import logger, ModuleLogger
|
||||
from .singleton import Singleton
|
||||
|
||||
__all__ = [
|
||||
"exception_to_error_response",
|
||||
"ErrorCodes",
|
||||
"BotException",
|
||||
"logger",
|
||||
"ModuleLogger",
|
||||
"Singleton",
|
||||
|
||||
@@ -227,8 +227,11 @@ def exception_to_error_response(exception: Exception, code: Optional[int] = None
|
||||
|
||||
|
||||
# 将错误码导出以便其他模块使用
|
||||
ErrorCodes = ErrorCode
|
||||
|
||||
__all__ = [
|
||||
"ErrorCode",
|
||||
"ErrorCodes",
|
||||
"get_error_message",
|
||||
"create_error_response",
|
||||
"exception_to_error_response"
|
||||
|
||||
Reference in New Issue
Block a user