前言虽然本文最终达到了用Python开发一个mirai机器人的目的,但是还是有很多和入门教程雷同的操作,尤其是环境配置,还有仍然是其他编程语言的参考资料。假设您已经安装了Java、Python等运行mirai生态系统的必要环境。Mirai生态Mirai官方生态文档要使用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或者kotlin。如果你和我一样不熟悉,另一个官方插件mirai-api-http可以解决这个问题。于是借助mirai-api-http开发QQ机器人就变成了如下模型:可以看出,当我们使用mirai-api-http时,我们的开发语言选择就多了。这里我选择python。最近整理了一套编程学习资料分享给大家。都是干货内容,包括教程视频、电子书、源码笔记、学习路线图、实战项目、面试题等,关注gzh【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是什么版本,然后到另一个chromedriver的镜像源下载,推荐:chromedriver[4]3.找个版本号相近的对此,比如我下载86.0.4240.22,将下载的文件解压,重命名为chromedriver-86.0.4240.198.exe,就是我们刚才在命令行窗口查看的文件名。它必须与它要下载的文件名一致。在结束mcl命令行程序之前运行,然后将准备好的chromedriver-86.0.4240.198.exe替换为如下目录,再次运行mcl程序。如果一切顺利,可以继续前面的步骤,输入命令:登录账号密码尝试登录,接下来会弹出一个浏览器窗口,你只需傻瓜式完成登录验证即可。如果登录成功,以后的每次登录都不需要重新认证。另一个障碍已经被跨越了……然后又一个障碍被达到了。使用mirai-api-http增加语言的可扩展性(为了能够用其他语言开发)之前一直在讲mirai-api-http,但是到目前为止,我们还是没有用到。前面的工作做了两件事。使用mcl运行mirai-console,使用mirai-login-solver-selenium辅助通过滑块验证码。完成登录后,然后开始使用mirai-api-http,首先在mirai-api-http项目地址,下载mirai-api-http[5]并将下载的jar包放在plugin文件夹中,如图然后重启mcl,重新登录。这样,准备工作就完成了,但是我犯了一些错误。看意思应该是签名校验问题。报错如下:咨询了一圈,得知是oracleJDK的问题,所以只需要将oracleJDK换成openJDK即可,步骤如下:下载openJDK[6],比如我下载的是如图版本:解压openJDK,放在你认为合适的位置,比如我放在location如下图:添加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。如果缓存太小,参考回复和撤回消息会失败cacheSize:4096enableWebsocket:true#是否开启websocket方式,如果使用websocket方式交互,会得到更好的性能host:'0.0.0.0'#httpapi服务监听地址,设置错误吧会导致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=asyncioloop.get_event=Broadcast(loop=loop)app=GraiaMiraiApplication(broadcast=bcc,connect_info=Session(host="http://localhost:8080",#填写httpapi服务运行的地址authKey="graia-mirai-api-http-authkey",#填写authKeyaccount=5234120587,#你的机器人qq号websocket=True#Graia已经可以按照配置的消息接收方式保证消息接收部分的正常运行。))@bcc.receiver("FriendMessage")asyncdeffriend_message_listener(app:GraiaMiraiApplication,friend:Friend):awaitapp.sendFriendMessage(friend,MessageChain.create([Plain("Hello,World!")]))app.launch_blocking()并发送你的QQ机器人,发个message,如果回复Hello,World!,说明操作成功。显示成功如下:Conclusion以上皆是操作只是使用mirai开发QQ机器人的入门教程。如果你需要了解更多,你应该阅读官方文档以了解更多API
