返回项目列表
ArkOpsSkill

NapCatQQSkill

通过 NapCatQQ 框架实现 QQ 机器人管理 Minecraft 服务器,让 AI 能够通过 QQ 执行服务器命令、管理玩家、监控状态等。

Internal Beta 2026-05-09 15:50:37

详细介绍

NapCatQQ Server Manager Skill for ArkOps-Ai

通过 NapCatQQ 框架实现 QQ 机器人管理 Minecraft 服务器,让 AI 能够通过 QQ 执行服务器命令、管理玩家、监控状态等。

概述

NapCatQQ Server Manager 是一个基于 ArkOps-Ai 框架的 Skill 插件,通过 NapCatQQ 机器人实现 QQ 与 Minecraft 服务器的无缝对接。管理员和玩家可以通过 QQ 群与 AI 对话,实现对服务器的远程管理。

核心优势

  • 远程管理:无需连接服务器控制台,通过 QQ 即可管理服务器
  • AI 驱动:基于 ArkOps-Ai 的 AI 能力,自然语言理解用户意图
  • 权限控制:三级权限系统,确保操作安全
  • 实时监控:随时查看服务器状态、玩家信息
  • 聊天同步:服务器聊天与 QQ 群消息双向同步

适用场景

  • 服务器管理员外出时远程管理服务器
  • 玩家通过 QQ 查询服务器状态
  • 自动化服务器运维
  • 跨平台消息通知

功能特性

服务器管理

功能 说明
命令执行 执行任意控制台命令
状态监控 查看 TPS、内存使用、在线人数
世界管理 获取世界信息、设置时间、设置天气
广播消息 向所有在线玩家发送消息

玩家管理

功能 说明
在线列表 查看所有在线玩家及详细信息
玩家信息 查询指定玩家的状态、位置、等级等
踢出玩家 将玩家踢出服务器
封禁/解封 封禁或解封玩家
传送 将玩家传送到其他玩家或坐标位置

消息通信

功能 说明
QQ 消息 向 QQ 群发送消息
私聊玩家 向指定玩家发送私聊消息
聊天同步 服务器聊天与 QQ 群双向同步

系统架构

整体架构

┌─────────────────────────────────────────────────────────┐
│                    QQ 用户/管理员                          │
└────────────────────────┬────────────────────────────────┘
                         │
                         ▼
┌─────────────────────────────────────────────────────────┐
│                   NapCatQQ 机器人                         │
│              (OneBot 11 协议)                             │
└────────────────────────┬────────────────────────────────┘
                         │ HTTP API
                         ▼
┌─────────────────────────────────────────────────────────┐
│                  NapCatClient                             │
│            (OneBot 11 HTTP 客户端)                        │
└────────────────────────┬────────────────────────────────┘
                         │
                         ▼
┌─────────────────────────────────────────────────────────┐
│               NapCatQQSkill (Skill 主类)                  │
│  ┌──────────────────────────────────────────────────┐   │
│  │  工具定义 (Tools)                                 │   │
│  │  - execute_command                               │   │
│  │  - get_server_status                             │   │
│  │  - get_online_players                            │   │
│  │  - ...                                           │   │
│  └──────────────────────────────────────────────────┘   │
│  ┌──────────────────────────────────────────────────┐   │
│  │  系统提示词 (System Prompt)                       │   │
│  └──────────────────────────────────────────────────┘   │
└────────────────────────┬────────────────────────────────┘
                         │
                         ▼
┌─────────────────────────────────────────────────────────┐
│                  ArkOps-Ai 核心                           │
│  ┌──────────────────────────────────────────────────┐   │
│  │  AI 模型 (LLM)                                    │   │
│  │  - 理解用户意图                                    │   │
│  │  - 选择合适工具                                    │   │
│  │  - 生成工具参数                                    │   │
│  └──────────────────────────────────────────────────┘   │
└────────────────────────┬────────────────────────────────┘
                         │
                         ▼
┌─────────────────────────────────────────────────────────┐
│              Minecraft Server (Purpur)                    │
│  ┌──────────────────────────────────────────────────┐   │
│  │  Bukkit API                                       │   │
│  │  - 执行命令                                       │   │
│  │  - 管理玩家                                       │   │
│  │  - 控制世界                                       │   │
│  └──────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────┘

组件说明

组件 说明
NapCatQQ QQ 机器人框架,实现 OneBot 11 协议
NapCatClient Java HTTP 客户端,调用 OneBot 11 API
NapCatQQSkill Skill 主类,实现工具定义和执行逻辑
ArkOps-Ai AI 核心框架,处理自然语言和工具调用
Minecraft Server Purpur 服务器,执行实际的游戏操作

快速开始

环境要求

