java基于go-cqhttp开发qq机器人
GO-CQHTTP已经不在更新,故本文章已经失效。
请看最新使用NapCatQQ文章
传送门:传送门
当使用 Java 搭建 QQ 机器人时,可以借助 go-cqhttp 这个开源的轻量级框架来实现。下面是一个简单的教程,帮助你搭建基于 go-cqhttp 的 QQ 机器人。(全网最流畅,全网最新)
目录
准备工作
1. 启动qqSign签名服务
Windows标准启动
2. 创建启动JavaDemo项目
3. 启动go-cqhttp
Windows标准启动
4. 结语
准备工作
- 下载安装java8并且配置环境变量。
- 下载并安装 go-cqhttp。2023-11-16目前官方最新版本是v1.2.0
- 下载并安装 qqSign签名服务。目前go-cqhttp官方版本v1.2.0 对应的qSign版本是v1.1.9
- 以下JavaDemo及pom依赖svipbot包源码链接:源码参考
- 以上资源本人gitee地址:
链接: gocqhttp-qqsign: 就是gocqhttp和qqsign这个保证能解决你的登录问题
1. 启动qqSign签名服务
Windows标准启动
- 进入unidbg-fetch-qsing-*/bin路径下
- 地址栏输入cmd回车进入命令窗口
- 输入启动命令启动
# host ip # port 端口 # count 对应几个gocqhttp # android_id 对应gocqhttp启动后生成的device.json中的android_id,可先不配置任何东西启动gocqhttp从生成的device.json文件中取出android_id # library 协议版本包 这里是8.9.63也是gocqhttpv1.1.0对应的版本 unidbg-fetch-qsign.bat --host=127.0.0.1 --port=8080 --count=1 --android_id=xxxxxxxxxx --library=..\txlib\8.9.63
2. 创建启动JavaDemo项目
- 新建SpringBoot项目。SpringBoot版本使用2.7.7
- pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><!-- springboot版本 --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.7</version><relativePath/></parent><!-- 本项目版本信息 --><groupId>com.example</groupId><artifactId>demo</artifactId><version>0.0.1-SNAPSHOT</version><name>demo</name><description>Demo project for Spring Boot</description><!-- 依赖jar版本号 --><properties><java.version>1.8</java.version><svipbot.version>0.0.13</svipbot.version></properties><dependencies><!-- springboot svipbot --><dependency><groupId>cn.svipbot</groupId><artifactId>spring-boot-starter-svipbot</artifactId><version>${svipbot.version}</version></dependency><!-- lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency></dependencies><!-- 构建 --><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.7.7</version></plugin></plugins></build> </project>
- TestPlugin.java
package com.example.demo.plugins;import cn.svipbot.gocq.bot.Bot; import cn.svipbot.gocq.bot.BotPlugin; import cn.svipbot.gocq.event.message.GroupMessageEvent; import cn.svipbot.gocq.event.message.PrivateMessageEvent; import cn.svipbot.gocq.utils.CqMsg; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component;/*** 示例插件* 1. 插件继承自 BotPlugin* 2. 添加 @Component 注解* 3. 添加lombok的@Slf4j打印日志*/ @Slf4j @Component public class TestPlugin extends BotPlugin {/*** 收到私聊消息时会调用这个方法** @param bot 机器人对象,用于调用API,例如发送私聊消息 sendPrivateMsg* @param event 事件对象,用于获取消息内容、群号、发送者QQ等* @return 是否继续调用下一个插件, `MatchedAndBlock` 表示不继续, `NotMatch` 表示继续*/@Overridepublic int onPrivateMessage(Bot bot, PrivateMessageEvent event) {// 获取 发送者QQ 和 消息内容long userId = event.getUserId();// 控制台打印log.info("私聊消息{}", event.getMessage());// 发送消息CqMsg cqMsg = new CqMsg();cqMsg.text("测试私聊");bot.sendPrivateMsg(userId, cqMsg.toString(), false);// 继续执行下一个插件return NotMatch;}/*** 收到群消息时调用此方法** @param bot 机器人对象* @param event 事件内容* @return 是否继续调用下一个插件, `MatchedAndBlock` 表示不继续, `NotMatch` 表示继续*/@Overridepublic int onGroupMessage(Bot bot, GroupMessageEvent event) {// 获取 发送者QQ 和 消息内容long userId = event.getUserId();// 获取 发送消息的群号long groupId = event.getGroupId();// 控制台打印log.info("群消息{}", event.getMessage());// 发送消息CqMsg cqMsg = new CqMsg();cqMsg.at(userId).text("测试群聊");bot.sendGroupMsg(groupId, cqMsg.toString());// 继续执行下一个插件return NotMatch;}public static void main(String[] args) {System.out.println();} }
- application.yml
server:port: 8081svipbot:# 请将编写的插件全类名添加在这里# 在收到消息时会按顺序依次调用以下插件# 如果前面的插件返回 MatchedAndBlock 则不会继续调用后续插件# 如果前面的插件返回 NotMatch 则会继续调用后续插件plugin-list:- com.example.demo.plugins.TestPlugin
- 启动
3. 启动go-cqhttp
Windows标准启动
- 双击
go-cqhttp_*.exe
,根据提示生成运行脚本 - 双击运行脚本
- config.yml只需关注以下属性配置,其他属性不必关注保持原有配置即可
# 账号相关 account:# QQ账号uin: 1233456# 密码不要为空password: ''# qqSign签名服务配置启动的ip+端口sign-server: 'http://127.0.0.1:8080'# 消息相关 message:# 上报数据类型(就是gocqhttp将消息通知给第三方程序的消息类型)# 可选: string,array 这里配置arraypost-format: array# http超时时间http-timeout: 25000# 连接服务列表 servers:# 反向WS设置- ws-reverse:# 反向WS Universal 地址 demo项目启动的ip+端口+以下固定路径,支持在demo中yml配置universal: ws://127.0.0.1:8888/svipbot/bot/# 重连间隔 单位毫秒reconnect-interval: 3000middlewares:# 引用默认中间件<<: *default
-
启动go-cqhttp
-
go-cqhttp启动成功后返回JavaDemo查看控制台已接收到go-cqhttp通知消息
4. 结语
这篇文章介绍了当下(2023-11-16)的go-cqhttp使用,及基于java实现qq机器人的简单接受私聊消息和群聊消息。
如果需要继续开发更多功能的机器人,详细需要查看本文JavaDemo的pom依赖中svipbot的源码实现,源码地址已经放到文章开头。
有任何问题可随时联系作者:201088830,亦可加入群聊学习交流:727289809