Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -459,9 +459,11 @@ flowchart TD
/memory group search <关键词> — 搜索群共享记忆
/memory group delete <ID> — 删除群共享记忆(仅管理员 / 群主)
/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`
Expand Down
11 changes: 11 additions & 0 deletions amrita_plugin_memory/__init__.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,22 @@
from nonebot import get_driver, require
from nonebot.plugin import PluginMetadata

require("nonebot_plugin_localstore")
require("nonebot_plugin_apscheduler")
require("nonebot_plugin_amrita")
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,
Expand Down
25 changes: 18 additions & 7 deletions amrita_plugin_memory/matchers.py
Original file line number Diff line number Diff line change
Expand Up @@ -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 (
Expand All @@ -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(),
)

Expand Down Expand Up @@ -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()
Expand Down Expand Up @@ -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"
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -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",
Expand Down
2 changes: 1 addition & 1 deletion uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading