Mirai实现QQ机器人
Mirai实现机器人
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: SliderCaptcha solver
①让手机和电脑连接
首先,需要手机打开开发者模式,并且开启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
@Slf4j
public class MyPrivateListener {
/**
* 复读私聊消息 也可以使用@Listen(PrivateMsg.class)
*
* 其他的方法
* String m1 = msg.getMsg(); 发送的消息,如果表情则会转化为字符,如 你好[CAT:face,id=212]
* String m2 = msg.getText(); 发送的消息,如果是表情则会加在后面,不会转化为字符串
* MessageContent mm3 = msg.getMsgContent(); 消息封装类
*
* //复读消息,发送一条和接收的消息一样的消息
* sender.sendPrivateMsg(msg,msg.getMsgContent());
*
* //复读消息中的图片,可以是多个,只复读图片,不包含中间的文字消息
* MessageContent msgContent = msg.getMsgContent();
* List<Neko> image = msgContent.getCats("image");
* String join = String.join("", image);
* sender.sendPrivateMsg(msg,join);
* @param msg
* @param sender
*/
@OnPrivate
public void repetition(PrivateMsg msg, Sender sender) {
//复读一条接收的信息并且进行发送
sender.sendPrivateMsg(msg,msg.getMsgContent());
}
}
启动项目进行测试。
更多推荐
所有评论(0)