组件 版本要求
Java 21+
Minecraft Server Purpur 1.20+
ArkOps-Ai 2.0.0+
NapCatQQ 4.18.0+
Maven 3.8+

1. 安装 NapCatQQ

参考 NapCatQQ 官方文档 安装并配置 NapCatQQ。

确保启用了 HTTP API 服务,默认监听地址为 http://localhost:3000

2. 编译 Skill

cd napcat-qq-skill
mvn clean package -DskipTests

编译成功后,在 target/ 目录下生成 NapCatQQ-Skill-2.0.0.jar

3. 部署 Skill

将生成的 jar 文件复制到 ArkOps-Ai 的 skills 目录:

# Windows
copy target\NapCatQQ-Skill-2.0.0.jar plugins\ArkOps-Ai\skills\

# Linux
cp target/NapCatQQ-Skill-2.0.0.jar plugins/ArkOps-Ai/skills/

4. 配置 Skill

编辑 NapCatQQSkill.java 中的配置参数:

// NapCatQQ API 地址
this.napCatBaseUrl = "http://localhost:3000";

// NapCatQQ Token(在 NapCat HTTP Server 配置中设置)
this.napCatToken = "4drkBWWPzmNe1aOz";

// 目标 QQ 群号(用于发送消息)
this.targetGroupId = 123456789;

// 是否启用聊天同步
this.chatSyncEnabled = false;

4.1 配置 NapCat Token

