一个基于 Spring Boot 和 Shiro 框架的 QQ 机器人项目,支持命令系统和 AI 对话功能。
- 框架: Spring Boot 3.5.7 + Shiro 2.4.7
- 语言: Java 17
- 构建工具: Maven
- AI 集成: OpenAI API
git clone <your-repo-url>
cd RobotDev
复制 .env.example 为 .env 并填写配置:
cp .env.example .env
编辑 .env 文件:
OPENAI_API_KEY=your-api-key-here
OPENAI_BASE_URL=https://api.openai.com/v1
OPENAI_MAX_RETRIES=3
# 使用 Maven
mvn spring-boot:run
# 或直接运行 JAR
mvn clean package
java -jar target/RobotDev-0.0.1-SNAPSHOT.war
| 命令 | 别名 | 说明 | 示例 |
|---|---|---|---|
/help |
h, ? |
显示帮助信息 | /help echo |
/echo |
say |
回显消息 | /echo Hello World |
/ping |
p |
测试机器人响应 | /ping |
/status |
stat, info |
显示机器人状态 | /status |
/ai |
ask, gpt |
AI 对话 | /ai 你好 |
/clear |
reset, new |
清空 AI 对话历史 | /clear |
# 查看所有命令
/help
# 查看特定命令的帮助
/help echo
# 回显消息
/echo 你好,世界!
# 测试响应
/ping
# 查看状态
/status
# AI 对话
/ai 你好,请介绍一下你自己
/ai 帮我写一个 Python 快速排序
/ai 解释什么是递归
# 清空 AI 对话历史
/clear
-
配置 API Key
# 在 .env 文件中设置 OPENAI_API_KEY=sk-xxxxxxxxxxxxx -
开始对话
/ai 你好 /ai 今天天气怎么样? /ai 帮我写一个 Python 的冒泡排序 -
多轮对话
用户: /ai 我叫小明 AI: 你好小明! 用户: /ai 我刚才说我叫什么? AI: 你叫小明。
- ✅ 上下文记忆 - AI 会记住对话历史
- ✅ 独立会话 - 每个用户有独立的对话空间
- ✅ 自动清理 - 30分钟不活动自动清理会话
- ✅ 可配置 - 支持自定义 AI 人设、模型等
详细说明请查看 AI_CHAT_GUIDE.md
command/
├── Command.java # 命令接口
├── CommandContext.java # 命令执行上下文
├── CommandResult.java # 命令执行结果
├── CommandRegistry.java # 命令注册中心
├── CommandParser.java # 命令解析器
├── CommandManager.java # 命令管理器
└── impl/
├── HelpCommand.java # 帮助命令
├── EchoCommand.java # 回显命令
├── PingCommand.java # Ping 命令
└── StatusCommand.java # 状态命令
- 创建命令类
在 command/impl/ 目录下创建新的命令类:
package com.example.robotdev.command.impl;
import com.example.robotdev.command.*;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
public class MyCommand implements Command {
@Override
public String getName() {
return "mycommand";
}
@Override
public List<String> getAliases() {
return List.of("mc");
}
@Override
public String getDescription() {
return "我的自定义命令";
}
@Override
public String getUsage() {
return "/mycommand <参数>";
}
@Override
public CommandResult execute(CommandContext context) {
// 实现命令逻辑
return CommandResult.success("执行成功");
}
}
- 自动注册
Spring 会自动扫描并注册所有带 @Component 注解的命令类。
- 测试命令
启动项目后,直接使用 /mycommand 即可。
server:
port: 8080
# OpenAI 配置
openai:
api-key: ${OPENAI_API_KEY:}
base-url: ${OPENAI_BASE_URL:https://api.openai.com/v1}
max-retries: ${OPENAI_MAX_RETRIES:3}
# Shiro 配置
shiro:
ws:
server:
enable: true
url: "/xm"
plugin-list: com.example.robotdev.TestPlugin
| 变量名 | 说明 | 默认值 |
|---|---|---|
OPENAI_API_KEY |
OpenAI API 密钥 | 无 |
OPENAI_BASE_URL |
API 基础 URL | https://api.openai.com/v1 |
OPENAI_MAX_RETRIES |
最大重试次数 | 3 |
RobotDev/
├── src/main/java/com/example/robotdev/
│ ├── RobotDevApplication.java # 主启动类
│ ├── TestPlugin.java # 机器人插件
│ ├── command/ # 命令系统
│ │ ├── Command.java # 命令接口
│ │ ├── CommandContext.java # 上下文
│ │ ├── CommandResult.java # 结果
│ │ ├── CommandRegistry.java # 注册中心
│ │ ├── CommandParser.java # 解析器
│ │ ├── CommandManager.java # 管理器
│ │ └── impl/ # 命令实现
│ │ ├── HelpCommand.java
│ │ ├── EchoCommand.java
│ │ ├── PingCommand.java
│ │ ├── StatusCommand.java
│ │ ├── AICommand.java # AI 对话命令
│ │ └── ClearCommand.java # 清空对话命令
│ ├── ai/ # AI 对话系统
│ │ ├── AIChatService.java # AI 对话服务
│ │ ├── AIChatProperties.java # AI 配置
│ │ ├── ChatSession.java # 对话会话
│ │ └── ChatSessionManager.java # 会话管理器
│ └── config/ # 配置类
│ ├── OpenAIConfig.java
│ └── OpenAIProperties.java
├── src/main/resources/
│ └── application.yml # 应用配置
├── .env.example # 环境变量示例
├── .gitignore # Git 忽略文件
├── pom.xml # Maven 配置
├── README.md # 本文件
└── AI_CHAT_GUIDE.md # AI 对话使用指南
- ✅ 使用环境变量存储 API Key
- ✅
.env文件已添加到.gitignore - ✅ 提供
.env.example作为示例 ⚠️ 永远不要将 API Key 提交到版本控制
命令接口提供了 hasPermission() 方法,可以自定义权限检查:
@Override
public boolean hasPermission(CommandContext context) {
// 自定义权限检查逻辑
return context.getUserId().equals(adminUserId);
}
# 运行所有测试
mvn test
# 运行特定测试
mvn test -Dtest=CommandParserTest
错误信息:
Cannot resolve symbol 'PostConstruct'
原因:Spring Boot 3.x 使用 jakarta.* 而不是 javax.*
解决:
// ❌ 错误
import javax.annotation.PostConstruct;
// ✅ 正确
import jakarta.annotation.PostConstruct;
详细说明请查看 SPRING_BOOT_3_MIGRATION.md
错误信息:
OpenAI client is not configured. AI features will be disabled.
解决:设置环境变量 OPENAI_API_KEY
检查事项:
- 命令是否以
/开头 - 机器人是否有管理员权限(如果需要)
- 查看日志输出确认命令是否被识别
- 添加基本命令(help, echo, ping, status)
- 实现 AI 对话功能
- 添加用户权限系统
- 添加命令冷却时间
- 添加命令使用统计
- 添加更多实用命令(天气、翻译、计算器等)
- 完善单元测试
欢迎提交 Issue 和 Pull Request!
本项目仅用于学习和研究目的。
新增功能:
- ✅ AI 对话功能
- 支持上下文记忆
- 独立用户会话
- 自动会话清理
- 可自定义 AI 人设
- ✅ 新命令
/ai- AI 对话/clear- 清空对话历史
改进:
- ✅ 启用定时任务支持
- ✅ 完善配置系统
- ✅ 新增 AI 对话使用指南
- ✅ 重构命令系统
- ✅ 实现基本命令(help, echo, ping, status)
- ✅ 集成 OpenAI API
- ✅ 使用环境变量管理敏感配置
- ✅ 完善项目文档
最后更新: 2026-01-01