Files
MC_Report/README.md

94 lines
3.0 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.
# MC Report System
游戏玩家投诉建议申诉系统。支持 Web 端 + Paper 插件双端提交MySQL 存储JWT 鉴权,三级角色(服主/管理员/玩家)。
## 功能
| 模块 | 说明 |
|------|------|
| 举报 | 玩家举报违规行为,可指定目标玩家,上传截图/视频 |
| 建议 | 玩家提交改进建议 |
| 申诉 | 封禁申诉Web端+ 结果申诉(对处理不服) |
| 接单制 | 管理员认领工单,一人一单,可转单 |
| 审批流 | 待处理→处理中→待补充→已解决/已驳回→关闭 |
| 投票 | 分组子服定时/不定时投票盲投制管理员1.5票权 |
| 更新内容 | PCL风格功能投票按时间/热度排序,分组筛选 |
| 通知 | SMTP邮件 + Discord Webhook 双通道 |
| 导出 | CSV格式导出工单/被举报人/日志(服主专享) |
| 插件 | Paper 1.20+ 插件,游戏内注册/登录/举报/追踪 |
## 快速开始
```bash
# 安装依赖
npm install
# 启动
node backend/server.js
# → 访问 http://localhost:3100/#/install
```
安装向导两步完成MySQL 连接配置 → 创建服主账号。重启后自动加载业务路由。
## 技术栈
| 层 | 技术 |
|----|------|
| 后端 | Node.js + Express + mysql2 |
| 前端 | Vanilla JS SPA + Hash路由 |
| 数据库 | MySQL 5.7+ |
| 认证 | JWT256位随机密钥 |
| 安全 | Helmet + Rate Limit + XSS + CSP |
| 插件 | Paper API 1.20.4 + java.net.HttpURLConnection |
## 角色权限
| 操作 | 玩家 | 管理员 | 服主 |
|------|:--:|:--:|:--:|
| 提交工单 | ✅ | ✅ | ✅ |
| 查看工单 | 自己 | 待处理+自己接的 | 全部 |
| 接单 | — | 举报/申诉 | 全部 |
| 处理工单 | — | 自己接的 | 全部 |
| 用户管理 | — | ✅ | ✅ |
| 系统设置 | — | ✅ | ✅ |
| 导出数据 | — | — | ✅ |
| 投票管理 | — | — | ✅ |
## 部署
```bash
# 生产环境变量
PORT=3100 CORS_ORIGIN=https://your-domain.com node backend/server.js
# PM2
pm2 start backend/server.js --name mc-report
# Nginx 反代
# include nginx.inc;
```
## 目录
```
├── backend/
│ ├── server.js # Express入口
│ ├── db.js # MySQL连接池 + 建表
│ ├── mailer.js # SMTP邮件
│ ├── captcha.js # SVG验证码
│ ├── webhook.js # Discord Webhook
│ ├── middleware/
│ │ ├── auth.js # JWT认证
│ │ ├── security.js # 限速+XSS+APIKey
│ │ └── upload.js # 文件上传安全
│ └── routes/
│ ├── auth.js # 注册/登录
│ ├── tickets.js # 工单核心
│ ├── install.js # 安装向导
│ ├── external.js # 外部API(插件用)
│ └── ... # 其他路由
├── public/ # 前端SPA
├── mc-report-plugin/ # Paper 1.20+ 插件
├── nginx.inc # Nginx额外配置
└── data/ # 运行时数据
```