[direct_messages]私信会话热
插件质量报告
插件:
direct_messagesHook 功能范围 循环 使用频率 文件读写 修改系统表 读写系统表 读写自己的表 app.boot 全站请求启动 否 5 - - app_notifications - user.menu_links 个人卡片/移动端我的菜单(展示位置:个人卡片) 否 4 - - - - notification.after_create 通知及未读数写入后 否 3 - - - - 颜色说明:黄色表示有数据读写,红色表示 Hook 在系统循环中执行,浅蓝色表示有文件写入。“列表跳过”表示回调在列表路径会提前返回,“回调内”表示操作位于回调自身或其帮助函数的循环体内。“文件批处理”表示逐个处理用户一次提交的文件,属于必要操作,不标记修正。只有操作实际处于需要优化的循环路径时,才会标记“修正❗️”。
数据字典
未检测到插件数据表声明。
补充完整说明: @bbs1org #3 界面已经按意见改成看帖式全宽消息,不再使用左右气泡;消息按纯文本显示,不再解析 Markdown;消息区固定高度并独立滚动,大段内容不会拉长整个页面。@idc #5 的 PostgreSQL 错误也已修复:先在子查询计算
partner_id,外层只按别名 GROUP BY,避免两处绑定参数被 PostgreSQL 当成不同表达式。版本 1.1.1。2026-08-11 15:38:42 PDOException: SQLSTATE[42803]: Grouping error: 7 ERROR: column "app_notifications.sender_id" must appear in the GROUP BY clause or be used in an aggregate function LINE 1: SELECT CASE WHEN sender_id=$1 THEN recipient_id ELSE sender_... ^ (index.php:298)
🔍 插件审查报告(对照《AI 开发规则》与开发者文档)
🔒 安全问题
未发现明显问题(SQL 全部参数化,输出均已 h() 转义,写操作有全局 CSRF 校验)。
⚡ 性能问题
未发现明显问题(会话列表与用户信息通过 rows_by_ids 批量读取,未读计数有请求级缓存)。
🐛 功能/规范缺陷
- 私有 Hook 未加插件前缀:
plugin.php:75的notification.direct.allow与plugin.php:78的notification.direct.sent占用了核心notification.命名空间。规则要求私有 Hook 以插件 ID 开头,建议改为direct_messages.direct.allow等。 - 读取页面即改状态:
plugin.php:113在 GET 加载私信页时直接调用direct_messages_mark_read()修改app_notifications.read_at与app_users.unread_notifications,未走 POST。规则要求修改状态的操作只接受 POST,建议改为独立的 POST 标记已读接口。 - 直接改动核心缓存:
plugin.php:65-67写入核心内部全局$GLOBALS['__me_cache']['unread_notifications'],依赖核心内部实现,易随核心升级失效,建议改用公开 API 同步未读数。
✅ 修复优先级
先改 Hook 前缀与 GET 状态变更,再处理核心缓存耦合。
- 私有 Hook 未加插件前缀:
版本 1.3.0 更新:
个人卡片入口文字改为“我的私信”。
新增会话摘要表,优化私信列表查询性能。
私信发送时增量更新最新消息和未读数量。
未读统计改为读取摘要数据,减少通知表查询。
消息分页改用游标方式,降低深页加载开销。
优化历史私信数据回填逻辑。
增加私信相关数据库索引及幂等迁移处理。
精简联系人和消息查询字段。
优化并发发送时的摘要更新,降低锁冲突风险。版本 1.3.0 更新:
消息内容改用统一的 markdown_html() 解析,> 引用内容 会生成 <blockquote>。
新增私信内容区域的引用样式,包括左边框、缩进和 muted 文字颜色。
保留 Markdown 安全模式,避免引入不安全 HTML。版本 1.3.1 更新:
去掉“我的”消息左侧的竖线版本 1.3.1 更新:
桌面端联系人区域最大高度为对话区高度,联系人过多时显示独立纵向滚动条。
移动端保持页面自然滚动,不限制列表高度。版本 1.3.2 更新:
更新版本版本 1.3.3 更新:
左侧联系人栏会自动拉伸到右侧对话栏的高度。
联系人过多时,仅左侧列表内部滚动非常棒的更新!
🔁 复核回帖(AI 自动核对,对照 8/18 楼上 350 的审查报告与当前 v1.3.3 源码)
结论:350 指出的 3 项在本版本(v1.3.3)中均未改动,逐条核对如下:
- 私有 Hook 未加前缀:plugin.php 176/179 行的
notification.direct.allow、notification.direct.sent仍占用核心notification.命名空间,未改为direct_messages.direct.allow等插件前缀写法。
- GET 请求下改写已读状态:plugin.php:246
direct_messages_page()页面加载分支(含 GET)仍直接调用direct_messages_mark_read(),会修改app_notifications.read_at与app_users.unread_notifications,未改为独立 POST 接口。
- 直接改动核心内部缓存:plugin.php:166-167 仍在直接写
$GLOBALS['__me_cache']['unread_notifications'],依赖核心内部实现细节。
均为规范/耦合类问题(非安全高危项),未见新增问题;建议后续版本按原报告方向修正。
- 私有 Hook 未加前缀:plugin.php 176/179 行的
版本 1.4.6 更新:
修复未读bug版本 1.4.7 更新:
增加五级信任等级体系权限设置支持版本 1.4.7 更新:
支持五级信任等级体系


