利用 Mirai 及 Graia 搭建自己的 QQ 机器人
利用 Mirai 及 Graia 搭建自己的 QQ 机器人

最近无聊逛 GitHub 发现一个有意思的项目 Mirai,可以搭建 QQ 机器人,在这里记录一下自己踩过的坑
因为 Mirai 登录 QQ 时需要滑块验证登录,而我用 Ubuntu Server 没有 GUI,导致无法验证登录 QQ
所以,我用曲线救国的方法,在 Windows 上 Mirai 登录 QQ 后,再把整个文件夹打包放到 Ubuntu Server 上即可
在 Windows 上运行 Mirai
-
下载并安装
OpenJDK,我用的是 AdoptOpenJDK,注意JDK的版本至少要11 -
到 Mirai Console Loader,从 Releases 下载最新版本的
MCL -
新建文件夹
mcl,解压到该文件夹里,并将命令行路径切换到该文件夹 -
在命令行中执行
.\mcl --update-package net.mamoe:mirai-api-http --channel stable --type plugin安装 mirai-api-http -
编辑文件
mcl\config\net.mamoe.mirai-api-http\setting.yml,删除原本的内容,添加以下内容:
## 该配置为全局配置,对所有Session有效
# 可选,默认值为0.0.0.0
host: '0.0.0.0'
# 可选,默认值为8080
port: 8080
# 可选,默认由插件第一次启动时随机生成,建议手动指定
authKey: 1234567890
# 可选,缓存大小,默认4096.缓存过小会导致引用回复与撤回消息失败
cacheSize: 4096
# 可选,是否开启websocket,默认关闭,建议通过Session范围的配置设置
enableWebsocket: true
# 可选,配置CORS跨域,默认为*,即允许所有域名
cors:
- '*'
## 消息上报
report:
# 功能总开关
enable: false
# 群消息上报
groupMessage:
report: false
# 好友消息上报
friendMessage:
report: false
# 临时消息上报
tempMessage:
report: false
# 事件上报
eventMessage:
report: false
# 上报URL
destinations: []
# 上报时的额外Header
extraHeaders: {}
## 心跳
heartbeat:
# 功能总开关
enable: false
# 启动延迟
delay: 1000
# 心跳间隔
period: 15000
# 心跳上报URL
destinations: []
# 上报时的额外信息
extraBody: {}
# 上报时的额外头
extraHeaders: {}
-
在命令行中执行
./mcl --update-package net.mamoe:mirai-login-solver-selenium --channel nightly --type plugin安装 mirai-login-solver-selenium -
确认电脑已安装最新版
Chrome,没有的话请执行安装 -
在命令行中执行
.\mcl以启动MCL -
在启动的 MCL 中输入
/autoLogin add QQ号 QQ密码,然后会有弹窗滑块等一系列操作,根据提醒操作即可 -
成功登录后,按
Ctrl+C退出MCL -
zip 打包
mcl文件夹
至此 Windows 上的操作完毕,接下来我们切换到 Ubuntu Server
在 Ubuntu Server 上运行 Mirai
- 安装
OpenJDK
我用的是 Ubuntu Server 20.04,apt 库里的 OpenJDK 版本是 11 的,直接 apt 安装:
sudo apt update
sudo apt install default-jdk
安装完成后运行 java -version 确认版本是否是 11
- 运行 MCL
将之前打包的压缩包复制到 Ubuntu 中,解压并运行 MCL,请提前装好 screen
cd mcl
chmod +x mcl
screen -dmS mcl ./mcl
编写 Bot 脚本
Python版本
Graia 要求 Python 版本至少为 3.7,请确认自己的 Python 版本:python3 -V,如果版本低于 3.7,请自行升级
Ubuntu Server 20.04 自带的 Python 版本是 3.8.5
- 安装
Graia
sudo pip3 install graia-application-mirai
- 编写脚本
在 mcl 目录新建 bot.py 输入以下内容
from graia.broadcast import Broadcast
from graia.application import GraiaMiraiApplication, Session
from graia.application.message.chain import MessageChain
import asyncio
from graia.application.message.elements.internal import Plain
from graia.application.friend import Friend
loop = asyncio.get_event_loop()
bcc = Broadcast(loop=loop)
app = GraiaMiraiApplication(
broadcast=bcc,
connect_info=Session(
host="http://localhost:8080", # 填入 httpapi 服务运行的地址
authKey="graia-mirai-api-http-authkey", # 填入 authKey,在 mcl\config\net.mamoe.mirai-api-http\setting.yml 里的 authKey
account=1209626343, # 你的机器人的 qq 号
websocket=True # Graia 已经可以根据所配置的消息接收的方式来保证消息接收部分的正常运作.
)
)
@bcc.receiver("FriendMessage")
async def friend_message_listener(app: GraiaMiraiApplication, friend: Friend):
await app.sendFriendMessage(friend, MessageChain.create([
Plain("Hello, World!")
]))
app.launch_blocking()
- 运行脚本
运行后当终端输出
[2020-07-25 21:42:11,929][INFO]: launching app...
[2020-07-25 21:42:11,960][INFO]: using websocket to receive event
[2020-07-25 21:42:11,964][INFO]: event reveiver running...
表示启动成功,然后和机器人账号发起好友对话, 当你的机器人向你发出 Hello, World! 时, 你就已经部署好了一个最小的 Graia Framework
后续更强大的功能,请参照 Graia API 执行编写吧
参考文献
Mirai Console Loader Graia Application for mirai-api-http Graia Document Graia API
评论