{"id":21475884,"url":"https://github.com/nkdark/gocq-spring-boot-starter","last_synced_at":"2026-05-21T07:42:12.324Z","repository":{"id":108317719,"uuid":"585805704","full_name":"NKDark/gocq-spring-boot-starter","owner":"NKDark","description":"这是一个spring boot starter。基于SpringBoot的QQ机器人框架，main分支是框架，其余分支是例子，下面的网址是go-cqhttp的api文档。","archived":false,"fork":false,"pushed_at":"2023-02-23T09:34:37.000Z","size":154,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-23T17:33:31.903Z","etag":null,"topics":["cqhttp-java-sdk","cqhttp-kotlin-sdk","go-cqhttp","java","kotlin","qq","qq-bot","qqbot","qqrobot","spring-cq","springboot2","websocket"],"latest_commit_sha":null,"homepage":"https://docs.go-cqhttp.org/api","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/NKDark.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-01-06T05:51:38.000Z","updated_at":"2023-05-10T14:11:36.000Z","dependencies_parsed_at":"2023-04-10T11:13:32.876Z","dependency_job_id":null,"html_url":"https://github.com/NKDark/gocq-spring-boot-starter","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NKDark%2Fgocq-spring-boot-starter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NKDark%2Fgocq-spring-boot-starter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NKDark%2Fgocq-spring-boot-starter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NKDark%2Fgocq-spring-boot-starter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NKDark","download_url":"https://codeload.github.com/NKDark/gocq-spring-boot-starter/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243997110,"owners_count":20380980,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cqhttp-java-sdk","cqhttp-kotlin-sdk","go-cqhttp","java","kotlin","qq","qq-bot","qqbot","qqrobot","spring-cq","springboot2","websocket"],"created_at":"2024-11-23T10:46:23.493Z","updated_at":"2026-05-21T07:42:07.276Z","avatar_url":"https://github.com/NKDark.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"# gocq-spring-boot-starter\n\n[![Maven Central](https://img.shields.io/maven-central/v/top.nkdark/gocq-spring-boot-starter?logo=apache-maven\u0026logoColor=white)](https://search.maven.org/artifact/top.nkdark/gocq-spring-boot-starter)\n[![GitHub release](https://img.shields.io/github/release/NKDark/gocq-spring-boot-starter)](https://github.com/NKDark/gocq-spring-boot-starter/releases)\n[![Java support](https://img.shields.io/badge/Java-8+-green?logo=java\u0026logoColor=white)](https://openjdk.java.net/)\n[![License](https://img.shields.io/github/license/NKDark/gocq-spring-boot-starter?color=4D7A97\u0026logo=apache)](https://www.gnu.org/licenses/gpl-3.0.html)\n[![GitHub Stars](https://img.shields.io/github/stars/NKDark/gocq-spring-boot-starter)](https://github.com/NKDark/gocq-spring-boot-starter/stargazers)\n[![GitHub Forks](https://img.shields.io/github/forks/NKDark/gocq-spring-boot-starter)](https://github.com/NKDark/gocq-spring-boot-starter/fork)\n[![user repos](https://badgen.net/github/dependents-repo/NKDark/gocq-spring-boot-starter?label=user%20repos)](https://github.com/NKDark/gocq-spring-boot-starter/network/dependents)\n[![GitHub Contributors](https://img.shields.io/github/contributors/NKDark/gocq-spring-boot-starter)](https://github.com/NKDark/gocq-spring-boot-starter/graphs/contributors)\n[![在下的QQ群](https://img.shields.io/static/v1?label=QQ%E7%BE%A4\u0026message=793140364\u0026color=blue)](https://jq.qq.com/?_wv=1027\u0026k=gDfqoLIi)\n\u003c!--[![Last SNAPSHOT](https://img.shields.io/nexus/snapshots/https/oss.sonatype.org/top.nkdark/gocq-spring-boot-starter?label=latest%20snapshot)](https://oss.sonatype.org/content/repositories/snapshots/top/nkdark/gocq-spring-boot-starter/)--\u003e\n又一个基于 [go-cqhttp](https://github.com/Mrs4s/go-cqhttp)、[SpringBoot](https://github.com/spring-projects/spring-boot)、反向websocket 的 QQ 机器人框架SDK\n\n对 [lz1998](https://github.com/lz1998) 的[项目](#reference)进行了拙劣的模仿\n\n\u003c!--[lz1998](https://github.com/lz1998) 的群 [![lz1998 的QQ群](https://img.shields.io/static/v1?label=QQ%E7%BE%A4\u0026message=335783090\u0026color=blue)](https://jq.qq.com/?_wv=1027\u0026k=5BKAROL)--\u003e\n\n### 本项目基于 [SpringBoot 2.7.7](https://github.com/spring-projects/spring-boot/tree/v2.7.7) 版本开发\n\n## 1. 插件开发\n### 1.1 创建一个Spring boot项目 并且导入 [`Maven`](https://maven.apache.org) 依赖项\n```xml\n\u003cdependency\u003e\n    \u003cgroupId\u003etop.nkdark\u003c/groupId\u003e\n    \u003cartifactId\u003egocq-spring-boot-starter\u003c/artifactId\u003e\n    \u003cversion\u003e1.0.0\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n### 1.2 编写插件\n\n### 1.2.1 编写示例\n\n#### [`Java`](https://www.java.com) 示例\n```java\npackage org.example.bot;\n\nimport org.jetbrains.annotations.NotNull;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.stereotype.Component;\nimport top.nkdark.gocq.bot.Bot;\nimport top.nkdark.gocq.bot.BotPlugin;\nimport top.nkdark.gocq.proto.GroupMessageEvent;\nimport top.nkdark.gocq.proto.PrivateMessageEvent;\nimport top.nkdark.gocq.util.CQCode;\n\n/**\n * 示例插件\n * 1. 插件继承自 BotPlugin\n * 2. 添加 @Component 注解\n */\n@Component\npublic class JavaTestPlugin extends BotPlugin {\n\n    /**\n     * 可选，日志工具\n     * 也可使用 lombok 的 @Slf4j 注解\n     */\n    private final Logger log = LoggerFactory.getLogger(JavaTestPlugin.class);\n\n    /**\n     * 收到私聊消息时会调用这个方法\n     * \n     * @param bot   机器人对象，用于调用API，例如发送私聊消息 sendPrivateMsg\n     * @param event 事件对象，用于获取消息内容、群号、发送者QQ等\n     * @return  是否继续调用下一个插件, `MatchedAndBlock` 表示不继续, `NotMatch` 表示继续\n     */\n    @Override\n    public int onPrivateMessage(@NotNull Bot bot, @NotNull PrivateMessageEvent event) {\n        // 获取 发送者QQ 和 消息内容\n        long userId = event.getUserId();\n        String msg = event.getMessage();\n        // 控制台打印\n        log.info(msg);\n        // 将收到的消息复读\n        bot.sendPrivateMsg(userId, msg, false);\n        // 继续执行下一个插件\n        return NotMatch;\n    }\n\n    /**\n     * 收到群消息时会调用这个方法\n     * \n     * @param bot   机器人对象，用于调用API，例如发送私聊消息 sendGroupMsg\n     * @param event 事件对象，用于获取消息内容、群号、发送者QQ等\n     * @return  是否继续调用下一个插件, `MatchedAndBlock` 表示不继续, `NotMatch` 表示继续\n     */\n    @Override\n    public int onGroupMessage(@NotNull Bot bot, @NotNull GroupMessageEvent event) {\n        // 获取 消息内容 群号 发送者QQ\n        String msg = event.getMessage();\n        long groupId = event.getGroupId();\n        long userId = event.getUserId();\n        // 控制台打印日志\n        log.info(msg);\n        // 编辑回复内容\n        String respContent = CQCode.INSTANCE.at(114514) + \"1919810\";\n        // 通过 bot 实例，调用api发送消息至群聊\n        bot.sendGroupMsg(groupId, respContent, false);\n        // 不继续执行下一个插件\n        return MatchedAndBlock;\n    }\n\n    /**\n     * 收到频道消息时会调用这个方法\n     * \n     * @param bot   机器人对象，用于调用API，例如发送私聊消息 sendGroupMsg\n     * @param event 事件对象，用于获取消息内容、群号、发送者QQ等\n     * @return  是否继续调用下一个插件, `MatchedAndBlock` 表示不继续, `NotMatch` 表示继续\n     */\n    @Override\n    public int onGuildMessage(@NotNull Bot bot, @NotNull GuildMessageEvent event) {\n        log.info(event.toString());\n        return MatchedAndBlock;\n    }\n}\n```\n\n#### [`Kotlin`](https://kotlinlang.org/) 示例\n```kotlin\npackage org.example.bot\n\nimport org.slf4j.LoggerFactory\nimport org.springframework.stereotype.Component\nimport top.nkdark.gocq.bot.Bot\nimport top.nkdark.gocq.bot.BotPlugin\nimport top.nkdark.gocq.proto.GroupMessageEvent\nimport top.nkdark.gocq.proto.PrivateMessageEvent\nimport top.nkdark.gocq.proto.guild.GuildMessageEvent\nimport top.nkdark.gocq.util.CQCode\n\n/**\n * 示例插件\n * 1. 插件继承自 BotPlugin\n * 2. 添加 @Component 注解\n */\n@Component\nclass TestPlugin : BotPlugin() {\n\n    /**\n     * 可选，日志工具\n     * 也可使用 lombok 的 @Slf4j 注解\n     */\n    private val log = LoggerFactory.getLogger(TestPlugin::class.java)\n\n    /**\n     * 收到私聊消息时会调用这个方法\n     * \n     * @param bot   机器人对象，用于调用API，例如发送私聊消息 sendPrivateMsg\n     * @param event 事件对象，用于获取消息内容、群号、发送者QQ等\n     * @return  是否继续调用下一个插件, `MatchedAndBlock` 表示不继续, `NotMatch` 表示继续\n     */\n    override fun onPrivateMessage(bot: Bot, event: PrivateMessageEvent): Int {\n        // 获取 发送者QQ 和 消息内容\n        val userId = event.userId\n        val msg = event.message\n        // 将收到的消息复读\n        bot.sendPrivateMsg(userId, msg)\n        // 将日志打印至 debug\n        log.debug(\"复读了一条来自 ${event.sender.nickname} 的消息\")\n        return NotMatch\n    }\n    \n    /**\n     * 收到群消息时会调用这个方法\n     * \n     * @param bot   机器人对象，用于调用API，例如发送私聊消息 sendGroupMsg\n     * @param event 事件对象，用于获取消息内容、群号、发送者QQ等\n     * @return  是否继续调用下一个插件, `MatchedAndBlock` 表示不继续, `NotMatch` 表示继续\n     */\n    override fun onGroupMessage(bot: Bot, event: GroupMessageEvent): Int {\n        // 获取 消息内容 群号 发送者QQ\n        val msg: String = event.message\n        val groupId: Long = event.groupId\n        val userId: Long = event.userId\n        // 控制台打印日志\n        log.info(msg)\n        // 编辑回复内容\n        val respContent = CQCode.at(114514) + \"1919810\"\n        // 通过 bot 实例，调用api发送消息至群聊\n        bot.sendGroupMsg(groupId, respContent, false)\n        return MatchAndBlock\n    }\n\n    /**\n     * 收到频道消息时会调用这个方法\n     * \n     * @param bot   机器人对象，用于调用API，例如发送私聊消息 sendGroupMsg\n     * @param event 事件对象，用于获取消息内容、群号、发送者QQ等\n     * @return  是否继续调用下一个插件, `MatchedAndBlock` 表示不继续, `NotMatch` 表示继续\n     */\n    override fun onGuildMessage(bot: Bot, event: GuildMessageEvent): Int {\n        log.info(event.toString())\n        return MatchedAndBlock\n    }\n}\n```\n### 1.2.2 修改配置文件\n\n修改 resource/application.yml\n```yaml\nserver:\n  port: 12345 # 端口号请根据情况自行安排\n\nspring:\n  cq:\n    # 请将编写的插件全类名添加在这里\n    # 在收到消息时会按顺序依次调用以下插件\n    # 如果前面的插件返回 MatchedAndBlock 则不会继续调用后续插件\n    # 如果前面的插件返回 NotMatch 则会继续调用后续插件\n    plugin-list:\n      - org.example.bot.TestPlugin\n      - org.example.bot.JavaTestPlugin\n```\n\n## 1.3 打包部署\n1. 使用 [`maven`](https://maven.apache.org) 打包应用\n```shell\nmvn clean package\n```\n\n2. 打包好的 jar 包将会出现在 ${项目路径}/target 目录下\n\n## 1.4 运行程序\n```shell\njava -jar xxx.jar\n```\n\n# Todo\n - [x] [go-cqhttp Api](https://docs.go-cqhttp.org/api)\n - [ ] 文档/注释\n - [ ] 自定义合并消息的构建方法 (现在还得用户自行构建\n - [ ] 测试全部api (希望小伙伴们都帮着测测\n\n# Reference\n\u003e [pbbot-spring-boot-starter](https://github.com/ProtobufBot/pbbot-spring-boot-starter)\n\u003e \n\u003e [Spring-CQ](https://github.com/lz1998/Spring-CQ/tree/jar)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnkdark%2Fgocq-spring-boot-starter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnkdark%2Fgocq-spring-boot-starter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnkdark%2Fgocq-spring-boot-starter/lists"}