国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

go-cqhttp+SpringBoot3實現QQ機器人

這篇具有很好參考價值的文章主要介紹了go-cqhttp+SpringBoot3實現QQ機器人。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

本QQ機器人實現的功能

1.調用青云客的API進行自動聊天

2.輸入關鍵詞自動添加為好友

技術棧

非特殊情況保持一致即可!

1.SpringBoot-3.0.5

2.JDK-17

3.go-cqhttp1.0

Github:GitHub - Mrs4s/go-cqhttp: cqhttp的golang實現,輕量、原生跨平臺.

gocq api文檔地址:https://docs.go-cqhttp.org/api/

源碼

https://gitee.com/mumangguo/go-cqhttp

實現步驟:

1. 新建一個springBoot項目,不選任何依賴直接創(chuàng)建即可

java qq機器人,機器人,java,spring boot

?java qq機器人,機器人,java,spring boot

?2. 引入相關依賴

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-websocket</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>2.0.21</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

        <!-- httpclient用來請求自動回復API -->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.13</version>
        </dependency>

3.編寫相關實體類,處理json

Friend類

import lombok.Data;

@Data
public class Friend {

    private String user_id;
    private String comment;
    private String flag;
}

Message類

import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;

import java.io.Serializable;

@Data
public class Message implements Serializable {

    @JSONField(name = "post_type")
    private String postType;
    @JSONField(name = "meta_event_type")
    private String metaEventType;
    @JSONField(name = "message_type")
    private String messageType;
    @JSONField(name = "notice_type")
    private String noticeType;
    // 操作人id 比如群管理員a踢了一個人,那么該值為a的qq號
    @JSONField(name = "operator_id")
    private String operatorId;
    private Long time;
    @JSONField(name = "self_id")
    private String selfId;
    @JSONField(name = "sub_type")
    private String subType;
    @JSONField(name = "user_id")
    private String userId;
    @JSONField(name = "sender_id")
    private String senderId;
    @JSONField(name = "group_id")
    private String groupId;
    @JSONField(name = "target_id")
    private String targetId;
    private String message;
    @JSONField(name = "raw_message")
    private String rawMessage;
    private Integer font;
    //private Sender sender;
    @JSONField(name = "message_id")
    private String messageId;
    @JSONField(name = "message_seq")
    private Integer messageSeq;
    private String anonymous;
}

Request類

import lombok.Data;

@Data
public class Request<T> {

    private String action;
    private T params;
    private String echo;
}

4.編寫消息監(jiān)聽類(Websocket實現)

/**
 * 消息監(jiān)聽
 */
@ClientEndpoint
public class Client {
    private static final Logger logger = LoggerFactory.getLogger(Client.class);
    private Session session;
    public static Client instance;
    public static boolean isOpen = false;