在 NapCat 的 HTTP Server 配置中设置 Token:

  1. 打开 NapCat 配置界面
  2. 找到 HTTP Server 配置项
  3. Token 字段中输入你的密钥(如 4drkBWWPzmNe1aOz
  4. 保存配置并重启 NapCat

然后在 NapCatQQSkill.java 中设置相同的 Token:

this.napCatToken = "你的Token值";

注意:Token 用于身份验证,确保 Skill 中的 Token 与 NapCat 配置中的 Token 一致。

5. 启动服务器

启动 Minecraft 服务器,检查日志确认 Skill 注册成功:

[ArkOps-Ai] 已注册 Skill: NapCatQQ Server Manager v2.0.0 by ArkOps Team
[NapCatQQSkill] Initializing NapCatQQ Server Manager...
[NapCatQQSkill] NapCatQQ Server Manager enabled!
[NapCatQQSkill] QQ API URL: http://localhost:3000

6. 测试

在 QQ 群中发送消息测试:

用户:服务器状态怎么样?
AI:[调用 get_server_status 工具返回服务器状态]

工具详解

1. execute_command

执行控制台命令。

权限等级:ADMIN

参数

参数 类型 必填 说明
command string 要执行的命令(不包含 /)

示例

{
  "command": "say 服务器即将重启"
}

返回值:命令执行结果

注意事项

  • 命令不包含前导 /
  • 具有完整控制台权限,谨慎使用
  • 危险命令可能导致服务器崩溃

2. get_server_status

获取服务器状态信息。

权限等级:PLAYER

参数:无

返回值

{
  "server_version": "Purpur 1.20.4",
  "online_players": 15,
  "max_players": 100,
  "used_memory_mb": 2048,
  "max_memory_mb": 8192,
  "worlds": 3,
  "tps": 19.8
}

3. get_online_players

获取所有在线玩家列表。

权限等级:PLAYER

参数:无

返回值

{
  "count": 3,
  "players": [
    {
      "name": "Steve",
      "uuid": "xxx-xxx-xxx",
      "health": 20.0,
      "level": 30,
      "gamemode": "SURVIVAL",
      "world": "world",
      "ping": 45
    }
  ]
}

4. get_player_info

获取指定玩家的详细信息。

权限等级:PLAYER

参数

参数 类型 必填 说明
player_name string 玩家名称

返回值

{
  "name": "Steve",
  "uuid": "xxx-xxx-xxx",
  "health": 20.0,
  "max_health": 20.0,
  "food": 20,
  "level": 30,
  "exp": 0.5,
  "gamemode": "SURVIVAL",
  "world": "world",
  "x": 100.5,
  "y": 64.0,
  "z": -200.3,
  "ping": 45,
  "ip": "192.168.1.100"
}

5. kick_player

踢出玩家。

权限等级:ADMIN

参数

参数 类型 必填 说明
player_name string 玩家名称
reason string 踢出原因

示例

{
  "player_name": "Steve",
  "reason": "使用作弊客户端"
}

6. ban_player

封禁玩家。

权限等级:ADMIN

参数

参数 类型 必填 说明
player_name string 玩家名称
reason string 封禁原因

7. unban_player

解封玩家。

权限等级:ADMIN

参数

参数 类型 必填 说明
player_name string 玩家名称

8. teleport_player

传送玩家。

权限等级:ADMIN

参数

参数 类型 必填 说明
player_name string 要传送的玩家
target string 目标玩家名称或坐标 (x,y,z)

示例

{
  "player_name": "Steve",
  "target": "Alex"
}

或传送到坐标:

{
  "player_name": "Steve",
  "target": "100,64,-200"
}

9. send_broadcast

发送广播消息。

权限等级:MODERATOR

参数

参数 类型 必填 说明
message string 广播消息内容

10. send_message_to_player

向玩家发送私聊消息。

权限等级:MODERATOR

参数

参数 类型 必填 说明
player_name string 玩家名称
message string 消息内容

11. set_time

设置世界时间。

权限等级:ADMIN

参数

参数 类型 必填 说明
time string 时间值
world string 世界名称

时间值

说明
day 白天 (1000 ticks)
night 夜晚 (13000 ticks)
sunrise 日出 (23000 ticks)
noon 正午 (6000 ticks)
数字 自定义 tick 值

12. set_weather

设置世界天气。

权限等级:ADMIN

参数

参数 类型 必填 说明
weather string 天气类型
duration number 持续时间(秒)
world string 世界名称

天气类型

说明
clear 晴天
rain 下雨
thunder 雷暴

13. get_world_info

获取世界信息。

权限等级:PLAYER

参数

参数 类型 必填 说明
world string 世界名称

返回值

{
  "name": "world",
  "environment": "NORMAL",
  "time": 1000,
  "difficulty": "HARD",
  "has_storm": false,
  "is_thundering": false,
  "spawn_x": 0,
  "spawn_y": 64,
  "spawn_z": 0,
  "players": 15
}

14. send_qq_message

向 QQ 群发送消息。

权限等级:MODERATOR

参数

参数 类型 必填 说明
message string 消息内容

15. toggle_chat_sync

切换聊天同步开关。

权限等级:ADMIN

参数

参数 类型 必填 说明
enabled boolean true 启用,false 关闭

权限系统

权限等级

等级 说明 可用工具
PLAYER 所有玩家可用 查询类工具
MODERATOR 需要管理员权限 消息发送类工具
ADMIN 需要高级管理员权限 服务器管理工具

权限分配

工具 PLAYER MODERATOR ADMIN
get_server_status
get_online_players
get_player_info
get_world_info
send_broadcast
send_message_to_player
send_qq_message
execute_command
kick_player
ban_player
unban_player
teleport_player
set_time
set_weather
toggle_chat_sync

使用场景

场景 1:远程查看服务器状态

用户:服务器现在有多少人在线?
AI:[调用 get_server_status]
AI 回复:当前服务器有 15 人在线,TPS 19.8,内存使用 2048MB/8192MB

场景 2:管理违规玩家

用户:那个叫 Steve 的玩家在用挂,把他踢出去
AI:[调用 kick_player]
AI 回复:已将 Steve 踢出服务器,原因:使用作弊客户端

场景 3:调整游戏环境

用户:把主世界时间改成白天,天气设为晴天
AI:[调用 set_time, set_weather]
AI 回复:已将主世界时间设为白天,天气设为晴天

场景 4:发送服务器公告

用户:通知所有玩家服务器今晚 10 点维护
AI:[调用 send_broadcast]
AI 回复:已发送广播:服务器将于今晚 10 点进行维护,请提前保存好物品

场景 5:传送玩家

用户:把 Alex 传送到 Steve 那里
AI:[调用 teleport_player]
AI 回复:已将 Alex 传送到 Steve 的位置

场景 6:执行复杂命令

用户:给所有在线玩家发送经验
AI:[调用 execute_command 执行 "xp 100 @a"]
AI 回复:已执行命令,所有玩家获得 100 经验

配置说明

NapCatQQ 配置

确保 NapCatQQ 配置文件中启用了 HTTP 服务:

# NapCatQQ 配置文件
http:
  enabled: true
  host: 0.0.0.0
  port: 3000

Skill 配置

NapCatQQSkill.java 中修改配置:

@Override
public void onEnable(JavaPlugin mainPlugin) {
    this.mainPlugin = mainPlugin;

    // NapCatQQ API 地址
    this.napCatBaseUrl = "http://localhost:3000";

    // 目标 QQ 群号
    this.targetGroupId = 123456789L;

    // 聊天同步开关
    this.chatSyncEnabled = false;

    // 初始化客户端
    this.client = new NapCatClient(napCatBaseUrl);

    // 注册事件
    Bukkit.getPluginManager().registerEvents(this, mainPlugin);
}

开发指南

项目结构

napcat-qq-skill/
├── pom.xml                                    # Maven 配置
├── README.md                                  # 项目文档
└── src/main/java/com/arkops/
    ├── skill/
    │   └── Skill.java                         # Skill 接口定义
    └── napcatskill/
        ├── NapCatClient.java                  # OneBot 11 HTTP 客户端
        └── NapCatQQSkill.java                 # Skill 主类

添加新工具

  1. getTools() 方法中添加工具定义:
tools.add(createTool(
    "new_tool_name",
    "工具描述",
    createPropsBuilder()
        .add("param1", "string", "参数描述", true)
        .build()
));
  1. getToolPermissionLevel() 中设置权限:
case "new_tool_name":
    return "ADMIN";
  1. executeTool() 中实现执行逻辑:
case "new_tool_name":
    String param1 = args.get("param1").getAsString();
    return executeNewTool(param1);
  1. 添加私有方法实现具体逻辑:
private String executeNewTool(String param1) {
    // 实现逻辑
    return "结果";
}
  1. getSystemPrompt() 中添加工具说明:
"- new_tool_name: 工具描述\n" +

编译项目

mvn clean package -DskipTests

常见问题

Q1: Skill 注册失败

问题:服务器启动时没有看到 Skill 注册日志

解决

  1. 确认 jar 文件已放入 plugins/ArkOps-Ai/skills/ 目录
  2. 检查 ArkOps-Ai 插件是否正常加载
  3. 查看服务器日志是否有错误信息

Q2: NapCatQQ 连接失败

问题:调用 QQ API 时返回连接错误

解决

  1. 确认 NapCatQQ 正在运行
  2. 检查 napCatBaseUrl 配置是否正确
  3. 确认防火墙未阻止连接
  4. 测试 API 是否可访问:curl http://localhost:3000/get_login_info

Q3: 命令执行无响应

问题:调用 execute_command 后没有返回结果

解决

  1. 确认命令格式正确(不包含前导 /
  2. 检查服务器日志是否有命令执行错误
  3. 确认命令在控制台中可以正常执行

Q4: 玩家不在线

问题:操作玩家时提示玩家不在线

解决

  1. 使用 get_online_players 确认玩家在线
  2. 检查玩家名称拼写是否正确
  3. 某些工具(如 ban、unban)可以操作离线玩家

Q5: QQ 消息发送失败

问题:调用 send_qq_message 返回错误

解决

  1. 确认 targetGroupId 已正确配置
  2. 确认机器人已加入目标群
  3. 检查 NapCatQQ 日志是否有权限错误

注意事项

安全机制

AISessionContext 会话级权限

NapCatQQ Skill 使用 ArkOps-Ai 的 AISessionContext 机制进行权限控制:

  1. QQ 用户消息通过 OpsCommandHandler.handleQQMessage() 处理,框架创建携带用户真实权限的 AISessionContext
  2. AI 只会看到与用户权限匹配的工具列表(filterToolsByPermission
  3. 每次工具调用都会经过双重权限校验(SkillManager.executeTool(context)
  4. 不再使用 dispatchCommand("ops") 方式(会导致 AI 以 CONSOLE 权限运行)
  5. 不再使用 关键词匹配或前缀注入方式(不可靠,存在绕过漏洞)

权限级别

级别 说明
DISABLED 黑名单用户,消息直接拒绝
PLAYER 仅能查询服务器状态、玩家列表等
ADMIN 可执行命令、踢人、设置时间/天气等
SUPER_ADMIN 全部权限,包括封禁、重启服务器等

性能考虑

  1. 内存使用:大量玩家查询可能影响服务器性能
  2. 并发控制:避免同时执行多个耗时操作
  3. 缓存机制:频繁查询的数据建议实现缓存

兼容性

  1. Minecraft 版本:支持 Purpur 1.20+
  2. Java 版本:需要 Java 21+
  3. ArkOps-Ai 版本:需要 2.0.0+
  4. NapCatQQ 版本:需要 4.18.0+

依赖项目

项目 版本 链接
ArkOps-Ai 2.0.0+ -
NapCatQQ 4.18.0+ https://napneko.github.io/
OneBot 11 - https://github.com/botuniverse/onebot-11
Purpur 1.20+ https://purpurmc.org/
Paper API 1.21.8 https://papermc.io/

许可证

该 Skill 仍处于开发与内部测试阶段,暂未开放使用。感谢您的关注,请耐心等待后续发布。 如果你对本项目感兴趣可以联系DreamArkMC@163.com申请参加内测。

相关项目

ArkOpsSkill
KnowledgeBaseSkill

基于ArkOps-Ai的知识库Skill

ArkOpsSkill
LogSkill

基于ArkOpsAi的玩家行为日志 Skill

ArkOpsSkill
MemorySkill

基于ArkOpsAi与阿里云向量检索服务的长期记忆Skill