消息(Meesage)
消息(Message)参考中包含了当前
LM所有可用的消息类型。
消息与消息元素
介绍
消息是Contact对象进行交流的实体,基于消息的复杂性,lua-mirai中的消息通常由不同的消息元素组合而成。
如一个图片与文本消息,一般会由三个不同类型的
消息元素构成。分别是Source,Image和PlainText。
消息元素构造
- 字符串的形式
在LM中,一个字符串可代表一个纯文本类型的消息元素。如"Hello"代表一个纯文本消息元素。
"Hello" 等同于 PlainText("Hello")
- 消息元素构造函数
LM提供了丰富的消息元素构造函数,例如
Face(1) -- 构造一个表情
AtAll() -- 构造"@全体成员"
消息(Message)参考中包含了当前
LM所有可用的消息构造函数。
消息元素组合
将多个消息元素拼接可构成一个消息,而消息之间同样也可以进行拼接,构成新的消息。
组合方式
在LM中,可以使用lua拼接操作符 .. 或 + 进行拼接,下面是一个简单的示例:
ImageUrl("http://xxxxx", sender) .. Face(1) .. "hello"
消息解析
消息元素遍历
消息实现了lua中的表的所有方法,因此可以使用lua中处理表的方式处理组合消息,示例:
Event.subscribe(function(event)
if (type(event)=="FriendMessageEvent") then
for i,v in ipairs(event.message) do -- 遍历所有消息元素
print(tostring(v))
end
end
end)
当你对message对象使用tostring或print方法输出时,消息会被采用一种
mirai码的编码方式以字符串的形式表示,如[mirai:image:xxxxxx]。 同样地,也可以借助Code构造函数以使用mirai码构造消息,如Code("[mirai:image:xxxxxx]")
获取消息中包含消息元素的个数
输出个数
print("length:" .. tostring(#event.message))
获取某个位置的消息元素
获取位置1处的消息元素:
print(message[1])
判断消息元素类型
遍历所有消息元素并输出类型
for i,v in ipairs(event.message) do
print(type(v))
end
检索指定类型的消息元素
获取类型为At的消息元素
print(event.message["At"])