如何用Java写QQ机器人 v2.0

  • 前提
  • simple-robot框架
    • 官方文档
    • simple-robot mirai组件
    • 构建项目
    • 配置文件
    • 写一个监听器类
    • 编写启动类
    • 成功了
    • 失败了
    • 支持与赞助

这次我想不到什么开场白了,直接开始吧。

前提

IDE : IntelliJ IDEA
JDK : JDK8+
Maven: 3.6.0+

simple-robot框架

此框架的github地址:https://github.com/ForteScarlet/simpler-robot
simple-robot是一个目标为兼容多平台机器人应用的框架。

此框架中已经集成了针对于QQ机器人的开发组件,因此我们可以使用此框架来开发一个QQ机器人。

官方文档

在介绍之前,先贴出此框架的官方文档,如果有能力有兴趣的小伙伴可以直接去看看文档,或者加入他们的交流群。
文档:https://www.yuque.com/simpler-robot/simpler-robot-doc

simple-robot mirai组件

simple-robot对接QQ的一个组件是对接使用mirai框架进行的,并且基于chusimple-robot框架下,除了日志和配置文件以外你应当感知不到mirai的存在。

simple-robot mirai组件文档

构建项目

我们使用maven构建项目,首先导入所需依赖:

版本请参考simple-robot 的 github中的最新版本。

 <properties><simbot.version>2.0.1</simbot.version></properties><dependencies><!-- mirai组件依赖。如果使用版本控制,则不需要填写version。 --><dependency><groupId>love.forte.simple-robot</groupId><artifactId>component-mirai</artifactId><version>${simbot.version}</version></dependency></dependencies><build><plugins><!-- compiler plugin. --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>8</source><target>8</target><compilerArgs><arg>-parameters</arg></compilerArgs></configuration></plugin><!-- 打包插件, 用于打包为jar --><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.3.4.RELEASE</version><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins></build>

配置文件

先准备好配置文件吧,在 resources 目录下创建一个配置文件:simbot.yml,不知道什么是 resources 目录的同学可以去百度一下补补功课哦~
这里就展示一个最简单的配置:

simbot:core:# 账号:密码,多个用逗号(,)分隔或者用yaml的多项配置# bots: 账号:密码bots: 1111111:password

注意!我建议你关闭这个测试用的账号的 设置 - 账号安全 中所有能关闭的选项,例如 登录设备管理 - 登录保护等。
上述这些可以通过手机端进行设置,并自行评估这样做的风险。

写一个监听器类

新建一个包路径:example.bot.listener,当然,这个路径你可以自己随便改,然后在这个 listener 包下新建一个类:MyListener,当然,类名也可随便:

