更好的阅读体验请访问个人博客
本文使用 graia-application-mirai
包进行开发.
前言
还是想用python写(因为我没搭jvm环境, 甚至连个IDE也没下). 官方的SDK推荐中有Python的Graia Framework, 还找到了一个叫 kuriyama的. Graia Framework 最近有更新, 就先试试Graia Framework吧.
准备工作
mirai-api-http
由于 Graia Framework 是通过 mirai-api-http 插件写的SDK, 所以我们需要先安装这个插件.
安装
release里面下载一个, 然后放到 mcl
文件夹目录下的 plugins
文件夹内.
启动mcl.
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h26S6S6n-1622194081335)(/img/mirai-tutorial-python/mirai-api-http-successful.jpg)]
配置
启动后会生成 config/net.mamoe.mirai-api-http/setting.yml
文件, 有关选项如下说明:
## 该配置为全局配置,对所有Session有效
# 可选,默认值为0.0.0.0
host: '0.0.0.0'
# 可选,默认值为8080
port: 8080
# 可选,默认由插件第一次启动时随机生成,建议手动指定
authKey: 12345678
# 可选,缓存大小,默认4096.缓存过小会导致引用回复与撤回消息失败
cacheSize: 4096
# 可选,是否开启websocket,默认关闭,建议通过Session范围的配置设置
enableWebsocket: true # Graia Framework 作者在文档中建议打开
# 可选,配置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: {}
输入一个authKey
, 以及 Graia Framework 作者在文档中建议 enableWebsocket = true
. 我们就完成配置了.
Python
安装 graia-application-mirai
包
pip3 install graia-application-mirai
Hello World!
写一个这样的代码:
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
account=1234567890, # 你的机器人的 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()
先开启mcl, 并登录bot账号.
然后运行这份代码. 成功的话应该是这样的:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C6JkRHoc-1622194081338)(/img/mirai-tutorial-python/bot-connected.jpg)]
和机器人发一条消息试试:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PpafPmbK-1622194081339)(/img/mirai-tutorial-python/qq-hello-world.jpg)]
控制台输出了如下信息:
XXX(A) -> [mirai:source:[10098],[2037031566]]hello
Friend(A) <- Hello, World!
mcl的控制台和这个python的都有类似的信息
关闭程序
只需要结束mcl即可
exit
或者
stop
然后python就会无限尝试链接, 直接结束它就行了.
后记
测试的时候在本机搞的, 记得在服务器上也安装 python 和 graia-application-mirai
包.