此教程将手把手教你怎么在手机qq上跑一个qq机器人
前言
2019年1月1日,腾讯宣布关闭WebQQ服务,很多基于WebQQ的QQ机器人都失效了。似乎QQ机器人的时代结束了…..
结束了吗?
没有!
WebQQ没了,我们可以用其他协议啊!
据此,CoolQ和Mirai脱颖而出。
本文将介绍如何用开源库Mirai搭建基于安卓QQ协议的QQ机器人。
开源库介绍
Mirai
Mirai 是一个在全平台下运行,提供 QQ Android 和 TIM PC 协议支持的高效率机器人框架
这个项目的名字来源于
京都动画作品《境界的彼方》的栗山未来(Kuriyama Mirai)
CRYPTON以初音未来为代表的创作与活动(Magical Mirai)
图标以及形象由画师DazeCake绘制Mirai的核心MiraiCore:与腾讯QQ服务器直接对接,处理接收并发送原始消息。
Mirai的主程序(启动器)mirai-console-wrapper:启动bot控制台,可以接收与发送消息,同时向外部提供接收与发送消息的接口。
Mirai插件:基于消息接口为主程序mirai-console-wrapper提供各种各样的拓展功能,如天气查询,点歌,涩图等等…
其中一个插件mirai-api-http将消息的接收和发送接口以本地http/websocket服务的方式部署,只需要post/get就能实现消息的接收与发送,这就为使用其他语言开发Mirai功能提供了一个更简单的平台,基于此已有python-mirai,nodejs-mirai和gomirai三种非Kotlin/Java语言的SDK,以及接下来这个教程使用的RhinoJS也属于一种SDK。
Mirai也可以通过mirai-native插件实现与CoolQ插件的对接。
Mozilla Rhino: JavaScript in Java
Rhino is an implementation of JavaScript in Java.
Rhino是一个可以在JavaScript上运行Java程序的库。
我们可以通过JavaScript脚本访问mirai http api快速实现mirai功能开发。既然rhino能运行Java程序那为什么不直接使用mirai的java库而使用http api呢,因为我不会!(后续我会研究把rhino也做成mirai插件)
mirai-rhinojs-sdk:
这是我自己编写&维护的一个小项目,为Mirai API Http提供封装好的适用于Mozilla Rhino的SDK。
手机跑QQ机器人大概思路
我们可以使用强大的Termux运行java以运行mirai和rhino。
但有个问题是:直接在termux环境运行java是有bug的,该bug导致java无法解析域名,也就是说mirai的自动更新和post/get httpapi会报错!
既然Termux环境不行,那就用proot模拟一个其他linux的环境!
所以,本教程大概思路如下:①配置mirai&rhino运行环境(proot linux和java等) → ②配置开发环境(link文件等) → ③提供一些参考文档
闲言少述,现在开始!
详细过程
你首先需要下载万能的Termux,这是一切的开端。
①配置mirai&rhino运行环境
安装proot linux
如果你提前已安装任意一proot linux发行版,可以跳过这一步。
请不要使用zsh
终端。
在Termux终端运行以下代码以更新软件包至最新并安装wget
和proot
:
1 | apt update && apt upgrade -y |
授予Termux存储空间访问权限:
1 | termux-setup-storage |
你可以在外部存储空间创建一个文件夹,该文件夹存放你的mirai bot源码(js),然后将其链接至termux:
1 | ln -s /storage/emulated/0/QBotSourceCode ~/QBotSourceCode |
下载一个linux rootfs,这里我用ubuntu/bionic
作为示范:
1 | wget https://mirrors.tuna.tsinghua.edu.cn/lxc-images/images/ubuntu/bionic/arm64/default/20200331_07%3A53/rootfs.tar.xz -O ~/ubuntu.tar.xz |
创建一个文件夹并将rootfs解压进去:
1 | mkdir ubuntu |
创建一个proot启动脚本:
1 | touch startubuntu.sh |
注意脚本中的
-S ubuntu
和-b ~/QBotSourceCode
,这两个目录分别为linux proot根目录和上面链接到termux内部的源码目录,如果你用了其他名称请别忘了改这里的目录!
启动proot linux:
1 | ./startubuntu.sh |
出现了新的bash即为成功运行:
1 | u0_a207@localhost ~> chmod +x startubuntu.sh |
接下来的操作都将在proot linux里进行,如果你退出了proot linux,下次再启动
startubuntu.sh
脚本即可。
配置java环境和mirai&rhino环境
这样在外部对应文件夹里创建文件就也会”同步到source
文件夹了”
请将链接文件夹名称设为
source
。
在proot linux中运行以下代码以配置一下dns并更新软件包至最新并安装java jdk 11
:
1 | rm /etc/resolv.conf |
下载mirai-console-wrapper,mirai-api-http和rhino:
1 | wget https://github.com/mamoe/mirai-console-wrapper/releases/download/1.2.0/mirai-console-wrapper-1.2.0-all.jar -Omirai-console.jar |
注意最后一行中的
port
和authKey
,它们分别指定了http api服务运行端口和验证密钥,如需要更改请自行更改。
目前Mirai处于开发期,更新频率较快,如果有奇奇怪怪的bug请检查mirai-console-wrapper和mirai-api-http是否有更新。
若更新也不能解决bug,请前往对应项目提交issue。
启动mirai-console-wrapper:
1 | java -jar mirai-console.jar |
首次启动会让你选择版本,我们选择pure
版。
选择后会下载mirai core,只需要等待即可。
注:若选错版本,请删除
content
文件夹后再重新启动。
若出现Connection closed by peer
错误,请多试几次。
这样我们就成功启动了mirai console了。
输入/login qq号 qq密码
登录一个机器人。
登录成功,已经可以看到发送的消息了。
至此,环境配置告一段落,接下来的内容你得会点儿JavaScript才能看得懂。如果不懂JavaScript,你可以照葫芦画瓢。
编写定制化bot功能
上一个proot linux会话窗口保留挂mirai console,用
startubuntu.sh
脚本新开一个proot linux。
新建一个js脚本,复制以下内容
1 | //导入MiraiQQBot库 |
运行脚本
1 | java -jar rhino.js -f 脚本名称.js |
出现以下日志,即为运行成功
1 | Bot xxxxxxxxxx created. |
现在,你的bot就是复读机了(
尝试对你的BOT发送戳一戳中的666。
这仅仅是基本功能,更多sdk方法请看SDK文档