前言虽然这篇文章最终达到了用python开发一个mirai机器人的目的,但是还是有很多和入门教程一样的操作,尤其是环境配置,还有仍然是其他编程语言的参考资料。你已经安装了Java、Python等运行mirai生态的必要环境mirai官方生态文档[1]要使用mirai开发QQ机器人,你首先要对它的生态有一定的了解,因为它太复杂,坑多,所以知道的多一点,遇到问题解决起来会比较快。mirai生态总结图简单来说,mirai生态的核心就是Mirai框架,包括mirai-core和mirai-core-api两部分。其中,前者负责与协议相关的内容,而后者则负责提供操作前者的接口。所以直接和程序员打交道的是mirai-core-api,而mirai-core我们是看不到的。已经可以使用mirai-core-api开发QQ机器人了,但是对于萌新来说还是太难了,所以mirai官方开发团队写了一个QQ机器人程序mirai-console,基于未来框架。在封装的基础上,进一步提供更方便的开放接口。有了mirai-console,我们不需要直接开发mirai的QQ机器人,而是开发mirai-console插件,如下图模式:不好意思,开发mirai-console插件,需要用java或科特林。如果你和我一样不熟悉,另一个官方插件mirai-api-http可以解决这个问题。于是借助mirai-api-http开发QQ机器人就变成了如下模型:可以看到,当我们使用mirai-api-http时,我们的开发语言选择就多了。这里我选择python。Startusingmirai-console-loader启动mirai-console根据上面的介绍,开发一个miraiQQ机器人,首先需要运行mirai-console,而这一步比较难。比如你需要准备mirai-core、mirai-console和mirai-console-terminal,然后你需要通过一系列指令来启动它。官方显然也考虑到了这一点。为了挽救被这次高难度操作解雇的萌新,官方推出了mirai-console-loader(简称mcl)——mirai-console官方一键启动器。所以你只需要下载它(不要担心第一步的0.0)。github仓库位置:mirai-console-loader[2]下载mcl后,解压,打开cmd,切换到mcl所在目录,运行mcl。如下图:如无意外,mirai-console已经成功启动,如下图:但是,我们从官网下载的工程运行时出现0.0的错误(如果你没有错误,请忽略此步骤)。原因是配置文件不对(运气太差了--)。修改方法如图:然后再次运行,mcl果然可以运行成功。第一个大关已经过了...下一个大关是使用mirai-login-solver-selenium来处理滑块验证和辅助登录。在成功启动的mcl窗口,运行命令登录qq:登录账号密码应该是错误的,因为mirai-console无法处理登录时的滑块验证:所以我们需要mirai的另一个项目,mirai-login-solver-selenium[3]协助登录mirai-login-solver-selenium安装步骤(需要先安装Chrome浏览器)结束之前运行的mirai-console,然后在命令行运行如下命令,添加包mcl--update-packagenet.mamoe:mirai-login-solver-selenium--channelnightly--typeplugin然后重启运行mcl这样mcl就会尝试下载mirai-login-solver-selenium。但是,我在这一步也遇到了问题(如果没有,请跳过)。因为使用了selenium,所以需要用到chromedriver。但是chromedriver总是下载失败,所以这一步需要手动下载chromedriver,然后替换到对应的目录下。步骤如下:1.查看cmd窗口,查看mcl下载的chromedriver是什么版本2.然后到另一个chromedriver的镜像源下载,推荐:chromedriver[4]3.找一个版本号相近的以那个为例,我就下载86.0.4240.224.解压下载的文件,重命名为chromedriver-86.0.4240.198.exe,就是我们刚才在命令行窗口查看的文件名。必须和自己要下载的文件名一致5.结束之前运行的mcl命令行程序,然后将准备好的chromedriver-86.0.4240.198.exe替换到如下目录6.重新运行mcl程序,如果一切顺利,可以继续前面的步骤,输入命令:登录账号密码尝试登录,接下来会弹出一个浏览器窗口,你只需傻瓜式完成登录验证即可。如果登录成功,以后的每次登录都不需要重新认证。另一个障碍已经被跨越了……然后又一个障碍被达到了。使用mirai-api-http增加语言的可扩展性(为了能够用其他语言开发)之前一直在讲mirai-api-http,但是到目前为止,我们还是没有用到。前面的工作做了两件事1.使用mcl运行mirai-console2.使用mirai-login-solver-selenium辅助通过滑块验证码,完成登录,然后开始使用mirai-api-http,首先在mirai-api-http项目地址,下载mirai-api-http[5]并将下载的jar包放入plugin文件夹,如图,然后重启mcl,重新登录。这样,准备工作就完成了,但是我有一些错误。看意思应该是签名校验问题。报错如下:咨询了一圈才知道是oracleJDK的问题,所以只需要将orcaleJDK换成openJDK就可以了。步骤如下:1、下载openJDK[6],比如我下载的是如图的版本:2、解压openJDK,放在你认为合适的位置,比如我放如下图位置:3.将jdk所在路径添加到环境变量中:本机->右键属性->高级系统设置->高级->环境变量,然后如图操作下图中使用python通过graia-application-mirai开发mirai机器人。前面的操作到这一步为止,基本上是所有使用java/kotlin以外语言的程序员通用的。以下操作仅为使用python的程序员编写。graia-application-mirai官方文档[7]首先配置mirai-api-http,如图:下面是一个参考,自己配置看一下#file:mcl-1.0.3/config/net。mamoe.mirai.api.http/setting.ymlauthKey:graia-mirai-api-http-authkey#可以自己设置,这里作为演示#可选,缓存大小,默认4096。缓存太小会导致参考回复和撤回消息失败。GraiaApplication无法与之交互。port:8080#httpapi服务监听端口,设置错误会导致GraiaApplication无法与之交互。重启mcl,更新配置,然后安装python,操作mirai-api-http接口模块:在刚才mirai-api-http配置的基础上稍作修改。然后运行fromgraia.broadcastimportBroadcastfromgraia.applicationimportGraiaMiraiApplication,Sessionfromgraia.application.message.chainimportMessageChainimportasynciofromgraia.application.message.elements.internalimportPlainfromgraia.application.friendimportFriendloop=asyncio.get_event_loop()bcc=Broadcast(loopabroadcc=loopi)app=Graiacast(loopabroadcc=loopi)app=Session(host="http://localhost:8080",#填写httpapi服务运行的地址authKey="graia-mirai-api-http-authkey",#填写authKeyaccount=5234120587,#你的机器人的qq不会。websocket=True#Graia已经可以按照配置的消息接收方式保证消息接收部分的正常运行。sendFriendMessage(friend,MessageChain.create([Plain("Hello,World!")]))app.launch_blocking()然后给你的QQ机器人发送一条随机消息,如果它回复你好,世界!ionissuccessful成功显示如下:结束语以上所有操作只是使用mirai开发QQ机器人的入门教程。如果你需要了解更多,你应该阅读官方文档以了解更多API。
