diff --git a/README.md b/README.md index 5b5e6b2..cf26699 100644 --- a/README.md +++ b/README.md @@ -459,9 +459,11 @@ flowchart TD /memory group search <关键词> — 搜索群共享记忆 /memory group delete — 删除群共享记忆(仅管理员 / 群主) /memory memo — 以合并转发查看当前作用域备忘录 -/memory dmn — 立即触发一轮潜意识调度(仅超级用户,需 subconscious.enabled=true 且已配置 target_user_id) +/memory dmn — 立即触发一轮潜意识调度(仅管理员,需 subconscious.enabled=true 且已配置 target_user_id) ``` +`dmn`(别名 `run`、`触发`)属于隐藏选项:不出现在菜单与用法提示中,非管理员调用会按未知选项处理。鉴权顺序为超级用户白名单,其次 `lp.admin` 权限节点。 + 兼容旧格式 `/memory list` 等(默认以个人范围执行)。 ### 运维命令 `ambot memory` diff --git a/amrita_plugin_memory/__init__.py b/amrita_plugin_memory/__init__.py index 6ae2512..cd7f0e7 100644 --- a/amrita_plugin_memory/__init__.py +++ b/amrita_plugin_memory/__init__.py @@ -1,4 +1,5 @@ from nonebot import get_driver, require +from nonebot.plugin import PluginMetadata require("nonebot_plugin_localstore") require("nonebot_plugin_apscheduler") @@ -6,6 +7,16 @@ require("nonebot_plugin_orm") require("amrita.plugins.chat") require("amrita.plugins.menu") + +__plugin_meta__ = PluginMetadata( + name="Amrita长期记忆", + description="长期记忆、备忘录与潜意识调度", + usage="/memory (list|search|delete|memo|dmn) [参数]", + homepage="https://github.com/AmritaBot/plugin-memory", + type="application", + supported_adapters={"~onebot.v11"}, +) + from . import ( config, embed, diff --git a/amrita_plugin_memory/matchers.py b/amrita_plugin_memory/matchers.py index 4f1b4d2..75fe2a4 100644 --- a/amrita_plugin_memory/matchers.py +++ b/amrita_plugin_memory/matchers.py @@ -4,6 +4,7 @@ from amrita.plugins.chat.utils.functions import split_message_into_chats from amrita.plugins.menu.models import MatcherData +from amrita.plugins.perm.API.admin import is_lp_admin from amrita.utils.send import send_forward_msg from nonebot import get_bot, get_driver, logger, on_command from nonebot.adapters.onebot.v11 import ( @@ -27,8 +28,8 @@ aliases={"记忆"}, state=MatcherData( name="记忆管理", - description="查看/搜索/删除长期记忆,回看备忘录,手动触发潜意识调度", - usage="/memory (list|search|delete|memo|dmn) [参数]", + description="查看/搜索/删除长期记忆,回看备忘录", + usage="/memory (list|search|delete|memo) [参数]", ).model_dump(), ) @@ -60,7 +61,10 @@ async def _( await matcher.finish() if sub in ("dmn", "run", "触发"): - await matcher.finish(await _trigger_dmn(event)) + # 管理入口不进菜单,普通用户按未知选项处理 + if not await _is_admin(event): + await matcher.finish(f"未知选项:{sub}") + await matcher.finish(await _trigger_dmn()) ope = AsyncUserMemory(get_db_conn()) await ope.init() @@ -117,11 +121,18 @@ async def _( await matcher.finish(hint) -async def _trigger_dmn(event: MessageEvent) -> str: - """手动触发潜意识调度,返回给用户的提示文案。""" - if str(event.get_user_id()) not in get_driver().config.superusers: - return "仅超级用户可手动触发潜意识调度" +async def _is_admin(event: MessageEvent) -> bool: + """超级用户或持有 lp.admin 权限节点。""" + if str(event.get_user_id()) in get_driver().config.superusers: + return True + try: + return await is_lp_admin(event) + except Exception: + return False + +async def _trigger_dmn() -> str: + """手动触发潜意识调度,返回给用户的提示文案。调用前需已校验权限。""" cfg = (await DataManager().safe_get_config()).subconscious if not cfg.enabled: return "潜意识调度未启用:subconscious.enabled 为 false" diff --git a/pyproject.toml b/pyproject.toml index 351172a..d9c7888 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "amrita_plugin_memory" description = "Amrita长期记忆插件" -version = "0.7.0" +version = "0.7.1" dependencies = [ "aiohttp>=3.13.3", "aiologic>=0.16.0", diff --git a/uv.lock b/uv.lock index 91f2dd9..c75ca7a 100644 --- a/uv.lock +++ b/uv.lock @@ -319,7 +319,7 @@ wheels = [ [[package]] name = "amrita-plugin-memory" -version = "0.7.0" +version = "0.7.1" source = { editable = "." } dependencies = [ { name = "aiohttp" },