simbot框架编写一个你自己的QQ机器人【入门教学】

前言

相信各位都有过没能及时回复女朋友的消息,而导致睡沙发的经历吧?
那么,只要我们有了能够自动回复的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 里问问各个大佬~
里面各个都是人才,说话又好听。
在这里插入图片描述

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值