Mirai实现QQ机器人
Mirai实现机器人Java实现QQ机器人教程1.拉取项目demo2.修改配置文件3.滑动窗口验证(1)配置JVM参数(2)启动项目(3)获取ticket①让手机和电脑连接②开启调试模式③进行滑动验证4.简单测试Java实现QQ机器人教程要想实现Java版的QQ机器人,其实并不难,今天就给大家分享一下使用Mirai框架制作简单的QQ机器人。
1.拉取项目demo首先,Miari是一个开源的框架,我们可以从GitHub上拉取项目进行查看,但是GitHub需要使用加速插件才能很好的访问,所以在这里我们可以选择使用Gitee开源平台。
simbot-mirai-demo:原生simbot框架的mirai组件demo。(gitee.com)
我们通过这个链接,对项目进行拉取。
可以直接复制https中的链接,也可以下载zip压缩文件,两种方式都可以,但是需要时间加载依赖。
拉取成功之后的项目目录是这样的。
首先我们需要阅读一下README.md文件,使用之前需要了解一些基本的注意事项。
第一步克隆项目显然我们已经完成了。所以我们接下来修改配置文件即可。
2.修改配置文件我们找到resource目录下的.yml文件,进行测试QQ机器人账号密码的填写,如下图:
前面是账号,后面是密码。中间需要使用英文冒号隔开。
3.滑动窗口验证接下来我们可以启动项目,但是第一次使用该框架的账号需要进行Mirai滑块验证,如果启动失败的话,我们需要配置一些项目的JVM参数。
详细教程可以查看mirai-login-solver-selenium。
simbot-mirai-demo:原生simbot框架的mirai组件demo。(gitee.com)
(1)配置JVM参数我们需要在JVM参数上配置开启桌面滑动验证,如下
-Dmirai.slider.captcha.supported但是这个验证一个账号只需要验证一次即可,所以完全不用因为过于麻烦而不想继续实现。
(2)启动项目控制台输出日志之后,然后桌面上就会弹出一个验证框,上面给了一个url。
看到提示“需要滑动验证码,完成后请输入ticket”。
我们可以复制一下url看一下是什么
原来就是一个平常登录使用的滑动验证,但是现在看来我们显然是不可能这样滑动就可以完成了,我们需要获取ticket。
(3)获取ticket获取ticket有两种方法,一种是已经失效的使用另外一个项目进行通过,另外一种是通过手机连接电脑进行验证,我这里使用的是第二种。我们也需要做一些准备工作。具体可以看下面的教程。
GitHub-project-mirai/mirai-login-solver-selenium:SliderCaptchasolver
①让手机和电脑连接首先,需要手机打开开发者模式,并且开启USB调试。
开启之后手机需要打开浏览器页面,最好是谷歌浏览器。但是因为谷歌浏览器上网需要外网,如果不想麻烦的话,搜索引擎我们可以使用百度。
如下:
②开启调试模式然后在手机和电脑都打开Chrome,并使电脑成功链接上手机Chrome。
因为上面说到了谷歌浏览器需要使用外网,如果没有外网的话,会出现404空白页面。
所以这里我们使用Edge浏览器。
在手机的开发者模式和USB调试都打开的情况下,我们需要打开edge浏览器访问edge://inspect/#devices
edge://inspect/#devices刚开始访问的时候是这样的
我们稍等一会,打开浏览器访问edge://inspect/#devices的同时,手机上会弹出是否开启USB调试,这里我们选择允许。
然后过一会就会出现调试页面
③进行滑动验证我们只需要点击inspect即可,打开调试页面。
然后回到我们当时弹出的那个滑动验证的窗口,复制一长串的url,复制到模拟页面的手机的url进行访问,粘贴后回车即可。
接下来就会出现滑动验证的页面,此时电脑页面是同步手机的。
我们进行验证。
验证完成之后发送请求,右边控制台网络会出现一系列的请求监听记录。我们需要找到cap_union_new_verify,就可以找到ticket,注意分号之间的字符串才是ticket,我们复制后进行验证。
我们输入复制后的ticket,然后回车。
这时候就可以完成mirai登录滑动验证了。
回到项目我们可以看到控制台打印出我们的账号信息。
至此,我们mirai的基本配置就已经完成。
4.简单测试我们配置完成之后就可以对我们的机器人账号的私聊、群聊等消息进行配置,这里只做一个简单的测试,具体的功能大家可以去官方文档进行阅读与实现。
@Beans@Slf4jpublicclassMyPrivateListener{/***复读私聊消息也可以使用@Listen(PrivateMsg.class)**其他的方法*Stringm1=msg.getMsg();发送的消息,如果表情则会转化为字符,如你好[CAT:face,id=212]*Stringm2=msg.getText();发送的消息,如果是表情则会加在后面,不会转化为字符串*MessageContentmm3=msg.getMsgContent();消息封装类**//复读消息,发送一条和接收的消息一样的消息*sender.sendPrivateMsg(msg,msg.getMsgContent());**//复读消息中的图片,可以是多个,只复读图片,不包含中间的文字消息*MessageContentmsgContent=msg.getMsgContent();*Listimage=msgContent.getCats("image");*Stringjoin=String.join("",image);*sender.sendPrivateMsg(msg,join);*@parammsg*@paramsender*/@OnPrivatepublicvoidrepetition(PrivateMsgmsg,Sendersender){//复读一条接收的信息并且进行发送sender.sendPrivateMsg(msg,msg.getMsgContent());}}启动项目进行测试。