    private Client(String url) {
        try {
            session = ContainerProvider.getWebSocketContainer().connectToServer(this, URI.create(url));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public synchronized static boolean connect(String url) {
        instance = new Client(url);
        return true;
    }

    @OnOpen
    public void onOpen(Session session) {
        isOpen = true;
        logger.info("連接成功!");
    }

    @OnClose
    public void onClose(Session session) {
        isOpen = false;
        logger.info("連接關閉!");
    }

    @OnError
    public void onError(Session session, Throwable throwable) {
        logger.info("連接錯誤!");
    }

    @OnMessage
    public void onMessage(String message) {
        if (message.contains("\"request_type\":\"friend\"")) {
            sendFriend(message);
        }
        if (message.contains("\"post_type\":\"message\"") && message.contains("\"message_type\":\"private\"")) {
            sendMsg(message);
        }
    }

    /**
     * 好友請求
     */
    private synchronized void sendFriend(String msg) {
        Friend parseObject = JSONObject.parseObject(msg, Friend.class);
        logger.info("收到好友請求:" + parseObject.getUser_id() + ",驗證消息:" + parseObject.getComment());
        Request<Object> paramsRequest = new Request<>();
        paramsRequest.setAction("set_friend_add_request");
        Map<String, Object> params = new HashMap<>();
        params.put("flag", parseObject.getFlag());
        if (parseObject.getComment().equals("木芒果")) {
            params.put("approve", true);
            logger.info("已同意好友請求:" + parseObject.getUser_id());
        } else {
            params.put("approve", false);
            logger.info("已拒絕好友請求:" + parseObject.getUser_id());
        }
        paramsRequest.setParams(params);
        instance.session.getAsyncRemote().sendText(JSONObject.toJSONString(paramsRequest));
    }

    /**
     * 好友消息
     */
    public synchronized static void sendMsg(String msg) {
        Message parseObject = JSONObject.parseObject(msg, Message.class);
        String message = parseObject.getMessage();
        //message = message.replaceAll(" ", ",");
        logger.info("收到好友" + parseObject.getUserId() + "的消息:" + message);
        Request<Object> paramsRequest = new Request<>();
        paramsRequest.setAction("send_private_msg");
        Map<String, Object> params = new HashMap<>();
        params.put("user_id", parseObject.getUserId());
        String ai = AiOne(message);
        if (ai == null) {
          ai = "寶,回復失敗!重新試試把!";
        }
        params.put("message",ai);
        paramsRequest.setParams(params);
        msg = JSONObject.toJSONString(paramsRequest);
        System.out.println("msg="+msg);
        instance.session.getAsyncRemote().sendText(msg);
    }

    public static String AiOne(String sendMsg) {
        try {
            HttpGet httpGet = new HttpGet("http://api.qingyunke.com/api.php?key=free&appid=0&msg=" + sendMsg);
            String user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.42";
            httpGet.addHeader("user-agent", user_agent);
            CloseableHttpClient httpClient = HttpClients.createDefault();
            CloseableHttpResponse response = httpClient.execute(httpGet);
            String body = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8);
            body = body.substring(body.indexOf("content") + 10, body.length() - 2);
            logger.info("AiOne={}", body);
            return body;
        } catch (Exception e) {
            logger.error(e.toString());
            return null;
        }
    }
}

5.代碼部分完成,下載go-cqhttp

下載鏈接:Releases · Mrs4s/go-cqhttp · GitHub,根據自身實際情況下載對應的操作系統(tǒng)版本,當然我的源碼中包含了Linux版本和Windows版本

java qq機器人,機器人,java,spring boot

?6.這邊只演示windows操作系統(tǒng)如何啟動,Linux啟動可以看api文檔

官方推薦使用cmd的方式啟動,我們就在文件目錄上輸入cmd啟動即可

java qq機器人,機器人,java,spring boot

?java qq機器人,機器人,java,spring boot

可以看到他在當前文件夾下生成了一個config.yml文件,我們打開看看,只要修改我箭頭標注位置即可

java qq機器人,機器人,java,spring boot

java qq機器人,機器人,java,spring boot

?修改完后,重新啟動該程序,完成qq的登錄驗證,正常完成驗證的情況下,就會出現登錄成功!

java qq機器人,機器人,java,spring boot

登錄出現45/235錯誤代表著當前QQ號處于騰訊的風控,就需要修改協(xié)議(不用配置密碼,把密碼保持為空即可)采用掃碼的方式進行登錄!

java qq機器人,機器人,java,spring boot

一、修改config.yml,把密碼置為空表示掃碼登錄?

java qq機器人,機器人,java,spring boot

二、修改剛剛生成的device.json

java qq機器人,機器人,java,spring boot

三、把這個protocol修改為2或者0,保存后再繼續(xù)啟動,出現掃碼登錄即可

java qq機器人,機器人,java,spring boot文章來源地址http://www.zghlxwxcb.cn/news/detail-620451.html

7.編寫啟動類,啟動項目即可,就可以實現自動所有功能了,需要特別注意的是要先啟動go-cqhttp才能啟動項目!

import com.mmg.gocqhttp.websocket.Client;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import java.util.Timer;
import java.util.TimerTask;

/**
 * https://docs.go-cqhttp.org/guide/quick_start.html
 */
@SpringBootApplication
public class GoCqhttpApplication implements CommandLineRunner {
    private static final Logger logger = LoggerFactory.getLogger(GoCqhttpApplication.class);

    public static void main(String[] args) {
        SpringApplication.run(GoCqhttpApplication.class, args);
    }

    @Override
    public void run(String... args) {
        Client.connect("ws://127.0.0.1:9090");
        // 斷線重連
        Timer t = new Timer();
        t.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                if (!Client.isOpen || Client.instance == null) {
                    Client.connect("ws://127.0.0.1:9090");
                    logger.error("正在斷線重連!");
                }
            }
        }, 1000, 5000);
    }
}

