把 QQ 群里的指令转发到你的 SCP: Secret Laboratory (SCPSL) 服务器,实现查询在线、广播、封禁、重启回合等联动。同时支持游戏内玩家通过 .ac 指令将消息实时推送至 QQ 群,双向通信全程鉴权加密。
仓库结构(已规范化命名):
server/:SCPSL 服务器端 EXILED 插件(TCP 命令服务端 + 主动推送客户端)bot/:QQ 机器人(.NET 8),连接 OneBot 11 的正向 WebSocket,并通过 TCP 控制server/插件
- 游戏内
.ac推送指令:玩家在游戏控制台输入.ac <消息>,即可实时推送到指定 QQ 群 - 管理员同步广播:
.ac触发时,所有在线管理员屏幕同步显示广播提示 - 双向通信鉴权(AuthToken):所有 TCP 通信强制 Token 校验,防止未授权访问与伪造推送
- 独立通知监听服务:机器人端新增独立端口(默认
10088)接收游戏服推送
👉 推荐优先使用 API 接口版本:
📖 点击查看 API 使用文档
不希望使用 API 的话,再选择本 README 的「本地插件方式」。
- 一台能跑 SCPSL Dedicated Server 的机器
- 已安装 EXILED(服务器端需要)
- 一个能登录 QQ 的环境(同一台机器也可以)
- 安装 .NET 8 SDK(只给
bot/用)
推荐使用 NapCatQQ(OneBot 11):
https://github.com/NapNeko/NapCatQQ
你要做的事情只有两件:
- 按 NapCatQQ 官方文档安装并登录 QQ
- 在 OneBot 11 配置里开启 WebSocket 服务端(正向 WS),例如开在
127.0.0.1:6700
配置字段名通常叫 websocketServers,里面会有 host/port/token。
releases下载插件
把 Server_Qcha.dll 放进 EXILED 插件目录(示例):
- Windows:
...\EXILED\Plugins\ - Linux:
~/.config/EXILED/Plugins/
重启服务器,让插件加载一次并生成配置。
在 EXILED 的插件配置里找到本插件配置项,设置:
| 配置项 | 默认值 | 说明 |
|---|---|---|
tcp_port |
10087 |
TCP 命令监听端口 |
i_p |
127.0.0.1 |
TCP 命令监听 IP |
server_name |
1服 |
显示用名字 |
bot_i_p |
127.0.0.1 |
机器人通知监听服务的 IP |
bot_port |
10088 |
机器人通知监听服务的端口 |
auth_token |
QchaSecret_123 |
🔒 安全验证 Token,须与机器人端一致 |
⚠️ 安全提醒:部署前请务必修改auth_token的默认值!
复制示例配置:
- 从:
bot/src/Server_Qcha.Bot/appsettings.Example.json - 到:
bot/src/Server_Qcha.Bot/appsettings.Local.json
然后编辑 appsettings.Local.json:
{
"GoCqHttp": {
"WsBaseUri": "ws://127.0.0.1:6700"
},
"SocketServer": {
"Host": "127.0.0.1",
"Ports": [ 10087 ],
"NotificationHost": "0.0.0.0",
"NotificationPort": 10088,
"AuthToken": "YourSecretTokenHere"
},
"Bot": {
"AllowedGroupIds": [ 123456789 ],
"NotifyGroupIds": [ 123456789 ],
"AcTargetGroupId": 123456789
}
}关键配置说明:
| 配置项 | 说明 |
|---|---|
GoCqHttp:WsBaseUri |
NapCatQQ 的正向 WS 地址 |
SocketServer:Host |
游戏服务端插件 TCP 地址 |
SocketServer:Ports |
游戏服务端插件 TCP 端口(多服就写多个) |
SocketServer:NotificationHost |
通知监听服务绑定 IP(0.0.0.0 = 所有网卡) |
SocketServer:NotificationPort |
通知监听服务端口 |
SocketServer:AuthToken |
🔒 安全验证 Token,须与游戏服端一致 |
Bot:AcTargetGroupId |
接收 .ac 推送的目标 QQ 群号 |
appsettings.Local.json已在.gitignore中忽略,不会提交到 GitHub。
dotnet run --project bot/src/Server_Qcha.Bot -c Release保持窗口不要关闭。
把 NapCatQQ 登录的 QQ 号拉进群,然后在群里发送:
| 指令 | 说明 |
|---|---|
help |
显示帮助 |
cx |
查询所有服务器在线人数 |
info |
查询服务器详细信息 |
#1 |
查看第 1 个服务器玩家列表(#2、#3 同理) |
/bd <Steam64> |
绑定 QQ 到 Steam64 |
/me |
查询自己绑定的玩家数据 |
| 指令 | 说明 |
|---|---|
/bc 1 内容 |
向第 1 个服务器广播 |
/round 1 |
重启第 1 个服务器回合 |
/ban 1 <ID> <时间> <原因> |
封禁玩家 |
玩家在游戏中按 ~ 打开控制台,输入:
.ac 你想推送到QQ群的消息内容
效果:
- ✅ QQ 群内立刻收到推送消息(格式:
来自服务器 [1服]: 玩家 [昵称] 发送了:内容) - ✅ 当前对局所有在线管理员屏幕上显示 10 秒广播提示
- 🔒 通信全程经过 AuthToken 鉴权,防止伪造
本项目为所有 TCP 通信提供了双向 Token 鉴权机制:
- QQ 群 → 游戏服(查询/广播/踢人等指令):机器人发送命令时附带 Token,游戏服验证通过后才执行
- 游戏服 → QQ 群(
.ac推送):游戏服推送时附带 Token,机器人验证通过后才转发到群
使用方法:
- 在游戏服端和机器人端分别配置完全相同的
AuthToken - Token 留空(
"")则自动回退为无鉴权模式(不推荐用于生产环境)
⚠️ 默认 TokenQchaSecret_123仅供演示,请务必修改为自定义强密码!
- 机器人没反应
- NapCatQQ 是否成功登录
- NapCatQQ 的正向 WS 是否开启,端口是否是 6700
- 机器人连接 WS 失败
GoCqHttp:WsBaseUri写错- 端口被占用/防火墙拦截
- 服务器不执行命令
server/插件是否加载成功- 插件
tcp_port是否和bot的SocketServer:Ports对得上
- 指令返回 Unauthorized
- 游戏服端和机器人端的
AuthToken不一致 - 请确保两边配置完全相同的 Token
- 游戏服端和机器人端的
.ac推送没有到达 QQ 群- 检查机器人端
Bot:AcTargetGroupId是否已配置群号 - 检查游戏服端
bot_i_p和bot_port是否能连通机器人的通知监听端口 - 检查防火墙是否放行了
10088端口
- 检查机器人端
如在使用过程中遇到问题或有建议,欢迎联系作者:
- QQ : 3037240065
- 📧 邮箱:liseximt@outlook.com
- 游戏内
.ac实时推送到 QQ 群 - 双向通信鉴权(AuthToken)
- 管理员同步广播
- 完善数据库查询功能
- 优化 API 兼容性
- 增加控制台图形界面
- 支持更多插件扩展
- 提供多语言支持(含英文国际化)
- 完善管理指令
/setadmin权限联动功能
感谢使用 Server_Qchat!
如果你觉得这个项目对你有帮助,欢迎点个 ⭐️Star 支持一下!