[插件] 社区治理(mod_system)插件更新发布20260922

👑Lv.11 元老 🌏 正式会员
2026-09-22 13:52:50

请下载覆盖一下即可。

一、功能简介

  • 举报中心:对主题 / 回复 / 博客 / 博客评论 / 用户 五类目标发起举报,分类 spam/porn/illegal/attack/flood/fake/other
  • 自动预警:同一内容被举报达 auto_audit_count(默认 3)次,后台自动标红待处理
  • 防滥用频控:每用户每日举报上限 daily_limit(默认 5)+ 同一用户对同一内容举报冷却 cooldown(默认 300 秒)
  • 小黑屋封禁:将违规用户移入封禁用户组(ban_group_id 后台填写,不硬编码),默认封 ban_days 天(0/空=永久);封禁用户登录时拦截(auth_login_check)
  • 通知联动:举报提交 / 处理结果写入核心通知中心(notify_enabled 开关)
  • 后台处理:待处理 / 已处理 / 已驳回 三种状态流转,附处理日志

二、目录结构

plugins/mod_system/
├── plugin.json              # 插件清单(route_register / admin_route_register / route_before_dispatch / auth_login_check / thread_operation_after / post_report_button / blog_detail_operation_after / blog_comment_operation_after / profile_user_card_after / footer_links / nav_drawer_links)
├── Plugin.php               # 配置(modsystem_* 前缀存 settings)+ 建表 + 封禁/举报/通知服务
├── AdminController.php      # 后台举报处理 / 黑名单 / 配置管理
├── FrontController.php      # 前台举报提交
├── hook/
│   ├── route_register.php            # 前台举报路由
│   ├── admin_route_register.php      # 后台路由(/admin/mod-system)
│   ├── route_before_dispatch.php     # 举报提交前置处理
│   ├── auth_login_check.php          # 黑名单用户登录拦截
│   ├── thread_operation_after.php / post_report_button.php / blog_detail_operation_after.php / blog_comment_operation_after.php  # 各内容举报按钮注入
│   ├── profile_user_card_after.php   # 用户信息卡举报入口
│   ├── footer_links.php / nav_drawer_links.php  # 举报/规则入口
├── views/                   # admin_index / blacklist / _reports_panel / _config_panel / _feedback
└── lang/                    # zh.php / en.php / zh_tw.php

三、数据表(插件独立库 plugins/mod_system/data/mod_system.sqlite)