到了這里,關于go-cqhttp+SpringBoot3實現QQ機器人的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • GLM聯(lián)合go-cqhttp實現qq群GLM機器人服務器的本地化部署筆記

    GLM聯(lián)合go-cqhttp實現qq群GLM機器人服務器的本地化部署筆記

    以下chatgpt-mirai-qq-bot簡稱GPT轉發(fā)程序 實現本地化部署的GLM q群機器人 最好16GB的顯存 顯卡性能要求不高 window環(huán)境 該項目的是利用lss233大佬的項目一頭對接GLM模型將其消息處理成go-cqhttp可以處理的形式最后發(fā)送到qq群內 lss233大佬的項目地址 https://github.com/lss233/chatgpt-mirai-qq-bot

    2024年02月16日
    瀏覽(31)
  • 新版nonebot,go-cqhttp搭建qq機器人保姆級教程

    新版nonebot,go-cqhttp搭建qq機器人保姆級教程

    前段時間QQ進行了更新,所以導致了非手表協(xié)議掃碼登陸報錯的問題,不過好在大佬已經推出rc5版本的go-cqhttp,解決了這一頭疼的問題 在開始之前,我需要說明一下,本文章是針對沒有經驗和基礎的用戶,所以說篇幅可能會長一點 你需要準備的東西有: python3.8及以上版本 虛

    2023年04月18日
    瀏覽(24)
  • go-cqhttp,QQ機器人發(fā)語音+視頻+表情+接入chatgpt

    windows布局go-cqhttp_嗶哩嗶哩_bilibili 注意:圖片需要放到go-cqhttp的目錄下的data/images下面,否則無法發(fā)送,網絡圖片可以直接發(fā)送

    2024年02月11日
    瀏覽(19)
  • 【0基礎QQ機器人開發(fā)】基于go-cqhttp的QQ機器人開發(fā)教程,僅供自學

    【0基礎QQ機器人開發(fā)】基于go-cqhttp的QQ機器人開發(fā)教程,僅供自學

    前言: 程序上云的服務器搭建步驟已經發(fā)布,大家可以移步至此查看:【0基礎QQ機器人開發(fā)二】服務器篇 前段時間由于學習原因產生了一個自動化管理QQ群的需求,在我?guī)滋斓呐χ?通過各種 學習 CV,終于實現了該需求,但是因為這個項目并不是很完美,里面有些許的bug,導致

    2023年04月08日
    瀏覽(16)
  • 【Python簡單QQ機器人】使用nonebot2與go-cqhttp構建

    目錄 一、前言 nonebot2-2.0.0b4 QQ機器人詳細教程 二、準備 1.Python 2.Pycharm 3.nonebot2 4.go-cqhttp 三、配置 1.搭建go-cqhttp 2.創(chuàng)建nonebot2機器人 四、運行 五、nonebot2插件 ? ? ? ? 閑著沒事干,忽看到群里面的qq機器人,想要學習一下,用了兩天實現了本體的搭建并添加了一些插件。期間

    2024年02月09日
    瀏覽(23)
  • 香菜Bot--基于chatgpt與stable diffusion和go-cqhttp的QQ機器人

    香菜Bot--基于chatgpt與stable diffusion和go-cqhttp的QQ機器人

    閑來無事,利用chatgpt的api和stable_diffusion的api寫了一個qq機器人,qq使用的框架是go-cqhttp.這里做一些總結. 賽博(女)朋友 本項目需要魔法才行 廢話不多說,先看看效果

    2024年02月11日
    瀏覽(17)
  • 使用騰訊云服務器+Nonebot2+go-cqhttp搭建QQ聊天機器人【保姆級教程 2023最新版】

    使用騰訊云服務器+Nonebot2+go-cqhttp搭建QQ聊天機器人【保姆級教程 2023最新版】

    下載go-cqhttp 這里有不同版本的cqhttp,并且對每個版本都有介紹。但是大家可以看到有 arm與adm 不同的版本,這兩個啥關系呢? 嚴格來說, AMD和ARM沒有任何關系 。AMD是桌面級處理器和桌面級GPU的生產廠商,而ARM是移動級處理器的生產廠商。AMD是目前業(yè)內唯一一個可以提供高性能

    2023年04月18日
    瀏覽(25)
  • 實際工作中通過python+go-cqhttp+selenium實現自動檢測維護升級并發(fā)送QQ通知消息(程序內測)

    實際工作中通過python+go-cqhttp+selenium實現自動檢測維護升級并發(fā)送QQ通知消息(程序內測)

    說明:該篇博客是博主一字一碼編寫的,實屬不易,請尊重原創(chuàng),謝謝大家! 首先,今年比較忙沒有多余時間去實操創(chuàng)作分享文章給大家,那就給大家分享下博主在實際工作中的一點點內容吧,就當交流交流~ 目前公司有個跨平臺大項目正在內測中,是基于QT框架研發(fā)的客戶

    2024年02月13日
    瀏覽(21)
  • 【linux系統(tǒng)版本Centos7】基于nonebot與go-cqhttp的機器人云端部署

    【linux系統(tǒng)版本Centos7】基于nonebot與go-cqhttp的機器人云端部署

    二、Centos7安裝Python3環(huán)境?? ======================================================================================== 部署及機器人的時候需要使用nb-cli庫,但是目前只有python3.7.6以上的版本支持他。所以大家安裝Python的時候一定要安裝python3.7.6以上的版本。否則就會報錯沒有nb-cli庫。在這里小編推

    2024年04月27日
    瀏覽(26)
  • go-cqhttp調用接口

    go-cqhttp調用接口

    1、 簡介 在我們實現了權限控制功能后,那么我們就在也不用擔心機器人話太多,同時,平時又沒時間,電腦又不在身邊,而無法控制機器人了。那么,我們實現了權限的管理就好說了。然后,又出現一個問題了,我們應該如何利用這個權限系統(tǒng),來幫助我們管理機器人呢?

    2024年02月14日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包