@Beans
public class MyListener {// ...}

可以看到,需要在类上标注一个 @Beans 注解,这是simple-robot 中的依赖注入模块所提供的注解,可以认为它是一个在Springboot中类似@Component的注解。

接下来,下一个监听私聊消息的"监听函数",这里我直接copy simple-robot的官方demo项目中的代码了:

/*** 私聊消息监听的示例类。* 所有需要被管理的类都需要标注 {@link Beans} 注解。* @author ForteScarlet*/
@Beans
public class MyListener {/*** 通过依赖注入获取一个 "消息正文构建器工厂"。**/@Dependprivate MessageContentBuilderFactory messageContentBuilderFactory;/*** 此监听函数监听一个私聊消息,并会复读这个消息,然后再发送一个表情。* 此方法上使用的是一个模板注解{@link OnPrivate},* 其代表监听私聊。* 由于你监听的是私聊消息,因此参数中要有个 {@link PrivateMsg} 来接收这个消息实体。** 其次,由于你要“复读”这句话,因此你需要发送消息,* 因此参数中你需要一个 "消息发送器" {@link Sender}。** 当然,你也可以使用 {@link love.forte.simbot.api.sender.MsgSender},* 然后 {@code msgSender.SENDER}.*/@OnPrivatepublic void replyPrivateMsg1(PrivateMsg privateMsg, Sender sender){// 获取消息正文。MessageContent msgContent = privateMsg.getMsgContent();// 向 privateMsg 的账号发送消息,消息为当前接收到的消息。sender.sendPrivateMsg(privateMsg, msgContent);// 再发送一个表情ID为'9'的表情。// 方法1:使用消息构建器构建消息并发送// 在绝大多数情况下,使用消息构建器所构建的消息正文 'MessageContent'// 是用来发送消息最高效的选择。// 相对的,MessageContentBuilder所提供的构建方法是十分有限的。// 获取消息构建器MessageContentBuilder msgBuilder = messageContentBuilderFactory.getMessageContentBuilder();// 通过.text(...) 向builder中追加一句话。// 通过.face(ID) 向builder中追加一个表情。// 通过.build() 构建出最终消息。MessageContent msg = msgBuilder.text("表情:").face(9).build();// 直接通过这个msg发送。sender.sendPrivateMsg(privateMsg, msg);// 方法2:使用CAT码发送消息。// 使用CAT码构建一个需要解析的消息是最灵活的,// 但是相对的,它的效率并不是十分的可观,毕竟在这其中可能会涉及到很多的'解析'操作。// 获取CAT码工具类实例CatCodeUtil catCodeUtil = CatCodeUtil.getInstance();// 构建一个类型为 'face', 参数为 'id=9' 的CAT码。// 有很多方法。// 1. 通过 codeBuilder 构建CAT码// String cat1 = catCodeUtil.getStringCodeBuilder("face", false).key("id").value(9).build();// 2. 通过CatCodeUtil.toCat 构建CAT码// String cat2 = catCodeUtil.toCat("face", "id=9");// 3. 通过模板构建CAT码String cat3 = catCodeUtil.getStringTemplate().face(9);// 在cat码前增加一句 '表情' 并发送sender.sendPrivateMsg(privateMsg, "表情:" + cat3);}
}

编写启动类

在上述监听函数的上一层包路径中,创建一个启动类:MyBotApplication

@SimbotApplication
public class MyBotApplication {public static void main(String[] args) {SimbotApp.run(MyBotApplication.class, args);}
}

然后执行main方法,观察控制台信息,因为在前几次登录的时候有可能会出现一些类似于需要输入验证码啊之类的信息。

如果出现了类似这样的日志:

[2021-02-23T17:10:57.189]-[INFO ] |           love.f.s.c.c.CoreListenerRegistrar : Start the registration Bot: code=111111111, name=这是bot的名字, level=9999

那么这就说明你配置文件中填写的账号登录成功了。

接下来,用另外的账号私聊这个账号,比如说一句:你好
如果它也回复了你,那么恭喜你,第一步已经成功了。

成功了

当你成功后,你就可以:

  • 深入阅读 simple-robot文档 来继续编写你的bot。
  • 参考 simple-robot-mirai 官方Demo项目来得到一些启发。
  • 在遇到不理解的问题时,可以通过 github讨论区 与 simple-robot开发团队交流。
  • 遇到bug的时候通过 github issue 进行反馈。

失败了

不要气馁,你可以通过 github讨论区 或 github issue 进行提问或反馈。

支持与赞助

不要忘记,一份赞助是鼓励作者的最好方式,你可以通过赞助simple-robot 来表示你的支持。

如何用Java写QQ机器人 v2.0相关推荐

  1. 酷q插件开发Java_如何使用Java开发QQ机器人 方法一

    使用Java开发QQ机器人- CQ & HTTP API 使用库Q平台下的CQ HTTP API插件以及simple-robot核心标准库作为依赖. 此插件与框架的 简陋 简单介绍:文档处简介 ...

  2. 如何用Java写一个斗地主(一)

    如何用Java写一个斗地主(一) 序言 正文 创建卡牌 打乱牌序 发牌 课后吐槽 序言 作为一名大三的普普通通大学生,被实习老师(?)强迫下,第一次开始写CSDN的博客,如果写的不好,请多多包涵咯. ...

  3. 梯形图调用c语言编写程序,简单使用C语言写梯形图精简V2.0.pdf

    简单使用C语言写梯形图精简V2.0 C语言实现梯形图写法 1: AND 2: LDI 3: ANDB 4: ANDP 5: ORB 6: C1 7: T0 8: MPS1 9: LDF 10-1: M ...

