springboot对接napcatQQ机器人

springboot对接napcatQQ机器人
napcat官网
我这里是使用linux安装的 官网还有windows版本
首先使用命令

curl -o \
napcat.sh \
https://nclatest.znin.net/NapNeko/NapCat-Installer/main/script/install.sh \
&& sudo bash napcat.sh \
--docker n \
--cli y

你会看到如下界面 等待安装完成即可
在这里插入图片描述

安装成功之后 放行6099端口 该端口是napcat的webui 建议限制ip访问 避免被扫描端口
启动napcat

xvfb-run -a qq --no-sandbox -q 123456

在这里插入图片描述
这里建议先不要扫码
先打开webui 地址是:http://ip:6099/webui/
会提示让你输入token 默认token为:napcat
在这里插入图片描述
进入之后会提示登录QQ 可以选择扫码登录 登录成功之后会进去这样一个界面
在这里插入图片描述
点击网络配置去配置我们需要的消息回调和发送消息接口
这里有两个http
http服务器就是调用发送消息 比如你需要调用这个地址给好友发送消息
http客户端代表的是回调 也就是别人在给你登录的QQ发送的消息 会回调到这个地址

在这里插入图片描述
第一步配置回调地址
1.输入回调地址
2:消息格式可选array和string(我这边使用java用的array也就是我们的json)
3:启用 =》 保存
在这里插入图片描述
第二步配置发送端
1:配置地址 默认0.0.0.0 可以不用修改 监听的本机
2:配置端口 默认3000 可以修改(记得防火墙放行端口)
3:启用 =》 保存
在这里插入图片描述
开始springboot代码

第一步接收回调

    @PostMapping("callback")
    public void callback(@RequestBody JSONObject jsonObject) throws Exception {
        log.info("jsonObject: {}", jsonObject);
        String userId = jsonObject.getString("user_id");
        String selfId = jsonObject.getString("self_id");
        String rawMessage = jsonObject.getString("raw_message");
        String messageType = jsonObject.getString("message_type");
        if (!StringUtils.hasLength(messageType)) {
            log.error("messageType为空");
            return;
        }
        if (!messageType.equals("private")) {
            log.error("messageType不是private");
            return;
        }
        if (rawMessage.startsWith("找")) {
            rawMessage = rawMessage.replaceAll("找", "").trim();
            String content = queryProd(rawMessage);
            sendMsg(userId, content);
        } else {
            String content = "请以找开头查询闲鱼商品,例如:找手机";
            sendMsg(userId, content);
        }
    }

测试发送消息是否接收到回调

{"self_id":94470980,"user_id":319355229,"time":1751444668,"message_id":1570382681,"message_seq":1570382681,"real_id":1570382681,"real_seq":"107","message_type":"private","sender":{"user_id":319355229,"nickname":"稚初","card":""},"raw_message":"hello 我是一条测试消息","font":14,"sub_type":"friend","message":[{"type":"text","data":{"text":"hello 我是一条测试消息"}}],"message_format":"array","post_type":"message","target_id":319355229,"raw":{"msgId":"7522397570517006805","msgRandom":"1525718624","msgSeq":"107","cntSeq":"0","chatType":1,"msgType":2,"subMsgType":1,"sendType":0,"senderUid":"u_z-p-Aw1CvvaBz2UPb_LibA","peerUid":"u_z-p-Aw1CvvaBz2UPb_LibA","channelId":"","guildId":"","guildCode":"0","fromUid":"0","fromAppid":"0","msgTime":"1751444668","msgMeta":{},"sendStatus":2,"sendRemarkName":"","sendMemberName":"","sendNickName":"","guildName":"","channelName":"","elements":[{"elementType":1,"elementId":"7522397570517006804","elementGroupId":0,"extBufForUI":{},"textElement":{"content":"hello 我是一条测试消息","atType":0,"atUid":"0","atTinyId":"0","atNtUid":"","subElementType":0,"atChannelId":"0","atRoleId":"0","atRoleColor":0,"atRoleName":"","needNotify":0}}],"records":[],"emojiLikesList":[],"commentCnt":"0","directMsgFlag":0,"directMsgMembers":[],"peerName":"","editable":false,"avatarMeta":"","avatarPendant":"","feedId":"","roleId":"0","timeStamp":"0","isImportMsg":false,"atType":0,"roleType":0,"fromChannelRoleInfo":{"roleId":"0","name":"","color":0},"fromGuildRoleInfo":{"roleId":"0","name":"","color":0},"levelRoleInfo":{"roleId":"0","name":"","color":0},"recallTime":"0","isOnlineMsg":true,"generalFlags":{},"clientSeq":"12107","senderUin":"319355229","peerUin":"319355229","msgAttrs":{},"nameType":0,"avatarFlag":0,"categoryManage":0,"sourceType":1,"id":1570382681}}

我这边因为设置了开头所以会返回我的指定错误信息
在这里插入图片描述

第二步发送消息
在这里插入图片描述
在webui里面可供我们调试

编写发送端
我这里是回调解析到文本消息后调用该接口
host就是你napcat部署的服务器地址+端口

    public void sendMsg(String qq, String content) {
        try {
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("user_id", qq);
            JSONObject msgJson = new JSONObject();
            msgJson.put("type", "text");
            JSONObject dataJson = new JSONObject();
            dataJson.put("text", content);
            msgJson.put("data", dataJson);
            JSONArray jsonArray = new JSONArray();
            jsonArray.add(msgJson);
            jsonObject.put("message", jsonArray);
            String url = "/send_private_msg";
            log.info("请求地址:{},send_private_msg请求参数: {}", url, jsonObject.toJSONString());
            String post = HttpUtil.post(host + url, jsonObject.toJSONString());
            log.info("send_private_msg返回参数: {}", post);
            JSONObject respJson = JSONObject.parseObject(post);
            Integer integer = respJson.getInteger("retcode");
            if (!integer.equals(0)) {
                throw new Exception("发送失败");
            }
        } catch (Exception e) {
            log.error("发送失败", e);
        }
    }

测试发送消息

在这里插入图片描述

可以根据自己的需要做功能 我这边只是查商品
有问题可以联系我:319355229

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

简单哟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值