简介
MiraiTravel 框架基本介绍
MiraiTravel 框架是基于MiraiEz 的 Mirai-api-http 插件的一个PHP框架。可以通过 Http 协议与 Mirai 通信,以实现让 Mirai 进行指定操作的一个 PHP 框架。因为 MiraiTravel 是基于 Mirai-api-http 的,而Mirai-api-http 又是 Mirai 的一个插件。所以只有 Mirai 支持的操作, MiraiTravel 才能进行。
CSDN MiraiTravel 专栏地址 https://blog.csdn.net/apple_53792700/category_12176569.html
跟着专栏进行,你一定可以让你的QQ机器人拥有你想要的功能。
MiraiTravel Component 系统
MiraiTravel Component System 是 MiraiTravel 的组件系统。
组件系统是MiraiTravel的重要组成部分。组件一般用来丰富QQObj的方法,使QQBot的开发更加简便。
组件 easyMirai 就是一个很好了例子,他给QQBot提供了比 send_xxx_message
更方便的 reply_message
方法。使得无论是群消息,还是好友消息。都可以使用 reply_message
这一个方法来发送消息。而不是 QQObj 自带的 send_friend_message
和 send_group_message
方法。
组件 webhook 也是MiraiTravel组件的重要一员。他与easyMirai相辅相成。共同组成了webhook 体系。
利用组件进行开发
我们在你的QQ机器人脚本中的init
函数中打开 easyMirai
和 webhook
组件。
function init()
{
$this->open_component("easyMirai", "V0.1.1");
$this->open_component("webhook", "V0.1.1");
}
这样你就赋予了你的QQBot这些组件提供的方法。
我们现在来实现一个功能:
当好友给QQ机器人发送你好
时,QQ机器人回复 : 你好呀!
webhook 提供了不同类型消息分离转发的能力。什么意思呢?
就是当收到好友消息的时候webhook组件就会调用 webhook_friend_message
方法。
当收到群消息的时候webhook组件就会调用 webhook_group_message
方法。等等。
所以实现这个功能我们只需要QQBot中定义一个方法 :
webhook_friend_message
。最好带一个参数 ($webhookMessage) 。如果有参数的话,会把webhook的消息原封不动的传入。
我们拿到原封不动的消息格式应该是与 mirai-api-http 的好友消息一致。
官方文档 : https://docs.mirai.mamoe.net/mirai-api-http/api/MessageType.html
具体如下:
{
"type": "FriendMessage",
"sender": {
"id": 123,
"nickname": "",
"remark": ""
},
"messageChain": [] // 数组,内容为下文消息类型
}
所以我们要拿到消息链应该在$webhookMessage[messageChain]
中。
MiraiTravel 中提供了解析和构造消息链的对象 MessageChain
。利用这个对象可以很方便的对消息链进行构造与解析。
我们需要获取消息链中的所有文字,所以我们可以把我们收到的消息链传入MessageChain中,并且使用MessageChain中的方法 get_all_plain
来获取所有文字。传入 true 会把所有文字拼接起来,拼接成一个字符串。不传入的话就返回数组。
回复消息可以用 QQBot自带的方法send_friend_message但是这个方法所需的参数太过复杂。所以我们还是使用 easyMirai
组件提供的方法,replyMessage。原本这里面只能传消息链的,但是刚刚我对该组件进行了更新,现在直接传入字符串也可,他会自动把字符串转成messageChain。
具体代码如下:
function webhook_friend_message($webhookMessage)
{
$messageChain = new MessageChain();
$messageChain->set_message_chain($webhookMessage['messageChain']);
$message = $messageChain->get_all_plain(true);
if($message === "你好"){
$this->reply_message("你好呀");
}
}
代码截图:
效果如下:
👋都看到这里了,还不快点个关注?
✍️本文作者为 > 【谢玄.】 Mr-XieXuan < 于 2022/2/1/22:19发布于 CSDN 。
⌨️GitHub: [ https://github.com/MR-XieXuan }
🔍个人私站: [ https://main.mrxie.xyz/ ]
---且行且珍惜 ---