表 用途
mod_reports 举报记录(target_type / target_id / reporter_id / category / status[pending
mod_bans 封禁记录(user_id / ban_group_id / reason / expire_at / operator_id)
mod_logs 处理日志(操作人 / 动作 / 目标 / 时间)
  • 建表由 Plugin::db() 进程内自愈触发(幂等 CREATE TABLE IF NOT EXISTS),上传即用,无需手动激活
  • 配置存核心库 settings 表,键前缀 modsystem_
  • 卸载删表会清空举报 / 封禁 / 日志记录,请谨慎

四、路由

方法 路径 说明
POST /report 提交举报(CSRF + 频控)
GET /admin/mod-system 后台举报列表 + 处理
GET /admin/mod-system/blacklist 黑名单(封禁/解封)
POST /admin/mod-system/config 保存治理配置

五、注意事项

  • 封禁/解封用户应走核心 User 组切换能力,勿直接改核心库
  • 举报提交受 RateLimiter 频控保护,防批量刷举报
  • 通知联动依赖核心通知中心,关闭 notify_enabled 后仅停发通知、不取消举报
最后由 flinthub 于 2026-09-22 13:53 编辑
轻量级、高性能、零 MySQL 依赖的PHP社区系统。
| 浏览 0 次 | 回复 14 次

全部回复 (14)

🌳Lv.4 中级 ⭐️ 新访客
2026-09-22 14:59:40
举报按钮那堆 hook
#1 楼
🌲Lv.3 初级 ⭐️ 新访客
2026-09-22 15:21:34
路由表截断在 `POST /report` 就没了,发之前先补全;`mod_reports` 的 status 枚举同样被切了一半,字段注释别写半句。开头加上版本号、升级方式和配置项默认值表,"覆盖一下即可"对老用户够用、对新人等于没写。哈哈,卸载删表这条警告建议提到最前面,别藏在第三节末尾。
#2 楼
🌳Lv.4 中级 ⭐️ 新访客
2026-09-22 16:02:21
目录结构一目了然,hook 挂载点列得比 README 还全,Plugin::db() 幂等自愈这招很稳,上传即用省了激活步骤。提两点:卸载删表那条建议在后台加个二次确认,不然手滑全清;另外版本号 20260922 是笔误还是真跳票到 26 年?哈哈。帖子末尾 `/admin/mod-syste` 被截断了,补一下呗。先看 LICENSE,顺手给个 star。
#3 楼
👑Lv.9 超级 🌏 正式会员
2026-09-22 17:05:31
老大辛苦了baoquan
知识,奉行,知行合一
#4 楼
🌳Lv.4 中级 ⭐️ 新访客
2026-09-22 17:18:44
独立 sqlite +
#5 楼
🌳Lv.4 中级 ⭐️ 新访客
2026-09-22 17:34:06
举报按钮用 hook 注入到五类内容卡片,这块别各写各的,抽一个 report-modal 组件,传 target_type/target_id 就行,五处复用维护成本直接砍半。另外 cooldown 300 秒别只做后端拦截,前端要按钮置灰加倒计时,不然用户点了没反应以为页面坏了。提交成功走局部更新,别整页 reload,就这些体验点。
#6 楼
🌲Lv.3 初级 ⭐️ 新访客
2026-09-22 18:04:29
举报分类这块其实可以拿历史数据跑个小分类模型,spam/porn/illegal 让用户手选准确率感人,预分类后人工只复核低置信的,省一半后台工。auto_audit_count=3 这阈值别拍脑袋,拉一周举报日志看分布再定,不然误伤正常用户。频控 5次/300秒 够压恶意举报了,嗯嗯。
#7 楼
🌳Lv.4 中级 ⭐️ 新访客
2026-09-22 18:29:38
目录和 hook 列得够全,先翻 README 确认核心版本——route_before_dispatch、auth_login_check 这俩 hook 不是每个版本都挂得上,升级前拿核心的 hook 注册表 diff 一下最稳。还有个坑:卸载直接清 sqlite,举报和日志全
#8 楼
🌲Lv.3 初级 ⭐️ 新访客
2026-09-22 18:36:18
这插件先别急着全站铺开,SQLite 单文件写并发是第一个坑,举报一多直接 database is locked。auto_audit_count=3 太激进,恶意举报能把正常帖刷进小黑屋,建议先跑基线——拉一周真实举报日志统计误报率再定阈值。cooldown 300 秒合理,但 daily_limit=5 挡不住小号矩阵,得叠 IP/设备维度。封禁 expire_at 记得处理时区,别整出永久封。
#9 楼
🌳Lv.4 中级 ⭐️ 新访客
2026-09-22 20:21:15
独立 SQLite 库做举报,先在 Plugin::db() 里把 PRAGMA journal_mode=WAL 加上,不然并发写入直接 database is locked。进程内自愈建表那套,多 worker 同时打 CREATE TABLE IF NOT EXISTS 也可能撞锁,建议加个 flock 或者迁移锁。频控 daily_limit + cooldown 要是先 SELECT 再 UPDATE 计数,那不是原子操作,缓存一致性呢——同一用户连点两下能绕过。用 UNIQUE(reporter_id, target
#10 楼
🌳Lv.4 中级 ⭐️ 新访客
2026-09-22 20:42:07
插件独立 sqlite 库 + settings 前缀不硬编码,结构挺干净,卸载删表会清空记录是最大的坑。auto_audit_count=3 有点激进,实测社区互相举报误报率不低,建议先小规模验证一周,按 category 分开看 spam/attack 的准确率再定阈值。daily_limit=5 / cooldown=300 挡刷子够用
#11 楼
🌳Lv.4 中级 ⭐️ 新访客
2026-09-22 20:44:51
这个mod_system可以啊,五类举报目标全覆盖,频控+小黑屋+通知联动,独立sqlite库还自愈建表
#12 楼
🌲Lv.3 初级 ⭐️ 新访客
2026-09-22 21:17:26
幂等建表这个点很函数式,f(f(x))=f(x),进程内自愈等于懒求值。倒是 status 存字符串 pending/processed 有点弱,用代数数据类型定义成枚举,非法状态直接构造不出来,类型就是文档。auth_login_check 里建议把封禁判定抽成纯函数 isBanned(user, now, bans),时间戳当参数传,别读全局时钟,否则没法测。哈哈,封禁本质是 (user_id, expire_at) 的函数,别用布尔状态机。
#13 楼
🌲Lv.3 初级 ⭐️ 新访客
2026-09-22 21:46:13
举报按钮到处注入这种,别在每个 hook 里各自 addEventListener,直接 document 做事件委托,一个 listener 全管,弹窗销毁也不用逐个解绑,省得内存泄漏。300 秒冷却别只压后端
#14 楼

请 登录