欢迎光临散文网 会员登陆 & 注册

Spring boot 2.7.2 整合Simbot3.0.0.preview.20.0+mirai组件用Java开发群聊机器人

2022-09-05 16:32 作者:Sama05  | 我要投稿

前言

Simbot3.0与Mirai皆为开源框架,为了更好的学习与开发在此记录。


ForteScarlet/simpler-robot: Simple Robot是一个通用bot开发框架,以同一种灵活的标准来编写不同平台的bot应用。simpler-robot是用于区别于旧版本仓库 simple-robot 的新版本命名。 (github.com)


mamoe/mirai: 高效率 QQ 机器人支持库 (github.com) 

最近重构了一下代码,发现simbot3最新版已经到3.0.0.preview.20.0了,所以在这里记录一下本人遇到的一些新问题与解决思路。

首先修改pom文件

这里我们使用springboot 2.7.2版本进行开发。
接下来在启动类上开启simbot@EnableSimbot,与之前版本一致。

接下来在resources文件夹下创建simbot-bots文件夹,接下来在其中写入我们的机器人配置

机器人配置与之前版本相对多了一些配置,有兴趣的可以去官网查看,这里就还用之前的配置不变。

接下来我们有一个这样的需求,我们需要去做一个群消息的记录,要求支持文字与图片,同时在多个群的情况下支持记录的开启与关闭

定时器

首先想在多群情况下对单个群进行的消息记录实现开启与关闭,那么我们就需要对群进行标记,那么在这里我们使用数据库mysql进行记录。

首先建立表group

使用mybatis-plus自动生成service层与mapper,这里就不详细讲了。

接下来在项目中创建timer文件夹,并创建定时类SaticScheduleTask

SaticScheduleTask

并将定时类加入到spring容器内

同时引入groupService

创建定时方法

这里我们规定每天凌晨1点执行这个方法,加载所有机器人所加入的所有群信息,并默认将所有群设为非激活状态。

如果想修改时间的话,修改@Scheduled(cron = "0 0 1 * * ? ")里面的cron参数就好,参考cron语法。

之后想增加多少个定时方法,就在SaticScheduleTask类里添加方法,并在方法上标注@Scheduled注解即可。

如果定时方法不起效的话,请检查springboot启动是否存在@EnableScheduling注解。

监听器

群消息我们已经存入并标记了,那么接下来就需要进行对相对应的群进行消息记录了。

首先创建监听类BotListenerController

然后在创建一个groupUserInfoService类,防止最后这个监听类写到后面方法太长不方便查看。

然后创建GroupUserInfoServiceImpl类并继承groupUserInfoService类。

这里加入了事务,是为了防止后面在类里面写长方法时出现异常回滚,而不会出现其他问题。

在这里我们需要记录群所有消息,那么还是需要创建一张表。

然后在GroupUserInfoServiceImpl类里加入两个方法。

回到BotListenerController类里,将GroupUserInfoService引入进来。

接下来我们在BotListenerController类开始编辑我们的第一个监听方法。

这样,我们就实现了一个群消息监听。

但是你会发现这样只会监听所有的群消息,而不能进行调整群记录的开关。

当然,你会发现我已经在GroupUserInfoServiceImpl类里写好了isGroupActivate方法,通过这个方法,可以在GroupInfoLog类里进行判断,这样也可以实现调整群记录的开关。

但是在我自己开发过程中,如果我需要频繁的调用isGroupActivate这个方法,然后再去判断的话,感觉好麻烦,可不可以在一开始就过滤掉这种没激活的群。

于是我发现了新版本中的一个好东西。

@Filters

创建filter包并在其中创建IsGroupActivateFilterFactory类


IsGroupActivateFilterFactory

然后在BotListenerController类中添加

@Filters(value = {
     @Filter(by = IsGroupActivateFilterFactory.class)
})

这样的话,每次触发该监听方法时,会通过IsGroupActivateFilterFactory类进行判断,如果群为激活,那么才会触发该方法。

多个监听方法的情况下,哪个需要激活群执行的话,就加这个过滤就好。

当然,如果是多个Filter也是可以的。

具体请以simbot3源码为准。

Spring boot 2.7.2 整合Simbot3.0.0.preview.20.0+mirai组件用Java开发群聊机器人的评论 (共 条)

分享到微博请遵守国家法律