Files
NeoBot/docs/core-concepts/singleton-managers.md
K2cr2O1 7880f0f928 docs: 更新文档内容并优化语言风格
重构所有文档内容,使用更简洁直接的语言风格
更新架构、插件开发、部署等核心文档
优化代码示例和图表说明
统一术语和格式规范
2026-01-13 04:09:13 +08:00

95 lines
3.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 核心概念:单例管理器
`core/managers/` 这地方,放的都是些**管事的Managers**。它们是 NEO Bot 的权力核心。
## 为啥非得是单例 (Singleton)
说白了,就是**全局独一份,省事**。
* **到处都能用**: 在插件里 `import` 就行,不用传来传去。
* **数据不打架**: 权限、命令这些东西,全局就一份,改了都认。
* **省资源**: Redis 连接池、浏览器这种东西,开一个就够了,多了浪费。
我们专门在 `core/utils/singleton.py` 搞了个基类,继承一下就行。
## 认识一下这帮“官”
### 1. `CommandManager` (外号 `matcher`)
* **怎么找**: `from core.managers.command_manager import matcher`
* **管啥**:
* **总调度**: 所有消息都得从它这过一遍,它说了算分给谁。
* **发牌的**: 你用的 `@matcher.command()` 这种装饰器,就是它发的。
* **对号入座**: 消息来了,它负责对一下,看是哪个插件的活儿。
写插件天天都得跟它打交道。
### 2. `PermissionManager` (外号 `permission_manager`)
* **怎么找**: `from core.managers.permission_manager import permission_manager`
* **管啥**:
* **划分三六九等**: `ADMIN`, `OP`, `USER` 这些等级都是它定的。
* **记小本本**: 谁有啥权限,都记在 `core/data/permissions.json` 里。
* **会自动变通**: 查权限的时候,它会把 `AdminManager` 里的超管也当成 `ADMIN`
### 3. `AdminManager` (外号 `admin_manager`)
* **怎么找**: `from core.managers.admin_manager import admin_manager`
* **管啥**:
* **钦差大臣**: 专门管机器人的超级管理员,增删改查都在这。
* **三级缓存**: 内存 -> Redis -> 文件,又快又稳。
### 4. `PluginManager`
* **管啥**:
* **拉人头**: 启动时把 `plugins/` 目录下的插件都拉进来。
* **热更新**: 你改了插件代码,它负责重载,不用重启机器人。
这家伙一般在幕后,你基本不用找它。
### 5. `RedisManager` (外号 `redis_manager`)
* **怎么找**: `from core.managers.redis_manager import redis_manager`
* **管啥**:
* **接线员**: 管着和 Redis 的连接。
* **提供工具**: 你要用 Redis就找它要 `redis_manager.redis`
### 6. `BrowserManager` (外号 `browser_manager`)
* **怎么找**: `from core.managers.browser_manager import browser_manager`
* **管啥**:
* **浏览器司机**: 负责启动和关闭 Playwright。
* **开个页面池**: 提前准备好几个空白页面默认3个你要用直接拿省下几百毫秒的启动时间。
* **循环利用**: 用完记得还回来 (`release_page`),建设节约型社会。
### 7. `ImageManager` (外号 `image_manager`)
* **怎么找**: `from core.managers.image_manager import image_manager`
* **管啥**:
* **美工**: 把数据塞进网页模板,然后用浏览器咔嚓一下截图。
* **记性好**: 模板用一次就记住,下次直接用缓存。
* **自动借还**: 它会自动找 `BrowserManager` 借页面,你只管喊一声 `render_template` 就行。
## 咋用?
简单粗暴:`import` 就完事了。
**举个栗子**: 查查这人是不是管理员。
```python
# plugins/my_plugin.py
from core.managers.command_manager import matcher
from core.managers.permission_manager import permission_manager, ADMIN
from models.events.message import MessageEvent
@matcher.command("secret")
async def secret_command(event: MessageEvent):
# 只有管理员能看
is_admin = await permission_manager.check_permission(event.user_id, ADMIN)
if is_admin:
await event.reply("这是秘密!")
else:
await event.reply("你没权限看这个。")
```