java基于go-cqhttp开发qq机器人

当使用 Java 搭建 QQ 机器人时,可以借助 go-cqhttp 这个开源的轻量级框架来实现。下面是一个简单的教程,帮助你搭建基于 go-cqhttp 的 QQ 机器人。(全网最流畅,全网最新) 

目录

准备工作

1. 启动qqSign签名服务

Windows标准启动

2. 创建启动JavaDemo项目

3. 启动go-cqhttp

Windows标准启动

4. 结语


准备工作

  1. 下载安装java8并且配置环境变量。
  2. 下载并安装 go-cqhttp。2023-11-16目前官方最新版本是v1.2.0
  3. 下载并安装 qqSign签名服务。目前go-cqhttp官方版本v1.2.0 对应的qSign版本是v1.1.9
  4. 以下JavaDemo及pom依赖svipbot包源码链接:源码参考
  5. 以上资源本人gitee地址:
    链接: gocqhttp-qqsign: 就是gocqhttp和qqsign这个保证能解决你的登录问题

1. 启动qqSign签名服务

Windows标准启动

  1. 进入unidbg-fetch-qsing-*/bin路径下java基于go-cqhttp开发qq机器人_第1张图片
  2. 地址栏输入cmd回车进入命令窗口java基于go-cqhttp开发qq机器人_第2张图片java基于go-cqhttp开发qq机器人_第3张图片
  3. 输入启动命令启动
    # 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项目

  1. 新建SpringBoot项目。SpringBoot版本使用2.7.7
  2. pom.xml
    
    
        4.0.0
        
        
            org.springframework.boot
            spring-boot-starter-parent
            2.7.7
            
        
        
        com.example
        demo
        0.0.1-SNAPSHOT
        demo
        Demo project for Spring Boot
        
        
            1.8
            0.0.13
        
    
        
            
            
                cn.svipbot
                spring-boot-starter-svipbot
                ${svipbot.version}
            
            
            
                org.projectlombok
                lombok
                true
            
        
        
        
            
                
                    org.springframework.boot
                    spring-boot-maven-plugin
                    2.7.7
                
            
        
    
  3. 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` 表示继续
         */
        @Override
        public 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` 表示继续
         */
        @Override
        public 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();
        }
    }
  4. application.yml
    server:
      port: 8081
    
    svipbot:
        # 请将编写的插件全类名添加在这里
        # 在收到消息时会按顺序依次调用以下插件
        # 如果前面的插件返回 MatchedAndBlock 则不会继续调用后续插件
        # 如果前面的插件返回 NotMatch 则会继续调用后续插件
        plugin-list:
          - com.example.demo.plugins.TestPlugin
    
  5. 启动java基于go-cqhttp开发qq机器人_第4张图片

3. 启动go-cqhttp

Windows标准启动

  1. 双击go-cqhttp_*.exe,根据提示生成运行脚本java基于go-cqhttp开发qq机器人_第5张图片java基于go-cqhttp开发qq机器人_第6张图片java基于go-cqhttp开发qq机器人_第7张图片
  2. 双击运行脚本java基于go-cqhttp开发qq机器人_第8张图片java基于go-cqhttp开发qq机器人_第9张图片
  3. config.yml只需关注以下属性配置,其他属性不必关注保持原有配置即可
    # 账号相关
    account:
      # QQ账号
      uin: 1233456
      # 密码不要为空
      password: ''
      # qqSign签名服务配置启动的ip+端口
      sign-server: 'http://127.0.0.1:8080'
    
    # 消息相关
    message:
      # 上报数据类型(就是gocqhttp将消息通知给第三方程序的消息类型)
      # 可选: string,array 这里配置array
      post-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: 3000
          middlewares:
            # 引用默认中间件
            <<: *default
  4. 启动go-cqhttpjava基于go-cqhttp开发qq机器人_第10张图片java基于go-cqhttp开发qq机器人_第11张图片java基于go-cqhttp开发qq机器人_第12张图片java基于go-cqhttp开发qq机器人_第13张图片

  5. go-cqhttp启动成功后返回JavaDemo查看控制台已接收到go-cqhttp通知消息java基于go-cqhttp开发qq机器人_第14张图片

4. 结语

        这篇文章介绍了当下(2023-11-16)的go-cqhttp使用,及基于java实现qq机器人的简单接受私聊消息和群聊消息。

        如果需要继续开发更多功能的机器人,详细需要查看本文JavaDemo的pom依赖中svipbot的源码实现,源码地址已经放到文章开头。

        有任何问题可随时联系作者:201088830,亦可加入群聊学习交流:727289809

你可能感兴趣的:(java,qq机器人,springboot,机器人)