前言
相信各位都有过没能及时回复女朋友的消息,而导致睡沙发的经历吧?
那么,只要我们有了能够自动回复的QQ机器人就不再怕了!
一、simbot框架
simbot是一个封装了多个聊天软件的API的框架,它是kotlin语言编写的。
当然了不要因此就望而却步,java同样能够很好的使用kotlin框架。
首先来说这个框架分为2.+版本和3.+版本,我这里介绍的是maven管理下的2.+版本实例。
文档链接:simbot框架文档
我这里就简单的一个小案例,若真想正儿八经的写点东西,建议看看文档。
二、创建项目
创建一个maven管理的项目,并在pom.xml文件内引入如下依赖。
<properties>
<simbot.version>2.3.8</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>
当然了如果是springboot项目,官方文档里是有springboot-starter的依赖注入
三、yml文件
既然是登录必然需要一个QQ账号,当你注册好账号后,在resources文件夹下创建simbot.yml
文件
文件内容如下:
simbot:
core:
# 账号:密码,多个用逗号(,)分隔或者用yaml的多项配置
# bots: 账号:密码
bots: username:password
四、监听器
框架是通过监听消息来进行后续的操作,所以这里需要编写各异监听器,不过不用紧张,simbot已经写好了各个注解
我们创建一个MyListener类
内容如下:
package com.kang.bot.listener;
import catcode.CatCodeUtil;
import love.forte.common.ioc.annotation.Beans;
import love.forte.common.ioc.annotation.Depend;
import love.forte.simbot.annotation.OnPrivate;
import love.forte.simbot.api.message.MessageContent;
import love.forte.simbot.api.message.MessageContentBuilder;
import love.forte.simbot.api.message.MessageContentBuilderFactory;
import love.forte.simbot.api.message.events.PrivateMsg;
import love.forte.simbot.api.sender.Sender;
/**
* @program: qq-bot
* @description: 监听器类
* 私聊消息监听的示例类。
* 所有需要被管理的类都需要标注 {@link Beans} 注解。
* @author: K.faWu
* @create: 2022-04-28 14:18
**/
/**
*/
@Beans
public class MyListener {
/**
* 通过依赖注入获取一个 "消息正文构建器工厂"。
*
*/
@Depend
private MessageContentBuilderFactory messageContentBuilderFactory;
/**
* 此监听函数监听一个私聊消息,并会复读这个消息,然后再发送一个表情。
* 此方法上使用的是一个模板注解{@link OnPrivate},
* 其代表监听私聊。
* 由于你监听的是私聊消息,因此参数中要有个 {@link PrivateMsg} 来接收这个消息实体。
*
* 其次,由于你要“复读”这句话,因此你需要发送消息,
* 因此参数中你需要一个 "消息发送器" {@link Sender}。
*
* 当然,你也可以使用 {@link love.forte.simbot.api.sender.MsgSender},
* 然后 {@code msgSender.SENDER}.
*/
@OnPrivate
public 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);
}
}
注解解释:
@Beans类似于spring中的@Component,使得该类成为被框架所管理的组件。
@Depend类似于spring中的 @Autowired, 依赖注入
@OnPrivate这个便是关键注解,private在java中是私有的,而这里的这个注释表示它监听的是私聊。文档中还有@OnGroup注解,表示监听的是群聊。
PrivateMsg类是消息信息,里面包含了消息的内容,发送人等等信息。
Sender是一个消息发送器,通过这个类进行发送消息。
~~
catCodeUtil这是个工具类,用来创建 “猫猫码”。
在simbot2.+中像表情、图片、@这些信息都是通过猫猫码进行编写获取。
五、启动类
package com.kang.bot;
import love.forte.simbot.annotation.SimbotApplication;
import love.forte.simbot.core.SimbotApp;
/**
* @program: qq-bot
* @description: 启动类
* @author: K.faWu
* @create: 2022-04-28 14:26
**/
@SimbotApplication
public class MyBotApplication {
public static void main(String[] args) {
SimbotApp.run(MyBotApplication.class, args);
}
}
@SimbotApplication注解是如同spring中的@SpringBootApplication一样
六、登录验证
各位各位,不会以为这就完了吧?
不会吧不会吧?
这个框架本质上就是模拟移动端登录,那么QQ在新的设备上登录至少需要什么?滑块验证
这里就需要一个滑块验证的工具。
当然了,你运行后也会给你弹出这个工具的git地址,可以直接下载后安装在手机上,将给予你的四位码填入滑块验证的工具中进行操作。
启动项目后弹出如下界面
点击open按钮弹出如下界面
这里会有一个四位的请求码,打开滑动验证助手输入请求码进行滑块验证即可。
之后便可以在你的控制台看到如下信息
这便代表登录成功。
七、滑动验证助手
git仓库地址: https://github.com/mzdluo123/TxCaptchaHelper
进入后在这个地方下载即可。
八、完结
能说的都说完了,再不行可以去simbot的官方群 782930037 里问问各个大佬~
里面各个都是人才,说话又好听。