  4. 如何用java写一个年日历

    如何用java写一个年日历 没啥难的,话不多说上代码

  5. Tinker edge R 烧写 Debian 10 V2.0.5 镜像

    Tinker edge R 烧写 Debian 10 V2.0.5 镜像 遇到问题: 按照官方文件说明烧写最新系统镜像Tinker edge R Debian 10 V2.0.5失败. 解决办法: 进 ...

  6. 编辑机器人V2.0版本下载,资讯内容定制服务专家!

    小智亲切的想要问大家一个问题? 你,还在用旧版的Giiso写作机器人么? 偷偷告诉你一个秘密: 最新的V2.0版本上线啦 (天呐,我怎么什么都不知道) 升级版"Giiso智能写作机器人&qu ...

  7. python写一个通讯录V2.0

    python写一个通讯录step by step V2.0 引用知识 list + dict用于临时存储用户数据信息 cPickle用于格式化文件存取 依旧使用file来进行文件的存储 解决问题 1. ...

  8. 手机java做贪吃蛇_如何用Java写一个贪吃蛇游戏

    这是一位拓胜学员用Java写贪吃蛇游戏的心得:今天课程设计终于结束了自己学java没以前学C+那么用功了觉得我学习在哪里都是个开口向上的抛物线,现在应该在右半边吧,好了进入正题. 写java贪吃蛇也是 ...

  9. 如何用Java写一个聊天机器人

    文章目录 建议结合新版教程看 写在前面的的话 免责声明 你需要提前会的东西 我们要使用的框架 首先我们先下载一个Demo 文件配置 Demo里面的的目录结构 在配置文件中加上你小号的QQ名字和密码 我 ...

  10. 30个类仿真手写spring框架V2.0版本

    相关内容: 架构师系列内容:架构师学习笔记(持续更新) 一步一步手绘Spring IOC运行时序图一(Spring 核心容器 IOC初始化过程) 一步一步手绘Spring IOC运行时序图二(基于XM ...

最新文章

  1. Go 使用 append 向切片增加元素
  2. python输入字母判断大小写_Python-检查输入的数字、大写字母、小写字母和特殊字符...
  3. [《孔雀》观后]聪明的孩子提着易碎的灯笼
  4. ABAP/4 Open SQL
  5. 如何对抗硬件断点--- 调试寄存器
  6. PHP读取大文件的几种方法
  7. 一上来,就问原理,问上亿(MySQL)大表的索引优化,我的天...
  8. 曾在美国生产的苹果电脑,如今却败得一塌糊涂
  9. SAP Basis常用事务代码
  10. mybatis 报错 with invalid types () or values 0. Cause: java.lang.NoSuchMethodException:
  11. 修改linux kernel参数 semopm
  12. 深度学习TF—3.神经网络全连接层
  13. 计算机应用课程的考核情况,《计算机应用技术》课程kpi考核说明..doc
  14. An Objective-C Error
  15. 【指数编制系列六】景气指数编制方法
  16. Android 根据名字获取经纬度,Android 根据城市获取经纬度 适配Android 7.0 、Android 8.0...
  17. python写整数逆位运算_整数逆位运算
  18. sql server 2005 32位+64位、企业版+标准版下载地址
  19. Spark系列之Spark的资源调优
  20. Centos7重新配置网络后出现Restarting network (via systemctl): Job for network.service failed because the contr

热门文章

  1. IMSIDesign.TurboCAD.Designer.v14
  2. linux系统vsftpd,Linux下vsftpd的配置
  3. c语言将输入的字母串转为数字,C语言把字符串转换为数字
  4. 注解学习(参考尚硅谷视频)
  5. onload事件_图像onLoad事件+ Internet ExplorerJavaScript问题
  6. 安装Eclipse完整版 配上百度云链接
  7. eclipse32位python版下载_32位eclipse怎么安装?
  8. linux一键ghost,linux 下一键 Ghost
  9. 使用FFmpeg工具进行推流、拉流、截图、变速、转换,及常见问题处理
  10. 生物信息学学习笔记(二)--蛋白质的结构分析与预测Structural analysis prediction of proteins