[MD]
# ElySecurity
一个功能强大的 Nukkit-MOT 服务器安全插件
支持调用插件API进行内容审核(包含百度AI内容审核)
玩家OP二次验证
高效能反刷屏
## 🚀 功能特性
### 🔒 核心安全功能
- **OP权限管理** - 数据库/文件双重存储模式
- **权限状态同步** - 实时检测并同步玩家权限
- **内容安全检测** - 支持本地和百度API双重检测
### 🛡️ 反违规机制
- **智能刷屏检测** - 基于消息间隔、相似度、信息熵的多维度检测
- **违禁词过滤** - 本地词库 + 百度AI内容审核
- **多种惩罚方式** - 警告、踢出、禁言等可配置惩罚
### ⚙️ 技术特性
- **双存储模式** - 可选择MySQL数据库或YAML文件存储
- **Redis缓存支持** - 高性能缓存加速
- **多语言支持** - 中英文界面
- **异步检测** - 不阻塞服务器主线程
## 📦 安装要求
### 环境要求
- **Nukkit API**: 1.0.10+
- **Java**: 8+
- **可选**: MySQL 5.7+ / Redis 5+
### 依赖
- **必须**: Nukkit 服务器
- **可选**: MySQL驱动、Redis客户端
## ⚡ 快速开始
### 1. 安装插件
将 `ElySecurity.jar` 放入 `plugins/` 目录并重启服务器。
### 2. 基础配置
编辑 `plugins/ElySecurity/config.yml`:
```yaml
# 基本设置
language: "zh_CN" # 语言: zh_CN / en_US
# 存储模式选择
mysql:
enabled: false # 关闭MySQL,使用文件存储
```
### 3. 添加管理员
在控制台执行:
```bash
op add 你的游戏ID
```
## 🛠️ 配置说明
### 存储模式配置
#### 方案A:使用文件存储(简单)
```yaml
mysql:
enabled: false
```
OP列表将保存在:`plugins/ElySecurity/admin.yml`
#### 方案B:使用数据库存储(推荐)
```yaml
mysql:
enabled: true
host: "localhost"
port: 3306
database: "elysecurity"
username: "root"
password: "your_password"
```
### 安全功能配置
#### 反刷屏设置
```yaml
anti-spam:
enabled: true
message-interval: 1000 # 消息间隔(ms)
similarity-threshold: 0.8 # 相似度阈值
punishment: "kick" # 惩罚方式: warning/kick
```
#### 违禁词设置
```yaml
prohibited-words:
enabled: true
mode: "local" # local/baidu/both
punishment: "mute" # 惩罚方式: warning/kick/mute
mute-duration: 300 # 禁言时长(秒)
```
## 📋 命令列表
| 命令 | 权限 | 描述 | 使用示例 |
|------|------|------|----------|
| `/op add <玩家>` | elysecurity.op | 添加OP权限 | `/op add Steve` |
| `/op remove <玩家>` | elysecurity.op | 移除OP权限 | `/op remove Alex` |
> ⚠️ 注意:OP命令只能在服务器控制台执行
## 📁 文件结构
```
plugins/ElySecurity/
├── config.yml # 主配置文件
├── admin.yml # OP列表(文件模式)
├── prohibited-words.yml # 违禁词库
└── lang/
├── zh_CN.yml # 中文语言文件
└── en_US.yml # 英文语言文件
```
## 🔧 高级功能
### Redis缓存加速
```yaml
redis:
enabled: true
host: "localhost"
port: 6379
password: ""
```
### 百度AI内容审核
```yaml
baidu-api:
enabled: true
api-key: "your_api_key"
secret-key: "your_secret_key"
```
### 自定义违禁词
编辑 `prohibited-words.yml`:
```yaml
local-words:
- "违规词1"
- "违规词2"
- "违规词3"
```
## ❓ 常见问题
### Q1: 插件无法加载?
- 检查Nukkit版本是否≥1.0.10
- 检查Java版本是否≥8
- 查看服务器日志获取详细错误信息
### Q2: OP权限不同步?
- 确保存储模式配置正确
- 检查数据库连接(如果使用MySQL)
- 尝试重新执行OP命令
### Q3: 如何备份OP列表?
- **文件模式**: 备份 `admin.yml`
- **数据库模式**: 备份MySQL的`ops`表
### Q4: 如何更新插件?
1. 备份配置文件
2. 替换插件JAR文件
3. 重启服务器
4. 检查配置兼容性
## 📊 性能优化建议
1. **小规模服务器**: 使用文件存储模式
2. **中大型服务器**: 使用MySQL+Redis组合
3. **调整检测阈值**: 根据服务器负载调整检测灵敏度
4. **定期清理缓存**: 长时间运行后重启释放内存
## 🤝 贡献与支持
### 问题反馈
遇到问题请提供:
1. Nukkit版本
2. 插件版本
3. 错误日志截图
4. 复现步骤
### 功能建议
欢迎通过GitHub Issues提交功能建议。
## 📄 许可证
本项目采用 MIT 许可证。详见 LICENSE 文件。
## 🔌 API 调用
### 百度内容审核 API
其他插件可以通过以下方式调用本插件的百度内容审核功能:
```java
// 获取ElySecurity插件实例
PluginBase elySecurity = getServer().getPluginManager().getPlugin("ElySecurity");
// 检查内容是否违规
if (elySecurity instanceof cn.ElysianArena.ElySecurity.Main) {
cn.ElysianArena.ElySecurity.Main main = (cn.ElysianArena.ElySecurity.Main) elySecurity;
cn.ElysianArena.ElySecurity.security.ViolationResult result = main.getProhibitedWords().checkContent(playerName, content);
if (result.isViolated()) {
// 处理违规内容
String source = result.getSource(); // 违规来源 (local/baidu)
List<String> details = result.getViolationDetails(); // 违规详情
double confidence = result.getConfidence(); // 置信度
}
}
```
返回的ViolationResult对象包含以下字段:
- `violated`: 是否违规
- `violationType`: 违规类型ID
- `subType`: 子类型
- `violationDetails`: 违规详情(如命中的关键词)
- `source`: 检测来源 (local/baidu)
- `confidence`: 置信度
- `message`: 附加消息
## ✨ 更新日志
### v1.0.0
- ✅ OP权限管理
- ✅ 反刷屏系统
- ✅ 违禁词过滤
- ✅ 双存储模式支持
- ✅ 多语言界面
[/MD]